aboutsummaryrefslogtreecommitdiff
path: root/fontconfig
diff options
context:
space:
mode:
Diffstat (limited to 'fontconfig')
-rw-r--r--fontconfig/COPYING49
-rw-r--r--fontconfig/INSTALL79
-rw-r--r--fontconfig/Makefile.am283
-rw-r--r--fontconfig/acinclude.m4137
-rw-r--r--fontconfig/autogen.sh246
-rw-r--r--fontconfig/conf.d/Makefile.am192
-rw-r--r--fontconfig/config/Makedefs.in152
-rw-r--r--fontconfig/configure.in1067
-rw-r--r--fontconfig/doc/Makefile.am403
-rw-r--r--fontconfig/doc/confdir.sgml.in52
-rw-r--r--fontconfig/doc/edit-sgml.c1092
-rw-r--r--fontconfig/doc/fcatomic.fncs190
-rw-r--r--fontconfig/doc/fcblanks.fncs116
-rw-r--r--fontconfig/doc/fccache.fncs136
-rw-r--r--fontconfig/doc/fccharset.fncs423
-rw-r--r--fontconfig/doc/fcconfig.fncs746
-rw-r--r--fontconfig/doc/fcconstant.fncs124
-rw-r--r--fontconfig/doc/fcfile.fncs176
-rw-r--r--fontconfig/doc/fcfontset.fncs280
-rw-r--r--fontconfig/doc/fcformat.fncs602
-rw-r--r--fontconfig/doc/fcfreetype.fncs212
-rw-r--r--fontconfig/doc/fcinit.fncs184
-rw-r--r--fontconfig/doc/fclangset.fncs326
-rw-r--r--fontconfig/doc/fcmatrix.fncs250
-rw-r--r--fontconfig/doc/fcobjectset.fncs146
-rw-r--r--fontconfig/doc/fcobjecttype.fncs100
-rw-r--r--fontconfig/doc/fcpattern.fncs794
-rw-r--r--fontconfig/doc/fcstring.fncs488
-rw-r--r--fontconfig/doc/fcstrset.fncs230
-rw-r--r--fontconfig/doc/fcvalue.fncs122
-rw-r--r--fontconfig/doc/fontconfig-devel.sgml1146
-rw-r--r--fontconfig/doc/fontconfig-user.sgml1396
-rw-r--r--fontconfig/doc/func.sgml180
-rw-r--r--fontconfig/doc/version.sgml.in48
-rw-r--r--fontconfig/fc-arch/Makefile.am54
-rw-r--r--fontconfig/fc-arch/fc-arch.c138
-rw-r--r--fontconfig/fc-arch/fcarch.tmpl.h65
-rw-r--r--fontconfig/fc-arch/makefile23
-rw-r--r--fontconfig/fc-cache/Makefile.am136
-rw-r--r--fontconfig/fc-cache/fc-cache.c940
-rw-r--r--fontconfig/fc-cache/fc-cache.sgml430
-rw-r--r--fontconfig/fc-case/CaseFolding.txt2413
-rw-r--r--fontconfig/fc-case/Makefile.am126
-rw-r--r--fontconfig/fc-case/fc-case.c726
-rw-r--r--fontconfig/fc-case/fccase.tmpl.h50
-rw-r--r--fontconfig/fc-cat/Makefile.am118
-rw-r--r--fontconfig/fc-cat/fc-cat.c817
-rw-r--r--fontconfig/fc-cat/fc-cat.sgml337
-rw-r--r--fontconfig/fc-glyphname/Makefile.am112
-rw-r--r--fontconfig/fc-glyphname/fc-glyphname.c650
-rw-r--r--fontconfig/fc-glyphname/fcglyphname.tmpl.h50
-rw-r--r--fontconfig/fc-lang/Makefile.am603
-rw-r--r--fontconfig/fc-lang/aa.orth80
-rw-r--r--fontconfig/fc-lang/ab.orth90
-rw-r--r--fontconfig/fc-lang/af.orth92
-rw-r--r--fontconfig/fc-lang/am.orth72
-rw-r--r--fontconfig/fc-lang/ar.orth78
-rw-r--r--fontconfig/fc-lang/ast.orth86
-rw-r--r--fontconfig/fc-lang/av.orth194
-rw-r--r--fontconfig/fc-lang/ay.orth74
-rw-r--r--fontconfig/fc-lang/az_ir.orth64
-rw-r--r--fontconfig/fc-lang/ba.orth112
-rw-r--r--fontconfig/fc-lang/be.orth80
-rw-r--r--fontconfig/fc-lang/bg.orth86
-rw-r--r--fontconfig/fc-lang/bh.orth50
-rw-r--r--fontconfig/fc-lang/bho.orth50
-rw-r--r--fontconfig/fc-lang/bi.orth78
-rw-r--r--fontconfig/fc-lang/bin.orth110
-rw-r--r--fontconfig/fc-lang/bm.orth74
-rw-r--r--fontconfig/fc-lang/bo.orth78
-rw-r--r--fontconfig/fc-lang/br.orth94
-rw-r--r--fontconfig/fc-lang/bs.orth78
-rw-r--r--fontconfig/fc-lang/bua.orth204
-rw-r--r--fontconfig/fc-lang/ca.orth116
-rw-r--r--fontconfig/fc-lang/ce.orth194
-rw-r--r--fontconfig/fc-lang/ch.orth70
-rw-r--r--fontconfig/fc-lang/chm.orth218
-rw-r--r--fontconfig/fc-lang/chr.orth50
-rw-r--r--fontconfig/fc-lang/co.orth50
-rw-r--r--fontconfig/fc-lang/cs.orth134
-rw-r--r--fontconfig/fc-lang/cu.orth84
-rw-r--r--fontconfig/fc-lang/cv.orth218
-rw-r--r--fontconfig/fc-lang/cy.orth126
-rw-r--r--fontconfig/fc-lang/da.orth178
-rw-r--r--fontconfig/fc-lang/de.orth98
-rw-r--r--fontconfig/fc-lang/dz.orth56
-rw-r--r--fontconfig/fc-lang/el.orth64
-rw-r--r--fontconfig/fc-lang/en.orth80
-rw-r--r--fontconfig/fc-lang/eo.orth64
-rw-r--r--fontconfig/fc-lang/es.orth100
-rw-r--r--fontconfig/fc-lang/et.orth94
-rw-r--r--fontconfig/fc-lang/eu.orth90
-rw-r--r--fontconfig/fc-lang/fa.orth146
-rw-r--r--fontconfig/fc-lang/fc-lang.c1169
-rw-r--r--fontconfig/fc-lang/fc-lang.man78
-rw-r--r--fontconfig/fc-lang/fclang.tmpl.h50
-rw-r--r--fontconfig/fc-lang/ff.orth76
-rw-r--r--fontconfig/fc-lang/fi.orth102
-rw-r--r--fontconfig/fc-lang/fj.orth68
-rw-r--r--fontconfig/fc-lang/fo.orth118
-rw-r--r--fontconfig/fc-lang/fr.orth116
-rw-r--r--fontconfig/fc-lang/fur.orth78
-rw-r--r--fontconfig/fc-lang/fy.orth122
-rw-r--r--fontconfig/fc-lang/ga.orth168
-rw-r--r--fontconfig/fc-lang/gd.orth102
-rw-r--r--fontconfig/fc-lang/gez.orth120
-rw-r--r--fontconfig/fc-lang/gl.orth100
-rw-r--r--fontconfig/fc-lang/gn.orth96
-rw-r--r--fontconfig/fc-lang/gu.orth82
-rw-r--r--fontconfig/fc-lang/gv.orth62
-rw-r--r--fontconfig/fc-lang/ha.orth72
-rw-r--r--fontconfig/fc-lang/haw.orth70
-rw-r--r--fontconfig/fc-lang/he.orth50
-rw-r--r--fontconfig/fc-lang/hi.orth70
-rw-r--r--fontconfig/fc-lang/ho.orth66
-rw-r--r--fontconfig/fc-lang/hr.orth98
-rw-r--r--fontconfig/fc-lang/hu.orth98
-rw-r--r--fontconfig/fc-lang/hy.orth52
-rw-r--r--fontconfig/fc-lang/ia.orth58
-rw-r--r--fontconfig/fc-lang/id.orth62
-rw-r--r--fontconfig/fc-lang/ie.orth58
-rw-r--r--fontconfig/fc-lang/ig.orth70
-rw-r--r--fontconfig/fc-lang/ik.orth200
-rw-r--r--fontconfig/fc-lang/io.orth58
-rw-r--r--fontconfig/fc-lang/is.orth128
-rw-r--r--fontconfig/fc-lang/it.orth102
-rw-r--r--fontconfig/fc-lang/iu.orth154
-rw-r--r--fontconfig/fc-lang/ja.orth13130
-rw-r--r--fontconfig/fc-lang/ka.orth68
-rw-r--r--fontconfig/fc-lang/kaa.orth220
-rw-r--r--fontconfig/fc-lang/ki.orth66
-rw-r--r--fontconfig/fc-lang/kk.orth90
-rw-r--r--fontconfig/fc-lang/kl.orth126
-rw-r--r--fontconfig/fc-lang/kn.orth80
-rw-r--r--fontconfig/fc-lang/ko.orth5076
-rw-r--r--fontconfig/fc-lang/kok.orth50
-rw-r--r--fontconfig/fc-lang/ku_am.orth182
-rw-r--r--fontconfig/fc-lang/ku_ir.orth98
-rw-r--r--fontconfig/fc-lang/kum.orth192
-rw-r--r--fontconfig/fc-lang/kv.orth202
-rw-r--r--fontconfig/fc-lang/kw.orth70
-rw-r--r--fontconfig/fc-lang/ky.orth204
-rw-r--r--fontconfig/fc-lang/la.orth62
-rw-r--r--fontconfig/fc-lang/lb.orth124
-rw-r--r--fontconfig/fc-lang/lez.orth194
-rw-r--r--fontconfig/fc-lang/ln.orth86
-rw-r--r--fontconfig/fc-lang/lo.orth90
-rw-r--r--fontconfig/fc-lang/lt.orth86
-rw-r--r--fontconfig/fc-lang/lv.orth88
-rw-r--r--fontconfig/fc-lang/mai.orth50
-rw-r--r--fontconfig/fc-lang/mg.orth70
-rw-r--r--fontconfig/fc-lang/mh.orth90
-rw-r--r--fontconfig/fc-lang/mi.orth70
-rw-r--r--fontconfig/fc-lang/mk.orth80
-rw-r--r--fontconfig/fc-lang/ml.orth76
-rw-r--r--fontconfig/fc-lang/mn_cn.orth74
-rw-r--r--fontconfig/fc-lang/mo.orth74
-rw-r--r--fontconfig/fc-lang/mr.orth50
-rw-r--r--fontconfig/fc-lang/mt.orth134
-rw-r--r--fontconfig/fc-lang/my.orth74
-rw-r--r--fontconfig/fc-lang/nb.orth50
-rw-r--r--fontconfig/fc-lang/nds.orth80
-rw-r--r--fontconfig/fc-lang/ne.orth51
-rw-r--r--fontconfig/fc-lang/nl.orth126
-rw-r--r--fontconfig/fc-lang/nn.orth86
-rw-r--r--fontconfig/fc-lang/no.orth136
-rw-r--r--fontconfig/fc-lang/ny.orth60
-rw-r--r--fontconfig/fc-lang/oc.orth106
-rw-r--r--fontconfig/fc-lang/om.orth58
-rw-r--r--fontconfig/fc-lang/or.orth84
-rw-r--r--fontconfig/fc-lang/os.orth192
-rw-r--r--fontconfig/fc-lang/pes.orth52
-rw-r--r--fontconfig/fc-lang/pl.orth82
-rw-r--r--fontconfig/fc-lang/prs.orth58
-rw-r--r--fontconfig/fc-lang/ps_af.orth104
-rw-r--r--fontconfig/fc-lang/ps_pk.orth104
-rw-r--r--fontconfig/fc-lang/pt.orth128
-rw-r--r--fontconfig/fc-lang/rm.orth90
-rw-r--r--fontconfig/fc-lang/ro.orth76
-rw-r--r--fontconfig/fc-lang/ru.orth76
-rw-r--r--fontconfig/fc-lang/sa.orth50
-rw-r--r--fontconfig/fc-lang/sah.orth216
-rw-r--r--fontconfig/fc-lang/sco.orth64
-rw-r--r--fontconfig/fc-lang/se.orth74
-rw-r--r--fontconfig/fc-lang/sel.orth192
-rw-r--r--fontconfig/fc-lang/sk.orth126
-rw-r--r--fontconfig/fc-lang/sl.orth176
-rw-r--r--fontconfig/fc-lang/sm.orth60
-rw-r--r--fontconfig/fc-lang/sma.orth74
-rw-r--r--fontconfig/fc-lang/smj.orth74
-rw-r--r--fontconfig/fc-lang/smn.orth80
-rw-r--r--fontconfig/fc-lang/sms.orth96
-rw-r--r--fontconfig/fc-lang/so.orth58
-rw-r--r--fontconfig/fc-lang/sq.orth70
-rw-r--r--fontconfig/fc-lang/sr.orth70
-rw-r--r--fontconfig/fc-lang/sv.orth200
-rw-r--r--fontconfig/fc-lang/sw.orth58
-rw-r--r--fontconfig/fc-lang/syr.orth58
-rw-r--r--fontconfig/fc-lang/ta.orth92
-rw-r--r--fontconfig/fc-lang/te.orth78
-rw-r--r--fontconfig/fc-lang/tg.orth216
-rw-r--r--fontconfig/fc-lang/th.orth60
-rw-r--r--fontconfig/fc-lang/ti_er.orth112
-rw-r--r--fontconfig/fc-lang/ti_et.orth66
-rw-r--r--fontconfig/fc-lang/tig.orth104
-rw-r--r--fontconfig/fc-lang/tn.orth70
-rw-r--r--fontconfig/fc-lang/to.orth60
-rw-r--r--fontconfig/fc-lang/tr.orth98
-rw-r--r--fontconfig/fc-lang/ts.orth58
-rw-r--r--fontconfig/fc-lang/tt.orth216
-rw-r--r--fontconfig/fc-lang/tw.orth100
-rw-r--r--fontconfig/fc-lang/tyv.orth204
-rw-r--r--fontconfig/fc-lang/ug.orth79
-rw-r--r--fontconfig/fc-lang/uk.orth86
-rw-r--r--fontconfig/fc-lang/ur.orth130
-rw-r--r--fontconfig/fc-lang/ve.orth68
-rw-r--r--fontconfig/fc-lang/vi.orth116
-rw-r--r--fontconfig/fc-lang/vo.orth72
-rw-r--r--fontconfig/fc-lang/vot.orth80
-rw-r--r--fontconfig/fc-lang/wa.orth94
-rw-r--r--fontconfig/fc-lang/wen.orth84
-rw-r--r--fontconfig/fc-lang/wo.orth84
-rw-r--r--fontconfig/fc-lang/xh.orth58
-rw-r--r--fontconfig/fc-lang/yap.orth70
-rw-r--r--fontconfig/fc-lang/yi.orth50
-rw-r--r--fontconfig/fc-lang/yo.orth172
-rw-r--r--fontconfig/fc-lang/zh_cn.orth13584
-rw-r--r--fontconfig/fc-lang/zh_hk.orth4480
-rw-r--r--fontconfig/fc-lang/zh_mo.orth64
-rw-r--r--fontconfig/fc-lang/zh_sg.orth54
-rw-r--r--fontconfig/fc-lang/zh_tw.orth26210
-rw-r--r--fontconfig/fc-lang/zu.orth58
-rw-r--r--fontconfig/fc-list/Makefile.am118
-rw-r--r--fontconfig/fc-list/fc-list.c418
-rw-r--r--fontconfig/fc-list/fc-list.sgml429
-rw-r--r--fontconfig/fc-match/Makefile.am118
-rw-r--r--fontconfig/fc-match/fc-match.c526
-rw-r--r--fontconfig/fc-match/fc-match.sgml433
-rw-r--r--fontconfig/fc-pattern/Makefile.am59
-rw-r--r--fontconfig/fc-pattern/fc-pattern.c195
-rw-r--r--fontconfig/fc-pattern/fc-pattern.sgml204
-rw-r--r--fontconfig/fc-query/Makefile.am118
-rw-r--r--fontconfig/fc-query/fc-query.c382
-rw-r--r--fontconfig/fc-query/fc-query.sgml383
-rw-r--r--fontconfig/fc-scan/Makefile.am118
-rw-r--r--fontconfig/fc-scan/fc-scan.c368
-rw-r--r--fontconfig/fc-scan/fc-scan.sgml353
-rw-r--r--fontconfig/fontconfig.pc.in27
-rw-r--r--fontconfig/fontconfig/fcfreetype.h118
-rw-r--r--fontconfig/fontconfig/fcprivate.h246
-rw-r--r--fontconfig/fontconfig/fontconfig.h1937
-rw-r--r--fontconfig/fonts.dtd449
-rw-r--r--fontconfig/src/Makefile.am334
-rw-r--r--fontconfig/src/fcarch.c73
-rw-r--r--fontconfig/src/fcarch.h71
-rw-r--r--fontconfig/src/fcatomic.c434
-rw-r--r--fontconfig/src/fcblanks.c190
-rw-r--r--fontconfig/src/fccache.c2536
-rw-r--r--fontconfig/src/fccfg.c4155
-rw-r--r--fontconfig/src/fccharset.c2861
-rw-r--r--fontconfig/src/fcdbg.c804
-rw-r--r--fontconfig/src/fcdefault.c362
-rw-r--r--fontconfig/src/fcdir.c656
-rw-r--r--fontconfig/src/fcformat.c2414
-rw-r--r--fontconfig/src/fcfreetype.c6009
-rw-r--r--fontconfig/src/fcfs.c270
-rw-r--r--fontconfig/src/fcinit.c578
-rw-r--r--fontconfig/src/fcint.h2070
-rw-r--r--fontconfig/src/fclang.c1708
-rw-r--r--fontconfig/src/fclist.c1154
-rw-r--r--fontconfig/src/fcmatch.c1680
-rw-r--r--fontconfig/src/fcname.c1806
-rw-r--r--fontconfig/src/fcpat.c2526
-rw-r--r--fontconfig/src/fcstr.c2396
-rw-r--r--fontconfig/src/fcxml.c5373
-rw-r--r--fontconfig/src/makefile1
276 files changed, 74345 insertions, 73645 deletions
diff --git a/fontconfig/COPYING b/fontconfig/COPYING
index d68372289..7f52aa710 100644
--- a/fontconfig/COPYING
+++ b/fontconfig/COPYING
@@ -1,22 +1,27 @@
-fontconfig/COPYING
-
-Copyright © 2001,2003 Keith Packard
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Keith Packard not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission. Keith Packard makes no
-representations about the suitability of this software for any purpose. It
-is provided "as is" without express or implied warranty.
-
-THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
+fontconfig/COPYING
+
+Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard
+Copyright © 2005 Patrick Lam
+Copyright © 2009 Roozbeh Pournader
+Copyright © 2008,2009 Red Hat, Inc.
+Copyright © 2008 Danilo Šegan
+
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of the author(s) not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. The authors make no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/fontconfig/INSTALL b/fontconfig/INSTALL
index 0017eed40..29537df99 100644
--- a/fontconfig/INSTALL
+++ b/fontconfig/INSTALL
@@ -1,37 +1,42 @@
-Fontconfig is built with the traditional configure script:
-
- $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
-
-This should generate valid Makefiles, then:
-
- $ make
- $ make install
-
-If you're going to package fontconfig for release, there are several
-important steps:
-
- 1. Create new version
- sh new-version.sh 2.xx.xx
-
- 2. rebuild the configuration files with autogen.sh
- sh autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var
-
- 3. make distcheck (NB: won't work without docbook-utils -PL)
-
- 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to
-
- freedesktop.org:/srv/fontconfig.freedesktop.org/www/release
-
- 5. Update the Fontconfig Devel wiki page
- http://fontconfig.org/wiki/Devel
-
- 6. Update the fontconfig documentation
-
- scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www
-
- 7. Compute md5sums for release files:
- md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x
-
- 8. Post a note to fontconfig@fontconfig.org. Include the md5sums.
- gpg sign the message.
-
+Fontconfig is built with the traditional configure script:
+
+ $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
+
+If you checked out from the git repository (as opposed to downloading a
+tarball), you need to run autogen.sh instead of configure:
+
+ $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
+
+Either way, that should generate valid Makefiles, then:
+
+ $ make
+ $ make install
+
+If you're going to package fontconfig for release, there are several
+important steps:
+
+ 1. Create new version
+ sh new-version.sh 2.xx.xx
+
+ 2. rebuild the configuration files with autogen.sh
+ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var
+
+ 3. make distcheck
+
+ 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to
+
+ freedesktop.org:/srv/fontconfig.freedesktop.org/www/release
+
+ 5. Update the Fontconfig Devel wiki page
+ http://fontconfig.org/wiki/Devel
+
+ 6. Update the fontconfig documentation
+
+ scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www
+
+ 7. Compute md5sums for release files:
+ md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x
+
+ 8. Post a note to fontconfig@fontconfig.org. Include the md5sums.
+ gpg sign the message.
+
diff --git a/fontconfig/Makefile.am b/fontconfig/Makefile.am
index e08857e59..c14211a4e 100644
--- a/fontconfig/Makefile.am
+++ b/fontconfig/Makefile.am
@@ -1,141 +1,142 @@
-#
-# fontconfig/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOCSRC=@DOCSRC@
-SUBDIRS=fontconfig fc-case fc-lang fc-glyphname fc-arch src \
- fc-cache fc-cat fc-list fc-match fc-query fc-scan conf.d $(DOCSRC) test
-
-EXTRA_DIST = \
- fontconfig.pc.in \
- fonts.conf.in \
- fonts.dtd \
- fontconfig.spec.in \
- fontconfig.spec \
- fontconfig-zip.in
-CLEANFILES = fonts.conf
-DISTCLEANFILES = config.cache doltcompile
-MAINTAINERCLEANFILES = \
- $(srcdir)/aclocal.m4 \
- $(srcdir)/autoscan.log \
- $(srcdir)/compile \
- $(srcdir)/config.guess \
- $(srcdir)/config.h.in \
- $(srcdir)/config.sub \
- $(srcdir)/configure.scan \
- $(srcdir)/depcomp \
- $(srcdir)/install-sh \
- $(srcdir)/ltmain.sh \
- $(srcdir)/missing \
- $(srcdir)/mkinstalldirs \
- `find "$(srcdir)" -type f -name Makefile.in -print`
-
-pkgconfigdir=$(libdir)/pkgconfig
-pkgconfig_DATA = fontconfig.pc
-
-configdir=$(CONFDIR)
-config_DATA=fonts.dtd
-
-if CROSS_COMPILING
- RUN_FC_CACHE_TEST=false
-else
- RUN_FC_CACHE_TEST=test -z "$(DESTDIR)"
-endif
-
-# Creating ChangeLog from git log:
-
-MAINTAINERCLEANFILES += $(srcdir)/ChangeLog
-EXTRA_DIST += ChangeLog
-ChangeLog: $(srcdir)/ChangeLog
-$(srcdir)/ChangeLog:
- if test -d "$(srcdir)/.git"; then \
- (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \
- && mv -f $@.tmp $@ \
- || ($(RM) $@.tmp; \
- echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
- (test -f $@ || echo git-log is required to generate this file >> $@)); \
- else \
- test -f $@ || \
- (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
- echo A git checkout and git-log is required to generate this file >> $@); \
- fi
-
-.PHONY: ChangeLog
-
-fonts.conf: fonts.conf.in Makefile
- sed \
- -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \
- -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \
- -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \
- -e 's,@PACKAGE\@,$(PACKAGE),g' \
- -e 's,@VERSION\@,$(VERSION),g' \
- $< > $@.tmp && \
- mv $@.tmp $@
-
-install-data-local: fonts.conf
- $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir)
- if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \
- echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \
- mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \
- fi
- if [ -f $(srcdir)/fonts.conf ]; then \
- echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
- $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
- else if [ -f fonts.conf ]; then \
- echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
- $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
- fi; fi
- @(if $(RUN_FC_CACHE_TEST); then \
- echo " $(bindir)/fc-cache -s -f -v"; \
- $(bindir)/fc-cache -s -f -v; \
- else \
- echo "***"; \
- echo "*** Warning: fonts.cache not built"; \
- echo "***"; \
- echo "*** Generate this file manually on host system using fc-cache"; \
- echo "***"; \
- fi)
-
-uninstall-local:
- if [ -f $(srcdir)/fonts.conf ]; then \
- if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
- echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
- rm -f $(DESTDIR)$(configdir)/fonts.conf; \
- fi; \
- else if [ -f fonts.conf ]; then \
- if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
- echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
- rm -f $(DESTDIR)$(configdir)/fonts.conf; \
- fi; \
- fi; fi
-
-debuild debuild-signed: debuild-dirs
- (cd $(distdir)/debian && debuild)
-
-debuild-unsigned: debuild-dirs
- (cd $(distdir)/debian && debuild -us -uc)
-
-debuild-dirs: distdir
- rm -f $(PACKAGE)_$(VERSION).orig.tar.gz
- rm -rf $(distdir).orig
- cp -a $(distdir) $(distdir).orig
- rm -rf $(distdir).orig/debian
+#
+# fontconfig/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOCSRC=@DOCSRC@
+SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \
+ fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \
+ conf.d $(DOCSRC) test
+
+EXTRA_DIST = \
+ fontconfig.pc.in \
+ fonts.conf.in \
+ fonts.dtd \
+ fontconfig.spec.in \
+ fontconfig.spec \
+ fontconfig-zip.in
+CLEANFILES = fonts.conf
+DISTCLEANFILES = config.cache doltcompile
+MAINTAINERCLEANFILES = \
+ $(srcdir)/aclocal.m4 \
+ $(srcdir)/autoscan.log \
+ $(srcdir)/compile \
+ $(srcdir)/config.guess \
+ $(srcdir)/config.h.in \
+ $(srcdir)/config.sub \
+ $(srcdir)/configure.scan \
+ $(srcdir)/depcomp \
+ $(srcdir)/install-sh \
+ $(srcdir)/ltmain.sh \
+ $(srcdir)/missing \
+ $(srcdir)/mkinstalldirs \
+ `find "$(srcdir)" -type f -name Makefile.in -print`
+
+pkgconfigdir=$(libdir)/pkgconfig
+pkgconfig_DATA = fontconfig.pc
+
+configdir=$(CONFDIR)
+config_DATA=fonts.dtd
+
+if CROSS_COMPILING
+ RUN_FC_CACHE_TEST=false
+else
+ RUN_FC_CACHE_TEST=test -z "$(DESTDIR)"
+endif
+
+# Creating ChangeLog from git log:
+
+MAINTAINERCLEANFILES += $(srcdir)/ChangeLog
+EXTRA_DIST += ChangeLog
+ChangeLog: $(srcdir)/ChangeLog
+$(srcdir)/ChangeLog:
+ if test -d "$(srcdir)/.git"; then \
+ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \
+ && mv -f $@.tmp $@ \
+ || ($(RM) $@.tmp; \
+ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
+ (test -f $@ || echo git-log is required to generate this file >> $@)); \
+ else \
+ test -f $@ || \
+ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
+ echo A git checkout and git-log is required to generate this file >> $@); \
+ fi
+
+.PHONY: ChangeLog
+
+fonts.conf: fonts.conf.in Makefile
+ sed \
+ -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \
+ -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \
+ -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \
+ -e 's,@PACKAGE\@,$(PACKAGE),g' \
+ -e 's,@VERSION\@,$(VERSION),g' \
+ $< > $@.tmp && \
+ mv $@.tmp $@
+
+install-data-local: fonts.conf
+ $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir)
+ if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \
+ echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \
+ mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \
+ fi
+ if [ -f $(srcdir)/fonts.conf ]; then \
+ echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
+ $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
+ else if [ -f fonts.conf ]; then \
+ echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
+ $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
+ fi; fi
+ @(if $(RUN_FC_CACHE_TEST); then \
+ echo "fc-cache$(EXEEXT) -s -f -v"; \
+ fc-cache/fc-cache$(EXEEXT) -s -f -v; \
+ else \
+ echo "***"; \
+ echo "*** Warning: fonts.cache not built"; \
+ echo "***"; \
+ echo "*** Generate this file manually on host system using fc-cache"; \
+ echo "***"; \
+ fi)
+
+uninstall-local:
+ if [ -f $(srcdir)/fonts.conf ]; then \
+ if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
+ echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
+ rm -f $(DESTDIR)$(configdir)/fonts.conf; \
+ fi; \
+ else if [ -f fonts.conf ]; then \
+ if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
+ echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
+ rm -f $(DESTDIR)$(configdir)/fonts.conf; \
+ fi; \
+ fi; fi
+
+debuild debuild-signed: debuild-dirs
+ (cd $(distdir)/debian && debuild)
+
+debuild-unsigned: debuild-dirs
+ (cd $(distdir)/debian && debuild -us -uc)
+
+debuild-dirs: distdir
+ rm -f $(PACKAGE)_$(VERSION).orig.tar.gz
+ rm -rf $(distdir).orig
+ cp -a $(distdir) $(distdir).orig
+ rm -rf $(distdir).orig/debian
diff --git a/fontconfig/acinclude.m4 b/fontconfig/acinclude.m4
deleted file mode 100644
index 1195da380..000000000
--- a/fontconfig/acinclude.m4
+++ /dev/null
@@ -1,137 +0,0 @@
-dnl dolt, a replacement for libtool
-dnl Copyright © 2007-2008 Josh Triplett <josh@freedesktop.org>
-dnl Copying and distribution of this file, with or without modification,
-dnl are permitted in any medium without royalty provided the copyright
-dnl notice and this notice are preserved.
-dnl
-dnl To use dolt, invoke the DOLT macro immediately after the libtool macros.
-dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it
-dnl installed when running autoconf on your project.
-
-AC_DEFUN([DOLT], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-# dolt, a replacement for libtool
-# Josh Triplett <josh@freedesktop.org>
-AC_PATH_PROG(DOLT_BASH, bash)
-AC_MSG_CHECKING([if dolt supports this host])
-dolt_supported=yes
-if test x$DOLT_BASH = x; then
- dolt_supported=no
-fi
-if test x$GCC != xyes; then
- dolt_supported=no
-fi
-case $host in
-i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*) ;;
-amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*) ;;
-*) dolt_supported=no ;;
-esac
-if test x$dolt_supported = xno ; then
- AC_MSG_RESULT([no, falling back to libtool])
- LTCOMPILE='$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)'
- LTCXXCOMPILE='$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)'
-else
- AC_MSG_RESULT([yes, replacing libtool])
-
-dnl Start writing out doltcompile.
- cat <<__DOLTCOMPILE__EOF__ >doltcompile
-#!$DOLT_BASH
-__DOLTCOMPILE__EOF__
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-args=("$[]@")
-for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do
- if test x"${args@<:@$arg@:>@}" = x-o ; then
- objarg=$((arg+1))
- break
- fi
-done
-if test x$objarg = x ; then
- echo 'Error: no -o on compiler command line' 1>&2
- exit 1
-fi
-lo="${args@<:@$objarg@:>@}"
-obj="${lo%.lo}"
-if test x"$lo" = x"$obj" ; then
- echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2
- exit 1
-fi
-objbase="${obj##*/}"
-__DOLTCOMPILE__EOF__
-
-dnl Write out shared compilation code.
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-libobjdir="${obj%$objbase}.libs"
-if test ! -d "$libobjdir" ; then
- mkdir_out="$(mkdir "$libobjdir" 2>&1)"
- mkdir_ret=$?
- if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then
- echo "$mkdir_out" 1>&2
- exit $mkdir_ret
- fi
-fi
-pic_object="$libobjdir/$objbase.o"
-args@<:@$objarg@:>@="$pic_object"
-"${args@<:@@@:>@}" -fPIC -DPIC || exit $?
-__DOLTCOMPILE__EOF__
- fi
-
-dnl Write out static compilation code.
-dnl Avoid duplicate compiler output if also building shared objects.
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-non_pic_object="$obj.o"
-args@<:@$objarg@:>@="$non_pic_object"
-__DOLTCOMPILE__EOF__
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $?
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-"${args@<:@@@:>@}" || exit $?
-__DOLTCOMPILE__EOF__
- fi
- fi
-
-dnl Write out the code to write the .lo file.
-dnl The second line of the .lo file must match "^# Generated by .*libtool"
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-{
-echo "# $lo - a libtool object file"
-echo "# Generated by doltcompile, not libtool"
-__DOLTCOMPILE__EOF__
-
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo "pic_object='$pic_object'"
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo pic_object=none
-__DOLTCOMPILE__EOF__
- fi
-
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo "non_pic_object='$non_pic_object'"
-__DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-echo non_pic_object=none
-__DOLTCOMPILE__EOF__
- fi
-
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
-} > "$lo"
-__DOLTCOMPILE__EOF__
-
-dnl Done writing out doltcompile; substitute it for libtool compilation.
- chmod +x doltcompile
- LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)'
- LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)'
-fi
-AC_SUBST(LTCOMPILE)
-AC_SUBST(LTCXXCOMPILE)
-# end dolt
-])
diff --git a/fontconfig/autogen.sh b/fontconfig/autogen.sh
index 820c457fe..f9927fd29 100644
--- a/fontconfig/autogen.sh
+++ b/fontconfig/autogen.sh
@@ -1,123 +1,123 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-set -e
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-case "$1" in
---noconf*)
- AUTOGEN_SUBDIR_MODE="true"
- shift
- ;;
-esac
-
-ORIGDIR=`pwd`
-cd $srcdir
-PROJECT=Fontconfig
-TEST_TYPE=-f
-FILE=fontconfig/fontconfig.h
-ACLOCAL=${ACLOCAL-aclocal}
-LIBTOOLIZE=${LIBTOOLIZE-libtoolize}
-AUTOMAKE=${AUTOMAKE-automake}
-AUTOHEADER=${AUTOHEADER-autoheader}
-AUTOCONF=${AUTOCONF-autoconf}
-LIBTOOLIZE_FLAGS="--copy --force"
-
-DIE=0
-
-have_libtool=false
-if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then
- libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'`
- case $libtool_version in
- 1.4*|1.5*|1.6*|1.7*|2*)
- have_libtool=true
- ;;
- esac
-fi
-if $have_libtool ; then : ; else
- echo
- echo "You must have libtool 1.4 installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-fi
-
-($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have autoconf installed to compile $PROJECT."
- echo "libtool the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-}
-
-have_automake=false
-need_libtoolize=true
-if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then
- automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'`
- case $automake_version in
- 1.2*|1.3*|1.4)
- ;;
- 1.4*)
- have_automake=true
- need_libtoolize=false
- ;;
- *)
- have_automake=true
- ;;
- esac
-fi
-if $have_automake ; then : ; else
- echo
- echo "You must have automake 1.4-p1 installed to compile $PROJECT."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-fi
-
-if test "$DIE" -eq 1; then
- exit 1
-fi
-
-test $TEST_TYPE $FILE || {
- echo "You must run this script in the top-level $PROJECT directory"
- exit 1
-}
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- if test -z "$*"; then
- echo "I am going to run ./configure with no arguments - if you wish "
- echo "to pass any to it, please specify them on the $0 command line."
- fi
-fi
-
-echo Running $ACLOCAL $ACLOCAL_FLAGS
-$ACLOCAL $ACLOCAL_FLAGS
-
-# optionally run autoheader
-if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then
- echo Running $AUTOHEADER
- $AUTOHEADER
-fi
-
-case $need_libtoolize in
- true)
- echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS
- $LIBTOOLIZE $LIBTOOLIZE_FLAGS
- ;;
-esac
-
-echo Running $AUTOMAKE -a $am_opt
-$AUTOMAKE -a $am_opt
-echo Running $AUTOCONF
-$AUTOCONF
-cd $ORIGDIR
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- echo Running $srcdir/configure --enable-maintainer-mode "$@"
- $srcdir/configure --enable-maintainer-mode "$@"
-
- echo
- echo "Now type 'make' to compile $PROJECT."
-fi
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+set -e
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+case "$1" in
+--noconf*)
+ AUTOGEN_SUBDIR_MODE="true"
+ shift
+ ;;
+esac
+
+ORIGDIR=`pwd`
+cd $srcdir
+PROJECT=Fontconfig
+TEST_TYPE=-f
+FILE=fontconfig/fontconfig.h
+ACLOCAL=${ACLOCAL-aclocal}
+LIBTOOLIZE=${LIBTOOLIZE-libtoolize}
+AUTOMAKE=${AUTOMAKE-automake}
+AUTOHEADER=${AUTOHEADER-autoheader}
+AUTOCONF=${AUTOCONF-autoconf}
+LIBTOOLIZE_FLAGS="--copy --force"
+
+DIE=0
+
+have_libtool=false
+if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then
+ libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'`
+ case $libtool_version in
+ 1.4*|1.5*|1.6*|1.7*|2*)
+ have_libtool=true
+ ;;
+ esac
+fi
+if $have_libtool ; then : ; else
+ echo
+ echo "You must have libtool 1.4 installed to compile $PROJECT."
+ echo "Install the appropriate package for your distribution,"
+ echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+ DIE=1
+fi
+
+($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have autoconf installed to compile $PROJECT."
+ echo "libtool the appropriate package for your distribution,"
+ echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+ DIE=1
+}
+
+have_automake=false
+need_libtoolize=true
+if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then
+ automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'`
+ case $automake_version in
+ 1.2*|1.3*|1.4)
+ ;;
+ 1.4*)
+ have_automake=true
+ need_libtoolize=false
+ ;;
+ *)
+ have_automake=true
+ ;;
+ esac
+fi
+if $have_automake ; then : ; else
+ echo
+ echo "You must have automake 1.4-p1 installed to compile $PROJECT."
+ echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+fi
+
+if test "$DIE" -eq 1; then
+ exit 1
+fi
+
+test $TEST_TYPE $FILE || {
+ echo "You must run this script in the top-level $PROJECT directory"
+ exit 1
+}
+
+if test -z "$AUTOGEN_SUBDIR_MODE"; then
+ if test -z "$*"; then
+ echo "I am going to run ./configure with no arguments - if you wish "
+ echo "to pass any to it, please specify them on the $0 command line."
+ fi
+fi
+
+echo Running $ACLOCAL $ACLOCAL_FLAGS
+$ACLOCAL $ACLOCAL_FLAGS
+
+# optionally run autoheader
+if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then
+ echo Running $AUTOHEADER
+ $AUTOHEADER
+fi
+
+case $need_libtoolize in
+ true)
+ echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS
+ $LIBTOOLIZE $LIBTOOLIZE_FLAGS
+ ;;
+esac
+
+echo Running $AUTOMAKE -a $am_opt
+$AUTOMAKE -a $am_opt
+echo Running $AUTOCONF
+$AUTOCONF
+cd $ORIGDIR
+
+if test -z "$AUTOGEN_SUBDIR_MODE"; then
+ echo Running $srcdir/configure "$@"
+ $srcdir/configure "$@"
+
+ echo
+ echo "Now type 'make' to compile $PROJECT."
+fi
diff --git a/fontconfig/conf.d/Makefile.am b/fontconfig/conf.d/Makefile.am
index bff1171c1..c8ef98962 100644
--- a/fontconfig/conf.d/Makefile.am
+++ b/fontconfig/conf.d/Makefile.am
@@ -1,96 +1,96 @@
-#
-# fontconfig/conf.d/Makefile.am
-#
-# Copyright © 2005 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC_FILES= \
- README
-
-CONF_FILES = \
- 10-autohint.conf \
- 10-no-sub-pixel.conf \
- 10-sub-pixel-bgr.conf \
- 10-sub-pixel-rgb.conf \
- 10-sub-pixel-vbgr.conf \
- 10-sub-pixel-vrgb.conf \
- 10-unhinted.conf \
- 20-fix-globaladvance.conf \
- 20-unhint-small-vera.conf \
- 25-unhint-nonlatin.conf \
- 30-urw-aliases.conf \
- 30-metric-aliases.conf \
- 40-nonlatin.conf \
- 45-latin.conf \
- 49-sansserif.conf \
- 50-user.conf \
- 51-local.conf \
- 60-latin.conf \
- 65-fonts-persian.conf \
- 65-khmer.conf \
- 65-nonlatin.conf \
- 69-unifont.conf \
- 70-no-bitmaps.conf \
- 70-yes-bitmaps.conf \
- 80-delicious.conf \
- 90-synthetic.conf
-
-CONF_LINKS = \
- 20-fix-globaladvance.conf \
- 20-unhint-small-vera.conf \
- 30-urw-aliases.conf \
- 30-metric-aliases.conf \
- 40-nonlatin.conf \
- 45-latin.conf \
- 49-sansserif.conf \
- 50-user.conf \
- 51-local.conf \
- 60-latin.conf \
- 65-fonts-persian.conf \
- 65-nonlatin.conf \
- 69-unifont.conf \
- 80-delicious.conf \
- 90-synthetic.conf
-
-EXTRA_DIST = $(CONF_FILES) $(DOC_FILES)
-
-configdir=$(CONFDIR)
-confavaildir=$(configdir)/conf.avail
-confddir=$(configdir)/conf.d
-
-confavail_DATA=$(CONF_FILES)
-confd_DATA=$(DOC_FILES)
-
-install-data-local:
- mkdir -p ${DESTDIR}${confddir}
- @(echo cd ${DESTDIR}${confddir}; \
- cd ${DESTDIR}${confddir}; \
- for i in ${CONF_LINKS}; do \
- rm -f $$i; \
- echo rm -f $$i";" ln -s ../conf.avail/$$i .; \
- ln -s ../conf.avail/$$i .; \
- done)
-uninstall-local:
- @(echo cd ${DESTDIR}${confddir}; \
- cd ${DESTDIR}${confddir}; \
- for i in ${CONF_LINKS}; do \
- echo rm -f $$i; \
- rm -f $$i; \
- done)
+#
+# fontconfig/conf.d/Makefile.am
+#
+# Copyright © 2005 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOC_FILES= \
+ README
+
+CONF_FILES = \
+ 10-autohint.conf \
+ 10-no-sub-pixel.conf \
+ 10-sub-pixel-bgr.conf \
+ 10-sub-pixel-rgb.conf \
+ 10-sub-pixel-vbgr.conf \
+ 10-sub-pixel-vrgb.conf \
+ 10-unhinted.conf \
+ 20-fix-globaladvance.conf \
+ 20-unhint-small-vera.conf \
+ 25-unhint-nonlatin.conf \
+ 30-urw-aliases.conf \
+ 30-metric-aliases.conf \
+ 40-nonlatin.conf \
+ 45-latin.conf \
+ 49-sansserif.conf \
+ 50-user.conf \
+ 51-local.conf \
+ 60-latin.conf \
+ 65-fonts-persian.conf \
+ 65-khmer.conf \
+ 65-nonlatin.conf \
+ 69-unifont.conf \
+ 70-no-bitmaps.conf \
+ 70-yes-bitmaps.conf \
+ 80-delicious.conf \
+ 90-synthetic.conf
+
+CONF_LINKS = \
+ 20-fix-globaladvance.conf \
+ 20-unhint-small-vera.conf \
+ 30-urw-aliases.conf \
+ 30-metric-aliases.conf \
+ 40-nonlatin.conf \
+ 45-latin.conf \
+ 49-sansserif.conf \
+ 50-user.conf \
+ 51-local.conf \
+ 60-latin.conf \
+ 65-fonts-persian.conf \
+ 65-nonlatin.conf \
+ 69-unifont.conf \
+ 80-delicious.conf \
+ 90-synthetic.conf
+
+EXTRA_DIST = $(CONF_FILES) $(DOC_FILES)
+
+configdir=$(CONFDIR)
+confavaildir=$(configdir)/conf.avail
+confddir=$(configdir)/conf.d
+
+confavail_DATA=$(CONF_FILES)
+confd_DATA=$(DOC_FILES)
+
+install-data-local:
+ mkdir -p ${DESTDIR}${confddir}
+ @(echo cd ${DESTDIR}${confddir}; \
+ cd ${DESTDIR}${confddir}; \
+ for i in ${CONF_LINKS}; do \
+ rm -f $$i; \
+ echo rm -f $$i";" ln -s ../conf.avail/$$i .; \
+ ln -s ../conf.avail/$$i .; \
+ done)
+uninstall-local:
+ @(echo cd ${DESTDIR}${confddir}; \
+ cd ${DESTDIR}${confddir}; \
+ for i in ${CONF_LINKS}; do \
+ echo rm -f $$i; \
+ rm -f $$i; \
+ done)
diff --git a/fontconfig/config/Makedefs.in b/fontconfig/config/Makedefs.in
index da156b6f2..8cfb9e785 100644
--- a/fontconfig/config/Makedefs.in
+++ b/fontconfig/config/Makedefs.in
@@ -1,76 +1,76 @@
-#
-# fontconfig/config/Makedefs.in
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-SHELL = @SHELL@
-
-srcdir=@srcdir@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-bindir=@bindir@
-datadir=@datadir@
-includedir=@includedir@
-sysconfdir=@sysconfdir@
-confdir=@confdir@
-
-DSO_LDOPTS=@DSO_LDOPTS@
-DSO_CFLAGS=@DSO_CFLAGS@
-DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@
-
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_SCRIPT=@INSTALL_SCRIPT@
-INSTALL_DATA=@INSTALL_DATA@
-MKSHLIB=@MKSHLIB@
-LN_S=@LN_S@
-
-# shared libraries
-LIBDIR=$(libdir)
-# programs
-BINDIR=$(bindir)
-# font configuration files
-CONFDIR=@CONFDIR@
-# include files
-INCLUDEDIR=$(includedir)/fontconfig
-
-X_FONT_DIR=@X_FONT_DIR@
-FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@
-FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\"
-
-CDEBUGFLAGS=@CFLAGS@
-
-INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@
-
-CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES)
-
-LIBBASE=libfontconfig.so
-LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@
-LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@
-
-LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig
-
-SRCDIR=$(TOPDIR)/src
-
-INCDIR=$(TOPDIR)/fontconfig
-HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h
+#
+# fontconfig/config/Makedefs.in
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+SHELL = @SHELL@
+
+srcdir=@srcdir@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+bindir=@bindir@
+datadir=@datadir@
+includedir=@includedir@
+sysconfdir=@sysconfdir@
+confdir=@confdir@
+
+DSO_LDOPTS=@DSO_LDOPTS@
+DSO_CFLAGS=@DSO_CFLAGS@
+DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@
+
+INSTALL=@INSTALL@
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_SCRIPT=@INSTALL_SCRIPT@
+INSTALL_DATA=@INSTALL_DATA@
+MKSHLIB=@MKSHLIB@
+LN_S=@LN_S@
+
+# shared libraries
+LIBDIR=$(libdir)
+# programs
+BINDIR=$(bindir)
+# font configuration files
+CONFDIR=@CONFDIR@
+# include files
+INCLUDEDIR=$(includedir)/fontconfig
+
+X_FONT_DIR=@X_FONT_DIR@
+FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@
+FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\"
+
+CDEBUGFLAGS=@CFLAGS@
+
+INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@
+
+CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES)
+
+LIBBASE=libfontconfig.so
+LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@
+LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@
+
+LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig
+
+SRCDIR=$(TOPDIR)/src
+
+INCDIR=$(TOPDIR)/fontconfig
+HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h
diff --git a/fontconfig/configure.in b/fontconfig/configure.in
index 589b0c4f8..04da27299 100644
--- a/fontconfig/configure.in
+++ b/fontconfig/configure.in
@@ -1,554 +1,513 @@
-dnl
-dnl fontconfig/configure.in
-dnl
-dnl Copyright © 2003 Keith Packard
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this software and its
-dnl documentation for any purpose is hereby granted without fee, provided that
-dnl the above copyright notice appear in all copies and that both that
-dnl copyright notice and this permission notice appear in supporting
-dnl documentation, and that the name of Keith Packard not be used in
-dnl advertising or publicity pertaining to distribution of the software without
-dnl specific, written prior permission. Keith Packard makes no
-dnl representations about the suitability of this software for any purpose. It
-dnl is provided "as is" without express or implied warranty.
-dnl
-dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-dnl PERFORMANCE OF THIS SOFTWARE.
-dnl
-dnl Process this file with autoconf to create configure.
-
-AC_INIT(fonts.dtd)
-
-dnl ==========================================================================
-dnl Versioning
-dnl ==========================================================================
-
-dnl This is the package version number, not the shared library
-dnl version. This same version number must appear in fontconfig/fontconfig.h
-dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
-dnl not possible to extract the version number here from fontconfig.h
-AM_INIT_AUTOMAKE(fontconfig, 2.8.0)
-m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
-AM_MAINTAINER_MODE
-
-dnl libtool versioning
-
-dnl bump revision when fixing bugs
-dnl bump current and age, reset revision to zero when adding APIs
-dnl bump current, leave age, reset revision to zero when changing/removing APIS
-LIBT_CURRENT=5
-LIBT_REVISION=4
-AC_SUBST(LIBT_CURRENT)
-AC_SUBST(LIBT_REVISION)
-LIBT_AGE=4
-
-LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
-AC_SUBST(LIBT_VERSION_INFO)
-
-LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
-AC_SUBST(LIBT_CURRENT_MINUS_AGE)
-
-dnl ==========================================================================
-
-AM_CONFIG_HEADER(config.h)
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_LIBTOOL_WIN32_DLL
-AM_PROG_LIBTOOL
-DOLT
-AC_PROG_MAKE_SET
-
-dnl ==========================================================================
-
-case "$host" in
- *-*-mingw*)
- os_win32=yes
- ;;
- *)
- os_win32=no
-esac
-AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
-
-if test "$os_win32" = "yes"; then
- AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
-fi
-AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
-
-WARN_CFLAGS=""
-if test "x$GCC" = "xyes"; then
- WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
- -Wmissing-prototypes -Wmissing-declarations \
- -Wnested-externs -fno-strict-aliasing"
- AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
- [Can use #warning in C files])
-fi
-AC_SUBST(WARN_CFLAGS)
-
-
-dnl ==========================================================================
-
-AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
-
-dnl ==========================================================================
-
-# Setup for compiling build tools (fc-glyphname, etc)
-AC_MSG_CHECKING([for a C compiler for build tools])
-if test $cross_compiling = yes; then
- AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc)
-else
- CC_FOR_BUILD=$CC
-fi
-AC_MSG_RESULT([$CC_FOR_BUILD])
-AC_SUBST(CC_FOR_BUILD)
-
-AC_MSG_CHECKING([for suffix of executable build tools])
-if test $cross_compiling = yes; then
- cat >conftest.c <<\_______EOF
-int
-main ()
-{
- exit (0);
-}
-_______EOF
- for i in .exe ""; do
- compile="$CC_FOR_BUILD conftest.c -o conftest$i"
- if AC_TRY_EVAL(compile); then
- if (./conftest) 2>&AC_FD_CC; then
- EXEEXT_FOR_BUILD=$i
- break
- fi
- fi
- done
- rm -f conftest*
- if test "${EXEEXT_FOR_BUILD+set}" != set; then
- AC_MSG_ERROR([Cannot determine suffix of executable build tools])
- fi
-else
- EXEEXT_FOR_BUILD=$EXEEXT
-fi
-AC_MSG_RESULT([$EXEEXT_FOR_BUILD])
-AC_SUBST(EXEEXT_FOR_BUILD)
-
-dnl ==========================================================================
-
-AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto)
-
-if test $cross_compiling = yes; then
- case "$arch" in
- auto)
- AC_MSG_ERROR([Cannot autodetect architecture in cross compile environment]
- [Use --with-arch=ARCH to specify architecture])
- ;;
- esac
-fi
-
-ARCHITECTURE=$arch
-AC_SUBST(ARCHITECTURE)
-
-dnl ==========================================================================
-
-# Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_PID_T
-
-# Checks for library functions.
-AC_FUNC_VPRINTF
-AC_FUNC_MMAP
-AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48])
-
-#
-# Checks for iconv
-#
-AC_MSG_CHECKING([for a usable iconv])
-ICONV_LIBS=""
-AC_TRY_LINK([#include <iconv.h>],
- [iconv_open ("from", "to");],
- [use_iconv=1],
- [use_iconv=0])
-if test x$use_iconv = x1; then
- AC_MSG_RESULT([libc])
-else
- # try using libiconv
- fontconfig_save_libs="$LIBS"
- LIBS="$LIBS -liconv"
-
- AC_TRY_LINK([#include <iconv.h>],
- [iconv_open ("from", "to");],
- [use_iconv=1],
- [use_iconv=0])
-
- if test x$use_iconv = x1; then
- ICONV_LIBS="-liconv"
- AC_MSG_RESULT([libiconv])
- else
- AC_MSG_RESULT([no])
- fi
-
- LIBS="$fontconfig_save_libs"
-fi
-AC_SUBST(ICONV_LIBS)
-AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
-
-#
-# Checks for FreeType
-#
-
-AC_ARG_WITH(freetype-config, [ --with-freetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes)
-
-if test "$freetype_config" = "yes"; then
- AC_PATH_PROG(ft_config,freetype-config,no)
- if test "$ft_config" = "no"; then
- AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/])
- fi
-else
- ft_config="$freetype_config"
-fi
-
-FREETYPE_CFLAGS="`$ft_config --cflags`"
-FREETYPE_LIBS="`$ft_config --libs`"
-
-AC_SUBST(FREETYPE_LIBS)
-AC_SUBST(FREETYPE_CFLAGS)
-
-fontconfig_save_libs="$LIBS"
-fontconfig_save_cflags="$CFLAGS"
-LIBS="$LIBS $FREETYPE_LIBS"
-CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
-AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size)
-AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
- HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
- HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
-[#include <ft2build.h>
-#include FT_FREETYPE_H])
-AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
- [FT_Bitmap_Size structure includes y_ppem field])
-CFLAGS="$fontconfig_save_cflags"
-LIBS="$fontconfig_save_libs"
-
-#
-# Check expat configuration
-#
-
-AC_ARG_WITH(expat, [ --with-expat=DIR Use Expat in DIR], expat=$withval, expat=yes)
-AC_ARG_WITH(expat-includes, [ --with-expat-includes=DIR Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes)
-AC_ARG_WITH(expat-lib, [ --with-expat-lib=DIR Use Expat library in DIR], expat_lib=$withval, expat_lib=yes)
-
-if test "$enable_libxml2" != "yes"; then
- case "$expat" in
- no)
- ;;
- *)
- case "$expat_includes" in
- yes)
- case "$expat" in
- yes)
- ;;
- *)
- EXPAT_CFLAGS="-I$expat/include"
- ;;
- esac
- ;;
- no)
- EXPAT_CFLAGS=""
- ;;
- *)
- EXPAT_CFLAGS="-I$expat_includes"
- ;;
- esac
- case "$expat_lib" in
- yes)
- case "$expat" in
- yes)
- EXPAT_LIBS="-lexpat"
- ;;
- *)
- EXPAT_LIBS="-L$expat/lib -lexpat"
- ;;
- esac
- ;;
- no)
- ;;
- *)
- EXPAT_LIBS="-L$expat_lib -lexpat"
- ;;
- esac
-
- expatsaved_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
- expatsaved_LIBS="$LIBS"
- LIBS="$LIBS $EXPAT_LIBS"
-
- AC_CHECK_HEADER(expat.h)
- case "$ac_cv_header_expat_h" in
- no)
- AC_CHECK_HEADER(xmlparse.h)
- case "$ac_cv_header_xmlparse_h" in
- no)
- have_expat_header=no;
- ;;
- yes)
- HAVE_XMLPARSE_H=1
- AC_SUBST(HAVE_XMLPARSE_H)
- AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
- [Use xmlparse.h instead of expat.h])
- have_expat_header=yes
- ;;
- esac
- ;;
- yes)
- have_expat_header=yes
- ;;
- esac
- case "$have_expat_header" in
- no)
- expat=no
- ;;
- yes)
- AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
- case "$ac_cv_func_XML_SetDoctypeDeclHandler" in
- yes)
- HAVE_EXPAT=1
- AC_SUBST(HAVE_EXPAT)
- AC_DEFINE_UNQUOTED(HAVE_EXPAT,$HAVE_EXPAT,
- [Found a useable expat library])
- ;;
- *)
- expat=no
- ;;
- esac
- ;;
- esac
- CPPFLAGS="$expatsaved_CPPFLAGS"
- LIBS="$expatsaved_LIBS"
- ;;
- esac
-
- AC_SUBST(EXPAT_CFLAGS)
- AC_SUBST(EXPAT_LIBS)
-
- case "$expat" in
- no)
- EXPAT_CFLAGS=""
- EXPAT_LIBS=""
-
- AC_MSG_WARN([Cannot find usable expat library. Trying to use libxml2 as fallback.])
- ;;
- esac
-fi
-
-#
-# Check libxml2 configuration
-#
-
-AC_ARG_ENABLE(libxml2, [ --enable-libxml2 Use libxml2 instead of Expat])
-
-PKG_PROG_PKG_CONFIG
-
-if test "$enable_libxml2" = "yes" -o "$expat" = "no"; then
- PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
- AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
-
- AC_SUBST(LIBXML2_CFLAGS)
- AC_SUBST(LIBXML2_LIBS)
-fi
-
-#
-# Set default font directory
-#
-
-AC_ARG_WITH(default-fonts, [ --with-default-fonts=DIR Use fonts from DIR when config is busted], default_fonts="$withval", default_fonts=yes)
-
-case "$default_fonts" in
-yes)
- if test "$os_win32" = "yes"; then
- FC_DEFAULT_FONTS="WINDOWSFONTDIR"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
- [Windows font directory])
- else
- FC_DEFAULT_FONTS="/usr/share/fonts"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
- [System font directory])
- fi
- ;;
-*)
- FC_DEFAULT_FONTS="$default_fonts"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
- [System font directory])
- ;;
-esac
-
-AC_SUBST(FC_DEFAULT_FONTS)
-
-#
-# Add more fonts if available. By default, add only the directories
-# with outline fonts; those with bitmaps can be added as desired in
-# local.conf or ~/.fonts.conf
-#
-AC_ARG_WITH(add-fonts, [ --with-add-fonts=DIR1,DIR2,...Find additional fonts in DIR1,DIR2,... ], add_fonts="$withval", add_fonts=yes)
-
-case "$add_fonts" in
-yes)
- FC_ADD_FONTS=""
- for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
- case x"$FC_ADD_FONTS" in
- x)
- sub="$dir/fonts"
- if test -d "$sub"; then
- case x$FC_ADD_FONTS in
- x)
- FC_ADD_FONTS="$sub"
- ;;
- *)
- FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
- ;;
- esac
- fi
- ;;
- esac
- done
- AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
- ;;
-no)
- FC_ADD_FONTS=""
- ;;
-*)
- FC_ADD_FONTS="$add_fonts"
- AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
- ;;
-esac
-
-AC_SUBST(FC_ADD_FONTS)
-
-FC_FONTPATH=""
-
-case "$FC_ADD_FONTS" in
-"")
- ;;
-*)
- FC_FONTPATH=`echo $FC_ADD_FONTS |
- sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
- ;;
-esac
-
-AC_SUBST(FC_FONTPATH)
-
-#
-# Set default cache directory path
-#
-AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes)
-
-case $fc_cachedir in
-no|yes)
- if test "$os_win32" = "yes"; then
- fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
- else
- fc_cachedir='${localstatedir}/cache/${PACKAGE}'
- fi
- ;;
-*)
- ;;
-esac
-AC_SUBST(fc_cachedir)
-FC_CACHEDIR=${fc_cachedir}
-AC_SUBST(FC_CACHEDIR)
-
-FC_FONTDATE=`LC_ALL=C date`
-
-AC_SUBST(FC_FONTDATE)
-
-AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes)
-
-#
-# Set CONFDIR and FONTCONFIG_PATH
-#
-
-case "$confdir" in
-no|yes)
- confdir='${sysconfdir}'/fonts
- ;;
-*)
- ;;
-esac
-AC_SUBST(confdir)
-CONFDIR=${confdir}
-AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory])
-AC_SUBST(CONFDIR)
-
-#
-# Let people not build/install docs if they don't have docbook
-#
-
-AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
-
-AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
-
-default_docs="yes"
-#
-# Check if docs exist or can be created
-#
-if test x$HASDOCBOOK = xno; then
- if test -f $srcdir/doc/fonts-conf.5; then
- :
- else
- default_docs="no"
- fi
-fi
-
-AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs)
-
-AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
-
-if test "x$enable_docs" = xyes; then
- DOCSRC="doc"
- tmp=funcs.$$
- cat $srcdir/doc/*.fncs | awk '
- /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
- /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
- /^@@/ { done = 0; }' > $tmp
- DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
- echo DOCMAN3 $DOCMAN3
- rm -f $tmp
-else
- DOCSRC=""
- DOCMAN3=""
-fi
-
-AC_SUBST(DOCSRC)
-AC_SUBST(DOCMAN3)
-
-AC_OUTPUT([
-Makefile
-fontconfig/Makefile
-fc-lang/Makefile
-fc-glyphname/Makefile
-fc-case/Makefile
-fc-arch/Makefile
-src/Makefile
-conf.d/Makefile
-fc-cache/Makefile
-fc-cat/Makefile
-fc-list/Makefile
-fc-match/Makefile
-fc-query/Makefile
-fc-scan/Makefile
-doc/Makefile
-doc/version.sgml
-test/Makefile
-fontconfig.spec
-fontconfig.pc
-fontconfig-zip
-])
+dnl
+dnl fontconfig/configure.in
+dnl
+dnl Copyright © 2003 Keith Packard
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this software and its
+dnl documentation for any purpose is hereby granted without fee, provided that
+dnl the above copyright notice appear in all copies and that both that
+dnl copyright notice and this permission notice appear in supporting
+dnl documentation, and that the name of the author(s) not be used in
+dnl advertising or publicity pertaining to distribution of the software without
+dnl specific, written prior permission. The authors make no
+dnl representations about the suitability of this software for any purpose. It
+dnl is provided "as is" without express or implied warranty.
+dnl
+dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+dnl PERFORMANCE OF THIS SOFTWARE.
+dnl
+dnl Process this file with autoconf to create configure.
+
+AC_INIT(fonts.dtd)
+
+dnl ==========================================================================
+dnl Versioning
+dnl ==========================================================================
+
+dnl This is the package version number, not the shared library
+dnl version. This same version number must appear in fontconfig/fontconfig.h
+dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
+dnl not possible to extract the version number here from fontconfig.h
+AM_INIT_AUTOMAKE(fontconfig, 2.8.90)
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
+dnl libtool versioning
+
+dnl bump revision when fixing bugs
+dnl bump current and age, reset revision to zero when adding APIs
+dnl bump current, leave age, reset revision to zero when changing/removing APIS
+LIBT_CURRENT=5
+LIBT_REVISION=4
+AC_SUBST(LIBT_CURRENT)
+AC_SUBST(LIBT_REVISION)
+LIBT_AGE=4
+
+LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
+AC_SUBST(LIBT_VERSION_INFO)
+
+LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
+AC_SUBST(LIBT_CURRENT_MINUS_AGE)
+
+dnl ==========================================================================
+
+AC_CONFIG_HEADERS(config.h)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+AC_PROG_MAKE_SET
+
+dnl ==========================================================================
+
+case "$host" in
+ *-*-mingw*)
+ os_win32=yes
+ ;;
+ *)
+ os_win32=no
+esac
+AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
+
+if test "$os_win32" = "yes"; then
+ AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
+fi
+AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
+
+WARN_CFLAGS=""
+if test "x$GCC" = "xyes"; then
+ WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
+ -Wmissing-prototypes -Wmissing-declarations \
+ -Wnested-externs -fno-strict-aliasing"
+ AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
+ [Can use #warning in C files])
+fi
+AC_SUBST(WARN_CFLAGS)
+
+
+dnl ==========================================================================
+
+AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
+
+dnl ==========================================================================
+
+AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto)
+
+if test "x$arch" != xauto; then
+ AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
+fi
+
+
+dnl ==========================================================================
+
+# Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_PID_T
+
+# Checks for library functions.
+AC_FUNC_VPRINTF
+AC_FUNC_MMAP
+AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48])
+
+#
+# Checks for iconv
+#
+AC_MSG_CHECKING([for a usable iconv])
+ICONV_LIBS=""
+AC_TRY_LINK([#include <iconv.h>],
+ [iconv_open ("from", "to");],
+ [use_iconv=1],
+ [use_iconv=0])
+if test x$use_iconv = x1; then
+ AC_MSG_RESULT([libc])
+else
+ # try using libiconv
+ fontconfig_save_libs="$LIBS"
+ LIBS="$LIBS -liconv"
+
+ AC_TRY_LINK([#include <iconv.h>],
+ [iconv_open ("from", "to");],
+ [use_iconv=1],
+ [use_iconv=0])
+
+ if test x$use_iconv = x1; then
+ ICONV_LIBS="-liconv"
+ AC_MSG_RESULT([libiconv])
+ else
+ AC_MSG_RESULT([no])
+ fi
+
+ LIBS="$fontconfig_save_libs"
+fi
+AC_SUBST(ICONV_LIBS)
+AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
+
+#
+# Checks for FreeType
+#
+
+AC_ARG_WITH(freetype-config, [ --with-freetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes)
+
+if test "$freetype_config" = "yes"; then
+ AC_PATH_PROG(ft_config,freetype-config,no)
+ if test "$ft_config" = "no"; then
+ AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/])
+ fi
+else
+ ft_config="$freetype_config"
+fi
+
+FREETYPE_CFLAGS="`$ft_config --cflags`"
+FREETYPE_LIBS="`$ft_config --libs`"
+
+AC_SUBST(FREETYPE_LIBS)
+AC_SUBST(FREETYPE_CFLAGS)
+
+fontconfig_save_libs="$LIBS"
+fontconfig_save_cflags="$CFLAGS"
+LIBS="$LIBS $FREETYPE_LIBS"
+CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
+AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size)
+AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
+ HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
+ HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
+[#include <ft2build.h>
+#include FT_FREETYPE_H])
+AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
+ [FT_Bitmap_Size structure includes y_ppem field])
+CFLAGS="$fontconfig_save_cflags"
+LIBS="$fontconfig_save_libs"
+
+#
+# Check expat configuration
+#
+
+AC_ARG_WITH(expat, [ --with-expat=DIR Use Expat in DIR], expat=$withval, expat=yes)
+AC_ARG_WITH(expat-includes, [ --with-expat-includes=DIR Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes)
+AC_ARG_WITH(expat-lib, [ --with-expat-lib=DIR Use Expat library in DIR], expat_lib=$withval, expat_lib=yes)
+
+if test "$enable_libxml2" != "yes"; then
+ case "$expat" in
+ no)
+ ;;
+ *)
+ case "$expat_includes" in
+ yes)
+ case "$expat" in
+ yes)
+ ;;
+ *)
+ EXPAT_CFLAGS="-I$expat/include"
+ ;;
+ esac
+ ;;
+ no)
+ EXPAT_CFLAGS=""
+ ;;
+ *)
+ EXPAT_CFLAGS="-I$expat_includes"
+ ;;
+ esac
+ case "$expat_lib" in
+ yes)
+ case "$expat" in
+ yes)
+ EXPAT_LIBS="-lexpat"
+ ;;
+ *)
+ EXPAT_LIBS="-L$expat/lib -lexpat"
+ ;;
+ esac
+ ;;
+ no)
+ ;;
+ *)
+ EXPAT_LIBS="-L$expat_lib -lexpat"
+ ;;
+ esac
+
+ expatsaved_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
+ expatsaved_LIBS="$LIBS"
+ LIBS="$LIBS $EXPAT_LIBS"
+
+ AC_CHECK_HEADER(expat.h)
+ case "$ac_cv_header_expat_h" in
+ no)
+ AC_CHECK_HEADER(xmlparse.h)
+ case "$ac_cv_header_xmlparse_h" in
+ no)
+ have_expat_header=no;
+ ;;
+ yes)
+ HAVE_XMLPARSE_H=1
+ AC_SUBST(HAVE_XMLPARSE_H)
+ AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
+ [Use xmlparse.h instead of expat.h])
+ have_expat_header=yes
+ ;;
+ esac
+ ;;
+ yes)
+ have_expat_header=yes
+ ;;
+ esac
+ case "$have_expat_header" in
+ no)
+ expat=no
+ ;;
+ yes)
+ AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
+ case "$ac_cv_func_XML_SetDoctypeDeclHandler" in
+ yes)
+ HAVE_EXPAT=1
+ AC_SUBST(HAVE_EXPAT)
+ AC_DEFINE_UNQUOTED(HAVE_EXPAT,$HAVE_EXPAT,
+ [Found a useable expat library])
+ ;;
+ *)
+ expat=no
+ ;;
+ esac
+ ;;
+ esac
+ CPPFLAGS="$expatsaved_CPPFLAGS"
+ LIBS="$expatsaved_LIBS"
+ ;;
+ esac
+
+ AC_SUBST(EXPAT_CFLAGS)
+ AC_SUBST(EXPAT_LIBS)
+
+ case "$expat" in
+ no)
+ EXPAT_CFLAGS=""
+ EXPAT_LIBS=""
+
+ AC_MSG_WARN([Cannot find usable expat library. Trying to use libxml2 as fallback.])
+ ;;
+ esac
+fi
+
+#
+# Check libxml2 configuration
+#
+
+AC_ARG_ENABLE(libxml2, [ --enable-libxml2 Use libxml2 instead of Expat])
+
+PKG_PROG_PKG_CONFIG
+
+if test "$enable_libxml2" = "yes" -o "$expat" = "no"; then
+ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
+ AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
+
+ AC_SUBST(LIBXML2_CFLAGS)
+ AC_SUBST(LIBXML2_LIBS)
+fi
+
+#
+# Set default font directory
+#
+
+AC_ARG_WITH(default-fonts, [ --with-default-fonts=DIR Use fonts from DIR when config is busted], default_fonts="$withval", default_fonts=yes)
+
+case "$default_fonts" in
+yes)
+ if test "$os_win32" = "yes"; then
+ FC_DEFAULT_FONTS="WINDOWSFONTDIR"
+ AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
+ [Windows font directory])
+ else
+ FC_DEFAULT_FONTS="/usr/share/fonts"
+ AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
+ [System font directory])
+ fi
+ ;;
+*)
+ FC_DEFAULT_FONTS="$default_fonts"
+ AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
+ [System font directory])
+ ;;
+esac
+
+AC_SUBST(FC_DEFAULT_FONTS)
+
+#
+# Add more fonts if available. By default, add only the directories
+# with outline fonts; those with bitmaps can be added as desired in
+# local.conf or ~/.fonts.conf
+#
+AC_ARG_WITH(add-fonts, [ --with-add-fonts=DIR1,DIR2,...Find additional fonts in DIR1,DIR2,... ], add_fonts="$withval", add_fonts=yes)
+
+case "$add_fonts" in
+yes)
+ FC_ADD_FONTS=""
+ for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
+ case x"$FC_ADD_FONTS" in
+ x)
+ sub="$dir/fonts"
+ if test -d "$sub"; then
+ case x$FC_ADD_FONTS in
+ x)
+ FC_ADD_FONTS="$sub"
+ ;;
+ *)
+ FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ done
+ AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
+ ;;
+no)
+ FC_ADD_FONTS=""
+ ;;
+*)
+ FC_ADD_FONTS="$add_fonts"
+ AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
+ ;;
+esac
+
+AC_SUBST(FC_ADD_FONTS)
+
+FC_FONTPATH=""
+
+case "$FC_ADD_FONTS" in
+"")
+ ;;
+*)
+ FC_FONTPATH=`echo $FC_ADD_FONTS |
+ sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
+ ;;
+esac
+
+AC_SUBST(FC_FONTPATH)
+
+#
+# Set default cache directory path
+#
+AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes)
+
+case $fc_cachedir in
+no|yes)
+ if test "$os_win32" = "yes"; then
+ fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
+ else
+ fc_cachedir='${localstatedir}/cache/${PACKAGE}'
+ fi
+ ;;
+*)
+ ;;
+esac
+AC_SUBST(fc_cachedir)
+FC_CACHEDIR=${fc_cachedir}
+AC_SUBST(FC_CACHEDIR)
+
+FC_FONTDATE=`LC_ALL=C date`
+
+AC_SUBST(FC_FONTDATE)
+
+AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes)
+
+#
+# Set CONFDIR and FONTCONFIG_PATH
+#
+
+case "$confdir" in
+no|yes)
+ confdir='${sysconfdir}'/fonts
+ ;;
+*)
+ ;;
+esac
+AC_SUBST(confdir)
+CONFDIR=${confdir}
+AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory])
+AC_SUBST(CONFDIR)
+
+#
+# Let people not build/install docs if they don't have docbook
+#
+
+AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
+
+AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
+
+default_docs="yes"
+#
+# Check if docs exist or can be created
+#
+if test x$HASDOCBOOK = xno; then
+ if test -f $srcdir/doc/fonts-conf.5; then
+ :
+ else
+ default_docs="no"
+ fi
+fi
+
+AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs)
+
+AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
+
+if test "x$enable_docs" = xyes; then
+ DOCSRC="doc"
+ tmp=funcs.$$
+ cat $srcdir/doc/*.fncs | awk '
+ /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
+ /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
+ /^@@/ { done = 0; }' > $tmp
+ DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
+ echo DOCMAN3 $DOCMAN3
+ rm -f $tmp
+else
+ DOCSRC=""
+ DOCMAN3=""
+fi
+
+AC_SUBST(DOCSRC)
+AC_SUBST(DOCMAN3)
+
+
+dnl Figure out what cache format suffix to use for this architecture
+AC_C_BIGENDIAN
+AC_CHECK_SIZEOF([void *])
+AC_CHECK_ALIGNOF([double])
+
+
+
+AC_OUTPUT([
+Makefile
+fontconfig/Makefile
+fc-lang/Makefile
+fc-glyphname/Makefile
+fc-case/Makefile
+src/Makefile
+conf.d/Makefile
+fc-cache/Makefile
+fc-cat/Makefile
+fc-list/Makefile
+fc-match/Makefile
+fc-pattern/Makefile
+fc-query/Makefile
+fc-scan/Makefile
+doc/Makefile
+doc/version.sgml
+test/Makefile
+fontconfig.spec
+fontconfig.pc
+fontconfig-zip
+])
diff --git a/fontconfig/doc/Makefile.am b/fontconfig/doc/Makefile.am
index 49e00e155..2940f75eb 100644
--- a/fontconfig/doc/Makefile.am
+++ b/fontconfig/doc/Makefile.am
@@ -1,200 +1,203 @@
-#
-# fontconfig/doc/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-DOC_SRC = $(srcdir)
-DOC_MODULE = fontconfig
-DOC2HTML = docbook2html
-DOC2TXT = docbook2txt
-DOC2MAN = docbook2man
-DOC2PDF = docbook2pdf
-
-TXT = fontconfig-user.txt fontconfig-devel.txt
-PDF = fontconfig-user.pdf fontconfig-devel.pdf
-HTML_FILES = fontconfig-user.html
-HTML_DIR = fontconfig-devel
-SGML = fontconfig-user.sgml fontconfig-devel.sgml
-FNCS_TMPL = ${DOC_SRC}/func.sgml
-
-DOC_FUNCS_FNCS=\
- fcatomic.fncs \
- fcblanks.fncs \
- fccache.fncs \
- fccharset.fncs \
- fcconfig.fncs \
- fcconstant.fncs \
- fcdircache.fncs \
- fcfile.fncs \
- fcfontset.fncs \
- fcformat.fncs \
- fcfreetype.fncs \
- fcinit.fncs \
- fclangset.fncs \
- fcmatrix.fncs \
- fcobjectset.fncs \
- fcobjecttype.fncs \
- fcpattern.fncs \
- fcstring.fncs \
- fcstrset.fncs \
- fcvalue.fncs
-
-DOC_FUNCS_SGML=\
- fcatomic.sgml \
- fcblanks.sgml \
- fccache.sgml \
- fccharset.sgml \
- fcconfig.sgml \
- fcconstant.sgml \
- fcdircache.sgml \
- fcfile.sgml \
- fcfontset.sgml \
- fcformat.sgml \
- fcfreetype.sgml \
- fcinit.sgml \
- fclangset.sgml \
- fcmatrix.sgml \
- fcobjectset.sgml \
- fcobjecttype.sgml \
- fcpattern.sgml \
- fcstring.sgml \
- fcstrset.sgml \
- fcvalue.sgml
-
-man5_MANS=fonts-conf.5
-man3_MANS=$(DOCMAN3)
-
-noinst_PROGRAMS=edit-sgml
-edit_sgml_SOURCES=edit-sgml.c
-
-DOC_FILES=$(TXT) $(PDF) $(HTML_FILES)
-LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/*
-
-check_SCRIPTS=check-missing-doc
-TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
-TESTS=check-missing-doc
-
-EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(check_SCRIPTS) func.sgml confdir.sgml.in
-
-SUFFIXES=.fncs .sgml .txt .html
-
-if USEDOCBOOK
-
-.fncs.sgml:
- $(RM) $@
- ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml
-
-.sgml.txt:
- $(RM) $@
- $(DOC2TXT) $<
-
-.sgml.pdf:
- $(RM) $@
- $(DOC2PDF) $<
-
-$(man3_MANS): func.refs
-
-func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) func.refs
- $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \
- mv devel-man/manpage.refs func.refs && \
- mv devel-man/*.3 . && \
- $(RM) devel-man/manpage.* && \
- rmdir devel-man
-
-local-fontconfig-devel.sgml: fontconfig-devel.sgml
- $(LN_S) $< $@
-
-$(DOC_FUNCS_SGML): edit-sgml$(EXEEXT) $(FNCS_TMPL)
-
-fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2MAN) local-fontconfig-user.sgml && \
- $(RM) manpage.*
-
-local-fontconfig-user.sgml: fontconfig-user.sgml
- $(LN_S) $< $@
-
-all-local: $(LOCAL_DOCS)
-
-clean-local:
- $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) $(DOC_FUNCS_SGML) func.refs
- $(RM) -r $(HTML_DIR)
-
-$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) -r $(HTML_DIR)
- $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml
-
-fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-devel.sgml
- mv local-fontconfig-devel.txt $@
-
-fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@ local-$@ $@.tmp
- $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp
- -test -f local-$@ && mv local-$@ $@
- -test -f $@ || mv $@.tmp $@
- -test -f $@.tmp && $(RM) $@.tmp
-
-fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-user.sgml
- mv local-fontconfig-user.txt $@
-
-fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }'
-confdir.sgml: ${DOC_SRC}/confdir.sgml.in
- sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml
-
-CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml
-
-htmldoc_DATA = $(HTML_DIR)/*
-
-$(HTML_DIR)/*: $(HTML_DIR)
-
-else
-
-htmldoc_DATA = $(srcdir)/$(HTML_DIR)/*
-
-all-local:
-clean-local:
-endif
-
-htmldocdir=$(docdir)/$(HTML_DIR)
-
-doc_DATA = $(DOC_FILES)
-
+#
+# fontconfig/doc/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOC_SRC = $(srcdir)
+DOC_MODULE = fontconfig
+DOC2HTML = docbook2html
+DOC2TXT = docbook2txt
+DOC2MAN = docbook2man
+DOC2PDF = docbook2pdf
+
+TXT = fontconfig-user.txt fontconfig-devel.txt
+PDF = fontconfig-user.pdf fontconfig-devel.pdf
+HTML_FILES = fontconfig-user.html
+HTML_DIR = fontconfig-devel
+SGML = fontconfig-user.sgml fontconfig-devel.sgml
+FNCS_TMPL = ${DOC_SRC}/func.sgml
+
+DOC_FUNCS_FNCS=\
+ fcatomic.fncs \
+ fcblanks.fncs \
+ fccache.fncs \
+ fccharset.fncs \
+ fcconfig.fncs \
+ fcconstant.fncs \
+ fcdircache.fncs \
+ fcfile.fncs \
+ fcfontset.fncs \
+ fcformat.fncs \
+ fcfreetype.fncs \
+ fcinit.fncs \
+ fclangset.fncs \
+ fcmatrix.fncs \
+ fcobjectset.fncs \
+ fcobjecttype.fncs \
+ fcpattern.fncs \
+ fcstring.fncs \
+ fcstrset.fncs \
+ fcvalue.fncs
+
+DOC_FUNCS_SGML=\
+ fcatomic.sgml \
+ fcblanks.sgml \
+ fccache.sgml \
+ fccharset.sgml \
+ fcconfig.sgml \
+ fcconstant.sgml \
+ fcdircache.sgml \
+ fcfile.sgml \
+ fcfontset.sgml \
+ fcformat.sgml \
+ fcfreetype.sgml \
+ fcinit.sgml \
+ fclangset.sgml \
+ fcmatrix.sgml \
+ fcobjectset.sgml \
+ fcobjecttype.sgml \
+ fcpattern.sgml \
+ fcstring.sgml \
+ fcstrset.sgml \
+ fcvalue.sgml
+
+man5_MANS=fonts-conf.5
+man3_MANS=$(DOCMAN3)
+
+noinst_PROGRAMS=edit-sgml
+edit_sgml_SOURCES=edit-sgml.c
+
+DOC_FILES=$(TXT) $(PDF) $(HTML_FILES)
+LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/*
+
+check_SCRIPTS=check-missing-doc
+TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
+TESTS=check-missing-doc
+
+EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in
+
+SUFFIXES=.fncs .sgml .txt .html
+
+if USEDOCBOOK
+
+if CROSS_COMPILING
+.fncs.sgml:
+ @echo Warning: cannot rebuild $@ when cross-compiling
+else
+.fncs.sgml:
+ $(RM) $@
+ ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml
+endif
+
+.sgml.txt:
+ $(RM) $@
+ $(DOC2TXT) $<
+
+.sgml.pdf:
+ $(RM) $@
+ $(DOC2PDF) $<
+
+$(man3_MANS): func.refs
+
+func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
+ $(RM) func.refs
+ $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \
+ mv devel-man/manpage.refs func.refs && \
+ mv devel-man/*.3 . && \
+ $(RM) devel-man/manpage.* && \
+ rmdir devel-man
+
+local-fontconfig-devel.sgml: fontconfig-devel.sgml
+ $(LN_S) $< $@
+
+$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL)
+
+fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
+ $(RM) $@
+ $(DOC2MAN) local-fontconfig-user.sgml && \
+ $(RM) manpage.*
+
+local-fontconfig-user.sgml: fontconfig-user.sgml
+ $(LN_S) $< $@
+
+all-local: $(LOCAL_DOCS)
+
+clean-local:
+ $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs
+ $(RM) -r $(HTML_DIR)
+
+MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML)
+
+$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
+ $(RM) -r $(HTML_DIR)
+ $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml
+
+fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
+ $(RM) $@
+ $(DOC2TXT) local-fontconfig-devel.sgml
+ mv local-fontconfig-devel.txt $@
+
+fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
+ $(RM) $@
+ $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
+ || echo Failed to generate $@ >&2; \
+ (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
+
+fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml
+ $(RM) $@ local-$@ $@.tmp
+ $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp
+ -test -f local-$@ && mv local-$@ $@
+ -test -f $@ || mv $@.tmp $@
+ -test -f $@.tmp && $(RM) $@.tmp
+
+fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml
+ $(RM) $@
+ $(DOC2TXT) local-fontconfig-user.sgml
+ mv local-fontconfig-user.txt $@
+
+fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml
+ $(RM) $@
+ $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
+ || echo Failed to generate $@ >&2; \
+ (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
+
+STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }'
+confdir.sgml: ${DOC_SRC}/confdir.sgml.in
+ sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml
+
+CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml
+
+htmldoc_DATA = $(HTML_DIR)/*
+
+$(HTML_DIR)/*: $(HTML_DIR)
+
+else
+
+htmldoc_DATA = $(srcdir)/$(HTML_DIR)/*
+
+all-local:
+clean-local:
+endif
+
+htmldocdir=$(docdir)/$(HTML_DIR)
+
+doc_DATA = $(DOC_FILES)
+
diff --git a/fontconfig/doc/confdir.sgml.in b/fontconfig/doc/confdir.sgml.in
index 291b26bb3..8008ab81d 100644
--- a/fontconfig/doc/confdir.sgml.in
+++ b/fontconfig/doc/confdir.sgml.in
@@ -1,26 +1,26 @@
-<!--
- fontconfig/doc/confdir.sgml.in
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of Keith Packard not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. Keith Packard makes no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<!-- this is filled in at make time -->
-<!--@CONFDIR@-->
-/etc/fonts
+<!--
+ fontconfig/doc/confdir.sgml.in
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+<!-- this is filled in at make time -->
+<!--@CONFDIR@-->
+/etc/fonts
diff --git a/fontconfig/doc/edit-sgml.c b/fontconfig/doc/edit-sgml.c
index b69c93ed7..a3f4aa058 100644
--- a/fontconfig/doc/edit-sgml.c
+++ b/fontconfig/doc/edit-sgml.c
@@ -1,546 +1,546 @@
-/*
- * fontconfig/doc/edit-sgml.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-static void *
-New (int size);
-
-static void *
-Reallocate (void *p, int size);
-
-static void
-Dispose (void *p);
-
-typedef enum { False, True } Bool;
-
-typedef struct {
- char *buf;
- int size;
- int len;
-} String;
-
-static String *
-StringNew (void);
-
-static void
-StringAdd (String *s, char c);
-
-static void
-StringAddString (String *s, char *buf);
-
-static String *
-StringMake (char *buf);
-
-static void
-StringDel (String *s);
-
-static void
-StringPut (FILE *f, String *s);
-
-static void
-StringDispose (String *s);
-
-typedef struct {
- String *tag;
- String *text;
-} Replace;
-
-static Replace *
-ReplaceNew (void);
-
-static void
-ReplaceDispose (Replace *r);
-
-static void
-Bail (const char *format, int line, const char *arg);
-
-static Replace *
-ReplaceRead (FILE *f, int *linep);
-
-typedef struct _replaceList {
- struct _replaceList *next;
- Replace *r;
-} ReplaceList;
-
-static ReplaceList *
-ReplaceListNew (Replace *r, ReplaceList *next);
-
-static void
-ReplaceListDispose (ReplaceList *l);
-
-typedef struct {
- ReplaceList *head;
-} ReplaceSet;
-
-static ReplaceSet *
-ReplaceSetNew (void);
-
-static void
-ReplaceSetDispose (ReplaceSet *s);
-
-static void
-ReplaceSetAdd (ReplaceSet *s, Replace *r);
-
-static Replace *
-ReplaceSetFind (ReplaceSet *s, char *tag);
-
-static ReplaceSet *
-ReplaceSetRead (FILE *f, int *linep);
-
-typedef struct _skipStack {
- struct _skipStack *prev;
- int skipping;
-} SkipStack;
-
-static SkipStack *
-SkipStackPush (SkipStack *prev, int skipping);
-
-static SkipStack *
-SkipStackPop (SkipStack *prev);
-
-typedef struct _loopStack {
- struct _loopStack *prev;
- String *tag;
- String *extra;
- long pos;
-} LoopStack;
-
-static LoopStack *
-LoopStackPush (LoopStack *prev, FILE *f, char *tag);
-
-static LoopStack *
-LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f);
-
-static void
-LineSkip (FILE *f, int *linep);
-
-static void
-DoReplace (FILE *f, int *linep, ReplaceSet *s);
-
-#define STRING_INIT 128
-
-static void *
-New (int size)
-{
- void *m = malloc (size);
- if (!m)
- abort ();
- return m;
-}
-
-static void *
-Reallocate (void *p, int size)
-{
- void *r = realloc (p, size);
-
- if (!r)
- abort ();
- return r;
-}
-
-static void
-Dispose (void *p)
-{
- free (p);
-}
-
-static String *
-StringNew (void)
-{
- String *s;
-
- s = New (sizeof (String));
- s->buf = New (STRING_INIT);
- s->size = STRING_INIT - 1;
- s->buf[0] = '\0';
- s->len = 0;
- return s;
-}
-
-static void
-StringAdd (String *s, char c)
-{
- if (s->len == s->size)
- s->buf = Reallocate (s->buf, (s->size *= 2) + 1);
- s->buf[s->len++] = c;
- s->buf[s->len] = '\0';
-}
-
-static void
-StringAddString (String *s, char *buf)
-{
- while (*buf)
- StringAdd (s, *buf++);
-}
-
-static String *
-StringMake (char *buf)
-{
- String *s = StringNew ();
- StringAddString (s, buf);
- return s;
-}
-
-static void
-StringDel (String *s)
-{
- if (s->len)
- s->buf[--s->len] = '\0';
-}
-
-static void
-StringPut (FILE *f, String *s)
-{
- char *b = s->buf;
-
- while (*b)
- putc (*b++, f);
-}
-
-#define StringLast(s) ((s)->len ? (s)->buf[(s)->len - 1] : '\0')
-
-static void
-StringDispose (String *s)
-{
- Dispose (s->buf);
- Dispose (s);
-}
-
-static Replace *
-ReplaceNew (void)
-{
- Replace *r = New (sizeof (Replace));
- r->tag = StringNew ();
- r->text = StringNew ();
- return r;
-}
-
-static void
-ReplaceDispose (Replace *r)
-{
- StringDispose (r->tag);
- StringDispose (r->text);
- Dispose (r);
-}
-
-static void
-Bail (const char *format, int line, const char *arg)
-{
- fprintf (stderr, "fatal: ");
- fprintf (stderr, format, line, arg);
- fprintf (stderr, "\n");
- exit (1);
-}
-
-static int
-Getc (FILE *f, int *linep)
-{
- int c = getc (f);
- if (c == '\n')
- ++(*linep);
- return c;
-}
-
-static void
-Ungetc (int c, FILE *f, int *linep)
-{
- if (c == '\n')
- --(*linep);
- ungetc (c, f);
-}
-
-static Replace *
-ReplaceRead (FILE *f, int *linep)
-{
- int c;
- Replace *r;
-
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- return 0;
- }
- r = ReplaceNew();
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- {
- ReplaceDispose (r);
- return 0;
- }
- if (isspace (c))
- Bail ("%d: invalid character after tag %s", *linep, r->tag->buf);
- StringAdd (r->tag, c);
- }
- if (r->tag->buf[0] == '\0')
- {
- ReplaceDispose (r);
- return 0;
- }
- while (isspace ((c = Getc (f, linep))))
- ;
- Ungetc (c, f, linep);
- while ((c = Getc (f, linep)) != '@' && c != EOF)
- StringAdd (r->text, c);
- if (c == '@')
- Ungetc (c, f, linep);
- while (isspace (StringLast (r->text)))
- StringDel (r->text);
- if (StringLast(r->text) == '%')
- {
- StringDel (r->text);
- StringAdd (r->text, ' ');
- }
- return r;
-}
-
-static ReplaceList *
-ReplaceListNew (Replace *r, ReplaceList *next)
-{
- ReplaceList *l = New (sizeof (ReplaceList));
- l->r = r;
- l->next = next;
- return l;
-}
-
-static void
-ReplaceListDispose (ReplaceList *l)
-{
- if (l)
- {
- ReplaceListDispose (l->next);
- ReplaceDispose (l->r);
- Dispose (l);
- }
-}
-
-static ReplaceSet *
-ReplaceSetNew (void)
-{
- ReplaceSet *s = New (sizeof (ReplaceSet));
- s->head = 0;
- return s;
-}
-
-static void
-ReplaceSetDispose (ReplaceSet *s)
-{
- ReplaceListDispose (s->head);
- Dispose (s);
-}
-
-static void
-ReplaceSetAdd (ReplaceSet *s, Replace *r)
-{
- s->head = ReplaceListNew (r, s->head);
-}
-
-static Replace *
-ReplaceSetFind (ReplaceSet *s, char *tag)
-{
- ReplaceList *l;
-
- for (l = s->head; l; l = l->next)
- if (!strcmp (tag, l->r->tag->buf))
- return l->r;
- return 0;
-}
-
-static ReplaceSet *
-ReplaceSetRead (FILE *f, int *linep)
-{
- ReplaceSet *s = ReplaceSetNew ();
- Replace *r;
-
- while ((r = ReplaceRead (f, linep)))
- {
- while (ReplaceSetFind (s, r->tag->buf))
- StringAdd (r->tag, '+');
- ReplaceSetAdd (s, r);
- }
- if (!s->head)
- {
- ReplaceSetDispose (s);
- s = 0;
- }
- return s;
-}
-
-static SkipStack *
-SkipStackPush (SkipStack *prev, int skipping)
-{
- SkipStack *ss = New (sizeof (SkipStack));
- ss->prev = prev;
- ss->skipping = skipping;
- return ss;
-}
-
-static SkipStack *
-SkipStackPop (SkipStack *prev)
-{
- SkipStack *ss = prev->prev;
- Dispose (prev);
- return ss;
-}
-
-static LoopStack *
-LoopStackPush (LoopStack *prev, FILE *f, char *tag)
-{
- LoopStack *ls = New (sizeof (LoopStack));
- ls->prev = prev;
- ls->tag = StringMake (tag);
- ls->extra = StringNew ();
- ls->pos = ftell (f);
- return ls;
-}
-
-static LoopStack *
-LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f)
-{
- String *s = StringMake (ls->tag->buf);
- LoopStack *ret = ls;
- Bool loop;
-
- StringAdd (ls->extra, '+');
- StringAddString (s, ls->extra->buf);
- loop = ReplaceSetFind (rs, s->buf) != 0;
- StringDispose (s);
- if (loop)
- fseek (f, ls->pos, SEEK_SET);
- else
- {
- ret = ls->prev;
- StringDispose (ls->tag);
- StringDispose (ls->extra);
- Dispose (ls);
- }
- return ret;
-}
-
-static void
-LineSkip (FILE *f, int *linep)
-{
- int c;
-
- while ((c = Getc (f, linep)) == '\n')
- ;
- Ungetc (c, f, linep);
-}
-
-static void
-DoReplace (FILE *f, int *linep, ReplaceSet *s)
-{
- int c;
- String *tag;
- Replace *r;
- SkipStack *ss = 0;
- LoopStack *ls = 0;
- int skipping = 0;
-
- while ((c = Getc (f, linep)) != EOF)
- {
- if (c == '@')
- {
- tag = StringNew ();
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- abort ();
- StringAdd (tag, c);
- }
- if (ls)
- StringAddString (tag, ls->extra->buf);
- switch (tag->buf[0]) {
- case '?':
- ss = SkipStackPush (ss, skipping);
- if (!ReplaceSetFind (s, tag->buf + 1))
- skipping++;
- LineSkip (f, linep);
- break;
- case ':':
- if (!ss)
- abort ();
- if (ss->skipping == skipping)
- ++skipping;
- else
- --skipping;
- LineSkip (f, linep);
- break;
- case ';':
- skipping = ss->skipping;
- ss = SkipStackPop (ss);
- LineSkip (f, linep);
- break;
- case '{':
- ls = LoopStackPush (ls, f, tag->buf + 1);
- LineSkip (f, linep);
- break;
- case '}':
- ls = LoopStackLoop (s, ls, f);
- LineSkip (f, linep);
- break;
- default:
- r = ReplaceSetFind (s, tag->buf);
- if (r && !skipping)
- StringPut (stdout, r->text);
- break;
- }
- StringDispose (tag);
- }
- else if (!skipping)
- putchar (c);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- FILE *f;
- ReplaceSet *s;
- int iline, oline;
-
- if (!argv[1])
- Bail ("usage: %*s <template.sgml>", 0, argv[0]);
- f = fopen (argv[1], "r");
- if (!f)
- {
- Bail ("can't open file %s", 0, argv[1]);
- exit (1);
- }
- iline = 1;
- while ((s = ReplaceSetRead (stdin, &iline)))
- {
- oline = 1;
- DoReplace (f, &oline, s);
- ReplaceSetDispose (s);
- rewind (f);
- }
- if (ferror (stdout))
- Bail ("%s", 0, "error writing output");
- exit (0);
-}
+/*
+ * fontconfig/doc/edit-sgml.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+static void *
+New (int size);
+
+static void *
+Reallocate (void *p, int size);
+
+static void
+Dispose (void *p);
+
+typedef enum { False, True } Bool;
+
+typedef struct {
+ char *buf;
+ int size;
+ int len;
+} String;
+
+static String *
+StringNew (void);
+
+static void
+StringAdd (String *s, char c);
+
+static void
+StringAddString (String *s, char *buf);
+
+static String *
+StringMake (char *buf);
+
+static void
+StringDel (String *s);
+
+static void
+StringPut (FILE *f, String *s);
+
+static void
+StringDispose (String *s);
+
+typedef struct {
+ String *tag;
+ String *text;
+} Replace;
+
+static Replace *
+ReplaceNew (void);
+
+static void
+ReplaceDispose (Replace *r);
+
+static void
+Bail (const char *format, int line, const char *arg);
+
+static Replace *
+ReplaceRead (FILE *f, int *linep);
+
+typedef struct _replaceList {
+ struct _replaceList *next;
+ Replace *r;
+} ReplaceList;
+
+static ReplaceList *
+ReplaceListNew (Replace *r, ReplaceList *next);
+
+static void
+ReplaceListDispose (ReplaceList *l);
+
+typedef struct {
+ ReplaceList *head;
+} ReplaceSet;
+
+static ReplaceSet *
+ReplaceSetNew (void);
+
+static void
+ReplaceSetDispose (ReplaceSet *s);
+
+static void
+ReplaceSetAdd (ReplaceSet *s, Replace *r);
+
+static Replace *
+ReplaceSetFind (ReplaceSet *s, char *tag);
+
+static ReplaceSet *
+ReplaceSetRead (FILE *f, int *linep);
+
+typedef struct _skipStack {
+ struct _skipStack *prev;
+ int skipping;
+} SkipStack;
+
+static SkipStack *
+SkipStackPush (SkipStack *prev, int skipping);
+
+static SkipStack *
+SkipStackPop (SkipStack *prev);
+
+typedef struct _loopStack {
+ struct _loopStack *prev;
+ String *tag;
+ String *extra;
+ long pos;
+} LoopStack;
+
+static LoopStack *
+LoopStackPush (LoopStack *prev, FILE *f, char *tag);
+
+static LoopStack *
+LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f);
+
+static void
+LineSkip (FILE *f, int *linep);
+
+static void
+DoReplace (FILE *f, int *linep, ReplaceSet *s);
+
+#define STRING_INIT 128
+
+static void *
+New (int size)
+{
+ void *m = malloc (size);
+ if (!m)
+ abort ();
+ return m;
+}
+
+static void *
+Reallocate (void *p, int size)
+{
+ void *r = realloc (p, size);
+
+ if (!r)
+ abort ();
+ return r;
+}
+
+static void
+Dispose (void *p)
+{
+ free (p);
+}
+
+static String *
+StringNew (void)
+{
+ String *s;
+
+ s = New (sizeof (String));
+ s->buf = New (STRING_INIT);
+ s->size = STRING_INIT - 1;
+ s->buf[0] = '\0';
+ s->len = 0;
+ return s;
+}
+
+static void
+StringAdd (String *s, char c)
+{
+ if (s->len == s->size)
+ s->buf = Reallocate (s->buf, (s->size *= 2) + 1);
+ s->buf[s->len++] = c;
+ s->buf[s->len] = '\0';
+}
+
+static void
+StringAddString (String *s, char *buf)
+{
+ while (*buf)
+ StringAdd (s, *buf++);
+}
+
+static String *
+StringMake (char *buf)
+{
+ String *s = StringNew ();
+ StringAddString (s, buf);
+ return s;
+}
+
+static void
+StringDel (String *s)
+{
+ if (s->len)
+ s->buf[--s->len] = '\0';
+}
+
+static void
+StringPut (FILE *f, String *s)
+{
+ char *b = s->buf;
+
+ while (*b)
+ putc (*b++, f);
+}
+
+#define StringLast(s) ((s)->len ? (s)->buf[(s)->len - 1] : '\0')
+
+static void
+StringDispose (String *s)
+{
+ Dispose (s->buf);
+ Dispose (s);
+}
+
+static Replace *
+ReplaceNew (void)
+{
+ Replace *r = New (sizeof (Replace));
+ r->tag = StringNew ();
+ r->text = StringNew ();
+ return r;
+}
+
+static void
+ReplaceDispose (Replace *r)
+{
+ StringDispose (r->tag);
+ StringDispose (r->text);
+ Dispose (r);
+}
+
+static void
+Bail (const char *format, int line, const char *arg)
+{
+ fprintf (stderr, "fatal: ");
+ fprintf (stderr, format, line, arg);
+ fprintf (stderr, "\n");
+ exit (1);
+}
+
+static int
+Getc (FILE *f, int *linep)
+{
+ int c = getc (f);
+ if (c == '\n')
+ ++(*linep);
+ return c;
+}
+
+static void
+Ungetc (int c, FILE *f, int *linep)
+{
+ if (c == '\n')
+ --(*linep);
+ ungetc (c, f);
+}
+
+static Replace *
+ReplaceRead (FILE *f, int *linep)
+{
+ int c;
+ Replace *r;
+
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ return 0;
+ }
+ r = ReplaceNew();
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ {
+ ReplaceDispose (r);
+ return 0;
+ }
+ if (isspace (c))
+ Bail ("%d: invalid character after tag %s", *linep, r->tag->buf);
+ StringAdd (r->tag, c);
+ }
+ if (r->tag->buf[0] == '\0')
+ {
+ ReplaceDispose (r);
+ return 0;
+ }
+ while (isspace ((c = Getc (f, linep))))
+ ;
+ Ungetc (c, f, linep);
+ while ((c = Getc (f, linep)) != '@' && c != EOF)
+ StringAdd (r->text, c);
+ if (c == '@')
+ Ungetc (c, f, linep);
+ while (isspace (StringLast (r->text)))
+ StringDel (r->text);
+ if (StringLast(r->text) == '%')
+ {
+ StringDel (r->text);
+ StringAdd (r->text, ' ');
+ }
+ return r;
+}
+
+static ReplaceList *
+ReplaceListNew (Replace *r, ReplaceList *next)
+{
+ ReplaceList *l = New (sizeof (ReplaceList));
+ l->r = r;
+ l->next = next;
+ return l;
+}
+
+static void
+ReplaceListDispose (ReplaceList *l)
+{
+ if (l)
+ {
+ ReplaceListDispose (l->next);
+ ReplaceDispose (l->r);
+ Dispose (l);
+ }
+}
+
+static ReplaceSet *
+ReplaceSetNew (void)
+{
+ ReplaceSet *s = New (sizeof (ReplaceSet));
+ s->head = 0;
+ return s;
+}
+
+static void
+ReplaceSetDispose (ReplaceSet *s)
+{
+ ReplaceListDispose (s->head);
+ Dispose (s);
+}
+
+static void
+ReplaceSetAdd (ReplaceSet *s, Replace *r)
+{
+ s->head = ReplaceListNew (r, s->head);
+}
+
+static Replace *
+ReplaceSetFind (ReplaceSet *s, char *tag)
+{
+ ReplaceList *l;
+
+ for (l = s->head; l; l = l->next)
+ if (!strcmp (tag, l->r->tag->buf))
+ return l->r;
+ return 0;
+}
+
+static ReplaceSet *
+ReplaceSetRead (FILE *f, int *linep)
+{
+ ReplaceSet *s = ReplaceSetNew ();
+ Replace *r;
+
+ while ((r = ReplaceRead (f, linep)))
+ {
+ while (ReplaceSetFind (s, r->tag->buf))
+ StringAdd (r->tag, '+');
+ ReplaceSetAdd (s, r);
+ }
+ if (!s->head)
+ {
+ ReplaceSetDispose (s);
+ s = 0;
+ }
+ return s;
+}
+
+static SkipStack *
+SkipStackPush (SkipStack *prev, int skipping)
+{
+ SkipStack *ss = New (sizeof (SkipStack));
+ ss->prev = prev;
+ ss->skipping = skipping;
+ return ss;
+}
+
+static SkipStack *
+SkipStackPop (SkipStack *prev)
+{
+ SkipStack *ss = prev->prev;
+ Dispose (prev);
+ return ss;
+}
+
+static LoopStack *
+LoopStackPush (LoopStack *prev, FILE *f, char *tag)
+{
+ LoopStack *ls = New (sizeof (LoopStack));
+ ls->prev = prev;
+ ls->tag = StringMake (tag);
+ ls->extra = StringNew ();
+ ls->pos = ftell (f);
+ return ls;
+}
+
+static LoopStack *
+LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f)
+{
+ String *s = StringMake (ls->tag->buf);
+ LoopStack *ret = ls;
+ Bool loop;
+
+ StringAdd (ls->extra, '+');
+ StringAddString (s, ls->extra->buf);
+ loop = ReplaceSetFind (rs, s->buf) != 0;
+ StringDispose (s);
+ if (loop)
+ fseek (f, ls->pos, SEEK_SET);
+ else
+ {
+ ret = ls->prev;
+ StringDispose (ls->tag);
+ StringDispose (ls->extra);
+ Dispose (ls);
+ }
+ return ret;
+}
+
+static void
+LineSkip (FILE *f, int *linep)
+{
+ int c;
+
+ while ((c = Getc (f, linep)) == '\n')
+ ;
+ Ungetc (c, f, linep);
+}
+
+static void
+DoReplace (FILE *f, int *linep, ReplaceSet *s)
+{
+ int c;
+ String *tag;
+ Replace *r;
+ SkipStack *ss = 0;
+ LoopStack *ls = 0;
+ int skipping = 0;
+
+ while ((c = Getc (f, linep)) != EOF)
+ {
+ if (c == '@')
+ {
+ tag = StringNew ();
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ abort ();
+ StringAdd (tag, c);
+ }
+ if (ls)
+ StringAddString (tag, ls->extra->buf);
+ switch (tag->buf[0]) {
+ case '?':
+ ss = SkipStackPush (ss, skipping);
+ if (!ReplaceSetFind (s, tag->buf + 1))
+ skipping++;
+ LineSkip (f, linep);
+ break;
+ case ':':
+ if (!ss)
+ abort ();
+ if (ss->skipping == skipping)
+ ++skipping;
+ else
+ --skipping;
+ LineSkip (f, linep);
+ break;
+ case ';':
+ skipping = ss->skipping;
+ ss = SkipStackPop (ss);
+ LineSkip (f, linep);
+ break;
+ case '{':
+ ls = LoopStackPush (ls, f, tag->buf + 1);
+ LineSkip (f, linep);
+ break;
+ case '}':
+ ls = LoopStackLoop (s, ls, f);
+ LineSkip (f, linep);
+ break;
+ default:
+ r = ReplaceSetFind (s, tag->buf);
+ if (r && !skipping)
+ StringPut (stdout, r->text);
+ break;
+ }
+ StringDispose (tag);
+ }
+ else if (!skipping)
+ putchar (c);
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ FILE *f;
+ ReplaceSet *s;
+ int iline, oline;
+
+ if (!argv[1])
+ Bail ("usage: %*s <template.sgml>", 0, argv[0]);
+ f = fopen (argv[1], "r");
+ if (!f)
+ {
+ Bail ("can't open file %s", 0, argv[1]);
+ exit (1);
+ }
+ iline = 1;
+ while ((s = ReplaceSetRead (stdin, &iline)))
+ {
+ oline = 1;
+ DoReplace (f, &oline, s);
+ ReplaceSetDispose (s);
+ rewind (f);
+ }
+ if (ferror (stdout))
+ Bail ("%s", 0, "error writing output");
+ exit (0);
+}
diff --git a/fontconfig/doc/fcatomic.fncs b/fontconfig/doc/fcatomic.fncs
index c6b924d84..645fe2b26 100644
--- a/fontconfig/doc/fcatomic.fncs
+++ b/fontconfig/doc/fcatomic.fncs
@@ -1,95 +1,95 @@
-/*
- * fontconfig/doc/fcatomic.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcAtomic *
-@FUNC@ FcAtomicCreate
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ create an FcAtomic object
-@DESC@
-Creates a data structure containing data needed to control access to <parameter>file</parameter>.
-Writing is done to a separate file. Once that file is complete, the original
-configuration file is atomically replaced so that reading process always see
-a consistent and complete file without the need to lock for reading.
-@@
-
-@RET@ FcBool
-@FUNC@ FcAtomicLock
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ lock a file
-@DESC@
-Attempts to lock the file referenced by <parameter>atomic</parameter>.
-Returns FcFalse if the file is already locked, else returns FcTrue and
-leaves the file locked.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcAtomicNewFile
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ return new temporary file name
-@DESC@
-Returns the filename for writing a new version of the file referenced
-by <parameter>atomic</parameter>.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcAtomicOrigFile
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ return original file name
-@DESC@
-Returns the file refernced by <parameter>atomic</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcAtomicReplaceOrig
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ replace original with new
-@DESC@
-Replaces the original file referenced by <parameter>atomic</parameter> with
-the new file. Returns FcFalse if the file cannot be replaced due to
-permission issues in the filesystem. Otherwise returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicDeleteNew
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ delete new file
-@DESC@
-Deletes the new file. Used in error recovery to back out changes.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicUnlock
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ unlock a file
-@DESC@
-Unlocks the file.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicDestroy
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ destroy an FcAtomic object
-@DESC@
-Destroys <parameter>atomic</parameter>.
-@@
+/*
+ * fontconfig/doc/fcatomic.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcAtomic *
+@FUNC@ FcAtomicCreate
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ create an FcAtomic object
+@DESC@
+Creates a data structure containing data needed to control access to <parameter>file</parameter>.
+Writing is done to a separate file. Once that file is complete, the original
+configuration file is atomically replaced so that reading process always see
+a consistent and complete file without the need to lock for reading.
+@@
+
+@RET@ FcBool
+@FUNC@ FcAtomicLock
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ lock a file
+@DESC@
+Attempts to lock the file referenced by <parameter>atomic</parameter>.
+Returns FcFalse if the file is already locked, else returns FcTrue and
+leaves the file locked.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcAtomicNewFile
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ return new temporary file name
+@DESC@
+Returns the filename for writing a new version of the file referenced
+by <parameter>atomic</parameter>.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcAtomicOrigFile
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ return original file name
+@DESC@
+Returns the file referenced by <parameter>atomic</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcAtomicReplaceOrig
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ replace original with new
+@DESC@
+Replaces the original file referenced by <parameter>atomic</parameter> with
+the new file. Returns FcFalse if the file cannot be replaced due to
+permission issues in the filesystem. Otherwise returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicDeleteNew
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ delete new file
+@DESC@
+Deletes the new file. Used in error recovery to back out changes.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicUnlock
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ unlock a file
+@DESC@
+Unlocks the file.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicDestroy
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ destroy an FcAtomic object
+@DESC@
+Destroys <parameter>atomic</parameter>.
+@@
diff --git a/fontconfig/doc/fcblanks.fncs b/fontconfig/doc/fcblanks.fncs
index b8ce47d24..a1d3d4ad1 100644
--- a/fontconfig/doc/fcblanks.fncs
+++ b/fontconfig/doc/fcblanks.fncs
@@ -1,58 +1,58 @@
-/*
- * fontconfig/doc/fcblanks.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBlanks *
-@FUNC@ FcBlanksCreate
-@TYPE1@ void
-@PURPOSE@ Create an FcBlanks
-@DESC@
-Creates an empty FcBlanks object.
-@@
-
-@RET@ void
-@FUNC@ FcBlanksDestroy
-@TYPE1@ FcBlanks * @ARG1@ b
-@PURPOSE@ Destroy and FcBlanks
-@DESC@
-Destroys an FcBlanks object, freeing any associated memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcBlanksAdd
-@TYPE1@ FcBlanks * @ARG1@ b
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Add a character to an FcBlanks
-@DESC@
-Adds a single character to an FcBlanks object, returning FcFalse
-if this process ran out of memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcBlanksIsMember
-@TYPE1@ FcBlanks * @ARG1@ b
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Query membership in an FcBlanks
-@DESC@
-Returns whether the specified FcBlanks object contains the indicated Unicode
-value.
-@@
+/*
+ * fontconfig/doc/fcblanks.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcBlanks *
+@FUNC@ FcBlanksCreate
+@TYPE1@ void
+@PURPOSE@ Create an FcBlanks
+@DESC@
+Creates an empty FcBlanks object.
+@@
+
+@RET@ void
+@FUNC@ FcBlanksDestroy
+@TYPE1@ FcBlanks * @ARG1@ b
+@PURPOSE@ Destroy and FcBlanks
+@DESC@
+Destroys an FcBlanks object, freeing any associated memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcBlanksAdd
+@TYPE1@ FcBlanks * @ARG1@ b
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Add a character to an FcBlanks
+@DESC@
+Adds a single character to an FcBlanks object, returning FcFalse
+if this process ran out of memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcBlanksIsMember
+@TYPE1@ FcBlanks * @ARG1@ b
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Query membership in an FcBlanks
+@DESC@
+Returns whether the specified FcBlanks object contains the indicated Unicode
+value.
+@@
diff --git a/fontconfig/doc/fccache.fncs b/fontconfig/doc/fccache.fncs
index f0c984d79..96f3f0a6c 100644
--- a/fontconfig/doc/fccache.fncs
+++ b/fontconfig/doc/fccache.fncs
@@ -1,68 +1,68 @@
-/*
- * Copyright © 2007 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ const FcChar8 *
-@FUNC@ FcCacheDir
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Return directory of <parameter>cache</parameter>
-@DESC@
-This function returns the directory from which the cache was constructed.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcCacheCopySet
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Returns a copy of the fontset from <parameter>cache</parameter>
-@DESC@
-The returned fontset contains each of the font patterns from
-<parameter>cache</parameter>. This fontset may be modified, but the patterns
-from the cache are read-only.
-@@
-
-@RET@ const FcChar8 *
-@FUNC@ FcCacheSubdir
-@TYPE1@ const FcCache * @ARG1@ cache
-@TYPE2@ int @ARG2@ i
-@PURPOSE@ Return the <parameter>i</parameter>'th subdirectory.
-@DESC@
-The set of subdirectories stored in a cache file are indexed by this
-function, <parameter>i</parameter> should range from 0 to
-<parameter>n</parameter>-1, where <parameter>n</parameter> is the return
-value from FcCacheNumSubdir.
-@@
-
-@RET@ int
-@FUNC@ FcCacheNumSubdir
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Return the number of subdirectories in <parameter>cache</parameter>.
-@DESC@
-This returns the total number of subdirectories in the cache.
-@@
-
-@RET@ int
-@FUNC@ FcCacheNumFont
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Returns the number of fonts in <parameter>cache</parameter>.
-@DESC@
-This returns the number of fonts which would be included in the return from
-FcCacheCopySet.
-@@
+/*
+ * Copyright © 2007 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ const FcChar8 *
+@FUNC@ FcCacheDir
+@TYPE1@ const FcCache * @ARG1@ cache
+@PURPOSE@ Return directory of <parameter>cache</parameter>
+@DESC@
+This function returns the directory from which the cache was constructed.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcCacheCopySet
+@TYPE1@ const FcCache * @ARG1@ cache
+@PURPOSE@ Returns a copy of the fontset from <parameter>cache</parameter>
+@DESC@
+The returned fontset contains each of the font patterns from
+<parameter>cache</parameter>. This fontset may be modified, but the patterns
+from the cache are read-only.
+@@
+
+@RET@ const FcChar8 *
+@FUNC@ FcCacheSubdir
+@TYPE1@ const FcCache * @ARG1@ cache
+@TYPE2@ int @ARG2@ i
+@PURPOSE@ Return the <parameter>i</parameter>'th subdirectory.
+@DESC@
+The set of subdirectories stored in a cache file are indexed by this
+function, <parameter>i</parameter> should range from 0 to
+<parameter>n</parameter>-1, where <parameter>n</parameter> is the return
+value from FcCacheNumSubdir.
+@@
+
+@RET@ int
+@FUNC@ FcCacheNumSubdir
+@TYPE1@ const FcCache * @ARG1@ cache
+@PURPOSE@ Return the number of subdirectories in <parameter>cache</parameter>.
+@DESC@
+This returns the total number of subdirectories in the cache.
+@@
+
+@RET@ int
+@FUNC@ FcCacheNumFont
+@TYPE1@ const FcCache * @ARG1@ cache
+@PURPOSE@ Returns the number of fonts in <parameter>cache</parameter>.
+@DESC@
+This returns the number of fonts which would be included in the return from
+FcCacheCopySet.
+@@
diff --git a/fontconfig/doc/fccharset.fncs b/fontconfig/doc/fccharset.fncs
index b12064a55..7cd2ff4b5 100644
--- a/fontconfig/doc/fccharset.fncs
+++ b/fontconfig/doc/fccharset.fncs
@@ -1,206 +1,217 @@
-/*
- * fontconfig/doc/fccharset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcCharSet *
-@FUNC@ FcCharSetCreate
-@TYPE1@ void
-@PURPOSE@ Create an empty character set
-@DESC@
-<function>FcCharSetCreate</function> allocates and initializes a new empty
-character set object.
-@@
-
-@RET@ void
-@FUNC@ FcCharSetDestroy
-@TYPE1@ FcCharSet * @ARG1@ fcs
-@PURPOSE@ Destroy a character set
-@DESC@
-<function>FcCharSetDestroy</function> decrements the reference count
-<parameter>fcs</parameter>. If the reference count becomes zero, all
-memory referenced is freed.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetAddChar
-@TYPE1@ FcCharSet * @ARG1@ fcs
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Add a character to a charset
-@DESC@
-<function>FcCharSetAddChar</function> adds a single unicode char to the set,
-returning FcFalse on failure, either as a result of a constant set or from
-running out of memory.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetCopy
-@TYPE1@ FcCharSet * @ARG1@ src
-@PURPOSE@ Copy a charset
-@DESC@
-Makes a copy of <parameter>src</parameter>; note that this may not actually do anything more
-than increment the reference count on <parameter>src</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetEqual
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Compare two charsets
-@DESC@
-Returns whether <parameter>a</parameter> and <parameter>b</parameter>
-contain the same set of unicode chars.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetIntersect
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Intersect charsets
-@DESC@
-Returns a set including only those chars found in both
-<parameter>a</parameter> and <parameter>b</parameter>.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetUnion
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Add charsets
-@DESC@
-Returns a set including only those chars found in either <parameter>a</parameter> or <parameter>b</parameter>.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetSubtract
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Subtract charsets
-@DESC@
-Returns a set including only those chars found in <parameter>a</parameter> but not <parameter>b</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetMerge
-@TYPE1@ FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@TYPE3@ FcBool * @ARG3@ changed
-@PURPOSE@ Merge charsets
-@DESC@
-Adds all chars in <parameter>b</parameter> to <parameter>a</parameter>.
-In other words, this is an in-place version of FcCharSetUnion.
-If <parameter>changed</parameter> is not NULL, then it returns whether any new
-chars from <parameter>b</parameter> were added to <parameter>a</parameter>.
-Returns FcFalse on failure, either when <parameter>a</parameter> is a constant
-set or from running out of memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetHasChar
-@TYPE1@ const FcCharSet * @ARG1@ fcs
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Check a charset for a char
-@DESC@
-Returns whether <parameter>fcs</parameter> contains the char <parameter>ucs4</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@PURPOSE@ Count entries in a charset
-@DESC@
-Returns the total number of unicode chars in <parameter>a</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetIntersectCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Intersect and count charsets
-@DESC@
-Returns the number of chars that are in both <parameter>a</parameter> and <parameter>b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetSubtractCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Subtract and count charsets
-@DESC@
-Returns the number of chars that are in <parameter>a</parameter> but not in <parameter>b</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetIsSubset
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Test for charset inclusion
-@DESC@
-Returns whether <parameter>a</parameter> is a subset of <parameter>b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetFirstPage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
-@TYPE3@ FcChar32 * @ARG3@ next
-@PURPOSE@ Start enumerating charset contents
-@DESC@
-Builds an array of bits marking the first page of Unicode coverage of
-<parameter>a</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in the
-font.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetNextPage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
-@TYPE3@ FcChar32 * @ARG3@ next
-@PURPOSE@ Continue enumerating charset contents
-@DESC@
-Builds an array of bits marking the Unicode coverage of <parameter>a</parameter> for page
-<parameter>*next</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in
-the font.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetCoverage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32 @ARG2@ page
-@TYPE3@ FcChar32[8] @ARG3@ result
-@PURPOSE@ DEPRECATED return coverage for a Unicode page
-@DESC@
-DEPRECATED
-This function returns a bitmask in <parameter>result</parameter> which
-indicates which code points in
-<parameter>page</parameter> are included in <parameter>a</parameter>.
-<function>FcCharSetCoverage</function> returns the next page in the charset which has any
-coverage.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetNew
-@TYPE1@ void
-@PURPOSE@ DEPRECATED alias for FcCharSetCreate
-@DESC@
-<function>FcCharSetNew</function> is a DEPRECATED alias for FcCharSetCreate.
-@@
-
+/*
+ * fontconfig/doc/fccharset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcCharSet *
+@FUNC@ FcCharSetCreate
+@TYPE1@ void
+@PURPOSE@ Create an empty character set
+@DESC@
+<function>FcCharSetCreate</function> allocates and initializes a new empty
+character set object.
+@@
+
+@RET@ void
+@FUNC@ FcCharSetDestroy
+@TYPE1@ FcCharSet * @ARG1@ fcs
+@PURPOSE@ Destroy a character set
+@DESC@
+<function>FcCharSetDestroy</function> decrements the reference count
+<parameter>fcs</parameter>. If the reference count becomes zero, all
+memory referenced is freed.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetAddChar
+@TYPE1@ FcCharSet * @ARG1@ fcs
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Add a character to a charset
+@DESC@
+<function>FcCharSetAddChar</function> adds a single Unicode char to the set,
+returning FcFalse on failure, either as a result of a constant set or from
+running out of memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetDelChar
+@TYPE1@ FcCharSet * @ARG1@ fcs
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Add a character to a charset
+@DESC@
+<function>FcCharSetDelChar</function> deletes a single Unicode char from the set,
+returning FcFalse on failure, either as a result of a constant set or from
+running out of memory.
+@@
+
+@RET@ FcCharSet *
+@FUNC@ FcCharSetCopy
+@TYPE1@ FcCharSet * @ARG1@ src
+@PURPOSE@ Copy a charset
+@DESC@
+Makes a copy of <parameter>src</parameter>; note that this may not actually do anything more
+than increment the reference count on <parameter>src</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetEqual
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Compare two charsets
+@DESC@
+Returns whether <parameter>a</parameter> and <parameter>b</parameter>
+contain the same set of Unicode chars.
+@@
+
+@RET@ FcCharSet *
+@FUNC@ FcCharSetIntersect
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Intersect charsets
+@DESC@
+Returns a set including only those chars found in both
+<parameter>a</parameter> and <parameter>b</parameter>.
+@@
+
+@RET@ FcCharSet *
+@FUNC@ FcCharSetUnion
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Add charsets
+@DESC@
+Returns a set including only those chars found in either <parameter>a</parameter> or <parameter>b</parameter>.
+@@
+
+@RET@ FcCharSet *
+@FUNC@ FcCharSetSubtract
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Subtract charsets
+@DESC@
+Returns a set including only those chars found in <parameter>a</parameter> but not <parameter>b</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetMerge
+@TYPE1@ FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@TYPE3@ FcBool * @ARG3@ changed
+@PURPOSE@ Merge charsets
+@DESC@
+Adds all chars in <parameter>b</parameter> to <parameter>a</parameter>.
+In other words, this is an in-place version of FcCharSetUnion.
+If <parameter>changed</parameter> is not NULL, then it returns whether any new
+chars from <parameter>b</parameter> were added to <parameter>a</parameter>.
+Returns FcFalse on failure, either when <parameter>a</parameter> is a constant
+set or from running out of memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetHasChar
+@TYPE1@ const FcCharSet * @ARG1@ fcs
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Check a charset for a char
+@DESC@
+Returns whether <parameter>fcs</parameter> contains the char <parameter>ucs4</parameter>.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetCount
+@TYPE1@ const FcCharSet * @ARG1@ a
+@PURPOSE@ Count entries in a charset
+@DESC@
+Returns the total number of Unicode chars in <parameter>a</parameter>.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetIntersectCount
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Intersect and count charsets
+@DESC@
+Returns the number of chars that are in both <parameter>a</parameter> and <parameter>b</parameter>.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetSubtractCount
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Subtract and count charsets
+@DESC@
+Returns the number of chars that are in <parameter>a</parameter> but not in <parameter>b</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcCharSetIsSubset
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ const FcCharSet * @ARG2@ b
+@PURPOSE@ Test for charset inclusion
+@DESC@
+Returns whether <parameter>a</parameter> is a subset of <parameter>b</parameter>.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetFirstPage
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
+@TYPE3@ FcChar32 * @ARG3@ next
+@PURPOSE@ Start enumerating charset contents
+@DESC@
+Builds an array of bits marking the first page of Unicode coverage of
+<parameter>a</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in the
+font.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetNextPage
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
+@TYPE3@ FcChar32 * @ARG3@ next
+@PURPOSE@ Continue enumerating charset contents
+@DESC@
+Builds an array of bits marking the Unicode coverage of <parameter>a</parameter> for page
+<parameter>*next</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in
+the font.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcCharSetCoverage
+@TYPE1@ const FcCharSet * @ARG1@ a
+@TYPE2@ FcChar32 @ARG2@ page
+@TYPE3@ FcChar32[8] @ARG3@ result
+@PURPOSE@ DEPRECATED return coverage for a Unicode page
+@DESC@
+DEPRECATED
+This function returns a bitmask in <parameter>result</parameter> which
+indicates which code points in
+<parameter>page</parameter> are included in <parameter>a</parameter>.
+<function>FcCharSetCoverage</function> returns the next page in the charset which has any
+coverage.
+@@
+
+@RET@ FcCharSet *
+@FUNC@ FcCharSetNew
+@TYPE1@ void
+@PURPOSE@ DEPRECATED alias for FcCharSetCreate
+@DESC@
+<function>FcCharSetNew</function> is a DEPRECATED alias for FcCharSetCreate.
+@@
+
diff --git a/fontconfig/doc/fcconfig.fncs b/fontconfig/doc/fcconfig.fncs
index 8bb953b34..6a8c8183d 100644
--- a/fontconfig/doc/fcconfig.fncs
+++ b/fontconfig/doc/fcconfig.fncs
@@ -1,373 +1,373 @@
-/*
- * fontconfig/doc/fcconfig.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcConfig *
-@FUNC@ FcConfigCreate
-@TYPE1@ void
-@PURPOSE@ Create a configuration
-@DESC@
-Creates an empty configuration.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcConfigReference
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Increment config reference count
-@DESC@
-Add another reference to <parameter>config</parameter>. Configs are freed only
-when the reference count reaches zero.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-In that case this function will be similar to FcConfigGetCurrent() except that
-it increments the reference count before returning and the user is responsible
-for destroying the configuration when not needed anymore.
-@@
-
-@RET@ void
-@FUNC@ FcConfigDestroy
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Destroy a configuration
-@DESC@
-Decrements the config reference count. If all references are gone, destroys
-the configuration and any data associated with it.
-Note that calling this function with the return from FcConfigGetCurrent will
-cause a new configuration to be created for use as current configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSetCurrent
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Set configuration as default
-@DESC@
-Sets the current default configuration to <parameter>config</parameter>. Implicitly calls
-FcConfigBuildFonts if necessary, returning FcFalse if that call fails.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcConfigGetCurrent
-@TYPE1@ void
-@PURPOSE@ Return current configuration
-@DESC@
-Returns the current default configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigUptoDate
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Check timestamps on config files
-@DESC@
-Checks all of the files related to <parameter>config</parameter> and returns
-whether any of them has been modified since the configuration was created.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigHome
-@TYPE1@ void
-@PURPOSE@ return the current home directory.
-@DESC@
-Return the current user's home directory, if it is available, and if using it
-is enabled, and NULL otherwise.
-See also <function>FcConfigEnableHome</function>).
-@@
-
-@RET@ FcBol
-@FUNC@ FcConfigEnableHome
-@TYPE1@ FcBool% @ARG1@ enable
-@PURPOSE@ controls use of the home directory.
-@DESC@
-If <parameter>enable</parameter> is FcTrue, then Fontconfig will use various
-files which are specified relative to the user's home directory (using the ~
-notation in the configuration). When <parameter>enable</parameter> is
-FcFalse, then all use of the home directory in these contexts will be
-disabled. The previous setting of the value is returned.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigBuildFonts
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Build font database
-@DESC@
-Builds the set of available fonts for the given configuration. Note that
-any changes to the configuration after this call have indeterminate effects.
-Returns FcFalse if this operation runs out of memory.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetConfigDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config directories
-@DESC@
-Returns the list of font directories specified in the configuration files
-for <parameter>config</parameter>. Does not include any subdirectories.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetFontDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get font directories
-@DESC@
-Returns the list of font directories in <parameter>config</parameter>. This includes the
-configured font directories along with any directories below those in the
-filesystem.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetConfigFiles
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config files
-@DESC@
-Returns the list of known configuration files used to generate <parameter>config</parameter>.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigGetCache
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ DEPRECATED used to return per-user cache filename
-@DESC@
-With fontconfig no longer using per-user cache files, this function now
-simply returns NULL to indicate that no per-user file exists.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetCacheDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ return the list of directories searched for cache files
-@DESC@
-<function>FcConfigGetCacheDirs</function> returns a string list containing
-all of the directories that fontconfig will search when attempting to load a
-cache file for a font directory.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcConfigGetFonts
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcSetName% @ARG2@ set
-@PURPOSE@ Get config font set
-@DESC@
-Returns one of the two sets of fonts from the configuration as specified
-by <parameter>set</parameter>. This font set is owned by the library and must
-not be modified or freed.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBlanks *
-@FUNC@ FcConfigGetBlanks
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config blanks
-@DESC@
-Returns the FcBlanks object associated with the given configuration, if no
-blanks were present in the configuration, this function will return 0.
-The returned FcBlanks object if not NULL, is valid as long as the owning
-FcConfig is alive.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ int
-@FUNC@ FcConfigGetRescanInterval
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config rescan interval
-@DESC@
-Returns the interval between automatic checks of the configuration (in
-seconds) specified in <parameter>config</parameter>. The configuration is checked during
-a call to FcFontList when this interval has passed since the last check.
-An interval setting of zero disables automatic checks.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSetRescanInterval
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ int% @ARG2@ rescanInterval
-@PURPOSE@ Set config rescan interval
-@DESC@
-Sets the rescan interval. Returns FcFalse if the interval cannot be set (due
-to allocation failure). Otherwise returns FcTrue.
-An interval setting of zero disables automatic checks.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigAppFontAddFile
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ file
-@PURPOSE@ Add font file to font database
-@DESC@
-Adds an application-specific font to the configuration. Returns FcFalse
-if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigAppFontAddDir
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ dir
-@PURPOSE@ Add fonts from directory to font database
-@DESC@
-Scans the specified directory for fonts, adding each one found to the
-application-specific set of fonts. Returns FcFalse
-if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ void
-@FUNC@ FcConfigAppFontClear
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Remove all app fonts from font database
-@DESC@
-Clears the set of application-specific fonts.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSubstituteWithPat
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcPattern * @ARG3@ p_pat
-@TYPE4@ FcMatchKind% @ARG4@ kind
-@PURPOSE@ Execute substitutions
-@DESC@
-Performs the sequence of pattern modification operations, if <parameter>kind</parameter> is
-FcMatchPattern, then those tagged as pattern operations are applied, else
-if <parameter>kind</parameter> is FcMatchFont, those tagged as font operations are applied and
-p_pat is used for &lt;test&gt; elements with target=pattern. Returns FcFalse
-if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSubstitute
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcMatchKind% @ARG3@ kind
-@PURPOSE@ Execute substitutions
-@DESC@
-Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse
-if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontMatch
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcResult * @ARG3@ result
-@PURPOSE@ Return best font
-@DESC@
-Finds the font in <parameter>sets</parameter> most closely matching
-<parameter>pattern</parameter> and returns the result of
-<function>FcFontRenderPrepare</function> for that font and the provided
-pattern. This function should be called only after
-<function>FcConfigSubstitute</function> and
-<function>FcDefaultSubstitute</function> have been called for
-<parameter>p</parameter>; otherwise the results will not be correct.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontSort
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcBool% @ARG3@ trim
-@TYPE4@ FcCharSet ** @ARG4@ csp
-@TYPE5@ FcResult * @ARG5@ result
-@PURPOSE@ Return list of matching fonts
-@DESC@
-Returns the list of fonts sorted by closeness to <parameter>p</parameter>. If <parameter>trim</parameter> is FcTrue,
-elements in the list which don't include Unicode coverage not provided by
-earlier elements in the list are elided. The union of Unicode coverage of
-all of the fonts is returned in <parameter>csp</parameter>, if <parameter>csp</parameter> is not NULL. This function
-should be called only after FcConfigSubstitute and FcDefaultSubstitute have
-been called for <parameter>p</parameter>; otherwise the results will not be correct.
- </para><para>
-The returned FcFontSet references FcPattern structures which may be shared
-by the return value from multiple FcFontSort calls, applications must not
-modify these patterns. Instead, they should be passed, along with <parameter>p</parameter> to
-<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
- </para><para>
-The FcFontSet returned by FcFontSort is destroyed by caling FcFontSetDestroy.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontRenderPrepare
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ pat
-@TYPE3@ FcPattern * @ARG3@ font
-@PURPOSE@ Prepare pattern for loading font file
-@DESC@
-Creates a new pattern consisting of elements of <parameter>font</parameter> not appearing
-in <parameter>pat</parameter>, elements of <parameter>pat</parameter> not appearing in <parameter>font</parameter> and the best matching
-value from <parameter>pat</parameter> for elements appearing in both. The result is passed to
-FcConfigSubstituteWithPat with <parameter>kind</parameter> FcMatchFont and then returned.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontList
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcObjectSet * @ARG3@ os
-@PURPOSE@ List fonts
-@DESC@
-Selects fonts matching <parameter>p</parameter>, creates patterns from those fonts containing
-only the objects in <parameter>os</parameter> and returns the set of unique such patterns.
-If <parameter>config</parameter> is NULL, the default configuration is checked
-to be up to date, and used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigFilename
-@TYPE1@ const FcChar8 * @ARG1@ name
-@PURPOSE@ Find a config file
-@DESC@
-Given the specified external entity name, return the associated filename.
-This provides applications a way to convert various configuration file
-references into filename form.
- </para><para>
-A null or empty <parameter>name</parameter> indicates that the default configuration file should
-be used; which file this references can be overridden with the
-FC_CONFIG_FILE environment variable. Next, if the name starts with <parameter>~</parameter>, it
-refers to a file in the current users home directory. Otherwise if the name
-doesn't start with '/', it refers to a file in the default configuration
-directory; the built-in default directory can be overridden with the
-FC_CONFIG_DIR environment variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigParseAndLoad
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ file
-@TYPE3@ FcBool% @ARG3@ complain
-@PURPOSE@ load a configuration file
-@DESC@
-Walks the configuration in 'file' and constructs the internal representation
-in 'config'. Any include files referenced from within 'file' will be loaded
-and parsed. If 'complain' is FcFalse, no warning will be displayed if
-'file' does not exist. Error and warning messages will be output to stderr.
-Returns FcFalse if some error occurred while loading the file, either a
-parse error, semantic error or allocation failure. Otherwise returns FcTrue.
-@@
+/*
+ * fontconfig/doc/fcconfig.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcConfig *
+@FUNC@ FcConfigCreate
+@TYPE1@ void
+@PURPOSE@ Create a configuration
+@DESC@
+Creates an empty configuration.
+@@
+
+@RET@ FcConfig *
+@FUNC@ FcConfigReference
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Increment config reference count
+@DESC@
+Add another reference to <parameter>config</parameter>. Configs are freed only
+when the reference count reaches zero.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+In that case this function will be similar to FcConfigGetCurrent() except that
+it increments the reference count before returning and the user is responsible
+for destroying the configuration when not needed anymore.
+@@
+
+@RET@ void
+@FUNC@ FcConfigDestroy
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Destroy a configuration
+@DESC@
+Decrements the config reference count. If all references are gone, destroys
+the configuration and any data associated with it.
+Note that calling this function with the return from FcConfigGetCurrent will
+cause a new configuration to be created for use as current configuration.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigSetCurrent
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Set configuration as default
+@DESC@
+Sets the current default configuration to <parameter>config</parameter>. Implicitly calls
+FcConfigBuildFonts if necessary, returning FcFalse if that call fails.
+@@
+
+@RET@ FcConfig *
+@FUNC@ FcConfigGetCurrent
+@TYPE1@ void
+@PURPOSE@ Return current configuration
+@DESC@
+Returns the current default configuration.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigUptoDate
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Check timestamps on config files
+@DESC@
+Checks all of the files related to <parameter>config</parameter> and returns
+whether any of them has been modified since the configuration was created.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcConfigHome
+@TYPE1@ void
+@PURPOSE@ return the current home directory.
+@DESC@
+Return the current user's home directory, if it is available, and if using it
+is enabled, and NULL otherwise.
+See also <function>FcConfigEnableHome</function>).
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigEnableHome
+@TYPE1@ FcBool% @ARG1@ enable
+@PURPOSE@ controls use of the home directory.
+@DESC@
+If <parameter>enable</parameter> is FcTrue, then Fontconfig will use various
+files which are specified relative to the user's home directory (using the ~
+notation in the configuration). When <parameter>enable</parameter> is
+FcFalse, then all use of the home directory in these contexts will be
+disabled. The previous setting of the value is returned.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigBuildFonts
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Build font database
+@DESC@
+Builds the set of available fonts for the given configuration. Note that
+any changes to the configuration after this call have indeterminate effects.
+Returns FcFalse if this operation runs out of memory.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcStrList *
+@FUNC@ FcConfigGetConfigDirs
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Get config directories
+@DESC@
+Returns the list of font directories specified in the configuration files
+for <parameter>config</parameter>. Does not include any subdirectories.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcStrList *
+@FUNC@ FcConfigGetFontDirs
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Get font directories
+@DESC@
+Returns the list of font directories in <parameter>config</parameter>. This includes the
+configured font directories along with any directories below those in the
+filesystem.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcStrList *
+@FUNC@ FcConfigGetConfigFiles
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Get config files
+@DESC@
+Returns the list of known configuration files used to generate <parameter>config</parameter>.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcConfigGetCache
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ DEPRECATED used to return per-user cache filename
+@DESC@
+With fontconfig no longer using per-user cache files, this function now
+simply returns NULL to indicate that no per-user file exists.
+@@
+
+@RET@ FcStrList *
+@FUNC@ FcConfigGetCacheDirs
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ return the list of directories searched for cache files
+@DESC@
+<function>FcConfigGetCacheDirs</function> returns a string list containing
+all of the directories that fontconfig will search when attempting to load a
+cache file for a font directory.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcConfigGetFonts
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcSetName% @ARG2@ set
+@PURPOSE@ Get config font set
+@DESC@
+Returns one of the two sets of fonts from the configuration as specified
+by <parameter>set</parameter>. This font set is owned by the library and must
+not be modified or freed.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBlanks *
+@FUNC@ FcConfigGetBlanks
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Get config blanks
+@DESC@
+Returns the FcBlanks object associated with the given configuration, if no
+blanks were present in the configuration, this function will return 0.
+The returned FcBlanks object if not NULL, is valid as long as the owning
+FcConfig is alive.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ int
+@FUNC@ FcConfigGetRescanInterval
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Get config rescan interval
+@DESC@
+Returns the interval between automatic checks of the configuration (in
+seconds) specified in <parameter>config</parameter>. The configuration is checked during
+a call to FcFontList when this interval has passed since the last check.
+An interval setting of zero disables automatic checks.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigSetRescanInterval
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ int% @ARG2@ rescanInterval
+@PURPOSE@ Set config rescan interval
+@DESC@
+Sets the rescan interval. Returns FcFalse if the interval cannot be set (due
+to allocation failure). Otherwise returns FcTrue.
+An interval setting of zero disables automatic checks.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigAppFontAddFile
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ const FcChar8 * @ARG2@ file
+@PURPOSE@ Add font file to font database
+@DESC@
+Adds an application-specific font to the configuration. Returns FcFalse
+if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigAppFontAddDir
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ const FcChar8 * @ARG2@ dir
+@PURPOSE@ Add fonts from directory to font database
+@DESC@
+Scans the specified directory for fonts, adding each one found to the
+application-specific set of fonts. Returns FcFalse
+if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ void
+@FUNC@ FcConfigAppFontClear
+@TYPE1@ FcConfig * @ARG1@ config
+@PURPOSE@ Remove all app fonts from font database
+@DESC@
+Clears the set of application-specific fonts.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigSubstituteWithPat
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ p
+@TYPE3@ FcPattern * @ARG3@ p_pat
+@TYPE4@ FcMatchKind% @ARG4@ kind
+@PURPOSE@ Execute substitutions
+@DESC@
+Performs the sequence of pattern modification operations, if <parameter>kind</parameter> is
+FcMatchPattern, then those tagged as pattern operations are applied, else
+if <parameter>kind</parameter> is FcMatchFont, those tagged as font operations are applied and
+p_pat is used for &lt;test&gt; elements with target=pattern. Returns FcFalse
+if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigSubstitute
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ p
+@TYPE3@ FcMatchKind% @ARG3@ kind
+@PURPOSE@ Execute substitutions
+@DESC@
+Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse
+if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcFontMatch
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ p
+@TYPE3@ FcResult * @ARG3@ result
+@PURPOSE@ Return best font
+@DESC@
+Finds the font in <parameter>sets</parameter> most closely matching
+<parameter>pattern</parameter> and returns the result of
+<function>FcFontRenderPrepare</function> for that font and the provided
+pattern. This function should be called only after
+<function>FcConfigSubstitute</function> and
+<function>FcDefaultSubstitute</function> have been called for
+<parameter>p</parameter>; otherwise the results will not be correct.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcFontSort
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ p
+@TYPE3@ FcBool% @ARG3@ trim
+@TYPE4@ FcCharSet ** @ARG4@ csp
+@TYPE5@ FcResult * @ARG5@ result
+@PURPOSE@ Return list of matching fonts
+@DESC@
+Returns the list of fonts sorted by closeness to <parameter>p</parameter>. If <parameter>trim</parameter> is FcTrue,
+elements in the list which don't include Unicode coverage not provided by
+earlier elements in the list are elided. The union of Unicode coverage of
+all of the fonts is returned in <parameter>csp</parameter>, if <parameter>csp</parameter> is not NULL. This function
+should be called only after FcConfigSubstitute and FcDefaultSubstitute have
+been called for <parameter>p</parameter>; otherwise the results will not be correct.
+ </para><para>
+The returned FcFontSet references FcPattern structures which may be shared
+by the return value from multiple FcFontSort calls, applications must not
+modify these patterns. Instead, they should be passed, along with <parameter>p</parameter> to
+<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
+ </para><para>
+The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcFontRenderPrepare
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ pat
+@TYPE3@ FcPattern * @ARG3@ font
+@PURPOSE@ Prepare pattern for loading font file
+@DESC@
+Creates a new pattern consisting of elements of <parameter>font</parameter> not appearing
+in <parameter>pat</parameter>, elements of <parameter>pat</parameter> not appearing in <parameter>font</parameter> and the best matching
+value from <parameter>pat</parameter> for elements appearing in both. The result is passed to
+FcConfigSubstituteWithPat with <parameter>kind</parameter> FcMatchFont and then returned.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcFontList
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcPattern * @ARG2@ p
+@TYPE3@ FcObjectSet * @ARG3@ os
+@PURPOSE@ List fonts
+@DESC@
+Selects fonts matching <parameter>p</parameter>, creates patterns from those fonts containing
+only the objects in <parameter>os</parameter> and returns the set of unique such patterns.
+If <parameter>config</parameter> is NULL, the default configuration is checked
+to be up to date, and used.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcConfigFilename
+@TYPE1@ const FcChar8 * @ARG1@ name
+@PURPOSE@ Find a config file
+@DESC@
+Given the specified external entity name, return the associated filename.
+This provides applications a way to convert various configuration file
+references into filename form.
+ </para><para>
+A null or empty <parameter>name</parameter> indicates that the default configuration file should
+be used; which file this references can be overridden with the
+FC_CONFIG_FILE environment variable. Next, if the name starts with <parameter>~</parameter>, it
+refers to a file in the current users home directory. Otherwise if the name
+doesn't start with '/', it refers to a file in the default configuration
+directory; the built-in default directory can be overridden with the
+FC_CONFIG_DIR environment variable.
+@@
+
+@RET@ FcBool
+@FUNC@ FcConfigParseAndLoad
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ const FcChar8 * @ARG2@ file
+@TYPE3@ FcBool% @ARG3@ complain
+@PURPOSE@ load a configuration file
+@DESC@
+Walks the configuration in 'file' and constructs the internal representation
+in 'config'. Any include files referenced from within 'file' will be loaded
+and parsed. If 'complain' is FcFalse, no warning will be displayed if
+'file' does not exist. Error and warning messages will be output to stderr.
+Returns FcFalse if some error occurred while loading the file, either a
+parse error, semantic error or allocation failure. Otherwise returns FcTrue.
+@@
diff --git a/fontconfig/doc/fcconstant.fncs b/fontconfig/doc/fcconstant.fncs
index 86150f203..c65fb392c 100644
--- a/fontconfig/doc/fcconstant.fncs
+++ b/fontconfig/doc/fcconstant.fncs
@@ -1,62 +1,62 @@
-/*
- * fontconfig/doc/fcconstant.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBool
-@FUNC@ FcNameRegisterConstants
-@TYPE1@ const FcConstant * @ARG1@ consts
-@TYPE2@ int% @ARG2@ nconsts
-@PURPOSE@ Register symbolic constants
-@DESC@
-Register <parameter>nconsts</parameter> new symbolic constants. Returns
-FcFalse if the constants cannot be registered (due to allocation failure).
-Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameUnregisterConstants
-@TYPE1@ const FcConstant * @ARG1@ consts
-@TYPE2@ int% @ARG2@ nconsts
-@PURPOSE@ Unregister symbolic constants
-@DESC@
-Unregister <parameter>nconsts</parameter> symbolic constants. Returns
-FcFalse if the specified constants were not registered. Otherwise returns
-FcTrue.
-@@
-
-@RET@ const FcConstant *
-@FUNC@ FcNameGetConstant
-@TYPE1@ FcChar8 * @ARG1@ string
-@PURPOSE@ Lookup symbolic constant
-@DESC@
-Return the FcConstant structure related to symbolic constant <parameter>string</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameConstant
-@TYPE1@ FcChar8 * @ARG1@ string
-@TYPE2@ int * @ARG2@ result
-@PURPOSE@ Get the value for a symbolic constant
-@DESC@
-Returns whether a symbolic constant with name <parameter>string</parameter> is registered,
-placing the value of the constant in <parameter>result</parameter> if present.
-@@
+/*
+ * fontconfig/doc/fcconstant.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcBool
+@FUNC@ FcNameRegisterConstants
+@TYPE1@ const FcConstant * @ARG1@ consts
+@TYPE2@ int% @ARG2@ nconsts
+@PURPOSE@ Register symbolic constants
+@DESC@
+Register <parameter>nconsts</parameter> new symbolic constants. Returns
+FcFalse if the constants cannot be registered (due to allocation failure).
+Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcNameUnregisterConstants
+@TYPE1@ const FcConstant * @ARG1@ consts
+@TYPE2@ int% @ARG2@ nconsts
+@PURPOSE@ Unregister symbolic constants
+@DESC@
+Unregister <parameter>nconsts</parameter> symbolic constants. Returns
+FcFalse if the specified constants were not registered. Otherwise returns
+FcTrue.
+@@
+
+@RET@ const FcConstant *
+@FUNC@ FcNameGetConstant
+@TYPE1@ FcChar8 * @ARG1@ string
+@PURPOSE@ Lookup symbolic constant
+@DESC@
+Return the FcConstant structure related to symbolic constant <parameter>string</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcNameConstant
+@TYPE1@ FcChar8 * @ARG1@ string
+@TYPE2@ int * @ARG2@ result
+@PURPOSE@ Get the value for a symbolic constant
+@DESC@
+Returns whether a symbolic constant with name <parameter>string</parameter> is registered,
+placing the value of the constant in <parameter>result</parameter> if present.
+@@
diff --git a/fontconfig/doc/fcfile.fncs b/fontconfig/doc/fcfile.fncs
index d15ab27a3..a64c0b18b 100644
--- a/fontconfig/doc/fcfile.fncs
+++ b/fontconfig/doc/fcfile.fncs
@@ -1,88 +1,88 @@
-/*
- * fontconfig/doc/fcfile.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcBool
-@FUNC@ FcFileScan
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ FcFileCache * @ARG3@ cache
-@TYPE4@ FcBlanks * @ARG4@ blanks
-@TYPE5@ const FcChar8 * @ARG5@ file
-@TYPE6@ FcBool% @ARG6@ force
-@PURPOSE@ scan a font file
-@DESC@
-Scans a single file and adds all fonts found to <parameter>set</parameter>.
-If <parameter>force</parameter> is FcTrue, then the file is scanned even if
-associated information is found in <parameter>cache</parameter>. If
-<parameter>file</parameter> is a directory, it is added to
-<parameter>dirs</parameter>. Whether fonts are found depends on fontconfig
-policy as well as the current configuration. Internally, fontconfig will
-ignore BDF and PCF fonts which are not in Unicode (or the effectively
-equivalent ISO Latin-1) encoding as those are not usable by Unicode-based
-applications. The configuration can ignore fonts based on filename or
-contents of the font file itself. Returns FcFalse if any of the fonts cannot be
-added (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcFileIsDir
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ check whether a file is a directory
-@DESC@
-Returns FcTrue if <parameter>file</parameter> is a directory, otherwise
-returns FcFalse.
-@@
-
-@RET@ FcBool
-@FUNC@ FcDirScan
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ FcFileCache * @ARG3@ cache
-@TYPE4@ FcBlanks * @ARG4@ blanks
-@TYPE5@ const FcChar8 * @ARG5@ dir
-@TYPE6@ FcBool% @ARG6@ force
-@PURPOSE@ scan a font directory without caching it
-@DESC@
-If <parameter>cache</parameter> is not zero or if <parameter>force</parameter>
-is FcFalse, this function currently returns FcFalse. Otherwise, it scans an
-entire directory and adds all fonts found to <parameter>set</parameter>.
-Any subdirectories found are added to <parameter>dirs</parameter>. Calling
-this function does not create any cache files. Use FcDirCacheRead() if
-caching is desired.
-@@
-
-@RET@ FcBool
-@FUNC@ FcDirSave
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ const FcChar8 * @ARG3@ dir
-@PURPOSE@ DEPRECATED: formerly used to save a directory cache
-@DESC@
-This function now does nothing aside from returning FcFalse. It used to creates the
-per-directory cache file for <parameter>dir</parameter> and populates it
-with the fonts in <parameter>set</parameter> and subdirectories in
-<parameter>dirs</parameter>. All of this functionality is now automatically
-managed by FcDirCacheLoad and FcDirCacheRead.
-@@
-
+/*
+ * fontconfig/doc/fcfile.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcBool
+@FUNC@ FcFileScan
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ FcFileCache * @ARG3@ cache
+@TYPE4@ FcBlanks * @ARG4@ blanks
+@TYPE5@ const FcChar8 * @ARG5@ file
+@TYPE6@ FcBool% @ARG6@ force
+@PURPOSE@ scan a font file
+@DESC@
+Scans a single file and adds all fonts found to <parameter>set</parameter>.
+If <parameter>force</parameter> is FcTrue, then the file is scanned even if
+associated information is found in <parameter>cache</parameter>. If
+<parameter>file</parameter> is a directory, it is added to
+<parameter>dirs</parameter>. Whether fonts are found depends on fontconfig
+policy as well as the current configuration. Internally, fontconfig will
+ignore BDF and PCF fonts which are not in Unicode (or the effectively
+equivalent ISO Latin-1) encoding as those are not usable by Unicode-based
+applications. The configuration can ignore fonts based on filename or
+contents of the font file itself. Returns FcFalse if any of the fonts cannot be
+added (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcFileIsDir
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ check whether a file is a directory
+@DESC@
+Returns FcTrue if <parameter>file</parameter> is a directory, otherwise
+returns FcFalse.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirScan
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ FcFileCache * @ARG3@ cache
+@TYPE4@ FcBlanks * @ARG4@ blanks
+@TYPE5@ const FcChar8 * @ARG5@ dir
+@TYPE6@ FcBool% @ARG6@ force
+@PURPOSE@ scan a font directory without caching it
+@DESC@
+If <parameter>cache</parameter> is not zero or if <parameter>force</parameter>
+is FcFalse, this function currently returns FcFalse. Otherwise, it scans an
+entire directory and adds all fonts found to <parameter>set</parameter>.
+Any subdirectories found are added to <parameter>dirs</parameter>. Calling
+this function does not create any cache files. Use FcDirCacheRead() if
+caching is desired.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirSave
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ const FcChar8 * @ARG3@ dir
+@PURPOSE@ DEPRECATED: formerly used to save a directory cache
+@DESC@
+This function now does nothing aside from returning FcFalse. It used to creates the
+per-directory cache file for <parameter>dir</parameter> and populates it
+with the fonts in <parameter>set</parameter> and subdirectories in
+<parameter>dirs</parameter>. All of this functionality is now automatically
+managed by FcDirCacheLoad and FcDirCacheRead.
+@@
+
diff --git a/fontconfig/doc/fcfontset.fncs b/fontconfig/doc/fcfontset.fncs
index 57005fdd0..adf9a9688 100644
--- a/fontconfig/doc/fcfontset.fncs
+++ b/fontconfig/doc/fcfontset.fncs
@@ -1,140 +1,140 @@
-/*
- * fontconfig/doc/fcfontset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcFontSet *
-@FUNC@ FcFontSetCreate
-@TYPE1@ void
-@PURPOSE@ Create a font set
-@DESC@
-Creates an empty font set.
-@@
-
-@RET@ void
-@FUNC@ FcFontSetDestroy
-@TYPE1@ FcFontSet * @ARG1@ s
-@PURPOSE@ Destroy a font set
-@DESC@
-Destroys a font set. Note that this destroys any referenced patterns as
-well.
-@@
-
-@RET@ FcBool
-@FUNC@ FcFontSetAdd
-@TYPE1@ FcFontSet * @ARG1@ s
-@TYPE2@ FcPattern * @ARG2@ font
-@PURPOSE@ Add to a font set
-@DESC@
-Adds a pattern to a font set. Note that the pattern is not copied before
-being inserted into the set. Returns FcFalse if the pattern cannot be
-inserted into the set (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontSetList
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcObjectSet * @ARG5@ object_set
-@PURPOSE@ List fonts from a set of font sets
-@DESC@
-Selects fonts matching <parameter>pattern</parameter> from
-<parameter>sets</parameter>, creates patterns from those
-fonts containing only the objects in <parameter>object_set</parameter> and returns
-the set of unique such patterns.
-If <parameter>config</parameter> is NULL, the default configuration is checked
-to be up to date, and used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontSetMatch
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcResult * @ARG5@ result
-@PURPOSE@ Return the best font from a set of font sets
-@DESC@
-Finds the font in <parameter>sets</parameter> most closely matching
-<parameter>pattern</parameter> and returns the result of
-<function>FcFontRenderPrepare</function> for that font and the provided
-pattern. This function should be called only after
-<function>FcConfigSubstitute</function> and
-<function>FcDefaultSubstitute</function> have been called for
-<parameter>pattern</parameter>; otherwise the results will not be correct.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-Returns NULL if an error occurs during this process.
-@@
-
-@RET@ void
-@FUNC@ FcFontSetPrint
-@TYPE1@ FcFontSet * @ARG1@ set
-@PURPOSE@ Print a set of patterns to stdout
-@DESC@
-This function is useful for diagnosing font related issues, printing the
-complete contents of every pattern in <parameter>set</parameter>. The format
-of the output is designed to be of help to users and developers, and may
-change at any time.
-@@
-
-@RET@
-@FUNC@ FcFontSetSort
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcBool% @ARG5@ trim
-@TYPE6@ FcCharSet ** @ARG6@ csp
-@TYPE7@ FcResult * @ARG7@ result
-@PURPOSE@ Add to a font set
-@DESC@
-Returns the list of fonts from <parameter>sets</parameter>
-sorted by closeness to <parameter>pattern</parameter>.
-If <parameter>trim</parameter> is FcTrue,
-elements in the list which don't include Unicode coverage not provided by
-earlier elements in the list are elided. The union of Unicode coverage of
-all of the fonts is returned in <parameter>csp</parameter>,
-if <parameter>csp</parameter> is not NULL. This function
-should be called only after FcConfigSubstitute and FcDefaultSubstitute have
-been called for <parameter>p</parameter>;
-otherwise the results will not be correct.
- </para><para>
-The returned FcFontSet references FcPattern structures which may be shared
-by the return value from multiple FcFontSort calls, applications cannot
-modify these patterns. Instead, they should be passed, along with
-<parameter>pattern</parameter> to
-<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
- </para><para>
-The FcFontSet returned by FcFontSetSort is destroyed by caling FcFontSetDestroy.
-@@
-
-@RET@
-@FUNC@ FcFontSetSortDestroy
-@TYPE1@ FcFontSet * @ARG1@ set
-@PURPOSE@ DEPRECATED destroy a font set
-@DESC@
-This function is DEPRECATED. <function>FcFontSetSortDestroy</function>
-destroys <parameter>set</parameter> by calling
-<function>FcFontSetDestroy</function>. Applications should use
-<function>FcFontSetDestroy</function> directly instead.
-@@
+/*
+ * fontconfig/doc/fcfontset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcFontSet *
+@FUNC@ FcFontSetCreate
+@TYPE1@ void
+@PURPOSE@ Create a font set
+@DESC@
+Creates an empty font set.
+@@
+
+@RET@ void
+@FUNC@ FcFontSetDestroy
+@TYPE1@ FcFontSet * @ARG1@ s
+@PURPOSE@ Destroy a font set
+@DESC@
+Destroys a font set. Note that this destroys any referenced patterns as
+well.
+@@
+
+@RET@ FcBool
+@FUNC@ FcFontSetAdd
+@TYPE1@ FcFontSet * @ARG1@ s
+@TYPE2@ FcPattern * @ARG2@ font
+@PURPOSE@ Add to a font set
+@DESC@
+Adds a pattern to a font set. Note that the pattern is not copied before
+being inserted into the set. Returns FcFalse if the pattern cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcFontSetList
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcObjectSet * @ARG5@ object_set
+@PURPOSE@ List fonts from a set of font sets
+@DESC@
+Selects fonts matching <parameter>pattern</parameter> from
+<parameter>sets</parameter>, creates patterns from those
+fonts containing only the objects in <parameter>object_set</parameter> and returns
+the set of unique such patterns.
+If <parameter>config</parameter> is NULL, the default configuration is checked
+to be up to date, and used.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcFontSetMatch
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcResult * @ARG5@ result
+@PURPOSE@ Return the best font from a set of font sets
+@DESC@
+Finds the font in <parameter>sets</parameter> most closely matching
+<parameter>pattern</parameter> and returns the result of
+<function>FcFontRenderPrepare</function> for that font and the provided
+pattern. This function should be called only after
+<function>FcConfigSubstitute</function> and
+<function>FcDefaultSubstitute</function> have been called for
+<parameter>pattern</parameter>; otherwise the results will not be correct.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+Returns NULL if an error occurs during this process.
+@@
+
+@RET@ void
+@FUNC@ FcFontSetPrint
+@TYPE1@ FcFontSet * @ARG1@ set
+@PURPOSE@ Print a set of patterns to stdout
+@DESC@
+This function is useful for diagnosing font related issues, printing the
+complete contents of every pattern in <parameter>set</parameter>. The format
+of the output is designed to be of help to users and developers, and may
+change at any time.
+@@
+
+@RET@
+@FUNC@ FcFontSetSort
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcBool% @ARG5@ trim
+@TYPE6@ FcCharSet ** @ARG6@ csp
+@TYPE7@ FcResult * @ARG7@ result
+@PURPOSE@ Add to a font set
+@DESC@
+Returns the list of fonts from <parameter>sets</parameter>
+sorted by closeness to <parameter>pattern</parameter>.
+If <parameter>trim</parameter> is FcTrue,
+elements in the list which don't include Unicode coverage not provided by
+earlier elements in the list are elided. The union of Unicode coverage of
+all of the fonts is returned in <parameter>csp</parameter>,
+if <parameter>csp</parameter> is not NULL. This function
+should be called only after FcConfigSubstitute and FcDefaultSubstitute have
+been called for <parameter>p</parameter>;
+otherwise the results will not be correct.
+ </para><para>
+The returned FcFontSet references FcPattern structures which may be shared
+by the return value from multiple FcFontSort calls, applications cannot
+modify these patterns. Instead, they should be passed, along with
+<parameter>pattern</parameter> to
+<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
+ </para><para>
+The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy.
+@@
+
+@RET@
+@FUNC@ FcFontSetSortDestroy
+@TYPE1@ FcFontSet * @ARG1@ set
+@PURPOSE@ DEPRECATED destroy a font set
+@DESC@
+This function is DEPRECATED. <function>FcFontSetSortDestroy</function>
+destroys <parameter>set</parameter> by calling
+<function>FcFontSetDestroy</function>. Applications should use
+<function>FcFontSetDestroy</function> directly instead.
+@@
diff --git a/fontconfig/doc/fcformat.fncs b/fontconfig/doc/fcformat.fncs
index b092449cf..fb110f2b2 100644
--- a/fontconfig/doc/fcformat.fncs
+++ b/fontconfig/doc/fcformat.fncs
@@ -1,301 +1,301 @@
-/*
- * fontconfig/doc/fcformat.fncs
- *
- * Copyright © 2008 Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcChar8 *
-@FUNC@ FcPatternFormat
-@TYPE1@ FcPattern * @ARG1@ pat
-@TYPE2@ const FcChar8 * @ARG2@ format
-@PURPOSE@ Format a pattern into a string according to a format specifier
-@DESC@
-
-Converts given pattern <parameter>pat</parameter> into text described by
-the format specifier <parameter>format</parameter>.
-The return value refers to newly allocated memory which should be freed by the
-caller using free(), or NULL if <parameter>format</parameter> is invalid.
-
-</para><para>
-
-The format is loosely modelled after printf-style format string.
-The format string is composed of zero or more directives: ordinary
-characters (not "%"), which are copied unchanged to the output stream;
-and tags which are interpreted to construct text from the pattern in a
-variety of ways (explained below).
-Special characters can be escaped
-using backslash. C-string style special characters like \n and \r are
-also supported (this is useful when the format string is not a C string
-literal).
-It is advisable to always escape curly braces that
-are meant to be copied to the output as ordinary characters.
-
-</para><para>
-
-Each tags is introduced by the character "%",
-followed by an optional minimum field width,
-followed by tag contents in curly braces ({}).
-If the minimum field width value is provided the tag
-will be expanded and the result padded to achieve the minimum width.
-If the minimum field width is positive, the padding will right-align
-the text. Negative field width will left-align.
-The rest of this section describes various supported tag contents
-and their expansion.
-
-</para><para>
-
-A <firstterm>simple</firstterm> tag
-is one where the content is an identifier. When simple
-tags are expanded, the named identifier will be looked up in
-<parameter>pattern</parameter> and the resulting list of values returned,
-joined together using comma. For example, to print the family name and style the
-pattern, use the format "%{family} %{style}\n". To extend the family column
-to forty characters use "%-40{family}%{style}\n".
-
-</para><para>
-
-Simple tags expand to list of all values for an element. To only choose
-one of the values, one can index using the syntax "%{elt[idx]}". For example,
-to get the first family name only, use "%{family[0]}".
-
-</para><para>
-
-If a simple tag ends with "=" and the element is found in the pattern, the
-name of the element followed by "=" will be output before the list of values.
-For example, "%{weight=}" may expand to the string "weight=80". Or to the empty
-string if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-If a simple tag starts with ":" and the element is found in the pattern, ":"
-will be printed first. For example, combining this with the =, the format
-"%{:weight=}" may expand to ":weight=80" or to the empty string
-if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-If a simple tag contains the string ":-", the rest of the the tag contents
-will be used as a default string. The default string is output if the element
-is not found in the pattern. For example, the format
-"%{:weight=:-123}" may expand to ":weight=80" or to the string
-":weight=123" if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-A <firstterm>count</firstterm> tag
-is one that starts with the character "#" followed by an element
-name, and expands to the number of values for the element in the pattern.
-For example, "%{#family}" expands to the number of family names
-<parameter>pattern</parameter> has set, which may be zero.
-
-</para><para>
-
-A <firstterm>sub-expression</firstterm> tag
-is one that expands a sub-expression. The tag contents
-are the sub-expression to expand placed inside another set of curly braces.
-Sub-expression tags are useful for aligning an entire sub-expression, or to
-apply converters (explained later) on an entire sub-expression.
-For example, the format "%40{{%{family} %{style}}}" expands the sub-expression
-to construct the family name followed by the style, then takes the entire
-string and pads it on the left to be at least forty characters.
-
-</para><para>
-
-A <firstterm>filter-out</firstterm> tag
-is one starting with the character "-" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The sub-expression will be expanded but with a pattern that
-has the listed elements removed from it.
-For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr"
-with <parameter>pattern</parameter> sans the size and pixelsize elements.
-
-</para><para>
-
-A <firstterm>filter-in</firstterm> tag
-is one starting with the character "+" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The sub-expression will be expanded but with a pattern that
-only has the listed elements from the surrounding pattern.
-For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr"
-with a sub-pattern consisting only the family and family lang elements of
-<parameter>pattern</parameter>.
-
-</para><para>
-
-A <firstterm>conditional</firstterm> tag
-is one starting with the character "?" followed by a
-comma-separated list of element conditions, followed by two sub-expression
-enclosed in curly braces. An element condition can be an element name,
-in which case it tests whether the element is defined in pattern, or
-the character "!" followed by an element name, in which case the test
-is negated. The conditional passes if all the element conditions pass.
-The tag expands the first sub-expression if the conditional passes, and
-expands the second sub-expression otherwise.
-For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand
-to "pass" if <parameter>pattern</parameter> has size and dpi elements but
-no pixelsize element, and to "fail" otherwise.
-
-</para><para>
-
-An <firstterm>enumerate</firstterm> tag
-is one starting with the string "[]" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The list of values for the named elements are walked in
-parallel and the sub-expression expanded each time with a pattern just having
-a single value for those elements, starting from the first value and
-continuing as long as any of those elements has a value.
-For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}"
-will expand the pattern "%{family} (%{familylang})\n" with a pattern
-having only the first value of the family and familylang elemtns, then expands
-it with the second values, then the third, etc.
-
-</para><para>
-
-As a special case, if an enumerate tag has only one element, and that element
-has only one value in the pattern, and that value is of type FcLangSet, the
-individual languages in the language set are enumerated.
-
-</para><para>
-
-A <firstterm>builtin</firstterm> tag
-is one starting with the character "=" followed by a builtin
-name. The following builtins are defined:
-
-<variablelist>
-
-<varlistentry><term>
-unparse
-</term><listitem><para>
-Expands to the result of calling FcNameUnparse() on the pattern.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-fcmatch
-</term><listitem><para>
-Expands to the output of the default output format of the fc-match
-command on the pattern, without the final newline.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-fclist
-</term><listitem><para>
-Expands to the output of the default output format of the fc-list
-command on the pattern, without the final newline.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-pkgkit
-</term><listitem><para>
-Expands to the list of PackageKit font() tags for the pattern.
-Currently this includes tags for each family name, and each language
-from the pattern, enumerated and sanitized into a set of tags terminated
-by newline. Package management systems can use these tags to tag their
-packages accordingly.
-</para></listitem></varlistentry>
-
-</variablelist>
-
-For example, the format "%{+family,style{%{=unparse}}}\n" will expand
-to an unparsed name containing only the family and style element values
-from <parameter>pattern</parameter>.
-
-</para><para>
-
-The contents of any tag can be followed by a set of zero or more
-<firstterm>converter</firstterm>s. A converter is specified by the
-character "|" followed by the converter name and arguments. The
-following converters are defined:
-
-<variablelist>
-
-<varlistentry><term>
-basename
-</term><listitem><para>
-Replaces text with the results of calling FcStrBasename() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-dirname
-</term><listitem><para>
-Replaces text with the results of calling FcStrDirname() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-downcase
-</term><listitem><para>
-Replaces text with the results of calling FcStrDowncase() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-shescape
-</term><listitem><para>
-Escapes text for one level of shell expansion.
-(Escapes single-quotes, also encloses text in single-quotes.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-cescape
-</term><listitem><para>
-Escapes text such that it can be used as part of a C string literal.
-(Escapes backslash and double-quotes.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-xmlescape
-</term><listitem><para>
-Escapes text such that it can be used in XML and HTML.
-(Escapes less-than, greater-than, and ampersand.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-delete(<parameter>chars</parameter>)
-</term><listitem><para>
-Deletes all occurrences of each of the characters in <parameter>chars</parameter>
-from the text.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-escape(<parameter>chars</parameter>)
-</term><listitem><para>
-Escapes all occurrences of each of the characters in <parameter>chars</parameter>
-by prepending it by the first character in <parameter>chars</parameter>.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-translate(<parameter>from</parameter>,<parameter>to</parameter>)
-</term><listitem><para>
-Translates all occurrences of each of the characters in <parameter>from</parameter>
-by replacing them with their corresponding character in <parameter>to</parameter>.
-If <parameter>to</parameter> has fewer characters than
-<parameter>from</parameter>, it will be extended by repeating its last
-character.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-</variablelist>
-
-For example, the format "%{family|downcase|delete( )}\n" will expand
-to the values of the family element in <parameter>pattern</parameter>,
-lower-cased and with spaces removed.
-
-@@
+/*
+ * fontconfig/doc/fcformat.fncs
+ *
+ * Copyright © 2008 Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcChar8 *
+@FUNC@ FcPatternFormat
+@TYPE1@ FcPattern * @ARG1@ pat
+@TYPE2@ const FcChar8 * @ARG2@ format
+@PURPOSE@ Format a pattern into a string according to a format specifier
+@DESC@
+
+Converts given pattern <parameter>pat</parameter> into text described by
+the format specifier <parameter>format</parameter>.
+The return value refers to newly allocated memory which should be freed by the
+caller using free(), or NULL if <parameter>format</parameter> is invalid.
+
+</para><para>
+
+The format is loosely modeled after printf-style format string.
+The format string is composed of zero or more directives: ordinary
+characters (not "%"), which are copied unchanged to the output stream;
+and tags which are interpreted to construct text from the pattern in a
+variety of ways (explained below).
+Special characters can be escaped
+using backslash. C-string style special characters like \n and \r are
+also supported (this is useful when the format string is not a C string
+literal).
+It is advisable to always escape curly braces that
+are meant to be copied to the output as ordinary characters.
+
+</para><para>
+
+Each tag is introduced by the character "%",
+followed by an optional minimum field width,
+followed by tag contents in curly braces ({}).
+If the minimum field width value is provided the tag
+will be expanded and the result padded to achieve the minimum width.
+If the minimum field width is positive, the padding will right-align
+the text. Negative field width will left-align.
+The rest of this section describes various supported tag contents
+and their expansion.
+
+</para><para>
+
+A <firstterm>simple</firstterm> tag
+is one where the content is an identifier. When simple
+tags are expanded, the named identifier will be looked up in
+<parameter>pattern</parameter> and the resulting list of values returned,
+joined together using comma. For example, to print the family name and style of the
+pattern, use the format "%{family} %{style}\n". To extend the family column
+to forty characters use "%-40{family}%{style}\n".
+
+</para><para>
+
+Simple tags expand to list of all values for an element. To only choose
+one of the values, one can index using the syntax "%{elt[idx]}". For example,
+to get the first family name only, use "%{family[0]}".
+
+</para><para>
+
+If a simple tag ends with "=" and the element is found in the pattern, the
+name of the element followed by "=" will be output before the list of values.
+For example, "%{weight=}" may expand to the string "weight=80". Or to the empty
+string if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+If a simple tag starts with ":" and the element is found in the pattern, ":"
+will be printed first. For example, combining this with the =, the format
+"%{:weight=}" may expand to ":weight=80" or to the empty string
+if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+If a simple tag contains the string ":-", the rest of the the tag contents
+will be used as a default string. The default string is output if the element
+is not found in the pattern. For example, the format
+"%{:weight=:-123}" may expand to ":weight=80" or to the string
+":weight=123" if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+A <firstterm>count</firstterm> tag
+is one that starts with the character "#" followed by an element
+name, and expands to the number of values for the element in the pattern.
+For example, "%{#family}" expands to the number of family names
+<parameter>pattern</parameter> has set, which may be zero.
+
+</para><para>
+
+A <firstterm>sub-expression</firstterm> tag
+is one that expands a sub-expression. The tag contents
+are the sub-expression to expand placed inside another set of curly braces.
+Sub-expression tags are useful for aligning an entire sub-expression, or to
+apply converters (explained later) to the entire sub-expression output.
+For example, the format "%40{{%{family} %{style}}}" expands the sub-expression
+to construct the family name followed by the style, then takes the entire
+string and pads it on the left to be at least forty characters.
+
+</para><para>
+
+A <firstterm>filter-out</firstterm> tag
+is one starting with the character "-" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+has the listed elements removed from it.
+For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr"
+with <parameter>pattern</parameter> sans the size and pixelsize elements.
+
+</para><para>
+
+A <firstterm>filter-in</firstterm> tag
+is one starting with the character "+" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+only has the listed elements from the surrounding pattern.
+For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr"
+with a sub-pattern consisting only the family and family lang elements of
+<parameter>pattern</parameter>.
+
+</para><para>
+
+A <firstterm>conditional</firstterm> tag
+is one starting with the character "?" followed by a
+comma-separated list of element conditions, followed by two sub-expression
+enclosed in curly braces. An element condition can be an element name,
+in which case it tests whether the element is defined in pattern, or
+the character "!" followed by an element name, in which case the test
+is negated. The conditional passes if all the element conditions pass.
+The tag expands the first sub-expression if the conditional passes, and
+expands the second sub-expression otherwise.
+For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand
+to "pass" if <parameter>pattern</parameter> has size and dpi elements but
+no pixelsize element, and to "fail" otherwise.
+
+</para><para>
+
+An <firstterm>enumerate</firstterm> tag
+is one starting with the string "[]" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The list of values for the named elements are walked in
+parallel and the sub-expression expanded each time with a pattern just having
+a single value for those elements, starting from the first value and
+continuing as long as any of those elements has a value.
+For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}"
+will expand the pattern "%{family} (%{familylang})\n" with a pattern
+having only the first value of the family and familylang elements, then expands
+it with the second values, then the third, etc.
+
+</para><para>
+
+As a special case, if an enumerate tag has only one element, and that element
+has only one value in the pattern, and that value is of type FcLangSet, the
+individual languages in the language set are enumerated.
+
+</para><para>
+
+A <firstterm>builtin</firstterm> tag
+is one starting with the character "=" followed by a builtin
+name. The following builtins are defined:
+
+<variablelist>
+
+<varlistentry><term>
+unparse
+</term><listitem><para>
+Expands to the result of calling FcNameUnparse() on the pattern.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+fcmatch
+</term><listitem><para>
+Expands to the output of the default output format of the fc-match
+command on the pattern, without the final newline.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+fclist
+</term><listitem><para>
+Expands to the output of the default output format of the fc-list
+command on the pattern, without the final newline.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+pkgkit
+</term><listitem><para>
+Expands to the list of PackageKit font() tags for the pattern.
+Currently this includes tags for each family name, and each language
+from the pattern, enumerated and sanitized into a set of tags terminated
+by newline. Package management systems can use these tags to tag their
+packages accordingly.
+</para></listitem></varlistentry>
+
+</variablelist>
+
+For example, the format "%{+family,style{%{=unparse}}}\n" will expand
+to an unparsed name containing only the family and style element values
+from <parameter>pattern</parameter>.
+
+</para><para>
+
+The contents of any tag can be followed by a set of zero or more
+<firstterm>converter</firstterm>s. A converter is specified by the
+character "|" followed by the converter name and arguments. The
+following converters are defined:
+
+<variablelist>
+
+<varlistentry><term>
+basename
+</term><listitem><para>
+Replaces text with the results of calling FcStrBasename() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+dirname
+</term><listitem><para>
+Replaces text with the results of calling FcStrDirname() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+downcase
+</term><listitem><para>
+Replaces text with the results of calling FcStrDowncase() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+shescape
+</term><listitem><para>
+Escapes text for one level of shell expansion.
+(Escapes single-quotes, also encloses text in single-quotes.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+cescape
+</term><listitem><para>
+Escapes text such that it can be used as part of a C string literal.
+(Escapes backslash and double-quotes.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+xmlescape
+</term><listitem><para>
+Escapes text such that it can be used in XML and HTML.
+(Escapes less-than, greater-than, and ampersand.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+delete(<parameter>chars</parameter>)
+</term><listitem><para>
+Deletes all occurrences of each of the characters in <parameter>chars</parameter>
+from the text.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+escape(<parameter>chars</parameter>)
+</term><listitem><para>
+Escapes all occurrences of each of the characters in <parameter>chars</parameter>
+by prepending it by the first character in <parameter>chars</parameter>.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+translate(<parameter>from</parameter>,<parameter>to</parameter>)
+</term><listitem><para>
+Translates all occurrences of each of the characters in <parameter>from</parameter>
+by replacing them with their corresponding character in <parameter>to</parameter>.
+If <parameter>to</parameter> has fewer characters than
+<parameter>from</parameter>, it will be extended by repeating its last
+character.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+</variablelist>
+
+For example, the format "%{family|downcase|delete( )}\n" will expand
+to the values of the family element in <parameter>pattern</parameter>,
+lower-cased and with spaces removed.
+
+@@
diff --git a/fontconfig/doc/fcfreetype.fncs b/fontconfig/doc/fcfreetype.fncs
index 366cfaef8..acd101dc5 100644
--- a/fontconfig/doc/fcfreetype.fncs
+++ b/fontconfig/doc/fcfreetype.fncs
@@ -1,106 +1,106 @@
-/*
- * fontconfig/doc/fcfreetype.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@SYNOPSIS@
-#include &lt;fontconfig.h&gt;
-#include &lt;fcfreetype.h&gt;
-@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 &lt;fontconfig.h&gt;
-#include &lt;fcfreetype.h&gt;
-@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 &lt;fontconfig.h&gt;
-#include &lt;fcfreetype.h&gt;
-@RET@ FcCharSet *
-@FUNC@ FcFreeTypeCharSetAndSpacing
-@TYPE1@ FT_Face% @ARG1@ face
-@TYPE2@ FcBlanks * @ARG2@ blanks
-@TYPE3@ int * @ARG3@ spacing
-@PURPOSE@ compute unicode coverage and spacing type
-@DESC@
-Scans a FreeType face and returns the set of encoded Unicode chars.
-This scans
-several encoding tables to build as complete a list as possible.
-If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
-not in 'blanks' are not placed in the returned FcCharSet.
-<parameter>spacing</parameter> receives the computed spacing type of the
-font, one of FC_MONO for a font where all glyphs have the same width,
-FC_DUAL, where the font has glyphs in precisely two widths, one twice as
-wide as the other, or FC_PROPORTIONAL where the font has glyphs of many
-widths.
-@@
-
-@SYNOPSIS@
-#include &lt;fontconfig.h&gt;
-#include &lt;fcfreetype.h&gt;
-@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 &lt;fontconfig.h&gt;
-#include &lt;fcfreetype.h&gt;
-@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 &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@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 &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@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 &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@RET@ FcCharSet *
+@FUNC@ FcFreeTypeCharSetAndSpacing
+@TYPE1@ FT_Face% @ARG1@ face
+@TYPE2@ FcBlanks * @ARG2@ blanks
+@TYPE3@ int * @ARG3@ spacing
+@PURPOSE@ compute Unicode coverage and spacing type
+@DESC@
+Scans a FreeType face and returns the set of encoded Unicode chars.
+This scans
+several encoding tables to build as complete a list as possible.
+If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
+not in 'blanks' are not placed in the returned FcCharSet.
+<parameter>spacing</parameter> receives the computed spacing type of the
+font, one of FC_MONO for a font where all glyphs have the same width,
+FC_DUAL, where the font has glyphs in precisely two widths, one twice as
+wide as the other, or FC_PROPORTIONAL where the font has glyphs of many
+widths.
+@@
+
+@SYNOPSIS@
+#include &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@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 &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@RET@ FcPattern *
+@FUNC@ FcFreeTypeQueryFace
+@TYPE1@ const FT_Face% @ARG1@ face
+@TYPE2@ const FcChar8 * @ARG2@ file
+@TYPE3@ int% @ARG3@ id
+@TYPE4@ FcBlanks * @ARG4@ blanks
+@PURPOSE@ compute pattern from FT_Face
+@DESC@
+Constructs a pattern representing 'face'. 'file' and 'id' are used solely as
+data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY).
+@@
diff --git a/fontconfig/doc/fcinit.fncs b/fontconfig/doc/fcinit.fncs
index e9b7947b8..f0bb397b4 100644
--- a/fontconfig/doc/fcinit.fncs
+++ b/fontconfig/doc/fcinit.fncs
@@ -1,92 +1,92 @@
-/*
- * fontconfig/doc/fcinit.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcConfig *
-@FUNC@ FcInitLoadConfig
-@TYPE1@ void
-@PURPOSE@ load configuration
-@DESC@
-Loads the default configuration file and returns the resulting configuration.
-Does not load any font information.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcInitLoadConfigAndFonts
-@TYPE1@ void
-@PURPOSE@ load configuration and font data
-@DESC@
-Loads the default configuration file and builds information about the
-available fonts. Returns the resulting configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInit
-@TYPE1@ void
-@PURPOSE@ initialize fontconfig library
-@DESC@
-Loads the default configuration file and the fonts referenced therein and
-sets the default configuration to that result. Returns whether this
-process succeeded or not. If the default configuration has already
-been loaded, this routine does nothing and returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcFini
-@TYPE1@ void
-@PURPOSE@ finalize fonconfig library
-@DESC@
-Frees all data structures allocated by previous calls to fontconfig
-functions. Fontconfig returns to an uninitialized state, requiring a
-new call to one of the FcInit functions before any other fontconfig
-function may be called.
-@@
-
-@RET@ int
-@FUNC@ FcGetVersion
-@TYPE1@ void
-@PURPOSE@ library version number
-@DESC@
-Returns the version number of the library.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInitReinitialize
-@TYPE1@ void
-@PURPOSE@ re-initialize library
-@DESC@
-Forces the default configuration file to be reloaded and resets the default
-configuration. Returns FcFalse if the configuration cannot be reloaded (due
-to config file errors, allocation failures or other issues) and leaves the
-existing configuration unchanged. Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInitBringUptoDate
-@TYPE1@ void
-@PURPOSE@ reload configuration files if needed
-@DESC@
-Checks the rescan interval in the default configuration, checking the
-configuration if the interval has passed and reloading the configuration if
-when any changes are detected. Returns FcFalse if the configuration cannot
-be reloaded (see FcInitReinitialize). Otherwise returns FcTrue.
-@@
+/*
+ * fontconfig/doc/fcinit.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcConfig *
+@FUNC@ FcInitLoadConfig
+@TYPE1@ void
+@PURPOSE@ load configuration
+@DESC@
+Loads the default configuration file and returns the resulting configuration.
+Does not load any font information.
+@@
+
+@RET@ FcConfig *
+@FUNC@ FcInitLoadConfigAndFonts
+@TYPE1@ void
+@PURPOSE@ load configuration and font data
+@DESC@
+Loads the default configuration file and builds information about the
+available fonts. Returns the resulting configuration.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInit
+@TYPE1@ void
+@PURPOSE@ initialize fontconfig library
+@DESC@
+Loads the default configuration file and the fonts referenced therein and
+sets the default configuration to that result. Returns whether this
+process succeeded or not. If the default configuration has already
+been loaded, this routine does nothing and returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcFini
+@TYPE1@ void
+@PURPOSE@ finalize fontconfig library
+@DESC@
+Frees all data structures allocated by previous calls to fontconfig
+functions. Fontconfig returns to an uninitialized state, requiring a
+new call to one of the FcInit functions before any other fontconfig
+function may be called.
+@@
+
+@RET@ int
+@FUNC@ FcGetVersion
+@TYPE1@ void
+@PURPOSE@ library version number
+@DESC@
+Returns the version number of the library.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInitReinitialize
+@TYPE1@ void
+@PURPOSE@ re-initialize library
+@DESC@
+Forces the default configuration file to be reloaded and resets the default
+configuration. Returns FcFalse if the configuration cannot be reloaded (due
+to configuration file errors, allocation failures or other issues) and leaves the
+existing configuration unchanged. Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInitBringUptoDate
+@TYPE1@ void
+@PURPOSE@ reload configuration files if needed
+@DESC@
+Checks the rescan interval in the default configuration, checking the
+configuration if the interval has passed and reloading the configuration if
+when any changes are detected. Returns FcFalse if the configuration cannot
+be reloaded (see FcInitReinitialize). Otherwise returns FcTrue.
+@@
diff --git a/fontconfig/doc/fclangset.fncs b/fontconfig/doc/fclangset.fncs
index f9d578e65..d61d9dfef 100644
--- a/fontconfig/doc/fclangset.fncs
+++ b/fontconfig/doc/fclangset.fncs
@@ -1,148 +1,178 @@
-/*
- * Copyright © 2007 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetCreate
-@TYPE1@ void
-@PURPOSE@ create a langset object
-@DESC@
-<function>FcLangSetCreate</function> creates a new FcLangSet object.
-@@
-
-@RET@ void
-@FUNC@ FcLangSetDestroy
-@TYPE1@ FcLangSet * @ARG1@ ls
-@PURPOSE@ destroy a langset object
-@DESC@
-<function>FcLangSetDestroy</function> destroys a FcLangSet object, freeing
-all memory associated with it.
-@@
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetCopy
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ copy a langset object
-@DESC@
-<function>FcLangSetCopy</function> creates a new FcLangSet object and
-populates it with the contents of <parameter>ls</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetAdd
-@TYPE1@ FcLangSet * @ARG1@ ls
-@TYPE2@ const FcChar8 * @ARG2@ lang
-@PURPOSE@ add a language to a langset
-@DESC@
-<parameter>lang</parameter> is added to <parameter>ls</parameter>.
-<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a
-two or three letter language from ISO 639 and Tt is a territory from ISO
-3166.
-@@
-
-@RET@ FcLangResult
-@FUNC@ FcLangSetCompare
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ compare language sets
-@DESC@
-<function>FcLangSetCompare</function> compares language coverage for
-<parameter>ls_a</parameter> and <parameter>ls_b</parameter>. If they share
-any language and territory pair, this function returns FcLangEqual. If they
-share a language but differ in which territory that language is for, this
-function returns FcLangDiffentTerritory. If they share no languages in
-common, this function returns FcLangDifferentLang.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetContains
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ check langset subset relation
-@DESC@
-<function>FcLangSetContains</function> returns FcTrue if
-<parameter>ls_a</parameter> contains every language in
-<parameter>ls_b</parameter>. <parameter>ls_a</parameter> will 'contain' a
-language from <parameter>ls_b</parameter> if <parameter>ls_a</parameter>
-has exactly the language, or either the language or
-<parameter>ls_a</parameter> has no territory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetEqual
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ test for matching langsets
-@DESC@
-Returns FcTrue if and only if <parameter>ls_a</parameter> supports precisely
-the same language and territory combinations as <parameter>ls_b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcLangSetHash
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ return a hash value for a langset
-@DESC@
-This function returns a value which depends solely on the languages
-supported by <parameter>ls</parameter>. Any language which equals
-<parameter>ls</parameter> will have the same result from
-<function>FcLangSetHash</function>. However, two langsets with the same hash
-value may not be equal.
-@@
-
-@RET@ FcLangResult
-@FUNC@ FcLangSetHasLang
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@TYPE2@ const FcChar8 * @ARG2@ lang
-@PURPOSE@ test langset for language support
-@DESC@
-<function>FcLangSetHasLang</function> checks whether
-<parameter>ls</parameter> supports <parameter>lang</parameter>. If
-<parameter>ls</parameter> has a matching language and territory pair,
-this function returns FcLangEqual. If <parameter>ls</parameter> has
-a matching language but differs in which territory that language is for, this
-function returns FcLangDiffentTerritory. If <parameter>ls</parameter>
-has no matching language, this function returns FcLangDifferentLang.
-@@
-
-@RET@ FcStrSet *
-@FUNC@ FcLangSetGetLangs
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ get the list of languages in the langset
-@DESC@
-Returns a string set of all languages in <parameter>langset</parameter>.
-@@
-
-@RET@ FcStrSet *
-@FUNC@ FcGetLangs
-@TYPE1@ void
-@PURPOSE@ Get list of languages
-@DESC@
-Returns a string set of all known languages.
-@@
-
-@RET@ const FcCharSet *
-@FUNC@ FcLangGetCharSet
-@TYPE1@ const FcChar8 * @ARG1@ lang
-@PURPOSE@ Get character map for a language
-@DESC@
-Returns the FcCharMap for a language.
-@@
+/*
+ * Copyright © 2007 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+@RET@ FcLangSet *
+@FUNC@ FcLangSetCreate
+@TYPE1@ void
+@PURPOSE@ create a langset object
+@DESC@
+<function>FcLangSetCreate</function> creates a new FcLangSet object.
+@@
+
+@RET@ void
+@FUNC@ FcLangSetDestroy
+@TYPE1@ FcLangSet * @ARG1@ ls
+@PURPOSE@ destroy a langset object
+@DESC@
+<function>FcLangSetDestroy</function> destroys a FcLangSet object, freeing
+all memory associated with it.
+@@
+
+@RET@ FcLangSet *
+@FUNC@ FcLangSetCopy
+@TYPE1@ const FcLangSet * @ARG1@ ls
+@PURPOSE@ copy a langset object
+@DESC@
+<function>FcLangSetCopy</function> creates a new FcLangSet object and
+populates it with the contents of <parameter>ls</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcLangSetAdd
+@TYPE1@ FcLangSet * @ARG1@ ls
+@TYPE2@ const FcChar8 * @ARG2@ lang
+@PURPOSE@ add a language to a langset
+@DESC@
+<parameter>lang</parameter> is added to <parameter>ls</parameter>.
+<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a
+two or three letter language from ISO 639 and Tt is a territory from ISO
+3166.
+@@
+
+@RET@ FcBool
+@FUNC@ FcLangSetDel
+@TYPE1@ FcLangSet * @ARG1@ ls
+@TYPE2@ const FcChar8 * @ARG2@ lang
+@PURPOSE@ delete a language from a langset
+@DESC@
+<parameter>lang</parameter> is removed from <parameter>ls</parameter>.
+<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a
+two or three letter language from ISO 639 and Tt is a territory from ISO
+3166.
+@@
+
+@RET@ FcLangSet *
+@FUNC@ FcLangSetUnion
+@TYPE1@ const FcLangSet * @ARG1@ ls_a
+@TYPE2@ const FcLangSet * @ARG2@ ls_b
+@PURPOSE@ Add langsets
+@DESC@
+Returns a set including only those languages found in either <parameter>ls_a</parameter> or <parameter>ls_b</parameter>.
+@@
+
+@RET@ FcLangSet *
+@FUNC@ FcLangSetSubtract
+@TYPE1@ const FcLangSet * @ARG1@ ls_a
+@TYPE2@ const FcLangSet * @ARG2@ ls_b
+@PURPOSE@ Subtract langsets
+@DESC@
+Returns a set including only those languages found in <parameter>ls_a</parameter> but not in <parameter>ls_b</parameter>.
+@@
+
+@RET@ FcLangResult
+@FUNC@ FcLangSetCompare
+@TYPE1@ const FcLangSet * @ARG1@ ls_a
+@TYPE2@ const FcLangSet * @ARG2@ ls_b
+@PURPOSE@ compare language sets
+@DESC@
+<function>FcLangSetCompare</function> compares language coverage for
+<parameter>ls_a</parameter> and <parameter>ls_b</parameter>. If they share
+any language and territory pair, this function returns FcLangEqual. If they
+share a language but differ in which territory that language is for, this
+function returns FcLangDifferentTerritory. If they share no languages in
+common, this function returns FcLangDifferentLang.
+@@
+
+@RET@ FcBool
+@FUNC@ FcLangSetContains
+@TYPE1@ const FcLangSet * @ARG1@ ls_a
+@TYPE2@ const FcLangSet * @ARG2@ ls_b
+@PURPOSE@ check langset subset relation
+@DESC@
+<function>FcLangSetContains</function> returns FcTrue if
+<parameter>ls_a</parameter> contains every language in
+<parameter>ls_b</parameter>. <parameter>ls_a</parameter> will 'contain' a
+language from <parameter>ls_b</parameter> if <parameter>ls_a</parameter>
+has exactly the language, or either the language or
+<parameter>ls_a</parameter> has no territory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcLangSetEqual
+@TYPE1@ const FcLangSet * @ARG1@ ls_a
+@TYPE2@ const FcLangSet * @ARG2@ ls_b
+@PURPOSE@ test for matching langsets
+@DESC@
+Returns FcTrue if and only if <parameter>ls_a</parameter> supports precisely
+the same language and territory combinations as <parameter>ls_b</parameter>.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcLangSetHash
+@TYPE1@ const FcLangSet * @ARG1@ ls
+@PURPOSE@ return a hash value for a langset
+@DESC@
+This function returns a value which depends solely on the languages
+supported by <parameter>ls</parameter>. Any language which equals
+<parameter>ls</parameter> will have the same result from
+<function>FcLangSetHash</function>. However, two langsets with the same hash
+value may not be equal.
+@@
+
+@RET@ FcLangResult
+@FUNC@ FcLangSetHasLang
+@TYPE1@ const FcLangSet * @ARG1@ ls
+@TYPE2@ const FcChar8 * @ARG2@ lang
+@PURPOSE@ test langset for language support
+@DESC@
+<function>FcLangSetHasLang</function> checks whether
+<parameter>ls</parameter> supports <parameter>lang</parameter>. If
+<parameter>ls</parameter> has a matching language and territory pair,
+this function returns FcLangEqual. If <parameter>ls</parameter> has
+a matching language but differs in which territory that language is for, this
+function returns FcLangDifferentTerritory. If <parameter>ls</parameter>
+has no matching language, this function returns FcLangDifferentLang.
+@@
+
+@RET@ FcStrSet *
+@FUNC@ FcLangSetGetLangs
+@TYPE1@ const FcLangSet * @ARG1@ ls
+@PURPOSE@ get the list of languages in the langset
+@DESC@
+Returns a string set of all languages in <parameter>langset</parameter>.
+@@
+
+@RET@ FcStrSet *
+@FUNC@ FcGetLangs
+@TYPE1@ void
+@PURPOSE@ Get list of languages
+@DESC@
+Returns a string set of all known languages.
+@@
+
+@RET@ const FcCharSet *
+@FUNC@ FcLangGetCharSet
+@TYPE1@ const FcChar8 * @ARG1@ lang
+@PURPOSE@ Get character map for a language
+@DESC@
+Returns the FcCharMap for a language.
+@@
diff --git a/fontconfig/doc/fcmatrix.fncs b/fontconfig/doc/fcmatrix.fncs
index fd680e458..7e752ea4e 100644
--- a/fontconfig/doc/fcmatrix.fncs
+++ b/fontconfig/doc/fcmatrix.fncs
@@ -1,125 +1,125 @@
-/*
- * fontconfig/doc/fcmatrix.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ void
-@FUNC@ FcMatrixInit
-@PURPOSE@ initialize an FcMatrix structure
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@DESC@
-<function>FcMatrixInit</function> initializes <parameter>matrix</parameter>
-to the identity matrix.
-@@
-
-@FUNC@ FcMatrixCopy
-@PURPOSE@ Copy a matrix
-@TYPE1@ const FcMatrix *
-@ARG1@ matrix
-@DESC@
-<function>FcMatrixCopy</function> allocates a new FcMatrix
-and copies <parameter>mat</parameter> into it.
-@@
-
-@FUNC@ FcMatrixEqual
-@PURPOSE@ Compare two matrices
-@TYPE1@ const FcMatrix *
-@ARG1@ matrix1
-@TYPE2@ const FcMatrix *
-@ARG2@ matrix2
-@DESC@
-<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter>
-and <parameter>matrix2</parameter> returning FcTrue when they are equal and
-FcFalse when they are not.
-@@
-
-@FUNC@ FcMatrixMultiply
-@PURPOSE@ Multiply matrices
-@TYPE1@ FcMatrix *
-@ARG1@ result
-@TYPE2@ const FcMatrix *
-@ARG2@ matrix1
-@TYPE3@ const FcMatrix *
-@ARG3@ matrix2
-@DESC@
-<function>FcMatrixMultiply</function> multiplies
-<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing
-the result in <parameter>result</parameter>.
-@@
-
-@FUNC@ FcMatrixRotate
-@PURPOSE@ Rotate a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ cos
-@TYPE3@ double%
-@ARG3@ sin
-@DESC@
-<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter>
-by the angle who's sine is <parameter>sin</parameter> and cosine is
-<parameter>cos</parameter>. This is done by multiplying by the
-matrix:
-<programlisting>
- cos -sin
- sin cos
-</programlisting>
-@@
-
-@FUNC@ FcMatrixScale
-@PURPOSE@ Scale a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ sx
-@TYPE3@ double%
-@ARG3@ dy
-@DESC@
-<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter>
-x values by <parameter>sx</parameter> and y values by
-<parameter>sy</parameter>. This is done by multiplying by
-the matrix:
-<programlisting>
- sx 0
- 0 sy
-</programlisting>
-@@
-
-@FUNC@ FcMatrixShear
-@PURPOSE@ Shear a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ sh
-@TYPE3@ double%
-@ARG3@ sv
-@DESC@
-<function>FcMatrixShare</function> shears <parameter>matrix</parameter>
-horizontally by <parameter>sh</parameter> and vertically by
-<parameter>sv</parameter>. This is done by multiplying by
-the matrix:
-<programlisting>
- 1 sh
- sv 1
-</programlisting>
-@@
+/*
+ * fontconfig/doc/fcmatrix.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ void
+@FUNC@ FcMatrixInit
+@PURPOSE@ initialize an FcMatrix structure
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@DESC@
+<function>FcMatrixInit</function> initializes <parameter>matrix</parameter>
+to the identity matrix.
+@@
+
+@FUNC@ FcMatrixCopy
+@PURPOSE@ Copy a matrix
+@TYPE1@ const FcMatrix *
+@ARG1@ matrix
+@DESC@
+<function>FcMatrixCopy</function> allocates a new FcMatrix
+and copies <parameter>mat</parameter> into it.
+@@
+
+@FUNC@ FcMatrixEqual
+@PURPOSE@ Compare two matrices
+@TYPE1@ const FcMatrix *
+@ARG1@ matrix1
+@TYPE2@ const FcMatrix *
+@ARG2@ matrix2
+@DESC@
+<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter>
+and <parameter>matrix2</parameter> returning FcTrue when they are equal and
+FcFalse when they are not.
+@@
+
+@FUNC@ FcMatrixMultiply
+@PURPOSE@ Multiply matrices
+@TYPE1@ FcMatrix *
+@ARG1@ result
+@TYPE2@ const FcMatrix *
+@ARG2@ matrix1
+@TYPE3@ const FcMatrix *
+@ARG3@ matrix2
+@DESC@
+<function>FcMatrixMultiply</function> multiplies
+<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing
+the result in <parameter>result</parameter>.
+@@
+
+@FUNC@ FcMatrixRotate
+@PURPOSE@ Rotate a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ cos
+@TYPE3@ double%
+@ARG3@ sin
+@DESC@
+<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter>
+by the angle who's sine is <parameter>sin</parameter> and cosine is
+<parameter>cos</parameter>. This is done by multiplying by the
+matrix:
+<programlisting>
+ cos -sin
+ sin cos
+</programlisting>
+@@
+
+@FUNC@ FcMatrixScale
+@PURPOSE@ Scale a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ sx
+@TYPE3@ double%
+@ARG3@ dy
+@DESC@
+<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter>
+x values by <parameter>sx</parameter> and y values by
+<parameter>dy</parameter>. This is done by multiplying by
+the matrix:
+<programlisting>
+ sx 0
+ 0 dy
+</programlisting>
+@@
+
+@FUNC@ FcMatrixShear
+@PURPOSE@ Shear a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ sh
+@TYPE3@ double%
+@ARG3@ sv
+@DESC@
+<function>FcMatrixShare</function> shears <parameter>matrix</parameter>
+horizontally by <parameter>sh</parameter> and vertically by
+<parameter>sv</parameter>. This is done by multiplying by
+the matrix:
+<programlisting>
+ 1 sh
+ sv 1
+</programlisting>
+@@
diff --git a/fontconfig/doc/fcobjectset.fncs b/fontconfig/doc/fcobjectset.fncs
index 468a7bfc1..b741cfa08 100644
--- a/fontconfig/doc/fcobjectset.fncs
+++ b/fontconfig/doc/fcobjectset.fncs
@@ -1,73 +1,73 @@
-/*
- * fontconfig/doc/fcobjectset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcObjectSet *
-@FUNC@ FcObjectSetCreate
-@TYPE1@ void
-@PURPOSE@ Create an object set
-@DESC@
-Creates an empty set.
-@@
-
-@RET@ FcBool
-@FUNC@ FcObjectSetAdd
-@TYPE1@ FcObjectSet * @ARG1@ os
-@TYPE2@ const char * @ARG2@ object
-@PURPOSE@ Add to an object set
-@DESC@
-Adds a proprety name to the set. Returns FcFalse if the property name cannot be
-inserted into the set (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcObjectSetDestroy
-@TYPE1@ FcObjectSet * @ARG1@ os
-@PURPOSE@ Destroy an object set
-@DESC@
-Destroys an object set.
-@@
-
-@RET@ FcObjectSet *
-@FUNC@ FcObjectSetBuild
-@TYPE1@ const char * @ARG1@ first
-@TYPE2@ ...
-
-@PROTOTYPE+@
-@RET+@ FcObjectSet *
-@FUNC+@ FcObjectSetVaBuild
-@TYPE1+@ const char * @ARG1+@ first
-@TYPE2+@ va_list% @ARG2+@ va
-
-@PROTOTYPE++@
-@RET++@ void
-@FUNC++@ FcObjectSetVapBuild
-@TYPE1++@ FcObjectSet * @ARG1++@ result
-@TYPE2++@ const char * @ARG2++@ first
-@TYPE3++@ va_list% @ARG3++@ va
-
-@PURPOSE@ Build object set from args
-@DESC@
-These build an object set from a null-terminated list of property names.
-FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns
-the result in the <parameter>result</parameter> variable directly.
-@@
+/*
+ * fontconfig/doc/fcobjectset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcObjectSet *
+@FUNC@ FcObjectSetCreate
+@TYPE1@ void
+@PURPOSE@ Create an object set
+@DESC@
+Creates an empty set.
+@@
+
+@RET@ FcBool
+@FUNC@ FcObjectSetAdd
+@TYPE1@ FcObjectSet * @ARG1@ os
+@TYPE2@ const char * @ARG2@ object
+@PURPOSE@ Add to an object set
+@DESC@
+Adds a property name to the set. Returns FcFalse if the property name cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcObjectSetDestroy
+@TYPE1@ FcObjectSet * @ARG1@ os
+@PURPOSE@ Destroy an object set
+@DESC@
+Destroys an object set.
+@@
+
+@RET@ FcObjectSet *
+@FUNC@ FcObjectSetBuild
+@TYPE1@ const char * @ARG1@ first
+@TYPE2@ ...
+
+@PROTOTYPE+@
+@RET+@ FcObjectSet *
+@FUNC+@ FcObjectSetVaBuild
+@TYPE1+@ const char * @ARG1+@ first
+@TYPE2+@ va_list% @ARG2+@ va
+
+@PROTOTYPE++@
+@RET++@ void
+@FUNC++@ FcObjectSetVapBuild
+@TYPE1++@ FcObjectSet * @ARG1++@ result
+@TYPE2++@ const char * @ARG2++@ first
+@TYPE3++@ va_list% @ARG3++@ va
+
+@PURPOSE@ Build object set from args
+@DESC@
+These build an object set from a null-terminated list of property names.
+FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns
+the result in the <parameter>result</parameter> variable directly.
+@@
diff --git a/fontconfig/doc/fcobjecttype.fncs b/fontconfig/doc/fcobjecttype.fncs
index bc254f3b9..ebc1bf745 100644
--- a/fontconfig/doc/fcobjecttype.fncs
+++ b/fontconfig/doc/fcobjecttype.fncs
@@ -1,50 +1,50 @@
-/*
- * fontconfig/doc/fcobjecttype.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBool
-@FUNC@ FcNameRegisterObjectTypes
-@TYPE1@ const FcObjectType * @ARG1@ types
-@TYPE2@ int% @ARG2@ ntype
-@PURPOSE@ Register object types
-@DESC@
-Register <parameter>ntype</parameter> new object types. Returns FcFalse if
-some of the names cannot be
-registered (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameUnregisterObjectTypes
-@TYPE1@ const FcObjectType * @ARG1@ types
-@TYPE2@ int% @ARG2@ ntype
-@PURPOSE@ Unregister object types
-@DESC@
-Unregister <parameter>ntype</parameter> object types. Returns FcTrue.
-@@
-
-@RET@ const FcObjectType *
-@FUNC@ FcNameGetObjectType
-@TYPE1@ const char * @ARG1@ object
-@PURPOSE@ Lookup an object type
-@DESC@
-Return the object type for the pattern element named <parameter>object</parameter>.
-@@
+/*
+ * fontconfig/doc/fcobjecttype.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcBool
+@FUNC@ FcNameRegisterObjectTypes
+@TYPE1@ const FcObjectType * @ARG1@ types
+@TYPE2@ int% @ARG2@ ntype
+@PURPOSE@ Register object types
+@DESC@
+Register <parameter>ntype</parameter> new object types. Returns FcFalse if
+some of the names cannot be
+registered (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcNameUnregisterObjectTypes
+@TYPE1@ const FcObjectType * @ARG1@ types
+@TYPE2@ int% @ARG2@ ntype
+@PURPOSE@ Unregister object types
+@DESC@
+Unregister <parameter>ntype</parameter> object types. Returns FcTrue.
+@@
+
+@RET@ const FcObjectType *
+@FUNC@ FcNameGetObjectType
+@TYPE1@ const char * @ARG1@ object
+@PURPOSE@ Lookup an object type
+@DESC@
+Return the object type for the pattern element named <parameter>object</parameter>.
+@@
diff --git a/fontconfig/doc/fcpattern.fncs b/fontconfig/doc/fcpattern.fncs
index e2c2953df..17e873872 100644
--- a/fontconfig/doc/fcpattern.fncs
+++ b/fontconfig/doc/fcpattern.fncs
@@ -1,397 +1,397 @@
-/*
- * fontconfig/doc/fcpattern.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcPattern *
-@FUNC@ FcPatternCreate
-@TYPE1@ void
-@PURPOSE@ Create a pattern
-@DESC@
-Creates a pattern with no properties; used to build patterns from scratch.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternDuplicate
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Copy a pattern
-@DESC@
-Copy a pattern, returning a new pattern that matches
-<parameter>p</parameter>. Each pattern may be modified without affecting the
-other.
-@@
-
-@RET@ void
-@FUNC@ FcPatternReference
-@TYPE1@ FcPattern * @ARG1@ p
-@PURPOSE@ Increment pattern reference count
-@DESC@
-Add another reference to <parameter>p</parameter>. Patterns are freed only
-when the reference count reaches zero.
-@@
-
-@RET@ void
-@FUNC@ FcPatternDestroy
-@TYPE1@ FcPattern * @ARG1@ p
-@PURPOSE@ Destroy a pattern
-@DESC@
-Decrement the pattern reference count. If all references are gone, destroys
-the pattern, in the process destroying all related values.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternEqual
-@TYPE1@ const FcPattern * @ARG1@ pa
-@TYPE2@ const FcPattern * @ARG2@ pb
-@PURPOSE@ Compare patterns
-@DESC@
-Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> are exactly alike.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternEqualSubset
-@TYPE1@ const FcPattern * @ARG1@ pa
-@TYPE2@ const FcPattern * @ARG2@ pb
-@TYPE3@ const FcObjectSet * @ARG3@ os
-@PURPOSE@ Compare portions of patterns
-@DESC@
-Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> have exactly the same values for all of the
-objects in <parameter>os</parameter>.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternFilter
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const FcObjectSet * @ARG1@ os
-@PURPOSE@ Filter the objects of pattern
-@DESC@
-Returns a new pattern that only has those objects from
-<parameter>p</parameter> that are in <parameter>os</parameter>.
-If <parameter>os</parameter> is NULL, a duplicate of
-<parameter>p</parameter> is returned.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcPatternHash
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Compute a pattern hash value
-@DESC@
-Returns a 32-bit number which is the same for any two patterns which are
-equal.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternAdd
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ FcValue% @ARG3@ value
-@TYPE4@ FcBool% @ARG4@ append
-@PURPOSE@ Add a value to a pattern
-@DESC@
-Adds a single value to the list of values associated with the property named
-`object<parameter>. If `append</parameter> is FcTrue, the value is added at the end of any
-existing list, otherwise it is inserted at the begining. `value' is saved
-(with FcValueSave) when inserted into the pattern so that the library
-retains no reference to any application-supplied data structure.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternAddWeak
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ FcValue% @ARG3@ value
-@TYPE4@ FcBool% @ARG4@ append
-@PURPOSE@ Add a value to a pattern with weak binding
-@DESC@
-FcPatternAddWeak is essentially the same as FcPatternAdd except that any
-values added to the list have binding <parameter>weak</parameter> instead of <parameter>strong</parameter>.
-@@
-
-@TITLE@ FcPatternAdd-Type
-@RET@ FcBool
-@FUNC@ FcPatternAddInteger
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ i
-
-@PROTOTYPE+@
-@RET+@ FcBool
-@FUNC+@ FcPatternAddDouble
-@TYPE1+@ FcPattern * @ARG1+@ p
-@TYPE2+@ const char * @ARG2+@ object
-@TYPE3+@ double% @ARG3+@ d
-
-@PROTOTYPE++@
-@RET++@ FcBool
-@FUNC++@ FcPatternAddString
-@TYPE1++@ FcPattern * @ARG1++@ p
-@TYPE2++@ const char * @ARG2++@ object
-@TYPE3++@ const FcChar8 * @ARG3++@ s
-
-@PROTOTYPE+++@
-@RET+++@ FcBool
-@FUNC+++@ FcPatternAddMatrix
-@TYPE1+++@ FcPattern * @ARG1+++@ p
-@TYPE2+++@ const char * @ARG2+++@ object
-@TYPE3+++@ const FcMatrix * @ARG3+++@ m
-
-@PROTOTYPE++++@
-@RET++++@ FcBool
-@FUNC++++@ FcPatternAddCharSet
-@TYPE1++++@ FcPattern * @ARG1++++@ p
-@TYPE2++++@ const char * @ARG2++++@ object
-@TYPE3++++@ const FcCharSet * @ARG3++++@ c
-
-@PROTOTYPE+++++@
-@RET+++++@ FcBool
-@FUNC+++++@ FcPatternAddBool
-@TYPE1+++++@ FcPattern * @ARG1+++++@ p
-@TYPE2+++++@ const char * @ARG2+++++@ object
-@TYPE3+++++@ FcBool% @ARG3+++++@ b
-
-@PROTOTYPE++++++@
-@RET++++++@ FcBool
-@FUNC++++++@ FcPatternAddFTFace
-@TYPE1++++++@ FcPattern * @ARG1++++++@ p
-@TYPE2++++++@ const char * @ARG2++++++@ object
-@TYPE3++++++@ const FT_Face @ARG3++++++@ f
-
-@PROTOTYPE+++++++@
-@RET+++++++@ FcBool
-@FUNC+++++++@ FcPatternAddLangSet
-@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
-@TYPE2+++++++@ const char * @ARG2+++++++@ object
-@TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l
-
-@PURPOSE@ Add a typed value to a pattern
-@DESC@
-These are all convenience functions that insert objects of the specified
-type into the pattern. Use these in preference to FcPatternAdd as they
-will provide compile-time typechecking. These all append values to
-any existing list of values.
-@@
-
-@RET@ FcResult
-@FUNC@ FcPatternGet
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ id
-@TYPE4@ FcValue * @ARG4@ v
-@PURPOSE@ Return a value from a pattern
-@DESC@
-Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value
-associated with the property <parameter>object</parameter>.
-The value returned is not a copy, but rather refers to the data stored
-within the pattern directly. Applications must not free this value.
-@@
-
-@TITLE@ FcPatternGet-Type
-@PROTOTYPE@
-@RET@ FcResult
-@FUNC@ FcPatternGetInteger
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ n
-@TYPE4@ int * @ARG4@ i
-
-@PROTOTYPE+@
-@RET+@ FcResult
-@FUNC+@ FcPatternGetDouble
-@TYPE1+@ FcPattern * @ARG1+@ p
-@TYPE2+@ const char * @ARG2+@ object
-@TYPE3+@ int% @ARG3+@ n
-@TYPE4+@ double * @ARG4+@ d
-
-@PROTOTYPE++@
-@RET++@ FcResult
-@FUNC++@ FcPatternGetString
-@TYPE1++@ FcPattern * @ARG1++@ p
-@TYPE2++@ const char * @ARG2++@ object
-@TYPE3++@ int% @ARG3++@ n
-@TYPE4++@ FcChar8 ** @ARG4++@ s
-
-@PROTOTYPE+++@
-@RET+++@ FcResult
-@FUNC+++@ FcPatternGetMatrix
-@TYPE1+++@ FcPattern * @ARG1+++@ p
-@TYPE2+++@ const char * @ARG2+++@ object
-@TYPE3+++@ int% @ARG3+++@ n
-@TYPE4+++@ FcMatrix ** @ARG4+++@ s
-
-@PROTOTYPE++++@
-@RET++++@ FcResult
-@FUNC++++@ FcPatternGetCharSet
-@TYPE1++++@ FcPattern * @ARG1++++@ p
-@TYPE2++++@ const char * @ARG2++++@ object
-@TYPE3++++@ int% @ARG3++++@ n
-@TYPE4++++@ FcCharSet ** @ARG4++++@ c
-
-@PROTOTYPE+++++@
-@RET+++++@ FcResult
-@FUNC+++++@ FcPatternGetBool
-@TYPE1+++++@ FcPattern * @ARG1+++++@ p
-@TYPE2+++++@ const char * @ARG2+++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE4+++++@ FcBool * @ARG4+++++@ b
-
-@PROTOTYPE++++++@
-@RET++++++@ FcResult
-@FUNC++++++@ FcPatternGetFTFace
-@TYPE1++++++@ FcPattern * @ARG1++++++@ p
-@TYPE2++++++@ const char * @ARG2++++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE3++++++@ FT_Face * @ARG3++++++@ f
-
-@PROTOTYPE+++++++@
-@RET+++++++@ FcResult
-@FUNC+++++++@ FcPatternGetLangSet
-@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
-@TYPE2+++++++@ const char * @ARG2+++++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE3+++++++@ FcLangSet ** @ARG3+++++++@ l
-
-@PURPOSE@ Return a typed value from a pattern
-@DESC@
-These are convenience functions that call FcPatternGet and verify that the
-returned data is of the expected type. They return FcResultTypeMismatch if
-this is not the case. Note that these (like FcPatternGet) do not make a
-copy of any data structure referenced by the return value. Use these
-in preference to FcPatternGet to provide compile-time typechecking.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternBuild
-@TYPE1@ FcPattern * @ARG1@ pattern
-@TYPE2@ ...
-
-@PROTOTYPE+@
-@RET+@ FcPattern *
-@FUNC+@ FcPatternVaBuild
-@TYPE1+@ FcPattern * @ARG1+@ pattern
-@TYPE2+@ va_list% @ARG2+@ va
-
-@PROTOTYPE++@
-@RET++@ void
-@FUNC++@ FcPatternVapBuild
-@TYPE1++@ FcPattern * @ARG1++@ result
-@TYPE2++@ FcPattern * @ARG2++@ pattern
-@TYPE3++@ va_list% @ARG3++@ va
-
-@PURPOSE@ Create patterns from arguments
-@DESC@
-Builds a pattern using a list of objects, types and values. Each
-value to be entered in the pattern is specified with three arguments:
-</para>
-<orderedlist>
-<listitem><para>
-Object name, a string describing the property to be added.
-</para></listitem><listitem><para>
-Object type, one of the FcType enumerated values
-</para></listitem><listitem><para>
-Value, not an FcValue, but the raw type as passed to any of the
-FcPatternAdd&lt;type&gt; functions. Must match the type of the second
-argument.
-</para></listitem>
-</orderedlist>
-<para>
-The argument list is terminated by a null object name, no object type nor
-value need be passed for this. The values are added to `pattern', if
-`pattern' is null, a new pattern is created. In either case, the pattern is
-returned. Example
-</para>
-<programlisting>
-pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0);
-</programlisting>
-<para>
-FcPatternVaBuild is used when the arguments are already in the form of a
-varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild
-which returns its result directly in the <parameter>result</parameter>
-variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternDel
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@PURPOSE@ Delete a property from a pattern
-@DESC@
-Deletes all values associated with the property `object', returning
-whether the property existed or not.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternRemove
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ id
-@PURPOSE@ Remove one object of the specified type from the pattern
-@DESC@
-Removes the value associated with the property `object' at position `id', returning
-whether the property existed and had a value at that position or not.
-@@
-
-@RET@ void
-@FUNC@ FcPatternPrint
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Print a pattern for debugging
-@DESC@
-Prints an easily readable version of the pattern to stdout. There is
-no provision for reparsing data in this format, it's just for diagnostics
-and debugging.
-@@
-
-@RET@ void
-@FUNC@ FcDefaultSubstitute
-@TYPE1@ FcPattern * @ARG1@ pattern
-@PURPOSE@ Perform default substitutions in a pattern
-@DESC@
-Supplies default values for underspecified font patterns:
-<itemizedlist>
-<listitem><para>
-Patterns without a specified style or weight are set to Medium
-</para></listitem>
-<listitem><para>
-Patterns without a specified style or slant are set to Roman
-</para></listitem>
-<listitem><para>
-Patterns without a specified pixel size are given one computed from any
-specified point size (default 12), dpi (default 75) and scale (default 1).
-</para></listitem>
-</itemizedlist>
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcNameParse
-@TYPE1@ const FcChar8 * @ARG1@ name
-@PURPOSE@ Parse a pattern string
-@DESC@
-Converts <parameter>name</parameter> from the standard text format described above into a pattern.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcNameUnparse
-@TYPE1@ FcPattern * @ARG1@ pat
-@PURPOSE@ Convert a pattern back into a string that can be parsed
-@DESC@
-Converts the given pattern into the standard text format described above.
-The return value is not static, but instead refers to newly allocated memory
-which should be freed by the caller using free().
-@@
+/*
+ * fontconfig/doc/fcpattern.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcPattern *
+@FUNC@ FcPatternCreate
+@TYPE1@ void
+@PURPOSE@ Create a pattern
+@DESC@
+Creates a pattern with no properties; used to build patterns from scratch.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternDuplicate
+@TYPE1@ const FcPattern * @ARG1@ p
+@PURPOSE@ Copy a pattern
+@DESC@
+Copy a pattern, returning a new pattern that matches
+<parameter>p</parameter>. Each pattern may be modified without affecting the
+other.
+@@
+
+@RET@ void
+@FUNC@ FcPatternReference
+@TYPE1@ FcPattern * @ARG1@ p
+@PURPOSE@ Increment pattern reference count
+@DESC@
+Add another reference to <parameter>p</parameter>. Patterns are freed only
+when the reference count reaches zero.
+@@
+
+@RET@ void
+@FUNC@ FcPatternDestroy
+@TYPE1@ FcPattern * @ARG1@ p
+@PURPOSE@ Destroy a pattern
+@DESC@
+Decrement the pattern reference count. If all references are gone, destroys
+the pattern, in the process destroying all related values.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternEqual
+@TYPE1@ const FcPattern * @ARG1@ pa
+@TYPE2@ const FcPattern * @ARG2@ pb
+@PURPOSE@ Compare patterns
+@DESC@
+Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> are exactly alike.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternEqualSubset
+@TYPE1@ const FcPattern * @ARG1@ pa
+@TYPE2@ const FcPattern * @ARG2@ pb
+@TYPE3@ const FcObjectSet * @ARG3@ os
+@PURPOSE@ Compare portions of patterns
+@DESC@
+Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> have exactly the same values for all of the
+objects in <parameter>os</parameter>.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternFilter
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const FcObjectSet * @ARG1@ os
+@PURPOSE@ Filter the objects of pattern
+@DESC@
+Returns a new pattern that only has those objects from
+<parameter>p</parameter> that are in <parameter>os</parameter>.
+If <parameter>os</parameter> is NULL, a duplicate of
+<parameter>p</parameter> is returned.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcPatternHash
+@TYPE1@ const FcPattern * @ARG1@ p
+@PURPOSE@ Compute a pattern hash value
+@DESC@
+Returns a 32-bit number which is the same for any two patterns which are
+equal.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternAdd
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ FcValue% @ARG3@ value
+@TYPE4@ FcBool% @ARG4@ append
+@PURPOSE@ Add a value to a pattern
+@DESC@
+Adds a single value to the list of values associated with the property named
+`object<parameter>. If `append</parameter> is FcTrue, the value is added at the end of any
+existing list, otherwise it is inserted at the beginning. `value' is saved
+(with FcValueSave) when inserted into the pattern so that the library
+retains no reference to any application-supplied data structure.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternAddWeak
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ FcValue% @ARG3@ value
+@TYPE4@ FcBool% @ARG4@ append
+@PURPOSE@ Add a value to a pattern with weak binding
+@DESC@
+FcPatternAddWeak is essentially the same as FcPatternAdd except that any
+values added to the list have binding <parameter>weak</parameter> instead of <parameter>strong</parameter>.
+@@
+
+@TITLE@ FcPatternAdd-Type
+@RET@ FcBool
+@FUNC@ FcPatternAddInteger
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ i
+
+@PROTOTYPE+@
+@RET+@ FcBool
+@FUNC+@ FcPatternAddDouble
+@TYPE1+@ FcPattern * @ARG1+@ p
+@TYPE2+@ const char * @ARG2+@ object
+@TYPE3+@ double% @ARG3+@ d
+
+@PROTOTYPE++@
+@RET++@ FcBool
+@FUNC++@ FcPatternAddString
+@TYPE1++@ FcPattern * @ARG1++@ p
+@TYPE2++@ const char * @ARG2++@ object
+@TYPE3++@ const FcChar8 * @ARG3++@ s
+
+@PROTOTYPE+++@
+@RET+++@ FcBool
+@FUNC+++@ FcPatternAddMatrix
+@TYPE1+++@ FcPattern * @ARG1+++@ p
+@TYPE2+++@ const char * @ARG2+++@ object
+@TYPE3+++@ const FcMatrix * @ARG3+++@ m
+
+@PROTOTYPE++++@
+@RET++++@ FcBool
+@FUNC++++@ FcPatternAddCharSet
+@TYPE1++++@ FcPattern * @ARG1++++@ p
+@TYPE2++++@ const char * @ARG2++++@ object
+@TYPE3++++@ const FcCharSet * @ARG3++++@ c
+
+@PROTOTYPE+++++@
+@RET+++++@ FcBool
+@FUNC+++++@ FcPatternAddBool
+@TYPE1+++++@ FcPattern * @ARG1+++++@ p
+@TYPE2+++++@ const char * @ARG2+++++@ object
+@TYPE3+++++@ FcBool% @ARG3+++++@ b
+
+@PROTOTYPE++++++@
+@RET++++++@ FcBool
+@FUNC++++++@ FcPatternAddFTFace
+@TYPE1++++++@ FcPattern * @ARG1++++++@ p
+@TYPE2++++++@ const char * @ARG2++++++@ object
+@TYPE3++++++@ const FT_Face @ARG3++++++@ f
+
+@PROTOTYPE+++++++@
+@RET+++++++@ FcBool
+@FUNC+++++++@ FcPatternAddLangSet
+@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
+@TYPE2+++++++@ const char * @ARG2+++++++@ object
+@TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l
+
+@PURPOSE@ Add a typed value to a pattern
+@DESC@
+These are all convenience functions that insert objects of the specified
+type into the pattern. Use these in preference to FcPatternAdd as they
+will provide compile-time typechecking. These all append values to
+any existing list of values.
+@@
+
+@RET@ FcResult
+@FUNC@ FcPatternGet
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ id
+@TYPE4@ FcValue * @ARG4@ v
+@PURPOSE@ Return a value from a pattern
+@DESC@
+Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value
+associated with the property <parameter>object</parameter>.
+The value returned is not a copy, but rather refers to the data stored
+within the pattern directly. Applications must not free this value.
+@@
+
+@TITLE@ FcPatternGet-Type
+@PROTOTYPE@
+@RET@ FcResult
+@FUNC@ FcPatternGetInteger
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ n
+@TYPE4@ int * @ARG4@ i
+
+@PROTOTYPE+@
+@RET+@ FcResult
+@FUNC+@ FcPatternGetDouble
+@TYPE1+@ FcPattern * @ARG1+@ p
+@TYPE2+@ const char * @ARG2+@ object
+@TYPE3+@ int% @ARG3+@ n
+@TYPE4+@ double * @ARG4+@ d
+
+@PROTOTYPE++@
+@RET++@ FcResult
+@FUNC++@ FcPatternGetString
+@TYPE1++@ FcPattern * @ARG1++@ p
+@TYPE2++@ const char * @ARG2++@ object
+@TYPE3++@ int% @ARG3++@ n
+@TYPE4++@ FcChar8 ** @ARG4++@ s
+
+@PROTOTYPE+++@
+@RET+++@ FcResult
+@FUNC+++@ FcPatternGetMatrix
+@TYPE1+++@ FcPattern * @ARG1+++@ p
+@TYPE2+++@ const char * @ARG2+++@ object
+@TYPE3+++@ int% @ARG3+++@ n
+@TYPE4+++@ FcMatrix ** @ARG4+++@ s
+
+@PROTOTYPE++++@
+@RET++++@ FcResult
+@FUNC++++@ FcPatternGetCharSet
+@TYPE1++++@ FcPattern * @ARG1++++@ p
+@TYPE2++++@ const char * @ARG2++++@ object
+@TYPE3++++@ int% @ARG3++++@ n
+@TYPE4++++@ FcCharSet ** @ARG4++++@ c
+
+@PROTOTYPE+++++@
+@RET+++++@ FcResult
+@FUNC+++++@ FcPatternGetBool
+@TYPE1+++++@ FcPattern * @ARG1+++++@ p
+@TYPE2+++++@ const char * @ARG2+++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE4+++++@ FcBool * @ARG4+++++@ b
+
+@PROTOTYPE++++++@
+@RET++++++@ FcResult
+@FUNC++++++@ FcPatternGetFTFace
+@TYPE1++++++@ FcPattern * @ARG1++++++@ p
+@TYPE2++++++@ const char * @ARG2++++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE3++++++@ FT_Face * @ARG3++++++@ f
+
+@PROTOTYPE+++++++@
+@RET+++++++@ FcResult
+@FUNC+++++++@ FcPatternGetLangSet
+@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
+@TYPE2+++++++@ const char * @ARG2+++++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE3+++++++@ FcLangSet ** @ARG3+++++++@ l
+
+@PURPOSE@ Return a typed value from a pattern
+@DESC@
+These are convenience functions that call FcPatternGet and verify that the
+returned data is of the expected type. They return FcResultTypeMismatch if
+this is not the case. Note that these (like FcPatternGet) do not make a
+copy of any data structure referenced by the return value. Use these
+in preference to FcPatternGet to provide compile-time typechecking.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternBuild
+@TYPE1@ FcPattern * @ARG1@ pattern
+@TYPE2@ ...
+
+@PROTOTYPE+@
+@RET+@ FcPattern *
+@FUNC+@ FcPatternVaBuild
+@TYPE1+@ FcPattern * @ARG1+@ pattern
+@TYPE2+@ va_list% @ARG2+@ va
+
+@PROTOTYPE++@
+@RET++@ void
+@FUNC++@ FcPatternVapBuild
+@TYPE1++@ FcPattern * @ARG1++@ result
+@TYPE2++@ FcPattern * @ARG2++@ pattern
+@TYPE3++@ va_list% @ARG3++@ va
+
+@PURPOSE@ Create patterns from arguments
+@DESC@
+Builds a pattern using a list of objects, types and values. Each
+value to be entered in the pattern is specified with three arguments:
+</para>
+<orderedlist>
+<listitem><para>
+Object name, a string describing the property to be added.
+</para></listitem><listitem><para>
+Object type, one of the FcType enumerated values
+</para></listitem><listitem><para>
+Value, not an FcValue, but the raw type as passed to any of the
+FcPatternAdd&lt;type&gt; functions. Must match the type of the second
+argument.
+</para></listitem>
+</orderedlist>
+<para>
+The argument list is terminated by a null object name, no object type nor
+value need be passed for this. The values are added to `pattern', if
+`pattern' is null, a new pattern is created. In either case, the pattern is
+returned. Example
+</para>
+<programlisting>
+pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0);
+</programlisting>
+<para>
+FcPatternVaBuild is used when the arguments are already in the form of a
+varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild
+which returns its result directly in the <parameter>result</parameter>
+variable.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternDel
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@PURPOSE@ Delete a property from a pattern
+@DESC@
+Deletes all values associated with the property `object', returning
+whether the property existed or not.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternRemove
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ id
+@PURPOSE@ Remove one object of the specified type from the pattern
+@DESC@
+Removes the value associated with the property `object' at position `id', returning
+whether the property existed and had a value at that position or not.
+@@
+
+@RET@ void
+@FUNC@ FcPatternPrint
+@TYPE1@ const FcPattern * @ARG1@ p
+@PURPOSE@ Print a pattern for debugging
+@DESC@
+Prints an easily readable version of the pattern to stdout. There is
+no provision for reparsing data in this format, it's just for diagnostics
+and debugging.
+@@
+
+@RET@ void
+@FUNC@ FcDefaultSubstitute
+@TYPE1@ FcPattern * @ARG1@ pattern
+@PURPOSE@ Perform default substitutions in a pattern
+@DESC@
+Supplies default values for underspecified font patterns:
+<itemizedlist>
+<listitem><para>
+Patterns without a specified style or weight are set to Medium
+</para></listitem>
+<listitem><para>
+Patterns without a specified style or slant are set to Roman
+</para></listitem>
+<listitem><para>
+Patterns without a specified pixel size are given one computed from any
+specified point size (default 12), dpi (default 75) and scale (default 1).
+</para></listitem>
+</itemizedlist>
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcNameParse
+@TYPE1@ const FcChar8 * @ARG1@ name
+@PURPOSE@ Parse a pattern string
+@DESC@
+Converts <parameter>name</parameter> from the standard text format described above into a pattern.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcNameUnparse
+@TYPE1@ FcPattern * @ARG1@ pat
+@PURPOSE@ Convert a pattern back into a string that can be parsed
+@DESC@
+Converts the given pattern into the standard text format described above.
+The return value is not static, but instead refers to newly allocated memory
+which should be freed by the caller using free().
+@@
diff --git a/fontconfig/doc/fcstring.fncs b/fontconfig/doc/fcstring.fncs
index 5f1f93ac1..f30549308 100644
--- a/fontconfig/doc/fcstring.fncs
+++ b/fontconfig/doc/fcstring.fncs
@@ -1,244 +1,244 @@
-/*
- * fontconfig/doc/fcstring.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- <variablelist>
-
-@RET@ int
-@FUNC@ FcUtf8ToUcs4
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcChar32 * @ARG2@ dst
-@TYPE3@ int% @ARG3@ len
-@PURPOSE@ convert UTF-8 to UCS4
-@DESC@
-Converts the next Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes containing the
-char. <parameter>src</parameter> must be at least
-<parameter>len</parameter> bytes long.
-@@
-
-@RET@ int
-@FUNC@ FcUcs4ToUtf8
-@TYPE1@ FcChar32% @ARG1@ src
-@TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN]
-@PURPOSE@ convert UCS4 to UTF-8
-@DESC@
-Converts the Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes needed to encode
-the char.
-@@
-
-@RET@ FcBool
-@FUNC@ FcUtf8Len
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ int% @ARG2@ len
-@TYPE3@ int * @ARG3@ nchar
-@TYPE4@ int * @ARG4@ wchar
-@PURPOSE@ count UTF-8 encoded chars
-@DESC@
-Counts the number of Unicode chars in <parameter>len</parameter> bytes of
-<parameter>src</parameter>. Places that count in
-<parameter>nchar</parameter>. <parameter>wchar</parameter> contains 1, 2 or
-4 depending on the number of bytes needed to hold the largest unicode char
-counted. The return value indicates whether <parameter>src</parameter> is a
-well-formed UTF8 string.
-@@
-
-@RET@ int
-@FUNC@ FcUtf16ToUcs4
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcEndian% @ARG2@ endian
-@TYPE3@ FcChar32 * @ARG3@ dst
-@TYPE4@ int% @ARG4@ len
-@PURPOSE@ convert UTF-16 to UCS4
-@DESC@
-Converts the next Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes containing the
-char. <parameter>src</parameter> must be at least <parameter>len</parameter>
-bytes long. Bytes of <parameter>src</parameter> are combined into 16-bit
-units according to <parameter>endian</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcUtf16Len
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcEndian% @ARG2@ endian
-@TYPE3@ int% @ARG3@ len
-@TYPE4@ int * @ARG4@ nchar
-@TYPE5@ int * @ARG5@ wchar
-@PURPOSE@ count UTF-16 encoded chars
-@DESC@
-Counts the number of Unicode chars in <parameter>len</parameter> bytes of
-<parameter>src</parameter>. Bytes of <parameter>src</parameter> are
-combined into 16-bit units according to <parameter>endian</parameter>.
-Places that count in <parameter>nchar</parameter>.
-<parameter>wchar</parameter> contains 1, 2 or 4 depending on the number of
-bytes needed to hold the largest unicode char counted. The return value
-indicates whether <parameter>string</parameter> is a well-formed UTF16
-string.
-@@
-
-@RET@ FcBool
-@FUNC@ FcIsLower
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ check for lower case ASCII character
-@DESC@
-This macro checks whether <parameter>c</parameter> is an lower case ASCII
-letter.
-@@
-
-@RET@ FcBool
-@FUNC@ FcIsUpper
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ check for upper case ASCII character
-@DESC@
-This macro checks whether <parameter>c</parameter> is a upper case ASCII
-letter.
-@@
-
-@RET@ FcChar8
-@FUNC@ FcToLower
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ convert upper case ASCII to lower case
-@DESC@
-This macro converts upper case ASCII <parameter>c</parameter> to the
-equivalent lower case letter.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrCopy
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ duplicate a string
-@DESC@
-Allocates memory, copies <parameter>s</parameter> and returns the resulting
-buffer. Yes, this is <function>strdup</function>, but that function isn't
-available on every platform.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrDowncase
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ create a lower case translation of a string
-@DESC@
-Allocates memory, copies <parameter>s</parameter>, converting upper case
-letters to lower case and returns the allocated buffer.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrCopyFilename
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ create a complete path from a filename
-@DESC@
-<function>FcStrCopyFilename</function> constructs an absolute pathname from
-<parameter>s</parameter>. It converts any leading '~' characters in
-to the value of the HOME environment variable, and any relative paths are
-converted to absolute paths using the current working directory. Sequences
-of '/' characters are converted to a single '/', and names containing the
-current directory '.' or parent directory '..' are correctly reconstructed.
-Returns NULL if '~' is the leading character and HOME is unset or disabled
-(see <function>FcConfigEnableHome</function>).
-@@
-
-@RET@ int
-@FUNC@ FcStrCmp
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ compare UTF-8 strings
-@DESC@
-Returns the usual &lt;0, 0, &gt;0 result of comparing
-<parameter>s1</parameter> and <parameter>s2</parameter>.
-@@
-
-@RET@ int
-@FUNC@ FcStrCmpIgnoreCase
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ compare UTF-8 strings ignoring case
-@DESC@
-Returns the usual &lt;0, 0, &gt;0 result of comparing
-<parameter>s1</parameter> and <parameter>s2</parameter>. This test is
-case-insensitive for all proper UTF-8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrStr
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ locate UTF-8 substring
-@DESC@
-Returns the location of <parameter>s2</parameter> in
-<parameter>s1</parameter>. Returns NULL if <parameter>s2</parameter>
-is not present in <parameter>s1</parameter>. This test will operate properly
-with UTF8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrStrIgnoreCase
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ locate UTF-8 substring ignoring ASCII case
-@DESC@
-Returns the location of <parameter>s2</parameter> in
-<parameter>s1</parameter>, ignoring case. Returns NULL if
-<parameter>s2</parameter> is not present in <parameter>s1</parameter>.
-This test is case-insensitive for all proper UTF-8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrPlus
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ concatenate two strings
-@DESC@
-This function allocates new storage and places the concatenation of
-<parameter>s1</parameter> and <parameter>s2</parameter> there, returning the
-new string.
-@@
-
-@RET@ void
-@FUNC@ FcStrFree
-@TYPE1@ FcChar8 * @ARG1@ s
-@PURPOSE@ free a string
-@DESC@
-This is just a wrapper around free(3) which helps track memory usage of
-strings within the fontconfig library.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrDirname
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ directory part of filename
-@DESC@
-Returns the directory containing <parameter>file</parameter>. This
-is returned in newly allocated storage which should be freed when no longer
-needed.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrBasename
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ last component of filename
-@DESC@
-Returns the filename of <parameter>file</parameter> stripped of any leading
-directory names. This is returned in newly allocated storage which should
-be freed when no longer needed.
-@@
+/*
+ * fontconfig/doc/fcstring.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+ <variablelist>
+
+@RET@ int
+@FUNC@ FcUtf8ToUcs4
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcChar32 * @ARG2@ dst
+@TYPE3@ int% @ARG3@ len
+@PURPOSE@ convert UTF-8 to UCS4
+@DESC@
+Converts the next Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes containing the
+char. <parameter>src</parameter> must be at least
+<parameter>len</parameter> bytes long.
+@@
+
+@RET@ int
+@FUNC@ FcUcs4ToUtf8
+@TYPE1@ FcChar32% @ARG1@ src
+@TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN]
+@PURPOSE@ convert UCS4 to UTF-8
+@DESC@
+Converts the Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes needed to encode
+the char.
+@@
+
+@RET@ FcBool
+@FUNC@ FcUtf8Len
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ int% @ARG2@ len
+@TYPE3@ int * @ARG3@ nchar
+@TYPE4@ int * @ARG4@ wchar
+@PURPOSE@ count UTF-8 encoded chars
+@DESC@
+Counts the number of Unicode chars in <parameter>len</parameter> bytes of
+<parameter>src</parameter>. Places that count in
+<parameter>nchar</parameter>. <parameter>wchar</parameter> contains 1, 2 or
+4 depending on the number of bytes needed to hold the largest Unicode char
+counted. The return value indicates whether <parameter>src</parameter> is a
+well-formed UTF8 string.
+@@
+
+@RET@ int
+@FUNC@ FcUtf16ToUcs4
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcEndian% @ARG2@ endian
+@TYPE3@ FcChar32 * @ARG3@ dst
+@TYPE4@ int% @ARG4@ len
+@PURPOSE@ convert UTF-16 to UCS4
+@DESC@
+Converts the next Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes containing the
+char. <parameter>src</parameter> must be at least <parameter>len</parameter>
+bytes long. Bytes of <parameter>src</parameter> are combined into 16-bit
+units according to <parameter>endian</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcUtf16Len
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcEndian% @ARG2@ endian
+@TYPE3@ int% @ARG3@ len
+@TYPE4@ int * @ARG4@ nchar
+@TYPE5@ int * @ARG5@ wchar
+@PURPOSE@ count UTF-16 encoded chars
+@DESC@
+Counts the number of Unicode chars in <parameter>len</parameter> bytes of
+<parameter>src</parameter>. Bytes of <parameter>src</parameter> are
+combined into 16-bit units according to <parameter>endian</parameter>.
+Places that count in <parameter>nchar</parameter>.
+<parameter>wchar</parameter> contains 1, 2 or 4 depending on the number of
+bytes needed to hold the largest Unicode char counted. The return value
+indicates whether <parameter>string</parameter> is a well-formed UTF16
+string.
+@@
+
+@RET@ FcBool
+@FUNC@ FcIsLower
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ check for lower case ASCII character
+@DESC@
+This macro checks whether <parameter>c</parameter> is an lower case ASCII
+letter.
+@@
+
+@RET@ FcBool
+@FUNC@ FcIsUpper
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ check for upper case ASCII character
+@DESC@
+This macro checks whether <parameter>c</parameter> is a upper case ASCII
+letter.
+@@
+
+@RET@ FcChar8
+@FUNC@ FcToLower
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ convert upper case ASCII to lower case
+@DESC@
+This macro converts upper case ASCII <parameter>c</parameter> to the
+equivalent lower case letter.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrCopy
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ duplicate a string
+@DESC@
+Allocates memory, copies <parameter>s</parameter> and returns the resulting
+buffer. Yes, this is <function>strdup</function>, but that function isn't
+available on every platform.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrDowncase
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ create a lower case translation of a string
+@DESC@
+Allocates memory, copies <parameter>s</parameter>, converting upper case
+letters to lower case and returns the allocated buffer.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrCopyFilename
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ create a complete path from a filename
+@DESC@
+<function>FcStrCopyFilename</function> constructs an absolute pathname from
+<parameter>s</parameter>. It converts any leading '~' characters in
+to the value of the HOME environment variable, and any relative paths are
+converted to absolute paths using the current working directory. Sequences
+of '/' characters are converted to a single '/', and names containing the
+current directory '.' or parent directory '..' are correctly reconstructed.
+Returns NULL if '~' is the leading character and HOME is unset or disabled
+(see <function>FcConfigEnableHome</function>).
+@@
+
+@RET@ int
+@FUNC@ FcStrCmp
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ compare UTF-8 strings
+@DESC@
+Returns the usual &lt;0, 0, &gt;0 result of comparing
+<parameter>s1</parameter> and <parameter>s2</parameter>.
+@@
+
+@RET@ int
+@FUNC@ FcStrCmpIgnoreCase
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ compare UTF-8 strings ignoring case
+@DESC@
+Returns the usual &lt;0, 0, &gt;0 result of comparing
+<parameter>s1</parameter> and <parameter>s2</parameter>. This test is
+case-insensitive for all proper UTF-8 encoded strings.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrStr
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ locate UTF-8 substring
+@DESC@
+Returns the location of <parameter>s2</parameter> in
+<parameter>s1</parameter>. Returns NULL if <parameter>s2</parameter>
+is not present in <parameter>s1</parameter>. This test will operate properly
+with UTF8 encoded strings.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrStrIgnoreCase
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ locate UTF-8 substring ignoring ASCII case
+@DESC@
+Returns the location of <parameter>s2</parameter> in
+<parameter>s1</parameter>, ignoring case. Returns NULL if
+<parameter>s2</parameter> is not present in <parameter>s1</parameter>.
+This test is case-insensitive for all proper UTF-8 encoded strings.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrPlus
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ concatenate two strings
+@DESC@
+This function allocates new storage and places the concatenation of
+<parameter>s1</parameter> and <parameter>s2</parameter> there, returning the
+new string.
+@@
+
+@RET@ void
+@FUNC@ FcStrFree
+@TYPE1@ FcChar8 * @ARG1@ s
+@PURPOSE@ free a string
+@DESC@
+This is just a wrapper around free(3) which helps track memory usage of
+strings within the fontconfig library.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrDirname
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ directory part of filename
+@DESC@
+Returns the directory containing <parameter>file</parameter>. This
+is returned in newly allocated storage which should be freed when no longer
+needed.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrBasename
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ last component of filename
+@DESC@
+Returns the filename of <parameter>file</parameter> stripped of any leading
+directory names. This is returned in newly allocated storage which should
+be freed when no longer needed.
+@@
diff --git a/fontconfig/doc/fcstrset.fncs b/fontconfig/doc/fcstrset.fncs
index 61af37b63..65ec08908 100644
--- a/fontconfig/doc/fcstrset.fncs
+++ b/fontconfig/doc/fcstrset.fncs
@@ -1,115 +1,115 @@
-/*
- * fontconfig/doc/fcstrset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- <variablelist>
-
-@RET@ FcStrSet *
-@FUNC@ FcStrSetCreate
-@TYPE1@ void
-@PURPOSE@ create a string set
-@DESC@
-Create an empty set.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetMember
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ check set for membership
-@DESC@
-Returns whether <parameter>s</parameter> is a member of
-<parameter>set</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetEqual
-@TYPE1@ FcStrSet * @ARG1@ set_a
-@TYPE2@ FcStrSet * @ARG2@ set_b
-@PURPOSE@ check sets for equality
-@DESC@
-Returns whether <parameter>set_a</parameter> contains precisely the same
-strings as <parameter>set_b</parameter>. Ordering of strings within the two
-sets is not considered.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetAdd
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ add to a string set
-@DESC@
-Adds a copy of <parameter>s</parameter> to <parameter>set</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetAddFilename
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ add a filename to a string set
-@DESC@
-Adds a copy <parameter>s</parameter> to <parameter>set</parameter>, The copy
-is created with FcStrCopyFilename so that leading '~' values are replaced
-with the value of the HOME environment variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetDel
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ delete from a string set
-@DESC@
-Removes <parameter>s</parameter> from <parameter>set</parameter>, returning
-FcTrue if <parameter>s</parameter> was a member else FcFalse.
-@@
-
-@RET@ void
-@FUNC@ FcStrSetDestroy
-@TYPE1@ FcStrSet * @ARG1@ set
-@PURPOSE@ destroy a string set
-@DESC@
-Destroys <parameter>set</parameter>.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcStrListCreate
-@TYPE1@ FcStrSet * @ARG1@ set
-@PURPOSE@ create a string iterator
-@DESC@
-Creates an iterator to list the strings in <parameter>set</parameter>.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrListNext
-@TYPE1@ FcStrList * @ARG1@ list
-@PURPOSE@ get next string in iteration
-@DESC@
-Returns the next string in <parameter>set</parameter>.
-@@
-
-@RET@ void
-@FUNC@ FcStrListDone
-@TYPE1@ FcStrList * @ARG1@ list
-@PURPOSE@ destroy a string iterator
-@DESC@
-Destroys the enumerator <parameter>list</parameter>.
-@@
+/*
+ * fontconfig/doc/fcstrset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+ <variablelist>
+
+@RET@ FcStrSet *
+@FUNC@ FcStrSetCreate
+@TYPE1@ void
+@PURPOSE@ create a string set
+@DESC@
+Create an empty set.
+@@
+
+@RET@ FcBool
+@FUNC@ FcStrSetMember
+@TYPE1@ FcStrSet * @ARG1@ set
+@TYPE2@ const FcChar8 * @ARG2@ s
+@PURPOSE@ check set for membership
+@DESC@
+Returns whether <parameter>s</parameter> is a member of
+<parameter>set</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcStrSetEqual
+@TYPE1@ FcStrSet * @ARG1@ set_a
+@TYPE2@ FcStrSet * @ARG2@ set_b
+@PURPOSE@ check sets for equality
+@DESC@
+Returns whether <parameter>set_a</parameter> contains precisely the same
+strings as <parameter>set_b</parameter>. Ordering of strings within the two
+sets is not considered.
+@@
+
+@RET@ FcBool
+@FUNC@ FcStrSetAdd
+@TYPE1@ FcStrSet * @ARG1@ set
+@TYPE2@ const FcChar8 * @ARG2@ s
+@PURPOSE@ add to a string set
+@DESC@
+Adds a copy of <parameter>s</parameter> to <parameter>set</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcStrSetAddFilename
+@TYPE1@ FcStrSet * @ARG1@ set
+@TYPE2@ const FcChar8 * @ARG2@ s
+@PURPOSE@ add a filename to a string set
+@DESC@
+Adds a copy <parameter>s</parameter> to <parameter>set</parameter>, The copy
+is created with FcStrCopyFilename so that leading '~' values are replaced
+with the value of the HOME environment variable.
+@@
+
+@RET@ FcBool
+@FUNC@ FcStrSetDel
+@TYPE1@ FcStrSet * @ARG1@ set
+@TYPE2@ const FcChar8 * @ARG2@ s
+@PURPOSE@ delete from a string set
+@DESC@
+Removes <parameter>s</parameter> from <parameter>set</parameter>, returning
+FcTrue if <parameter>s</parameter> was a member else FcFalse.
+@@
+
+@RET@ void
+@FUNC@ FcStrSetDestroy
+@TYPE1@ FcStrSet * @ARG1@ set
+@PURPOSE@ destroy a string set
+@DESC@
+Destroys <parameter>set</parameter>.
+@@
+
+@RET@ FcStrList *
+@FUNC@ FcStrListCreate
+@TYPE1@ FcStrSet * @ARG1@ set
+@PURPOSE@ create a string iterator
+@DESC@
+Creates an iterator to list the strings in <parameter>set</parameter>.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrListNext
+@TYPE1@ FcStrList * @ARG1@ list
+@PURPOSE@ get next string in iteration
+@DESC@
+Returns the next string in <parameter>set</parameter>.
+@@
+
+@RET@ void
+@FUNC@ FcStrListDone
+@TYPE1@ FcStrList * @ARG1@ list
+@PURPOSE@ destroy a string iterator
+@DESC@
+Destroys the enumerator <parameter>list</parameter>.
+@@
diff --git a/fontconfig/doc/fcvalue.fncs b/fontconfig/doc/fcvalue.fncs
index d0c669b1f..2563a2557 100644
--- a/fontconfig/doc/fcvalue.fncs
+++ b/fontconfig/doc/fcvalue.fncs
@@ -1,61 +1,61 @@
-/*
- * fontconfig/doc/fcvalue.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ void
-@FUNC@ FcValueDestroy
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Free a value
-@DESC@
-Frees any memory referenced by <parameter>v</parameter>. Values of type FcTypeString,
-FcTypeMatrix and FcTypeCharSet reference memory, the other types do not.
-@@
-
-@RET@ FcValue
-@FUNC@ FcValueSave
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Copy a value
-@DESC@
-Returns a copy of <parameter>v</parameter> duplicating any object referenced by it so that <parameter>v</parameter>
-may be safely destroyed without harming the new value.
-@@
-
-@RET@ void
-@FUNC@ FcValuePrint
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Print a value to stdout
-@DESC@
-Prints a human-readable representation of <parameter>v</parameter> to
-stdout. The format should not be considered part of the library
-specification as it may change in the future.
-@@
-
-@RET@ FcBool
-@FUNC@ FcValueEqual
-@TYPE1@ FcValue% @ARG1@ v_a
-@TYPE2@ FcValue% @ARG2@ v_b
-@PURPOSE@ Test two values for equality
-@DESC@
-Compares two values. Integers and Doubles are compared as numbers; otherwise
-the two values have to be the same type to be considered equal. Strings are
-compared ignoring case.
-@@
+/*
+ * fontconfig/doc/fcvalue.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ void
+@FUNC@ FcValueDestroy
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Free a value
+@DESC@
+Frees any memory referenced by <parameter>v</parameter>. Values of type FcTypeString,
+FcTypeMatrix and FcTypeCharSet reference memory, the other types do not.
+@@
+
+@RET@ FcValue
+@FUNC@ FcValueSave
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Copy a value
+@DESC@
+Returns a copy of <parameter>v</parameter> duplicating any object referenced by it so that <parameter>v</parameter>
+may be safely destroyed without harming the new value.
+@@
+
+@RET@ void
+@FUNC@ FcValuePrint
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Print a value to stdout
+@DESC@
+Prints a human-readable representation of <parameter>v</parameter> to
+stdout. The format should not be considered part of the library
+specification as it may change in the future.
+@@
+
+@RET@ FcBool
+@FUNC@ FcValueEqual
+@TYPE1@ FcValue% @ARG1@ v_a
+@TYPE2@ FcValue% @ARG2@ v_b
+@PURPOSE@ Test two values for equality
+@DESC@
+Compares two values. Integers and Doubles are compared as numbers; otherwise
+the two values have to be the same type to be considered equal. Strings are
+compared ignoring case.
+@@
diff --git a/fontconfig/doc/fontconfig-devel.sgml b/fontconfig/doc/fontconfig-devel.sgml
index 891251f30..52675e267 100644
--- a/fontconfig/doc/fontconfig-devel.sgml
+++ b/fontconfig/doc/fontconfig-devel.sgml
@@ -1,573 +1,573 @@
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-<!ENTITY fcatomic SYSTEM "fcatomic.sgml">
-<!ENTITY fcblanks SYSTEM "fcblanks.sgml">
-<!ENTITY fccache SYSTEM "fccache.sgml">
-<!ENTITY fccharset SYSTEM "fccharset.sgml">
-<!ENTITY fcconfig SYSTEM "fcconfig.sgml">
-<!ENTITY fcconstant SYSTEM "fcconstant.sgml">
-<!ENTITY fcdircache SYSTEM "fcdircache.sgml">
-<!ENTITY fcfile SYSTEM "fcfile.sgml">
-<!ENTITY fcfontset SYSTEM "fcfontset.sgml">
-<!ENTITY fcformat SYSTEM "fcformat.sgml">
-<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml">
-<!ENTITY fcinit SYSTEM "fcinit.sgml">
-<!ENTITY fclangset SYSTEM "fclangset.sgml">
-<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml">
-<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml">
-<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml">
-<!ENTITY fcpattern SYSTEM "fcpattern.sgml">
-<!ENTITY fcstring SYSTEM "fcstring.sgml">
-<!ENTITY fcstrset SYSTEM "fcstrset.sgml">
-<!ENTITY fcvalue SYSTEM "fcvalue.sgml">
-<!ENTITY version SYSTEM "version.sgml">
-]>
-<!--
- fontconfig/doc/local-fontconfig-devel.sgml
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of Keith Packard not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. Keith Packard makes no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<article>
- <title>Fontconfig Developers Reference, Version &version; </title>
- <artheader>
- <author>
- <firstname>Keith</firstname>
- <surname>Packard</surname>
- <affiliation><orgname>
- HP Cambridge Research Lab
- </orgname></affiliation>
- </author>
- <authorinitials>KRP</authorinitials>
- <productname>Fontconfig</productname>
- <productnumber>&version;</productnumber>
- <LegalNotice>
- <simpara>
-Copyright © 2002 Keith Packard
- </simpara><simpara>
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Keith Packard not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission. Keith Packard makes no
-representations about the suitability of this software for any purpose. It
-is provided "as is" without express or implied warranty.
- </simpara><simpara>
-THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
- </simpara>
- </LegalNotice>
- </artheader>
-<sect1><title>DESCRIPTION</title>
- <para>
-Fontconfig is a library designed to provide system-wide font configuration,
-customization and application access.
- </para>
-</sect1>
-<sect1><title>FUNCTIONAL OVERVIEW</title>
- <para>
-Fontconfig contains two essential modules, the configuration module which
-builds an internal configuration from XML files and the matching module
-which accepts font patterns and returns the nearest matching font.
- </para>
- <sect2><title>FONT CONFIGURATION</title>
- <para>
-The configuration module consists of the FcConfig datatype, libexpat and
-FcConfigParse which walks over an XML tree and ammends a configuration with
-data found within. From an external perspective, configuration of the
-library consists of generating a valid XML tree and feeding that to
-FcConfigParse. The only other mechanism provided to applications for
-changing the running configuration is to add fonts and directories to the
-list of application-provided font files.
- </para><para>
-The intent is to make font configurations relatively static, and shared by
-as many applications as possible. It is hoped that this will lead to more
-stable font selection when passing names from one application to another.
-XML was chosen as a configuration file format because it provides a format
-which is easy for external agents to edit while retaining the correct
-structure and syntax.
- </para><para>
-Font configuration is separate from font matching; applications needing to
-do their own matching can access the available fonts from the library and
-perform private matching. The intent is to permit applications to pick and
-choose appropriate functionality from the library instead of forcing them to
-choose between this library and a private configuration mechanism. The hope
-is that this will ensure that configuration of fonts for all applications
-can be centralized in one place. Centralizing font configuration will
-simplify and regularize font installation and customization.
- </para>
- </sect2>
- <sect2>
- <title>FONT PROPERTIES</title>
- <para>
-While font patterns may contain essentially any properties, there are some
-well known properties with associated types. Fontconfig uses some of these
-properties for font matching and font completion. Others are provided as a
-convenience for the applications rendering mechanism.
- </para>
- <programlisting>
- Property Definitions
-
- Property CPP Symbol Type Description
- ----------------------------------------------------
- family FC_FAMILY String Font family names
- familylang FC_FAMILYLANG String Language cooresponding to
- each family name
- style FC_STYLE String Font style. Overrides weight
- and slant
- stylelang FC_STYLELANG String Language cooresponding to
- each style name
- fullname FC_FULLNAME String Font face full name where
- different from family and
- family + style
- fullnamelang FC_FULLNAMELANG String Language cooresponding to
- each fullname
- slant FC_SLANT Int Italic, oblique or roman
- weight FC_WEIGHT Int Light, medium, demibold,
- bold or black
- size FC_SIZE Double Point size
- width FC_WIDTH Int Condensed, normal or expanded
- aspect FC_ASPECT Double Stretches glyphs horizontally
- before hinting
- pixelsize FC_PIXEL_SIZE Double Pixel size
- spacing FC_SPACING Int Proportional, dual-width,
- monospace or charcell
- foundry FC_FOUNDRY String Font foundry name
- antialias FC_ANTIALIAS Bool Whether glyphs can be
- antialiased
- hinting FC_HINTING Bool Whether the rasterizer should
- use hinting
- hintstyle FC_HINT_STYLE Int Automatic hinting style
- verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout
- autohint FC_AUTOHINT Bool Use autohinter instead of
- normal hinter
- globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data
- file FC_FILE String The filename holding the font
- index FC_INDEX Int The index of the font within
- the file
- ftface FC_FT_FACE FT_Face Use the specified FreeType
- face object
- rasterizer FC_RASTERIZER String Which rasterizer is in use
- outline FC_OUTLINE Bool Whether the glyphs are outlines
- scalable FC_SCALABLE Bool Whether glyphs can be scaled
- scale FC_SCALE Double Scale factor for point->pixel
- conversions
- dpi FC_DPI Double Target dots per inch
- rgba FC_RGBA Int unknown, rgb, bgr, vrgb,
- vbgr, none - subpixel geometry
- lcdfilter FC_LCD_FILTER Int Type of LCD filter
- minspace FC_MINSPACE Bool Eliminate leading from line
- spacing
- charset FC_CHARSET CharSet Unicode chars encoded by
- the font
- lang FC_LANG LangSet Set of RFC-3066-style
- languages this font supports
- fontversion FC_FONTVERSION Int Version number of the font
- capability FC_CAPABILITY String List of layout capabilities in
- the font
- embolden FC_EMBOLDEN Bool Rasterizer should
- synthetically embolden the font
- </programlisting>
- </sect2>
-</sect1>
-<sect1><title>Datatypes</title>
- <para>
-Fontconfig uses abstract datatypes to hide internal implementation details
-for most data structures. A few structures are exposed where appropriate.
- </para>
- <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title>
- <para>
-These are primitive datatypes; the FcChar* types hold precisely the number
-of bits stated (if supported by the C implementation). FcBool holds
-one of two CPP symbols: FcFalse or FcTrue.
- </para>
- </sect2>
- <sect2><title>FcMatrix</title>
- <para>
-An FcMatrix holds an affine transformation, usually used to reshape glyphs.
-A small set of matrix operations are provided to manipulate these.
- <programlisting>
- typedef struct _FcMatrix {
- double xx, xy, yx, yy;
- } FcMatrix;
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcCharSet</title>
- <para>
-An FcCharSet is an abstract type that holds the set of encoded unicode chars
-in a font. Operations to build and compare these sets are provided.
- </para>
- </sect2>
- <sect2><title>FcLangSet</title>
- <para>
-An FcLangSet is an abstract type that holds the set of languages supported
-by a font. Operations to build and compare these sets are provided. These
-are computed for a font based on orthographic information built into the
-fontconfig library. Fontconfig has orthographies for all of the ISO 639-1
-languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If
-you have orthographic information for any of these languages, please submit
-them.
- </para>
- </sect2>
- <sect2><title>FcLangResult</title>
- <para>
-An FcLangResult is an enumeration used to return the results of comparing
-two language strings or FcLangSet objects. FcLangEqual means the
-objects match language and territory. FcLangDifferentTerritory means
-the objects match in language but differ in territory.
-FcLangDifferentLang means the objects differ in language.
- </para>
- </sect2>
- <sect2><title>FcType</title>
- <para>
-Tags the kind of data stored in an FcValue.
- </para>
- </sect2>
- <sect2><title>FcValue</title>
- <para>
-An FcValue object holds a single value with one of a number of different
-types. The 'type' tag indicates which member is valid.
- <programlisting>
- typedef struct _FcValue {
- FcType type;
- union {
- const FcChar8 *s;
- int i;
- FcBool b;
- double d;
- const FcMatrix *m;
- const FcCharSet *c;
- void *f;
- const FcLangSet *l;
- } u;
- } FcValue;
- </programlisting>
- <programlisting>
- FcValue Members
-
- Type Union member Datatype
- --------------------------------
- FcTypeVoid (none) (none)
- FcTypeInteger i int
- FcTypeDouble d double
- FcTypeString s FcChar8 *
- FcTypeBool b b
- FcTypeMatrix m FcMatrix *
- FcTypeCharSet c FcCharSet *
- FcTypeFTFace f void * (FT_Face)
- FcTypeLangSet l FcLangSet *
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcPattern</title>
- <para>
-holds a set of names with associated value lists; each name refers to a
-property of a font. FcPatterns are used as inputs to the matching code as
-well as holding information about specific fonts. Each property can hold
-one or more values; conventionally all of the same type, although the
-interface doesn't demand that.
- </para>
- </sect2>
- <sect2><title>FcFontSet</title>
- <para>
- <programlisting>
- typedef struct _FcFontSet {
- int nfont;
- int sfont;
- FcPattern **fonts;
- } FcFontSet;
- </programlisting>
-An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this
-data structure to hold sets of fonts. Externally, fontconfig returns the
-results of listing fonts in this format. 'nfont' holds the number of
-patterns in the 'fonts' array; 'sfont' is used to indicate the size of that
-array.
- </para>
- </sect2>
- <sect2><title>FcStrSet, FcStrList</title>
- <para>
-FcStrSet holds a list of strings that can be appended to and enumerated.
-Its unique characteristic is that the enumeration works even while strings
-are appended during enumeration. FcStrList is used during enumeration to
-safely and correctly walk the list of strings even while that list is edited
-in the middle of enumeration.
- </para>
- </sect2>
- <sect2><title>FcObjectSet</title>
- <para>
- <programlisting>
- typedef struct _FcObjectSet {
- int nobject;
- int sobject;
- const char **objects;
- } FcObjectSet;
- </programlisting>
-holds a set of names and is used to specify which fields from fonts are
-placed in the the list of returned patterns when listing fonts.
- </para>
- </sect2>
- <sect2><title>FcObjectType</title>
- <para>
- <programlisting>
- typedef struct _FcObjectType {
- const char *object;
- FcType type;
- } FcObjectType;
- </programlisting>
-marks the type of a pattern element generated when parsing font names.
-Applications can add new object types so that font names may contain the new
-elements.
- </para>
- </sect2>
- <sect2><title>FcConstant</title>
- <para>
- <programlisting>
- typedef struct _FcConstant {
- const FcChar8 *name;
- const char *object;
- int value;
- } FcConstant;
- </programlisting>
-Provides for symbolic constants for new pattern elements. When 'name' is
-seen in a font name, an 'object' element is created with value 'value'.
- </para>
- </sect2>
- <sect2><title>FcBlanks</title>
- <para>
-holds a list of Unicode chars which are expected to be blank; unexpectedly
-blank chars are assumed to be invalid and are elided from the charset
-associated with the font.
- </para>
- </sect2>
- <sect2><title>FcFileCache</title>
- <para>
-holds the per-user cache information for use while loading the font
-database. This is built automatically for the current configuration when
-that is loaded. Applications must always pass '0' when one is requested.
- </para>
- </sect2>
- <sect2><title>FcConfig</title>
- <para>
-holds a complete configuration of the library; there is one default
-configuration, other can be constructed from XML data structures. All
-public entry points that need global data can take an optional FcConfig*
-argument; passing 0 uses the default configuration. FcConfig objects hold two
-sets of fonts, the first contains those specified by the configuration, the
-second set holds those added by the application at run-time. Interfaces
-that need to reference a particulat set use one of the FcSetName enumerated
-values.
- </para>
- </sect2>
- <sect2><title>FcSetName</title>
- <para>
-Specifies one of the two sets of fonts available in a configuration;
-FcSetSystem for those fonts specified in the configuration and
-FcSetApplication which holds fonts provided by the application.
- </para>
- </sect2>
- <sect2><title>FcResult</title>
- <para>
-Used as a return type for functions manipulating FcPattern objects.
- <programlisting>
- FcResult Values
- Result Code Meaning
- -----------------------------------------------------------
- FcResultMatch Object exists with the specified ID
- FcResultNoMatch Object doesn't exist at all
- FcResultTypeMismatch Object exists, but the type doesn't match
- FcResultNoId Object exists, but has fewer values
- than specified
- FcResultOutOfMemory Malloc failed
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcAtomic</title>
- <para>
-Used for locking access to config files. Provides a safe way to update
-configuration files.
- </para>
- </sect2>
- <sect2><title>FcCache</title>
- <para>
-Holds information about the fonts contained in a single directory. Normal
-applications need not worry about this as caches for font access are
-automatically managed by the library. Applications dealing with cache
-management may want to use some of these objects in their work, however the
-included 'fc-cache' program generally suffices for all of that.
- </para>
- </sect2>
-</sect1>
-<sect1><title>FUNCTIONS</title>
- <para>
-These are grouped by functionality, often using the main datatype being
-manipulated.
- </para>
- <sect2><title>Initialization</title>
- <para>
-These functions provide some control over how the library is initialized.
- </para>
- &fcinit;
- </sect2>
- <sect2><title>FcPattern</title>
- <para>
-An FcPattern is an opaque type that holds both patterns to match against the
-available fonts, as well as the information about each font.
- </para>
- &fcpattern;
- &fcformat;
- </sect2>
- <sect2><title>FcFontSet</title>
- <para>
-An FcFontSet simply holds a list of patterns; these are used to return the
-results of listing available fonts.
- </para>
- &fcfontset;
- </sect2>
- <sect2><title>FcObjectSet</title>
- <para>
-An FcObjectSet holds a list of pattern property names; it is used to
-indiciate which properties are to be returned in the patterns from
-FcFontList.
- </para>
- &fcobjectset;
- </sect2>
- <sect2><title>FreeType specific functions</title>
- <para>
-While the fontconfig library doesn't insist that FreeType be used as the
-rasterization mechanism for fonts, it does provide some convenience
-functions.
- </para>
- &fcfreetype;
- </sect2>
- <sect2><title>FcValue</title>
- <para>
-FcValue is a structure containing a type tag and a union of all possible
-datatypes. The tag is an enum of type
-<emphasis>FcType</emphasis>
-and is intended to provide a measure of run-time
-typechecking, although that depends on careful programming.
- </para>
- &fcvalue;
- </sect2>
- <sect2><title>FcCharSet</title>
- <para>
-An FcCharSet is a boolean array indicating a set of unicode chars. Those
-associated with a font are marked constant and cannot be edited.
-FcCharSets may be reference counted internally to reduce memory consumption;
-this may be visible to applications as the result of FcCharSetCopy may
-return it's argument, and that CharSet may remain unmodifiable.
- </para>
- &fccharset;
- </sect2>
- <sect2><title>FcLangSet</title>
- <para>
-An FcLangSet is a set of language names (each of which include language and
-an optional territory). They are used when selecting fonts to indicate which
-languages the fonts need to support. Each font is marked, using language
-orthography information built into fontconfig, with the set of supported
-languages.
- </para>
- &fclangset;
- </sect2>
- <sect2><title>FcMatrix</title>
- <para>
-FcMatrix structures hold an affine transformation in matrix form.
- </para>
- &fcmatrix;
- </sect2>
- <sect2><title>FcConfig</title>
- <para>
-An FcConfig object holds the internal representation of a configuration.
-There is a default configuration which applications may use by passing 0 to
-any function using the data within an FcConfig.
- </para>
- &fcconfig;
- </sect2>
- <sect2><title>FcObjectType</title>
- <para>
-Provides for applcation-specified font name object types so that new
-pattern elements can be generated from font names.
- </para>
- &fcobjecttype;
- </sect2>
- <sect2><title>FcConstant</title>
- <para>
-Provides for application-specified symbolic constants for font names.
- </para>
- &fcconstant;
- </sect2>
- <sect2><title>FcBlanks</title>
- <para>
-An FcBlanks object holds a list of Unicode chars which are expected to
-be blank when drawn. When scanning new fonts, any glyphs which are
-empty and not in this list will be assumed to be broken and not placed in
-the FcCharSet associated with the font. This provides a significantly more
-accurate CharSet for applications.
- </para>
- &fcblanks;
- </sect2>
- <sect2><title>FcAtomic</title>
- <para>
-These functions provide a safe way to update config files, allowing ongoing
-reading of the old config file while locked for writing and ensuring that a
-consistent and complete version of the config file is always available.
- </para>
- &fcatomic;
- </sect2>
- <sect2><title>File and Directory routines</title>
- <para>
-These routines work with font files and directories, including font
-directory cache files.
- </para>
- &fcfile;
- &fcdircache;
- </sect2>
- <sect2><title>FcCache routines</title>
- <para>
-These routines work with font directory caches, accessing their contents in
-limited ways. It is not expected that normal applications will need to use
-these functions.
- </para>
- &fccache;
- </sect2>
- <sect2><title>FcStrSet and FcStrList</title>
- <para>
-A data structure for enumerating strings, used to list directories while
-scanning the configuration as directories are added while scanning.
- </para>
- &fcstrset;
- </sect2>
- <sect2><title>String utilities</title>
- <para>
-Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type.
-These functions are exposed to help applications deal with these UTF-8
-strings in a locale-insensitive manner.
- </para>
- &fcstring;
- </sect2>
-</sect1>
-</article>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
+<!ENTITY fcatomic SYSTEM "fcatomic.sgml">
+<!ENTITY fcblanks SYSTEM "fcblanks.sgml">
+<!ENTITY fccache SYSTEM "fccache.sgml">
+<!ENTITY fccharset SYSTEM "fccharset.sgml">
+<!ENTITY fcconfig SYSTEM "fcconfig.sgml">
+<!ENTITY fcconstant SYSTEM "fcconstant.sgml">
+<!ENTITY fcdircache SYSTEM "fcdircache.sgml">
+<!ENTITY fcfile SYSTEM "fcfile.sgml">
+<!ENTITY fcfontset SYSTEM "fcfontset.sgml">
+<!ENTITY fcformat SYSTEM "fcformat.sgml">
+<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml">
+<!ENTITY fcinit SYSTEM "fcinit.sgml">
+<!ENTITY fclangset SYSTEM "fclangset.sgml">
+<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml">
+<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml">
+<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml">
+<!ENTITY fcpattern SYSTEM "fcpattern.sgml">
+<!ENTITY fcstring SYSTEM "fcstring.sgml">
+<!ENTITY fcstrset SYSTEM "fcstrset.sgml">
+<!ENTITY fcvalue SYSTEM "fcvalue.sgml">
+<!ENTITY version SYSTEM "version.sgml">
+]>
+<!--
+ fontconfig/doc/local-fontconfig-devel.sgml
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+<article>
+ <title>Fontconfig Developers Reference, Version &version; </title>
+ <artheader>
+ <author>
+ <firstname>Keith</firstname>
+ <surname>Packard</surname>
+ <affiliation><orgname>
+ HP Cambridge Research Lab
+ </orgname></affiliation>
+ </author>
+ <authorinitials>KRP</authorinitials>
+ <productname>Fontconfig</productname>
+ <productnumber>&version;</productnumber>
+ <LegalNotice>
+ <simpara>
+Copyright © 2002 Keith Packard
+ </simpara><simpara>
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of the author(s) not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. The authors make no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+ </simpara><simpara>
+THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+ </simpara>
+ </LegalNotice>
+ </artheader>
+<sect1><title>DESCRIPTION</title>
+ <para>
+Fontconfig is a library designed to provide system-wide font configuration,
+customization and application access.
+ </para>
+</sect1>
+<sect1><title>FUNCTIONAL OVERVIEW</title>
+ <para>
+Fontconfig contains two essential modules, the configuration module which
+builds an internal configuration from XML files and the matching module
+which accepts font patterns and returns the nearest matching font.
+ </para>
+ <sect2><title>FONT CONFIGURATION</title>
+ <para>
+The configuration module consists of the FcConfig datatype, libexpat and
+FcConfigParse which walks over an XML tree and amends a configuration with
+data found within. From an external perspective, configuration of the
+library consists of generating a valid XML tree and feeding that to
+FcConfigParse. The only other mechanism provided to applications for
+changing the running configuration is to add fonts and directories to the
+list of application-provided font files.
+ </para><para>
+The intent is to make font configurations relatively static, and shared by
+as many applications as possible. It is hoped that this will lead to more
+stable font selection when passing names from one application to another.
+XML was chosen as a configuration file format because it provides a format
+which is easy for external agents to edit while retaining the correct
+structure and syntax.
+ </para><para>
+Font configuration is separate from font matching; applications needing to
+do their own matching can access the available fonts from the library and
+perform private matching. The intent is to permit applications to pick and
+choose appropriate functionality from the library instead of forcing them to
+choose between this library and a private configuration mechanism. The hope
+is that this will ensure that configuration of fonts for all applications
+can be centralized in one place. Centralizing font configuration will
+simplify and regularize font installation and customization.
+ </para>
+ </sect2>
+ <sect2>
+ <title>FONT PROPERTIES</title>
+ <para>
+While font patterns may contain essentially any properties, there are some
+well known properties with associated types. Fontconfig uses some of these
+properties for font matching and font completion. Others are provided as a
+convenience for the application's rendering mechanism.
+ </para>
+ <programlisting>
+ Property Definitions
+
+ Property C Preprocessor Symbol Type Description
+ ----------------------------------------------------
+ family FC_FAMILY String Font family names
+ familylang FC_FAMILYLANG String Language corresponding to
+ each family name
+ style FC_STYLE String Font style. Overrides weight
+ and slant
+ stylelang FC_STYLELANG String Language corresponding to
+ each style name
+ fullname FC_FULLNAME String Font face full name where
+ different from family and
+ family + style
+ fullnamelang FC_FULLNAMELANG String Language corresponding to
+ each fullname
+ slant FC_SLANT Int Italic, oblique or roman
+ weight FC_WEIGHT Int Light, medium, demibold,
+ bold or black
+ size FC_SIZE Double Point size
+ width FC_WIDTH Int Condensed, normal or expanded
+ aspect FC_ASPECT Double Stretches glyphs horizontally
+ before hinting
+ pixelsize FC_PIXEL_SIZE Double Pixel size
+ spacing FC_SPACING Int Proportional, dual-width,
+ monospace or charcell
+ foundry FC_FOUNDRY String Font foundry name
+ antialias FC_ANTIALIAS Bool Whether glyphs can be
+ antialiased
+ hinting FC_HINTING Bool Whether the rasterizer should
+ use hinting
+ hintstyle FC_HINT_STYLE Int Automatic hinting style
+ verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout
+ autohint FC_AUTOHINT Bool Use autohinter instead of
+ normal hinter
+ globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data
+ file FC_FILE String The filename holding the font
+ index FC_INDEX Int The index of the font within
+ the file
+ ftface FC_FT_FACE FT_Face Use the specified FreeType
+ face object
+ rasterizer FC_RASTERIZER String Which rasterizer is in use
+ outline FC_OUTLINE Bool Whether the glyphs are outlines
+ scalable FC_SCALABLE Bool Whether glyphs can be scaled
+ scale FC_SCALE Double Scale factor for point->pixel
+ conversions
+ dpi FC_DPI Double Target dots per inch
+ rgba FC_RGBA Int unknown, rgb, bgr, vrgb,
+ vbgr, none - subpixel geometry
+ lcdfilter FC_LCD_FILTER Int Type of LCD filter
+ minspace FC_MINSPACE Bool Eliminate leading from line
+ spacing
+ charset FC_CHARSET CharSet Unicode chars encoded by
+ the font
+ lang FC_LANG LangSet Set of RFC-3066-style
+ languages this font supports
+ fontversion FC_FONTVERSION Int Version number of the font
+ capability FC_CAPABILITY String List of layout capabilities in
+ the font
+ embolden FC_EMBOLDEN Bool Rasterizer should
+ synthetically embolden the font
+ </programlisting>
+ </sect2>
+</sect1>
+<sect1><title>Datatypes</title>
+ <para>
+Fontconfig uses abstract data types to hide internal implementation details
+for most data structures. A few structures are exposed where appropriate.
+ </para>
+ <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title>
+ <para>
+These are primitive data types; the FcChar* types hold precisely the number
+of bits stated (if supported by the C implementation). FcBool holds
+one of two C preprocessor symbols: FcFalse or FcTrue.
+ </para>
+ </sect2>
+ <sect2><title>FcMatrix</title>
+ <para>
+An FcMatrix holds an affine transformation, usually used to reshape glyphs.
+A small set of matrix operations are provided to manipulate these.
+ <programlisting>
+ typedef struct _FcMatrix {
+ double xx, xy, yx, yy;
+ } FcMatrix;
+ </programlisting>
+ </para>
+ </sect2>
+ <sect2><title>FcCharSet</title>
+ <para>
+An FcCharSet is an abstract type that holds the set of encoded Unicode chars
+in a font. Operations to build and compare these sets are provided.
+ </para>
+ </sect2>
+ <sect2><title>FcLangSet</title>
+ <para>
+An FcLangSet is an abstract type that holds the set of languages supported
+by a font. Operations to build and compare these sets are provided. These
+are computed for a font based on orthographic information built into the
+fontconfig library. Fontconfig has orthographies for all of the ISO 639-1
+languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If
+you have orthographic information for any of these languages, please submit
+them.
+ </para>
+ </sect2>
+ <sect2><title>FcLangResult</title>
+ <para>
+An FcLangResult is an enumeration used to return the results of comparing
+two language strings or FcLangSet objects. FcLangEqual means the
+objects match language and territory. FcLangDifferentTerritory means
+the objects match in language but differ in territory.
+FcLangDifferentLang means the objects differ in language.
+ </para>
+ </sect2>
+ <sect2><title>FcType</title>
+ <para>
+Tags the kind of data stored in an FcValue.
+ </para>
+ </sect2>
+ <sect2><title>FcValue</title>
+ <para>
+An FcValue object holds a single value with one of a number of different
+types. The 'type' tag indicates which member is valid.
+ <programlisting>
+ typedef struct _FcValue {
+ FcType type;
+ union {
+ const FcChar8 *s;
+ int i;
+ FcBool b;
+ double d;
+ const FcMatrix *m;
+ const FcCharSet *c;
+ void *f;
+ const FcLangSet *l;
+ } u;
+ } FcValue;
+ </programlisting>
+ <programlisting>
+ FcValue Members
+
+ Type Union member Datatype
+ --------------------------------
+ FcTypeVoid (none) (none)
+ FcTypeInteger i int
+ FcTypeDouble d double
+ FcTypeString s FcChar8 *
+ FcTypeBool b b
+ FcTypeMatrix m FcMatrix *
+ FcTypeCharSet c FcCharSet *
+ FcTypeFTFace f void * (FT_Face)
+ FcTypeLangSet l FcLangSet *
+ </programlisting>
+ </para>
+ </sect2>
+ <sect2><title>FcPattern</title>
+ <para>
+holds a set of names with associated value lists; each name refers to a
+property of a font. FcPatterns are used as inputs to the matching code as
+well as holding information about specific fonts. Each property can hold
+one or more values; conventionally all of the same type, although the
+interface doesn't demand that.
+ </para>
+ </sect2>
+ <sect2><title>FcFontSet</title>
+ <para>
+ <programlisting>
+ typedef struct _FcFontSet {
+ int nfont;
+ int sfont;
+ FcPattern **fonts;
+ } FcFontSet;
+ </programlisting>
+An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this
+data structure to hold sets of fonts. Externally, fontconfig returns the
+results of listing fonts in this format. 'nfont' holds the number of
+patterns in the 'fonts' array; 'sfont' is used to indicate the size of that
+array.
+ </para>
+ </sect2>
+ <sect2><title>FcStrSet, FcStrList</title>
+ <para>
+FcStrSet holds a list of strings that can be appended to and enumerated.
+Its unique characteristic is that the enumeration works even while strings
+are appended during enumeration. FcStrList is used during enumeration to
+safely and correctly walk the list of strings even while that list is edited
+in the middle of enumeration.
+ </para>
+ </sect2>
+ <sect2><title>FcObjectSet</title>
+ <para>
+ <programlisting>
+ typedef struct _FcObjectSet {
+ int nobject;
+ int sobject;
+ const char **objects;
+ } FcObjectSet;
+ </programlisting>
+holds a set of names and is used to specify which fields from fonts are
+placed in the the list of returned patterns when listing fonts.
+ </para>
+ </sect2>
+ <sect2><title>FcObjectType</title>
+ <para>
+ <programlisting>
+ typedef struct _FcObjectType {
+ const char *object;
+ FcType type;
+ } FcObjectType;
+ </programlisting>
+marks the type of a pattern element generated when parsing font names.
+Applications can add new object types so that font names may contain the new
+elements.
+ </para>
+ </sect2>
+ <sect2><title>FcConstant</title>
+ <para>
+ <programlisting>
+ typedef struct _FcConstant {
+ const FcChar8 *name;
+ const char *object;
+ int value;
+ } FcConstant;
+ </programlisting>
+Provides for symbolic constants for new pattern elements. When 'name' is
+seen in a font name, an 'object' element is created with value 'value'.
+ </para>
+ </sect2>
+ <sect2><title>FcBlanks</title>
+ <para>
+holds a list of Unicode chars which are expected to be blank; unexpectedly
+blank chars are assumed to be invalid and are elided from the charset
+associated with the font.
+ </para>
+ </sect2>
+ <sect2><title>FcFileCache</title>
+ <para>
+holds the per-user cache information for use while loading the font
+database. This is built automatically for the current configuration when
+that is loaded. Applications must always pass '0' when one is requested.
+ </para>
+ </sect2>
+ <sect2><title>FcConfig</title>
+ <para>
+holds a complete configuration of the library; there is one default
+configuration, other can be constructed from XML data structures. All
+public entry points that need global data can take an optional FcConfig*
+argument; passing 0 uses the default configuration. FcConfig objects hold two
+sets of fonts, the first contains those specified by the configuration, the
+second set holds those added by the application at run-time. Interfaces
+that need to reference a particular set use one of the FcSetName enumerated
+values.
+ </para>
+ </sect2>
+ <sect2><title>FcSetName</title>
+ <para>
+Specifies one of the two sets of fonts available in a configuration;
+FcSetSystem for those fonts specified in the configuration and
+FcSetApplication which holds fonts provided by the application.
+ </para>
+ </sect2>
+ <sect2><title>FcResult</title>
+ <para>
+Used as a return type for functions manipulating FcPattern objects.
+ <programlisting>
+ FcResult Values
+ Result Code Meaning
+ -----------------------------------------------------------
+ FcResultMatch Object exists with the specified ID
+ FcResultNoMatch Object doesn't exist at all
+ FcResultTypeMismatch Object exists, but the type doesn't match
+ FcResultNoId Object exists, but has fewer values
+ than specified
+ FcResultOutOfMemory malloc failed
+ </programlisting>
+ </para>
+ </sect2>
+ <sect2><title>FcAtomic</title>
+ <para>
+Used for locking access to configuration files. Provides a safe way to update
+configuration files.
+ </para>
+ </sect2>
+ <sect2><title>FcCache</title>
+ <para>
+Holds information about the fonts contained in a single directory. Normal
+applications need not worry about this as caches for font access are
+automatically managed by the library. Applications dealing with cache
+management may want to use some of these objects in their work, however the
+included 'fc-cache' program generally suffices for all of that.
+ </para>
+ </sect2>
+</sect1>
+<sect1><title>FUNCTIONS</title>
+ <para>
+These are grouped by functionality, often using the main data type being
+manipulated.
+ </para>
+ <sect2><title>Initialization</title>
+ <para>
+These functions provide some control over how the library is initialized.
+ </para>
+ &fcinit;
+ </sect2>
+ <sect2><title>FcPattern</title>
+ <para>
+An FcPattern is an opaque type that holds both patterns to match against the
+available fonts, as well as the information about each font.
+ </para>
+ &fcpattern;
+ &fcformat;
+ </sect2>
+ <sect2><title>FcFontSet</title>
+ <para>
+An FcFontSet simply holds a list of patterns; these are used to return the
+results of listing available fonts.
+ </para>
+ &fcfontset;
+ </sect2>
+ <sect2><title>FcObjectSet</title>
+ <para>
+An FcObjectSet holds a list of pattern property names; it is used to
+indicate which properties are to be returned in the patterns from
+FcFontList.
+ </para>
+ &fcobjectset;
+ </sect2>
+ <sect2><title>FreeType specific functions</title>
+ <para>
+While the fontconfig library doesn't insist that FreeType be used as the
+rasterization mechanism for fonts, it does provide some convenience
+functions.
+ </para>
+ &fcfreetype;
+ </sect2>
+ <sect2><title>FcValue</title>
+ <para>
+FcValue is a structure containing a type tag and a union of all possible
+datatypes. The tag is an enum of type
+<emphasis>FcType</emphasis>
+and is intended to provide a measure of run-time
+typechecking, although that depends on careful programming.
+ </para>
+ &fcvalue;
+ </sect2>
+ <sect2><title>FcCharSet</title>
+ <para>
+An FcCharSet is a boolean array indicating a set of Unicode chars. Those
+associated with a font are marked constant and cannot be edited.
+FcCharSets may be reference counted internally to reduce memory consumption;
+this may be visible to applications as the result of FcCharSetCopy may
+return it's argument, and that CharSet may remain unmodifiable.
+ </para>
+ &fccharset;
+ </sect2>
+ <sect2><title>FcLangSet</title>
+ <para>
+An FcLangSet is a set of language names (each of which include language and
+an optional territory). They are used when selecting fonts to indicate which
+languages the fonts need to support. Each font is marked, using language
+orthography information built into fontconfig, with the set of supported
+languages.
+ </para>
+ &fclangset;
+ </sect2>
+ <sect2><title>FcMatrix</title>
+ <para>
+FcMatrix structures hold an affine transformation in matrix form.
+ </para>
+ &fcmatrix;
+ </sect2>
+ <sect2><title>FcConfig</title>
+ <para>
+An FcConfig object holds the internal representation of a configuration.
+There is a default configuration which applications may use by passing 0 to
+any function using the data within an FcConfig.
+ </para>
+ &fcconfig;
+ </sect2>
+ <sect2><title>FcObjectType</title>
+ <para>
+Provides for application-specified font name object types so that new
+pattern elements can be generated from font names.
+ </para>
+ &fcobjecttype;
+ </sect2>
+ <sect2><title>FcConstant</title>
+ <para>
+Provides for application-specified symbolic constants for font names.
+ </para>
+ &fcconstant;
+ </sect2>
+ <sect2><title>FcBlanks</title>
+ <para>
+An FcBlanks object holds a list of Unicode chars which are expected to
+be blank when drawn. When scanning new fonts, any glyphs which are
+empty and not in this list will be assumed to be broken and not placed in
+the FcCharSet associated with the font. This provides a significantly more
+accurate CharSet for applications.
+ </para>
+ &fcblanks;
+ </sect2>
+ <sect2><title>FcAtomic</title>
+ <para>
+These functions provide a safe way to update configuration files, allowing ongoing
+reading of the old configuration file while locked for writing and ensuring that a
+consistent and complete version of the configuration file is always available.
+ </para>
+ &fcatomic;
+ </sect2>
+ <sect2><title>File and Directory routines</title>
+ <para>
+These routines work with font files and directories, including font
+directory cache files.
+ </para>
+ &fcfile;
+ &fcdircache;
+ </sect2>
+ <sect2><title>FcCache routines</title>
+ <para>
+These routines work with font directory caches, accessing their contents in
+limited ways. It is not expected that normal applications will need to use
+these functions.
+ </para>
+ &fccache;
+ </sect2>
+ <sect2><title>FcStrSet and FcStrList</title>
+ <para>
+A data structure for enumerating strings, used to list directories while
+scanning the configuration as directories are added while scanning.
+ </para>
+ &fcstrset;
+ </sect2>
+ <sect2><title>String utilities</title>
+ <para>
+Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type.
+These functions are exposed to help applications deal with these UTF-8
+strings in a locale-insensitive manner.
+ </para>
+ &fcstring;
+ </sect2>
+</sect1>
+</article>
diff --git a/fontconfig/doc/fontconfig-user.sgml b/fontconfig/doc/fontconfig-user.sgml
index 298f8d5f5..efa01aa58 100644
--- a/fontconfig/doc/fontconfig-user.sgml
+++ b/fontconfig/doc/fontconfig-user.sgml
@@ -1,692 +1,704 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-<!ENTITY version SYSTEM "version.sgml">
-<!ENTITY confdir SYSTEM "confdir.sgml">
-]>
-<!--
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of Keith Packard not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. Keith Packard makes no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<refentry>
-<refmeta>
- <refentrytitle>fonts-conf</refentrytitle>
- <manvolnum>5</manvolnum>
-</refmeta>
-<refnamediv>
- <refname>fonts.conf</refname>
- <refpurpose>Font configuration files</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
- &confdir;/fonts.conf
- &confdir;/fonts.dtd
- &confdir;/conf.d
- ~/.fonts.conf.d
- ~/.fonts.conf
-</synopsis>
-</refsynopsisdiv>
-<refsect1><title>Description</title>
- <para>
-Fontconfig is a library designed to provide system-wide font configuration,
-customization and application access.
- </para>
-</refsect1>
-<refsect1><title>Functional Overview</title>
- <para>
-Fontconfig contains two essential modules, the configuration module which
-builds an internal configuration from XML files and the matching module
-which accepts font patterns and returns the nearest matching font.
- </para>
- <refsect2><title>Font Configuration</title>
- <para>
-The configuration module consists of the FcConfig datatype, libexpat and
-FcConfigParse which walks over an XML tree and amends a configuration with
-data found within. From an external perspective, configuration of the
-library consists of generating a valid XML tree and feeding that to
-FcConfigParse. The only other mechanism provided to applications for
-changing the running configuration is to add fonts and directories to the
-list of application-provided font files.
- </para><para>
-The intent is to make font configurations relatively static, and shared by
-as many applications as possible. It is hoped that this will lead to more
-stable font selection when passing names from one application to another.
-XML was chosen as a configuration file format because it provides a format
-which is easy for external agents to edit while retaining the correct
-structure and syntax.
- </para><para>
-Font configuration is separate from font matching; applications needing to
-do their own matching can access the available fonts from the library and
-perform private matching. The intent is to permit applications to pick and
-choose appropriate functionality from the library instead of forcing them to
-choose between this library and a private configuration mechanism. The hope
-is that this will ensure that configuration of fonts for all applications
-can be centralized in one place. Centralizing font configuration will
-simplify and regularize font installation and customization.
- </para>
- </refsect2>
- <refsect2>
- <title>Font Properties</title>
- <para>
-While font patterns may contain essentially any properties, there are some
-well known properties with associated types. Fontconfig uses some of these
-properties for font matching and font completion. Others are provided as a
-convenience for the applications' rendering mechanism.
- </para>
- <programlisting>
- Property Type Description
- --------------------------------------------------------------
- family String Font family names
- familylang String Languages corresponding to each family
- style String Font style. Overrides weight and slant
- stylelang String Languages corresponding to each style
- fullname String Font full names (often includes style)
- fullnamelang String Languages corresponding to each fullname
- slant Int Italic, oblique or roman
- weight Int Light, medium, demibold, bold or black
- size Double Point size
- width Int Condensed, normal or expanded
- aspect Double Stretches glyphs horizontally before hinting
- pixelsize Double Pixel size
- spacing Int Proportional, dual-width, monospace or charcell
- foundry String Font foundry name
- antialias Bool Whether glyphs can be antialiased
- hinting Bool Whether the rasterizer should use hinting
- hintstyle Int Automatic hinting style
- verticallayout Bool Use vertical layout
- autohint Bool Use autohinter instead of normal hinter
- globaladvance Bool Use font global advance data
- file String The filename holding the font
- index Int The index of the font within the file
- ftface FT_Face Use the specified FreeType face object
- rasterizer String Which rasterizer is in use
- outline Bool Whether the glyphs are outlines
- scalable Bool Whether glyphs can be scaled
- scale Double Scale factor for point->pixel conversions
- dpi Double Target dots per inch
- rgba Int unknown, rgb, bgr, vrgb, vbgr,
- none - subpixel geometry
- lcdfilter Int Type of LCD filter
- minspace Bool Eliminate leading from line spacing
- charset CharSet Unicode chars encoded by the font
- lang String List of RFC-3066-style languages this
- font supports
- fontversion Int Version number of the font
- capability String List of layout capabilities in the font
- embolden Bool Rasterizer should synthetically embolden the font
- </programlisting>
- </refsect2>
- <refsect2>
- <title>Font Matching</title>
- <para>
-Fontconfig performs matching by measuring the distance from a provided
-pattern to all of the available fonts in the system. The closest matching
-font is selected. This ensures that a font will always be returned, but
-doesn't ensure that it is anything like the requested pattern.
- </para><para>
-Font matching starts with an application constructed pattern. The desired
-attributes of the resulting font are collected together in a pattern. Each
-property of the pattern can contain one or more values; these are listed in
-priority order; matches earlier in the list are considered "closer" than
-matches later in the list.
- </para><para>
-The initial pattern is modified by applying the list of editing instructions
-specific to patterns found in the configuration; each consists of a match
-predicate and a set of editing operations. They are executed in the order
-they appeared in the configuration. Each match causes the associated
-sequence of editing operations to be applied.
- </para><para>
-After the pattern has been edited, a sequence of default substitutions are
-performed to canonicalize the set of available properties; this avoids the
-need for the lower layers to constantly provide default values for various
-font properties during rendering.
- </para><para>
-The canonical font pattern is finally matched against all available fonts.
-The distance from the pattern to the font is measured for each of several
-properties: foundry, charset, family, lang, spacing, pixelsize, style,
-slant, weight, antialias, rasterizer and outline. This list is in priority
-order -- results of comparing earlier elements of this list weigh more
-heavily than later elements.
- </para><para>
-There is one special case to this rule; family names are split into two
-bindings; strong and weak. Strong family names are given greater precedence
-in the match than lang elements while weak family names are given lower
-precedence than lang elements. This permits the document language to drive
-font selection when any document specified font is unavailable.
- </para><para>
-The pattern representing that font is augmented to include any properties
-found in the pattern but not found in the font itself; this permits the
-application to pass rendering instructions or any other data through the
-matching system. Finally, the list of editing instructions specific to
-fonts found in the configuration are applied to the pattern. This modified
-pattern is returned to the application.
- </para><para>
-The return value contains sufficient information to locate and rasterize the
-font, including the file name, pixel size and other rendering data. As
-none of the information involved pertains to the FreeType library,
-applications are free to use any rasterization engine or even to take
-the identified font file and access it directly.
- </para><para>
-The match/edit sequences in the configuration are performed in two passes
-because there are essentially two different operations necessary -- the
-first is to modify how fonts are selected; aliasing families and adding
-suitable defaults. The second is to modify how the selected fonts are
-rasterized. Those must apply to the selected font, not the original pattern
-as false matches will often occur.
- </para>
- </refsect2>
- <refsect2><title>Font Names</title>
- <para>
-Fontconfig provides a textual representation for patterns that the library
-can both accept and generate. The representation is in three parts, first a
-list of family names, second a list of point sizes and finally a list of
-additional properties:
- </para>
- <programlisting>
- &lt;families&gt;-&lt;point sizes&gt;:&lt;name1&gt;=&lt;values1&gt;:&lt;name2&gt;=&lt;values2&gt;...
- </programlisting>
- <para>
-Values in a list are separated with commas. The name needn't include either
-families or point sizes; they can be elided. In addition, there are
-symbolic constants that simultaneously indicate both a name and a value.
-Here are some examples:
- </para>
- <programlisting>
- Name Meaning
- ----------------------------------------------------------
- Times-12 12 point Times Roman
- Times-12:bold 12 point Times Bold
- Courier:italic Courier Italic in the default size
- Monospace:matrix=1 .1 0 1 The users preferred monospace font
- with artificial obliquing
- </programlisting>
- <para>
-The '\', '-', ':' and ',' characters in family names must be preceeded by a
-'\' character to avoid having them misinterpreted. Similarly, values
-containing '\', '=', '_', ':' and ',' must also have them preceeded by a
-'\' character. The '\' characters are stripped out of the family name and
-values as the font name is read.
- </para>
- </refsect2>
-</refsect1>
-<refsect1><title>Debugging Applications</title>
- <para>
-To help diagnose font and applications problems, fontconfig is built with a
-large amount of internal debugging left enabled. It is controlled by means
-of the FC_DEBUG environment variable. The value of this variable is
-interpreted as a number, and each bit within that value controls different
-debugging messages.
- </para>
- <programlisting>
- Name Value Meaning
- ---------------------------------------------------------
- MATCH 1 Brief information about font matching
- MATCHV 2 Extensive font matching information
- EDIT 4 Monitor match/test/edit execution
- FONTSET 8 Track loading of font information at startup
- CACHE 16 Watch cache files being written
- CACHEV 32 Extensive cache file writing information
- PARSE 64 (no longer in use)
- SCAN 128 Watch font files being scanned to build caches
- SCANV 256 Verbose font file scanning information
- MEMORY 512 Monitor fontconfig memory usage
- CONFIG 1024 Monitor which config files are loaded
- LANGSET 2048 Dump char sets used to construct lang values
- OBJTYPES 4096 Display message when value typechecks fail
- </programlisting>
- <para>
-Add the value of the desired debug levels together and assign that (in
-base 10) to the FC_DEBUG environment variable before running the
-application. Output from these statements is sent to stdout.
- </para>
-</refsect1>
-<refsect1><title>Lang Tags</title>
- <para>
-Each font in the database contains a list of languages it supports. This is
-computed by comparing the Unicode coverage of the font with the orthography
-of each language. Languages are tagged using an RFC-3066 compatible naming
-and occur in two parts -- the ISO 639 language tag followed a hyphen and then
-by the ISO 3166 country code. The hyphen and country code may be elided.
- </para><para>
-Fontconfig has orthographies for several languages built into the library.
-No provision has been made for adding new ones aside from rebuilding the
-library. It currently supports 122 of the 139 languages named in ISO 639-1,
-141 of the languages with two-letter codes from ISO 639-2 and another 30
-languages with only three-letter codes. Languages with both two and three
-letter codes are provided with only the two letter code.
- </para><para>
-For languages used in multiple territories with radically different
-character sets, fontconfig includes per-territory orthographies. This
-includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
- </para>
-</refsect1>
-<refsect1><title>Configuration File Format</title>
- <para>
-Configuration files for fontconfig are stored in XML format; this
-format makes external configuration tools easier to write and ensures that
-they will generate syntactically correct configuration files. As XML
-files are plain text, they can also be manipulated by the expert user using
-a text editor.
- </para><para>
-The fontconfig document type definition resides in the external entity
-"fonts.dtd"; this is normally stored in the default font configuration
-directory (&confdir;). Each configuration file should contain the
-following structure:
- <programlisting>
- &lt;?xml version="1.0"?&gt;
- &lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
- &lt;fontconfig&gt;
- ...
- &lt;/fontconfig&gt;
- </programlisting>
- </para>
-<refsect2><title><literal>&lt;fontconfig&gt;</literal></title><para>
-This is the top level element for a font configuration and can contain
-<literal>&lt;dir&gt;</literal>, <literal>&lt;cache&gt;</literal>, <literal>&lt;include&gt;</literal>, <literal>&lt;match&gt;</literal> and <literal>&lt;alias&gt;</literal> elements in any order.
- </para></refsect2>
- <refsect2><title><literal>&lt;dir&gt;</literal></title><para>
-This element contains a directory name which will be scanned for font files
-to include in the set of available fonts.
- </para></refsect2>
- <refsect2><title><literal>&lt;cache&gt;</literal></title><para>
-This element contains a file name for the per-user cache of font
-information. If it starts with '~', it refers to a file in the users
-home directory. This file is used to hold information about fonts that
-isn't present in the per-directory cache files. It is automatically
-maintained by the fontconfig library. The default for this file
-is ``~/.fonts.cache-<literal>&lt;version&gt;</literal>'', where <literal>&lt;version&gt;</literal> is the font configuration
-file version number (currently 2).
- </para></refsect2>
- <refsect2><title><literal>&lt;include ignore_missing="no"&gt;</literal></title><para>
-This element contains the name of an additional configuration file or
-directory. If a directory, every file within that directory starting with an
-ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When
-the XML datatype is traversed by FcConfigParse, the contents of the file(s)
-will also be incorporated into the configuration by passing the filename(s) to
-FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the
-default "no", a missing file or directory will elicit no warning message from
-the library.
- </para></refsect2>
- <refsect2><title><literal>&lt;config&gt;</literal></title><para>
-This element provides a place to consolidate additional configuration
-information. <literal>&lt;config&gt;</literal> can contain <literal>&lt;blank&gt;</literal> and <literal>&lt;rescan&gt;</literal> elements in any
-order.
- </para></refsect2>
- <refsect2><title><literal>&lt;blank&gt;</literal></title><para>
-Fonts often include "broken" glyphs which appear in the encoding but are
-drawn as blanks on the screen. Within the <literal>&lt;blank&gt;</literal> element, place each
-Unicode characters which is supposed to be blank in an <literal>&lt;int&gt;</literal> element.
-Characters outside of this set which are drawn as blank will be elided from
-the set of characters supported by the font.
- </para></refsect2>
- <refsect2><title><literal>&lt;rescan&gt;</literal></title><para>
-The <literal>&lt;rescan&gt;</literal> element holds an <literal>&lt;int&gt;</literal> element which indicates the default
-interval between automatic checks for font configuration changes.
-Fontconfig will validate all of the configuration files and directories and
-automatically rebuild the internal datastructures when this interval passes.
- </para></refsect2>
- <refsect2><title><literal>&lt;selectfont&gt;</literal></title><para>
-This element is used to black/white list fonts from being listed or matched
-against. It holds acceptfont and rejectfont elements.
- </para></refsect2>
- <refsect2><title><literal>&lt;acceptfont&gt;</literal></title><para>
-Fonts matched by an acceptfont element are "whitelisted"; such fonts are
-explicitly included in the set of fonts used to resolve list and match
-requests; including them in this list protects them from being "blacklisted"
-by a rejectfont element. Acceptfont elements include glob and pattern
-elements which are used to match fonts.
- </para></refsect2>
- <refsect2><title><literal>&lt;rejectfont&gt;</literal></title><para>
-Fonts matched by an rejectfont element are "blacklisted"; such fonts are
-excluded from the set of fonts used to resolve list and match requests as if
-they didn't exist in the system. Rejectfont elements include glob and
-pattern elements which are used to match fonts.
- </para></refsect2>
- <refsect2><title><literal>&lt;glob&gt;</literal></title><para>
-Glob elements hold shell-style filename matching patterns (including ? and
-*) which match fonts based on their complete pathnames. This can be used to
-exclude a set of directories (/usr/share/fonts/uglyfont*), or particular
-font file types (*.pcf.gz), but the latter mechanism relies rather heavily
-on filenaming conventions which can't be relied upon. Note that globs
-only apply to directories, not to individual fonts.
- </para></refsect2>
- <refsect2><title><literal>&lt;pattern&gt;</literal></title><para>
-Pattern elements perform list-style matching on incoming fonts; that is,
-they hold a list of elements and associated values. If all of those
-elements have a matching value, then the pattern matches the font. This can
-be used to select fonts based on attributes of the font (scalable, bold,
-etc), which is a more reliable mechanism than using file extensions.
-Pattern elements include patelt elements.
- </para></refsect2>
- <refsect2><title><literal>&lt;patelt name="property"&gt;</literal></title><para>
-Patelt elements hold a single pattern element and list of values. They must
-have a 'name' attribute which indicates the pattern element name. Patelt
-elements include int, double, string, matrix, bool, charset and const
-elements.
- </para></refsect2>
- <refsect2><title><literal>&lt;match target="pattern"&gt;</literal></title><para>
-This element holds first a (possibly empty) list of <literal>&lt;test&gt;</literal> elements and then
-a (possibly empty) list of <literal>&lt;edit&gt;</literal> elements. Patterns which match all of the
-tests are subjected to all the edits. If 'target' is set to "font" instead
-of the default "pattern", then this element applies to the font name
-resulting from a match rather than a font pattern to be matched. If 'target'
-is set to "scan", then this element applies when the font is scanned to
-build the fontconfig database.
- </para></refsect2>
- <refsect2><title><literal>&lt;test qual="any" name="property" target="default" compare="eq"&gt;</literal></title><para>
-This element contains a single value which is compared with the target
-('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen
-above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", or
-"more_eq". 'qual' may either be the default, "any", in which case the match
-succeeds if any value associated with the property matches the test value, or
-"all", in which case all of the values associated with the property must
-match the test value. When used in a &lt;match target="font"&gt; element,
-the target= attribute in the &lt;test&gt; element selects between matching
-the original pattern or the font. "default" selects whichever target the
-outer &lt;match&gt; element has selected.
- </para></refsect2>
- <refsect2><title><literal>&lt;edit name="property" mode="assign" binding="weak"&gt;</literal></title><para>
-This element contains a list of expression elements (any of the value or
-operator elements). The expression elements are evaluated at run-time and
-modify the property "property". The modification depends on whether
-"property" was matched by one of the associated <literal>&lt;test&gt;</literal> elements, if so, the
-modification may affect the first matched value. Any values inserted into
-the property are given the indicated binding ("strong", "weak" or "same")
-with "same" binding using the value from the matched pattern element.
-'mode' is one of:
- <programlisting>
- Mode With Match Without Match
- ---------------------------------------------------------------------
- "assign" Replace matching value Replace all values
- "assign_replace" Replace all values Replace all values
- "prepend" Insert before matching Insert at head of list
- "prepend_first" Insert at head of list Insert at head of list
- "append" Append after matching Append at end of list
- "append_last" Append at end of list Append at end of list
- </programlisting>
- </para></refsect2>
- <refsect2><title><literal>&lt;int&gt;</literal>, <literal>&lt;double&gt;</literal>, <literal>&lt;string&gt;</literal>, <literal>&lt;bool&gt;</literal></title><para>
-These elements hold a single value of the indicated type. <literal>&lt;bool&gt;</literal>
-elements hold either true or false. An important limitation exists in
-the parsing of floating point numbers -- fontconfig requires that
-the mantissa start with a digit, not a decimal point, so insert a leading
-zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5
-instead of -.5).
- </para></refsect2>
- <refsect2><title><literal>&lt;matrix&gt;</literal></title><para>
-This element holds the four <literal>&lt;double&gt;</literal> elements of an affine
-transformation.
- </para></refsect2>
- <refsect2><title><literal>&lt;name&gt;</literal></title><para>
-Holds a property name. Evaluates to the first value from the property of
-the font, not the pattern.
- </para></refsect2>
- <refsect2><title><literal>&lt;const&gt;</literal></title><para>
-Holds the name of a constant; these are always integers and serve as
-symbolic names for common font values:
- <programlisting>
- Constant Property Value
- -------------------------------------
- thin weight 0
- extralight weight 40
- ultralight weight 40
- light weight 50
- book weight 75
- regular weight 80
- normal weight 80
- medium weight 100
- demibold weight 180
- semibold weight 180
- bold weight 200
- extrabold weight 205
- black weight 210
- heavy weight 210
- roman slant 0
- italic slant 100
- oblique slant 110
- ultracondensed width 50
- extracondensed width 63
- condensed width 75
- semicondensed width 87
- normal width 100
- semiexpanded width 113
- expanded width 125
- extraexpanded width 150
- ultraexpanded width 200
- proportional spacing 0
- dual spacing 90
- mono spacing 100
- charcell spacing 110
- unknown rgba 0
- rgb rgba 1
- bgr rgba 2
- vrgb rgba 3
- vbgr rgba 4
- none rgba 5
- lcdnone lcdfilter 0
- lcddefault lcdfilter 1
- lcdlight lcdfilter 2
- lcdlegacy lcdfilter 3
- hintnone hintstyle 0
- hintslight hintstyle 1
- hintmedium hintstyle 2
- hintfull hintstyle 3
- </programlisting>
- </para>
- </refsect2>
- <refsect2>
- <title><literal>&lt;or&gt;</literal>, <literal>&lt;and&gt;</literal>, <literal>&lt;plus&gt;</literal>, <literal>&lt;minus&gt;</literal>, <literal>&lt;times&gt;</literal>, <literal>&lt;divide&gt;</literal></title>
- <para>
-These elements perform the specified operation on a list of expression
-elements. <literal>&lt;or&gt;</literal> and <literal>&lt;and&gt;</literal> are boolean, not bitwise.
- </para>
- </refsect2>
- <refsect2>
- <title><literal>&lt;eq&gt;</literal>, <literal>&lt;not_eq&gt;</literal>, <literal>&lt;less&gt;</literal>, <literal>&lt;less_eq&gt;</literal>, <literal>&lt;more&gt;</literal>, <literal>&lt;more_eq&gt;</literal></title>
- <para>
-These elements compare two values, producing a boolean result.
- </para></refsect2>
- <refsect2><title><literal>&lt;not&gt;</literal></title><para>
-Inverts the boolean sense of its one expression element
- </para></refsect2>
- <refsect2><title><literal>&lt;if&gt;</literal></title><para>
-This element takes three expression elements; if the value of the first is
-true, it produces the value of the second, otherwise it produces the value
-of the third.
- </para></refsect2>
- <refsect2><title><literal>&lt;alias&gt;</literal></title><para>
-Alias elements provide a shorthand notation for the set of common match
-operations needed to substitute one font family for another. They contain a
-<literal>&lt;family&gt;</literal> element followed by optional <literal>&lt;prefer&gt;</literal>, <literal>&lt;accept&gt;</literal> and <literal>&lt;default&gt;</literal>
-elements. Fonts matching the <literal>&lt;family&gt;</literal> element are edited to prepend the
-list of <literal>&lt;prefer&gt;</literal>ed families before the matching <literal>&lt;family&gt;</literal>, append the
-<literal>&lt;accept&gt;</literal>able families after the matching <literal>&lt;family&gt;</literal> and append the <literal>&lt;default&gt;</literal>
-families to the end of the family list.
- </para></refsect2>
- <refsect2><title><literal>&lt;family&gt;</literal></title><para>
-Holds a single font family name
- </para></refsect2>
- <refsect2><title><literal>&lt;prefer&gt;</literal>, <literal>&lt;accept&gt;</literal>, <literal>&lt;default&gt;</literal></title><para>
-These hold a list of <literal>&lt;family&gt;</literal> elements to be used by the <literal>&lt;alias&gt;</literal> element.
- </para></refsect2>
-</refsect1>
-<refsect1><title>EXAMPLE CONFIGURATION FILE</title>
- <refsect2><title>System configuration file</title>
- <para>
-This is an example of a system-wide configuration file
- </para>
- <programlisting>
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
-&lt;!-- &confdir;/fonts.conf file to configure system font access --&gt;
-&lt;fontconfig&gt;
-&lt;!--
- Find fonts in these directories
---&gt;
-&lt;dir&gt;/usr/share/fonts&lt;/dir&gt;
-&lt;dir&gt;/usr/X11R6/lib/X11/fonts&lt;/dir&gt;
-
-&lt;!--
- Accept deprecated 'mono' alias, replacing it with 'monospace'
---&gt;
-&lt;match target="pattern"&gt;
- &lt;test qual="any" name="family"&gt;&lt;string&gt;mono&lt;/string&gt;&lt;/test&gt;
- &lt;edit name="family" mode="assign"&gt;&lt;string&gt;monospace&lt;/string&gt;&lt;/edit&gt;
-&lt;/match&gt;
-
-&lt;!--
- Names not including any well known alias are given 'sans'
---&gt;
-&lt;match target="pattern"&gt;
- &lt;test qual="all" name="family" mode="not_eq"&gt;sans&lt;/test&gt;
- &lt;test qual="all" name="family" mode="not_eq"&gt;serif&lt;/test&gt;
- &lt;test qual="all" name="family" mode="not_eq"&gt;monospace&lt;/test&gt;
- &lt;edit name="family" mode="append_last"&gt;&lt;string&gt;sans&lt;/string&gt;&lt;/edit&gt;
-&lt;/match&gt;
-
-&lt;!--
- Load per-user customization file, but don't complain
- if it doesn't exist
---&gt;
-&lt;include ignore_missing="yes"&gt;~/.fonts.conf&lt;/include&gt;
-
-&lt;!--
- Load local customization files, but don't complain
- if there aren't any
---&gt;
-&lt;include ignore_missing="yes"&gt;conf.d&lt;/include&gt;
-&lt;include ignore_missing="yes"&gt;local.conf&lt;/include&gt;
-
-&lt;!--
- Alias well known font names to available TrueType fonts.
- These substitute TrueType faces for similar Type1
- faces to improve screen appearance.
---&gt;
-&lt;alias&gt;
- &lt;family&gt;Times&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Times New Roman&lt;/family&gt;&lt;/prefer&gt;
- &lt;default&gt;&lt;family&gt;serif&lt;/family&gt;&lt;/default&gt;
-&lt;/alias&gt;
-&lt;alias&gt;
- &lt;family&gt;Helvetica&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Arial&lt;/family&gt;&lt;/prefer&gt;
- &lt;default&gt;&lt;family&gt;sans&lt;/family&gt;&lt;/default&gt;
-&lt;/alias&gt;
-&lt;alias&gt;
- &lt;family&gt;Courier&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Courier New&lt;/family&gt;&lt;/prefer&gt;
- &lt;default&gt;&lt;family&gt;monospace&lt;/family&gt;&lt;/default&gt;
-&lt;/alias&gt;
-
-&lt;!--
- Provide required aliases for standard names
- Do these after the users configuration file so that
- any aliases there are used preferentially
---&gt;
-&lt;alias&gt;
- &lt;family&gt;serif&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Times New Roman&lt;/family&gt;&lt;/prefer&gt;
-&lt;/alias&gt;
-&lt;alias&gt;
- &lt;family&gt;sans&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Arial&lt;/family&gt;&lt;/prefer&gt;
-&lt;/alias&gt;
-&lt;alias&gt;
- &lt;family&gt;monospace&lt;/family&gt;
- &lt;prefer&gt;&lt;family&gt;Andale Mono&lt;/family&gt;&lt;/prefer&gt;
-&lt;/alias&gt;
-&lt;/fontconfig&gt;
- </programlisting>
- </refsect2>
- <refsect2><title>User configuration file</title>
- <para>
-This is an example of a per-user configuration file that lives in
-~/.fonts.conf
- </para>
- <programlisting>
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
-&lt;!-- ~/.fonts.conf for per-user font configuration --&gt;
-&lt;fontconfig&gt;
-
-&lt;!--
- Private font directory
---&gt;
-&lt;dir&gt;~/.fonts&lt;/dir&gt;
-
-&lt;!--
- use rgb sub-pixel ordering to improve glyph appearance on
- LCD screens. Changes affecting rendering, but not matching
- should always use target="font".
---&gt;
-&lt;match target="font"&gt;
- &lt;edit name="rgba" mode="assign"&gt;&lt;const&gt;rgb&lt;/const&gt;&lt;/edit&gt;
-&lt;/match&gt;
-&lt;/fontconfig&gt;
- </programlisting>
- </refsect2>
-</refsect1>
-<refsect1><title>Files</title>
- <para>
-<emphasis>fonts.conf</emphasis>
-contains configuration information for the fontconfig library
-consisting of directories to look at for font information as well as
-instructions on editing program specified font patterns before attempting to
-match the available fonts. It is in xml format.
- </para>
- <para>
-<emphasis>conf.d</emphasis>
-is the conventional name for a directory of additional configuration files
-managed by external applications or the local administrator. The
-filenames starting with decimal digits are sorted in lexicographic order
-and used as additional configuration files. All of these files are in xml
-format. The master fonts.conf file references this directory in an
-&lt;include&gt; directive.
- </para>
- <para>
-<emphasis>fonts.dtd</emphasis>
-is a DTD that describes the format of the configuration files.
- </para>
- <para>
-<emphasis>~/.fonts.conf.d</emphasis>
-is the conventional name for a per-user directory of (typically
-auto-generated) configuration files, although the
-actual location is specified in the global fonts.conf file.
- </para>
- <para>
-<emphasis>~/.fonts.conf</emphasis>
-is the conventional location for per-user font configuration, although the
-actual location is specified in the global fonts.conf file.
- </para>
- <para>
-<emphasis> ~/.fonts.cache-*</emphasis>
-is the conventional repository of font information that isn't found in the
-per-directory caches. This file is automatically maintained by fontconfig.
- </para>
-</refsect1>
-<refsect1><title>See Also</title>
- <para>
-fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)
- </para>
-</refsect1>
-<refsect1><title>Version</title>
- <para>
-Fontconfig version &version;
- </para>
-</refsect1>
-</refentry>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
+<!ENTITY version SYSTEM "version.sgml">
+<!ENTITY confdir SYSTEM "confdir.sgml">
+]>
+<!--
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+<refentry>
+<refmeta>
+ <refentrytitle>fonts-conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+</refmeta>
+<refnamediv>
+ <refname>fonts.conf</refname>
+ <refpurpose>Font configuration files</refpurpose>
+</refnamediv>
+<refsynopsisdiv>
+<synopsis>
+ &confdir;/fonts.conf
+ &confdir;/fonts.dtd
+ &confdir;/conf.d
+ ~/.fonts.conf.d
+ ~/.fonts.conf
+</synopsis>
+</refsynopsisdiv>
+<refsect1><title>Description</title>
+ <para>
+Fontconfig is a library designed to provide system-wide font configuration,
+customization and application access.
+ </para>
+</refsect1>
+<refsect1><title>Functional Overview</title>
+ <para>
+Fontconfig contains two essential modules, the configuration module which
+builds an internal configuration from XML files and the matching module
+which accepts font patterns and returns the nearest matching font.
+ </para>
+ <refsect2><title>Font Configuration</title>
+ <para>
+The configuration module consists of the FcConfig datatype, libexpat and
+FcConfigParse which walks over an XML tree and amends a configuration with
+data found within. From an external perspective, configuration of the
+library consists of generating a valid XML tree and feeding that to
+FcConfigParse. The only other mechanism provided to applications for
+changing the running configuration is to add fonts and directories to the
+list of application-provided font files.
+ </para><para>
+The intent is to make font configurations relatively static, and shared by
+as many applications as possible. It is hoped that this will lead to more
+stable font selection when passing names from one application to another.
+XML was chosen as a configuration file format because it provides a format
+which is easy for external agents to edit while retaining the correct
+structure and syntax.
+ </para><para>
+Font configuration is separate from font matching; applications needing to
+do their own matching can access the available fonts from the library and
+perform private matching. The intent is to permit applications to pick and
+choose appropriate functionality from the library instead of forcing them to
+choose between this library and a private configuration mechanism. The hope
+is that this will ensure that configuration of fonts for all applications
+can be centralized in one place. Centralizing font configuration will
+simplify and regularize font installation and customization.
+ </para>
+ </refsect2>
+ <refsect2>
+ <title>Font Properties</title>
+ <para>
+While font patterns may contain essentially any properties, there are some
+well known properties with associated types. Fontconfig uses some of these
+properties for font matching and font completion. Others are provided as a
+convenience for the applications' rendering mechanism.
+ </para>
+ <programlisting>
+ Property Type Description
+ --------------------------------------------------------------
+ family String Font family names
+ familylang String Languages corresponding to each family
+ style String Font style. Overrides weight and slant
+ stylelang String Languages corresponding to each style
+ fullname String Font full names (often includes style)
+ fullnamelang String Languages corresponding to each fullname
+ slant Int Italic, oblique or roman
+ weight Int Light, medium, demibold, bold or black
+ size Double Point size
+ width Int Condensed, normal or expanded
+ aspect Double Stretches glyphs horizontally before hinting
+ pixelsize Double Pixel size
+ spacing Int Proportional, dual-width, monospace or charcell
+ foundry String Font foundry name
+ antialias Bool Whether glyphs can be antialiased
+ hinting Bool Whether the rasterizer should use hinting
+ hintstyle Int Automatic hinting style
+ verticallayout Bool Use vertical layout
+ autohint Bool Use autohinter instead of normal hinter
+ globaladvance Bool Use font global advance data
+ file String The filename holding the font
+ index Int The index of the font within the file
+ ftface FT_Face Use the specified FreeType face object
+ rasterizer String Which rasterizer is in use
+ outline Bool Whether the glyphs are outlines
+ scalable Bool Whether glyphs can be scaled
+ scale Double Scale factor for point->pixel conversions
+ dpi Double Target dots per inch
+ rgba Int unknown, rgb, bgr, vrgb, vbgr,
+ none - subpixel geometry
+ lcdfilter Int Type of LCD filter
+ minspace Bool Eliminate leading from line spacing
+ charset CharSet Unicode chars encoded by the font
+ lang String List of RFC-3066-style languages this
+ font supports
+ fontversion Int Version number of the font
+ capability String List of layout capabilities in the font
+ embolden Bool Rasterizer should synthetically embolden the font
+ </programlisting>
+ </refsect2>
+ <refsect2>
+ <title>Font Matching</title>
+ <para>
+Fontconfig performs matching by measuring the distance from a provided
+pattern to all of the available fonts in the system. The closest matching
+font is selected. This ensures that a font will always be returned, but
+doesn't ensure that it is anything like the requested pattern.
+ </para><para>
+Font matching starts with an application constructed pattern. The desired
+attributes of the resulting font are collected together in a pattern. Each
+property of the pattern can contain one or more values; these are listed in
+priority order; matches earlier in the list are considered "closer" than
+matches later in the list.
+ </para><para>
+The initial pattern is modified by applying the list of editing instructions
+specific to patterns found in the configuration; each consists of a match
+predicate and a set of editing operations. They are executed in the order
+they appeared in the configuration. Each match causes the associated
+sequence of editing operations to be applied.
+ </para><para>
+After the pattern has been edited, a sequence of default substitutions are
+performed to canonicalize the set of available properties; this avoids the
+need for the lower layers to constantly provide default values for various
+font properties during rendering.
+ </para><para>
+The canonical font pattern is finally matched against all available fonts.
+The distance from the pattern to the font is measured for each of several
+properties: foundry, charset, family, lang, spacing, pixelsize, style,
+slant, weight, antialias, rasterizer and outline. This list is in priority
+order -- results of comparing earlier elements of this list weigh more
+heavily than later elements.
+ </para><para>
+There is one special case to this rule; family names are split into two
+bindings; strong and weak. Strong family names are given greater precedence
+in the match than lang elements while weak family names are given lower
+precedence than lang elements. This permits the document language to drive
+font selection when any document specified font is unavailable.
+ </para><para>
+The pattern representing that font is augmented to include any properties
+found in the pattern but not found in the font itself; this permits the
+application to pass rendering instructions or any other data through the
+matching system. Finally, the list of editing instructions specific to
+fonts found in the configuration are applied to the pattern. This modified
+pattern is returned to the application.
+ </para><para>
+The return value contains sufficient information to locate and rasterize the
+font, including the file name, pixel size and other rendering data. As
+none of the information involved pertains to the FreeType library,
+applications are free to use any rasterization engine or even to take
+the identified font file and access it directly.
+ </para><para>
+The match/edit sequences in the configuration are performed in two passes
+because there are essentially two different operations necessary -- the
+first is to modify how fonts are selected; aliasing families and adding
+suitable defaults. The second is to modify how the selected fonts are
+rasterized. Those must apply to the selected font, not the original pattern
+as false matches will often occur.
+ </para>
+ </refsect2>
+ <refsect2><title>Font Names</title>
+ <para>
+Fontconfig provides a textual representation for patterns that the library
+can both accept and generate. The representation is in three parts, first a
+list of family names, second a list of point sizes and finally a list of
+additional properties:
+ </para>
+ <programlisting>
+ &lt;families&gt;-&lt;point sizes&gt;:&lt;name1&gt;=&lt;values1&gt;:&lt;name2&gt;=&lt;values2&gt;...
+ </programlisting>
+ <para>
+Values in a list are separated with commas. The name needn't include either
+families or point sizes; they can be elided. In addition, there are
+symbolic constants that simultaneously indicate both a name and a value.
+Here are some examples:
+ </para>
+ <programlisting>
+ Name Meaning
+ ----------------------------------------------------------
+ Times-12 12 point Times Roman
+ Times-12:bold 12 point Times Bold
+ Courier:italic Courier Italic in the default size
+ Monospace:matrix=1 .1 0 1 The users preferred monospace font
+ with artificial obliquing
+ </programlisting>
+ <para>
+The '\', '-', ':' and ',' characters in family names must be preceded by a
+'\' character to avoid having them misinterpreted. Similarly, values
+containing '\', '=', '_', ':' and ',' must also have them preceded by a
+'\' character. The '\' characters are stripped out of the family name and
+values as the font name is read.
+ </para>
+ </refsect2>
+</refsect1>
+<refsect1><title>Debugging Applications</title>
+ <para>
+To help diagnose font and applications problems, fontconfig is built with a
+large amount of internal debugging left enabled. It is controlled by means
+of the FC_DEBUG environment variable. The value of this variable is
+interpreted as a number, and each bit within that value controls different
+debugging messages.
+ </para>
+ <programlisting>
+ Name Value Meaning
+ ---------------------------------------------------------
+ MATCH 1 Brief information about font matching
+ MATCHV 2 Extensive font matching information
+ EDIT 4 Monitor match/test/edit execution
+ FONTSET 8 Track loading of font information at startup
+ CACHE 16 Watch cache files being written
+ CACHEV 32 Extensive cache file writing information
+ PARSE 64 (no longer in use)
+ SCAN 128 Watch font files being scanned to build caches
+ SCANV 256 Verbose font file scanning information
+ MEMORY 512 Monitor fontconfig memory usage
+ CONFIG 1024 Monitor which config files are loaded
+ LANGSET 2048 Dump char sets used to construct lang values
+ OBJTYPES 4096 Display message when value typechecks fail
+ </programlisting>
+ <para>
+Add the value of the desired debug levels together and assign that (in
+base 10) to the FC_DEBUG environment variable before running the
+application. Output from these statements is sent to stdout.
+ </para>
+</refsect1>
+<refsect1><title>Lang Tags</title>
+ <para>
+Each font in the database contains a list of languages it supports. This is
+computed by comparing the Unicode coverage of the font with the orthography
+of each language. Languages are tagged using an RFC-3066 compatible naming
+and occur in two parts -- the ISO 639 language tag followed a hyphen and then
+by the ISO 3166 country code. The hyphen and country code may be elided.
+ </para><para>
+Fontconfig has orthographies for several languages built into the library.
+No provision has been made for adding new ones aside from rebuilding the
+library. It currently supports 122 of the 139 languages named in ISO 639-1,
+141 of the languages with two-letter codes from ISO 639-2 and another 30
+languages with only three-letter codes. Languages with both two and three
+letter codes are provided with only the two letter code.
+ </para><para>
+For languages used in multiple territories with radically different
+character sets, fontconfig includes per-territory orthographies. This
+includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
+ </para>
+</refsect1>
+<refsect1><title>Configuration File Format</title>
+ <para>
+Configuration files for fontconfig are stored in XML format; this
+format makes external configuration tools easier to write and ensures that
+they will generate syntactically correct configuration files. As XML
+files are plain text, they can also be manipulated by the expert user using
+a text editor.
+ </para><para>
+The fontconfig document type definition resides in the external entity
+"fonts.dtd"; this is normally stored in the default font configuration
+directory (&confdir;). Each configuration file should contain the
+following structure:
+ <programlisting>
+ &lt;?xml version="1.0"?&gt;
+ &lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
+ &lt;fontconfig&gt;
+ ...
+ &lt;/fontconfig&gt;
+ </programlisting>
+ </para>
+<refsect2><title><literal>&lt;fontconfig&gt;</literal></title><para>
+This is the top level element for a font configuration and can contain
+<literal>&lt;dir&gt;</literal>, <literal>&lt;cache&gt;</literal>, <literal>&lt;include&gt;</literal>, <literal>&lt;match&gt;</literal> and <literal>&lt;alias&gt;</literal> elements in any order.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;dir&gt;</literal></title><para>
+This element contains a directory name which will be scanned for font files
+to include in the set of available fonts.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;cache&gt;</literal></title><para>
+This element contains a file name for the per-user cache of font
+information. If it starts with '~', it refers to a file in the users
+home directory. This file is used to hold information about fonts that
+isn't present in the per-directory cache files. It is automatically
+maintained by the fontconfig library. The default for this file
+is ``~/.fonts.cache-<literal>&lt;version&gt;</literal>'', where <literal>&lt;version&gt;</literal> is the font configuration
+file version number (currently 2).
+ </para></refsect2>
+ <refsect2><title><literal>&lt;include ignore_missing="no"&gt;</literal></title><para>
+This element contains the name of an additional configuration file or
+directory. If a directory, every file within that directory starting with an
+ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When
+the XML datatype is traversed by FcConfigParse, the contents of the file(s)
+will also be incorporated into the configuration by passing the filename(s) to
+FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the
+default "no", a missing file or directory will elicit no warning message from
+the library.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;config&gt;</literal></title><para>
+This element provides a place to consolidate additional configuration
+information. <literal>&lt;config&gt;</literal> can contain <literal>&lt;blank&gt;</literal> and <literal>&lt;rescan&gt;</literal> elements in any
+order.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;blank&gt;</literal></title><para>
+Fonts often include "broken" glyphs which appear in the encoding but are
+drawn as blanks on the screen. Within the <literal>&lt;blank&gt;</literal> element, place each
+Unicode characters which is supposed to be blank in an <literal>&lt;int&gt;</literal> element.
+Characters outside of this set which are drawn as blank will be elided from
+the set of characters supported by the font.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;rescan&gt;</literal></title><para>
+The <literal>&lt;rescan&gt;</literal> element holds an <literal>&lt;int&gt;</literal> element which indicates the default
+interval between automatic checks for font configuration changes.
+Fontconfig will validate all of the configuration files and directories and
+automatically rebuild the internal datastructures when this interval passes.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;selectfont&gt;</literal></title><para>
+This element is used to black/white list fonts from being listed or matched
+against. It holds acceptfont and rejectfont elements.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;acceptfont&gt;</literal></title><para>
+Fonts matched by an acceptfont element are "whitelisted"; such fonts are
+explicitly included in the set of fonts used to resolve list and match
+requests; including them in this list protects them from being "blacklisted"
+by a rejectfont element. Acceptfont elements include glob and pattern
+elements which are used to match fonts.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;rejectfont&gt;</literal></title><para>
+Fonts matched by an rejectfont element are "blacklisted"; such fonts are
+excluded from the set of fonts used to resolve list and match requests as if
+they didn't exist in the system. Rejectfont elements include glob and
+pattern elements which are used to match fonts.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;glob&gt;</literal></title><para>
+Glob elements hold shell-style filename matching patterns (including ? and
+*) which match fonts based on their complete pathnames. This can be used to
+exclude a set of directories (/usr/share/fonts/uglyfont*), or particular
+font file types (*.pcf.gz), but the latter mechanism relies rather heavily
+on filenaming conventions which can't be relied upon. Note that globs
+only apply to directories, not to individual fonts.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;pattern&gt;</literal></title><para>
+Pattern elements perform list-style matching on incoming fonts; that is,
+they hold a list of elements and associated values. If all of those
+elements have a matching value, then the pattern matches the font. This can
+be used to select fonts based on attributes of the font (scalable, bold,
+etc), which is a more reliable mechanism than using file extensions.
+Pattern elements include patelt elements.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;patelt name="property"&gt;</literal></title><para>
+Patelt elements hold a single pattern element and list of values. They must
+have a 'name' attribute which indicates the pattern element name. Patelt
+elements include int, double, string, matrix, bool, charset and const
+elements.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;match target="pattern"&gt;</literal></title><para>
+This element holds first a (possibly empty) list of <literal>&lt;test&gt;</literal> elements and then
+a (possibly empty) list of <literal>&lt;edit&gt;</literal> elements. Patterns which match all of the
+tests are subjected to all the edits. If 'target' is set to "font" instead
+of the default "pattern", then this element applies to the font name
+resulting from a match rather than a font pattern to be matched. If 'target'
+is set to "scan", then this element applies when the font is scanned to
+build the fontconfig database.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;test qual="any" name="property" target="default" compare="eq"&gt;</literal></title><para>
+This element contains a single value which is compared with the target
+('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen
+above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", or
+"more_eq". 'qual' may either be the default, "any", in which case the match
+succeeds if any value associated with the property matches the test value, or
+"all", in which case all of the values associated with the property must
+match the test value. When used in a &lt;match target="font"&gt; element,
+the target= attribute in the &lt;test&gt; element selects between matching
+the original pattern or the font. "default" selects whichever target the
+outer &lt;match&gt; element has selected.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;edit name="property" mode="assign" binding="weak"&gt;</literal></title><para>
+This element contains a list of expression elements (any of the value or
+operator elements). The expression elements are evaluated at run-time and
+modify the property "property". The modification depends on whether
+"property" was matched by one of the associated <literal>&lt;test&gt;</literal> elements, if so, the
+modification may affect the first matched value. Any values inserted into
+the property are given the indicated binding ("strong", "weak" or "same")
+with "same" binding using the value from the matched pattern element.
+'mode' is one of:
+ <programlisting>
+ Mode With Match Without Match
+ ---------------------------------------------------------------------
+ "assign" Replace matching value Replace all values
+ "assign_replace" Replace all values Replace all values
+ "prepend" Insert before matching Insert at head of list
+ "prepend_first" Insert at head of list Insert at head of list
+ "append" Append after matching Append at end of list
+ "append_last" Append at end of list Append at end of list
+ </programlisting>
+ </para></refsect2>
+ <refsect2><title><literal>&lt;int&gt;</literal>, <literal>&lt;double&gt;</literal>, <literal>&lt;string&gt;</literal>, <literal>&lt;bool&gt;</literal></title><para>
+These elements hold a single value of the indicated type. <literal>&lt;bool&gt;</literal>
+elements hold either true or false. An important limitation exists in
+the parsing of floating point numbers -- fontconfig requires that
+the mantissa start with a digit, not a decimal point, so insert a leading
+zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5
+instead of -.5).
+ </para></refsect2>
+ <refsect2><title><literal>&lt;matrix&gt;</literal></title><para>
+This element holds the four <literal>&lt;double&gt;</literal> elements of an affine
+transformation.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;range&gt;</literal></title><para>
+This element holds the two <literal>&lt;int&gt;</literal> elements of a range
+representation.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;charset&gt;</literal></title><para>
+This element holds at least one <literal>&lt;int&gt;</literal> element of
+an Unicode code point or more.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;langset&gt;</literal></title><para>
+This element holds at least one <literal>&lt;string&gt;</literal> element of
+a RFC-3066-style languages or more.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;name&gt;</literal></title><para>
+Holds a property name. Evaluates to the first value from the property of
+the font, not the pattern.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;const&gt;</literal></title><para>
+Holds the name of a constant; these are always integers and serve as
+symbolic names for common font values:
+ <programlisting>
+ Constant Property Value
+ -------------------------------------
+ thin weight 0
+ extralight weight 40
+ ultralight weight 40
+ light weight 50
+ book weight 75
+ regular weight 80
+ normal weight 80
+ medium weight 100
+ demibold weight 180
+ semibold weight 180
+ bold weight 200
+ extrabold weight 205
+ black weight 210
+ heavy weight 210
+ roman slant 0
+ italic slant 100
+ oblique slant 110
+ ultracondensed width 50
+ extracondensed width 63
+ condensed width 75
+ semicondensed width 87
+ normal width 100
+ semiexpanded width 113
+ expanded width 125
+ extraexpanded width 150
+ ultraexpanded width 200
+ proportional spacing 0
+ dual spacing 90
+ mono spacing 100
+ charcell spacing 110
+ unknown rgba 0
+ rgb rgba 1
+ bgr rgba 2
+ vrgb rgba 3
+ vbgr rgba 4
+ none rgba 5
+ lcdnone lcdfilter 0
+ lcddefault lcdfilter 1
+ lcdlight lcdfilter 2
+ lcdlegacy lcdfilter 3
+ hintnone hintstyle 0
+ hintslight hintstyle 1
+ hintmedium hintstyle 2
+ hintfull hintstyle 3
+ </programlisting>
+ </para>
+ </refsect2>
+ <refsect2>
+ <title><literal>&lt;or&gt;</literal>, <literal>&lt;and&gt;</literal>, <literal>&lt;plus&gt;</literal>, <literal>&lt;minus&gt;</literal>, <literal>&lt;times&gt;</literal>, <literal>&lt;divide&gt;</literal></title>
+ <para>
+These elements perform the specified operation on a list of expression
+elements. <literal>&lt;or&gt;</literal> and <literal>&lt;and&gt;</literal> are boolean, not bitwise.
+ </para>
+ </refsect2>
+ <refsect2>
+ <title><literal>&lt;eq&gt;</literal>, <literal>&lt;not_eq&gt;</literal>, <literal>&lt;less&gt;</literal>, <literal>&lt;less_eq&gt;</literal>, <literal>&lt;more&gt;</literal>, <literal>&lt;more_eq&gt;</literal></title>
+ <para>
+These elements compare two values, producing a boolean result.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;not&gt;</literal></title><para>
+Inverts the boolean sense of its one expression element
+ </para></refsect2>
+ <refsect2><title><literal>&lt;if&gt;</literal></title><para>
+This element takes three expression elements; if the value of the first is
+true, it produces the value of the second, otherwise it produces the value
+of the third.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;alias&gt;</literal></title><para>
+Alias elements provide a shorthand notation for the set of common match
+operations needed to substitute one font family for another. They contain a
+<literal>&lt;family&gt;</literal> element followed by optional <literal>&lt;prefer&gt;</literal>, <literal>&lt;accept&gt;</literal> and <literal>&lt;default&gt;</literal>
+elements. Fonts matching the <literal>&lt;family&gt;</literal> element are edited to prepend the
+list of <literal>&lt;prefer&gt;</literal>ed families before the matching <literal>&lt;family&gt;</literal>, append the
+<literal>&lt;accept&gt;</literal>able families after the matching <literal>&lt;family&gt;</literal> and append the <literal>&lt;default&gt;</literal>
+families to the end of the family list.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;family&gt;</literal></title><para>
+Holds a single font family name
+ </para></refsect2>
+ <refsect2><title><literal>&lt;prefer&gt;</literal>, <literal>&lt;accept&gt;</literal>, <literal>&lt;default&gt;</literal></title><para>
+These hold a list of <literal>&lt;family&gt;</literal> elements to be used by the <literal>&lt;alias&gt;</literal> element.
+ </para></refsect2>
+</refsect1>
+<refsect1><title>EXAMPLE CONFIGURATION FILE</title>
+ <refsect2><title>System configuration file</title>
+ <para>
+This is an example of a system-wide configuration file
+ </para>
+ <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
+&lt;!-- &confdir;/fonts.conf file to configure system font access --&gt;
+&lt;fontconfig&gt;
+&lt;!--
+ Find fonts in these directories
+--&gt;
+&lt;dir&gt;/usr/share/fonts&lt;/dir&gt;
+&lt;dir&gt;/usr/X11R6/lib/X11/fonts&lt;/dir&gt;
+
+&lt;!--
+ Accept deprecated 'mono' alias, replacing it with 'monospace'
+--&gt;
+&lt;match target="pattern"&gt;
+ &lt;test qual="any" name="family"&gt;&lt;string&gt;mono&lt;/string&gt;&lt;/test&gt;
+ &lt;edit name="family" mode="assign"&gt;&lt;string&gt;monospace&lt;/string&gt;&lt;/edit&gt;
+&lt;/match&gt;
+
+&lt;!--
+ Names not including any well known alias are given 'sans'
+--&gt;
+&lt;match target="pattern"&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;sans&lt;/test&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;serif&lt;/test&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;monospace&lt;/test&gt;
+ &lt;edit name="family" mode="append_last"&gt;&lt;string&gt;sans&lt;/string&gt;&lt;/edit&gt;
+&lt;/match&gt;
+
+&lt;!--
+ Load per-user customization file, but don't complain
+ if it doesn't exist
+--&gt;
+&lt;include ignore_missing="yes"&gt;~/.fonts.conf&lt;/include&gt;
+
+&lt;!--
+ Load local customization files, but don't complain
+ if there aren't any
+--&gt;
+&lt;include ignore_missing="yes"&gt;conf.d&lt;/include&gt;
+&lt;include ignore_missing="yes"&gt;local.conf&lt;/include&gt;
+
+&lt;!--
+ Alias well known font names to available TrueType fonts.
+ These substitute TrueType faces for similar Type1
+ faces to improve screen appearance.
+--&gt;
+&lt;alias&gt;
+ &lt;family&gt;Times&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Times New Roman&lt;/family&gt;&lt;/prefer&gt;
+ &lt;default&gt;&lt;family&gt;serif&lt;/family&gt;&lt;/default&gt;
+&lt;/alias&gt;
+&lt;alias&gt;
+ &lt;family&gt;Helvetica&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Arial&lt;/family&gt;&lt;/prefer&gt;
+ &lt;default&gt;&lt;family&gt;sans&lt;/family&gt;&lt;/default&gt;
+&lt;/alias&gt;
+&lt;alias&gt;
+ &lt;family&gt;Courier&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Courier New&lt;/family&gt;&lt;/prefer&gt;
+ &lt;default&gt;&lt;family&gt;monospace&lt;/family&gt;&lt;/default&gt;
+&lt;/alias&gt;
+
+&lt;!--
+ Provide required aliases for standard names
+ Do these after the users configuration file so that
+ any aliases there are used preferentially
+--&gt;
+&lt;alias&gt;
+ &lt;family&gt;serif&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Times New Roman&lt;/family&gt;&lt;/prefer&gt;
+&lt;/alias&gt;
+&lt;alias&gt;
+ &lt;family&gt;sans&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Arial&lt;/family&gt;&lt;/prefer&gt;
+&lt;/alias&gt;
+&lt;alias&gt;
+ &lt;family&gt;monospace&lt;/family&gt;
+ &lt;prefer&gt;&lt;family&gt;Andale Mono&lt;/family&gt;&lt;/prefer&gt;
+&lt;/alias&gt;
+&lt;/fontconfig&gt;
+ </programlisting>
+ </refsect2>
+ <refsect2><title>User configuration file</title>
+ <para>
+This is an example of a per-user configuration file that lives in
+~/.fonts.conf
+ </para>
+ <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
+&lt;!-- ~/.fonts.conf for per-user font configuration --&gt;
+&lt;fontconfig&gt;
+
+&lt;!--
+ Private font directory
+--&gt;
+&lt;dir&gt;~/.fonts&lt;/dir&gt;
+
+&lt;!--
+ use rgb sub-pixel ordering to improve glyph appearance on
+ LCD screens. Changes affecting rendering, but not matching
+ should always use target="font".
+--&gt;
+&lt;match target="font"&gt;
+ &lt;edit name="rgba" mode="assign"&gt;&lt;const&gt;rgb&lt;/const&gt;&lt;/edit&gt;
+&lt;/match&gt;
+&lt;/fontconfig&gt;
+ </programlisting>
+ </refsect2>
+</refsect1>
+<refsect1><title>Files</title>
+ <para>
+<emphasis>fonts.conf</emphasis>
+contains configuration information for the fontconfig library
+consisting of directories to look at for font information as well as
+instructions on editing program specified font patterns before attempting to
+match the available fonts. It is in XML format.
+ </para>
+ <para>
+<emphasis>conf.d</emphasis>
+is the conventional name for a directory of additional configuration files
+managed by external applications or the local administrator. The
+filenames starting with decimal digits are sorted in lexicographic order
+and used as additional configuration files. All of these files are in XML
+format. The master fonts.conf file references this directory in an
+&lt;include&gt; directive.
+ </para>
+ <para>
+<emphasis>fonts.dtd</emphasis>
+is a DTD that describes the format of the configuration files.
+ </para>
+ <para>
+<emphasis>~/.fonts.conf.d</emphasis>
+is the conventional name for a per-user directory of (typically
+auto-generated) configuration files, although the
+actual location is specified in the global fonts.conf file.
+ </para>
+ <para>
+<emphasis>~/.fonts.conf</emphasis>
+is the conventional location for per-user font configuration, although the
+actual location is specified in the global fonts.conf file.
+ </para>
+ <para>
+<emphasis> ~/.fonts.cache-*</emphasis>
+is the conventional repository of font information that isn't found in the
+per-directory caches. This file is automatically maintained by fontconfig.
+ </para>
+</refsect1>
+<refsect1><title>See Also</title>
+ <para>
+fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)
+ </para>
+</refsect1>
+<refsect1><title>Version</title>
+ <para>
+Fontconfig version &version;
+ </para>
+</refsect1>
+</refentry>
diff --git a/fontconfig/doc/func.sgml b/fontconfig/doc/func.sgml
index 0da5ae4a6..7fb38ab4a 100644
--- a/fontconfig/doc/func.sgml
+++ b/fontconfig/doc/func.sgml
@@ -1,90 +1,90 @@
-<!--
- fontconfig/doc/func.sgml
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of Keith Packard not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. Keith Packard makes no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- -->
-@?TITLE@
- <refentry id="@TITLE@">
-@:@
- <refentry id="@FUNC@">
-@;@
- <refmeta>
-@?TITLE@
- <refentrytitle>@TITLE@</refentrytitle>
-@:@
- <refentrytitle>@FUNC@</refentrytitle>
-@;@
- <manvolnum>3</manvolnum>
- </refmeta>
- <refnamediv>
-@{PROTOTYPE@
- <refname>@FUNC@</refname>
-@}PROTOTYPE@
- <refpurpose>@PURPOSE@</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <funcsynopsis>
- <funcsynopsisinfo>
-@?SYNOPSIS@
-@SYNOPSIS@
-@:@
-#include &lt;fontconfig.h&gt;
-@;@
- </funcsynopsisinfo>
-@{PROTOTYPE@
- <funcprototype>
- <funcdef>@?RET@@RET@@:@void@;@ <function>@FUNC@</function></funcdef>
-@?TYPE1@
- <paramdef>@TYPE1@<parameter>@ARG1@</parameter></paramdef>
-@;@
-@?TYPE2@
- <paramdef>@TYPE2@<parameter>@ARG2@</parameter></paramdef>
-@;@
-@?TYPE3@
- <paramdef>@TYPE3@<parameter>@ARG3@</parameter></paramdef>
-@;@
-@?TYPE4@
- <paramdef>@TYPE4@<parameter>@ARG4@</parameter></paramdef>
-@;@
-@?TYPE5@
- <paramdef>@TYPE5@<parameter>@ARG5@</parameter></paramdef>
-@;@
-@?TYPE6@
- <paramdef>@TYPE6@<parameter>@ARG6@</parameter></paramdef>
-@;@
-@?TYPE7@
- <paramdef>@TYPE7@<parameter>@ARG7@</parameter></paramdef>
-@;@
- </funcprototype>
-@}PROTOTYPE@
- </funcsynopsis>
- </refsynopsisdiv>
- <refsect1><title>Description</title>
- <para>
-@DESC@
- </para>
- </refsect1>
- <refsect1><title>Version</title>
- <para>
-Fontconfig version &version;
- </para>
- </refsect1>
- </refentry>
+<!--
+ fontconfig/doc/func.sgml
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ -->
+@?TITLE@
+ <refentry id="@TITLE@">
+@:@
+ <refentry id="@FUNC@">
+@;@
+ <refmeta>
+@?TITLE@
+ <refentrytitle>@TITLE@</refentrytitle>
+@:@
+ <refentrytitle>@FUNC@</refentrytitle>
+@;@
+ <manvolnum>3</manvolnum>
+ </refmeta>
+ <refnamediv>
+@{PROTOTYPE@
+ <refname>@FUNC@</refname>
+@}PROTOTYPE@
+ <refpurpose>@PURPOSE@</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcsynopsisinfo>
+@?SYNOPSIS@
+@SYNOPSIS@
+@:@
+#include &lt;fontconfig.h&gt;
+@;@
+ </funcsynopsisinfo>
+@{PROTOTYPE@
+ <funcprototype>
+ <funcdef>@?RET@@RET@@:@void@;@ <function>@FUNC@</function></funcdef>
+@?TYPE1@
+ <paramdef>@TYPE1@<parameter>@ARG1@</parameter></paramdef>
+@;@
+@?TYPE2@
+ <paramdef>@TYPE2@<parameter>@ARG2@</parameter></paramdef>
+@;@
+@?TYPE3@
+ <paramdef>@TYPE3@<parameter>@ARG3@</parameter></paramdef>
+@;@
+@?TYPE4@
+ <paramdef>@TYPE4@<parameter>@ARG4@</parameter></paramdef>
+@;@
+@?TYPE5@
+ <paramdef>@TYPE5@<parameter>@ARG5@</parameter></paramdef>
+@;@
+@?TYPE6@
+ <paramdef>@TYPE6@<parameter>@ARG6@</parameter></paramdef>
+@;@
+@?TYPE7@
+ <paramdef>@TYPE7@<parameter>@ARG7@</parameter></paramdef>
+@;@
+ </funcprototype>
+@}PROTOTYPE@
+ </funcsynopsis>
+ </refsynopsisdiv>
+ <refsect1><title>Description</title>
+ <para>
+@DESC@
+ </para>
+ </refsect1>
+ <refsect1><title>Version</title>
+ <para>
+Fontconfig version &version;
+ </para>
+ </refsect1>
+ </refentry>
diff --git a/fontconfig/doc/version.sgml.in b/fontconfig/doc/version.sgml.in
index 9981b1c74..95d4088ad 100644
--- a/fontconfig/doc/version.sgml.in
+++ b/fontconfig/doc/version.sgml.in
@@ -1,24 +1,24 @@
-<!--
- fontconfig/doc/version.sgml.in
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of Keith Packard not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. Keith Packard makes no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-@VERSION@
+<!--
+ fontconfig/doc/version.sgml.in
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+@VERSION@
diff --git a/fontconfig/fc-arch/Makefile.am b/fontconfig/fc-arch/Makefile.am
deleted file mode 100644
index 806c730b4..000000000
--- a/fontconfig/fc-arch/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fcarch.tmpl.h
-STMPL=${top_srcdir}/fc-arch/fcarch.tmpl.h
-TARG=fcarch.h
-
-ARCHITECTURE=@ARCHITECTURE@
-.PRECIOUS: $(TARG)
-
-noinst_PROGRAMS=fc-arch
-
-EXTRA_DIST=$(TMPL)
-
-$(TARG):fc-arch${EXEEXT} $(STMPL) ${top_srcdir}/src/fcint.h ../config.h
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-arch${EXEEXT} $(ARCHITECTURE) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES=$(TARG) $(ALIAS_FILES)
diff --git a/fontconfig/fc-arch/fc-arch.c b/fontconfig/fc-arch/fc-arch.c
deleted file mode 100644
index 1ef0cf18a..000000000
--- a/fontconfig/fc-arch/fc-arch.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright © 2006 Keith Packard
- * Copyright © 2005 Patrick Lam
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-
-#define ENDIAN_TEST 0x01020304
-#define MACHINE_SIGNATURE_SIZE 1024
-
-static char *
-FcCacheMachineSignature (void)
-{
- static char buf[MACHINE_SIGNATURE_SIZE];
- int32_t magic = ENDIAN_TEST;
- char * m = (char *)&magic;
-
- sprintf (buf, "%01x%01x%01x%01x_"
- "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_"
- "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x",
- m[0], m[1], m[2], m[3],
- (unsigned int)sizeof (FcAlign),
- (unsigned int)sizeof (char),
- (unsigned int)sizeof (char *),
- (unsigned int)sizeof (int),
- (unsigned int)sizeof (intptr_t),
- (unsigned int)sizeof (FcPattern),
- (unsigned int)sizeof (FcPatternEltPtr),
- (unsigned int)sizeof (struct FcPatternElt *),
- (unsigned int)sizeof (FcPatternElt),
- (unsigned int)sizeof (FcObject),
- (unsigned int)sizeof (FcValueListPtr),
- (unsigned int)sizeof (FcValue),
- (unsigned int)sizeof (FcValueBinding),
- (unsigned int)sizeof (struct FcValueList *),
- (unsigned int)sizeof (FcStrSet *), /* For FcLangSet */
- (unsigned int)sizeof (FcCharSet),
- (unsigned int)sizeof (FcCharLeaf **),
- (unsigned int)sizeof (FcChar16 *),
- (unsigned int)sizeof (FcChar16),
- (unsigned int)sizeof (FcCharLeaf),
- (unsigned int)sizeof (FcChar32),
- (unsigned int)sizeof (FcCache));
-
- return buf;
-}
-
-int
-main (int argc, char **argv)
-{
- static char line[1024];
- char *signature;
- int signature_length;
- char *space;
- char *arch = NULL;
- int lineno = 0;
-
- if (argc != 2)
- fprintf (stderr, "Usage: %s <architecture>|auto < fcarch.tmpl.h > fcarch.h\n",
- argv[0]);
- arch = argv[1];
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- lineno++;
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
- signature = FcCacheMachineSignature();
- signature_length = strlen (signature);
-
- if (strcmp (arch, "auto") == 0)
- {
- arch = NULL;
- /*
- * Search for signature
- */
- while (fgets (line, sizeof (line), stdin))
- {
- lineno++;
- /*
- * skip comments
- */
- if (!strncmp (line, "@@@", 3))
- continue;
- space = line;
- while (*space && !isspace (*space))
- space++;
- if (!space)
- {
- fprintf (stderr, "%s: malformed input on line %d\n",
- argv[0], lineno);
- exit (1);
- }
- *space++ = '\0';
- while (isspace (*space))
- space++;
- if (!strncmp (space, signature, signature_length))
- {
- arch = line;
- break;
- }
- }
- }
- if (!arch)
- {
- fprintf (stderr, "%s: unknown signature \"%s\"\n", argv[0], signature);
- fprintf (stderr, "\tPlease update fcarch.tmpl.h and rebuild\n");
- exit (1);
- }
- printf ("#define FC_ARCHITECTURE \"%s\"\n", arch);
- fflush (stdout);
- exit (ferror (stdout));
-}
-
diff --git a/fontconfig/fc-arch/fcarch.tmpl.h b/fontconfig/fc-arch/fcarch.tmpl.h
deleted file mode 100644
index 363e11aa1..000000000
--- a/fontconfig/fc-arch/fcarch.tmpl.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright © 2006 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
-@@@ Each unique machine architecture needs an entry in this file
-@@@ If fc-arch runs and doesn't find a matching entry, it will print
-@@@ out the archtecture signature in the error message. Take that
-@@@ signature and place it in this file along with a suitable architecture
-@@@ name. Architecture names are used to construct file names, so
-@@@ use something reasonable and don't include any spaces
-@@@
-@@@ So far the differences boil down to: endianness, 32 vs 64 bit pointers,
-@@@ and on @@@ 32bit ones, whether double is aligned to one word or two words.
-@@@ Those result in the 6 formats listed below.
-@@@
-@@@ ,name (endianness,pointer-size,double-alignment)
-@@@ | ,endian
-@@@ | | ,FcAlign
-@@@ | | | ,char
-@@@ | | | | ,char*
-@@@ | | | | | ,int
-@@@ | | | | | | ,intptr_t
-@@@ | | | | | | | ,Pattern
-@@@ | | | | | | | | ,EltPtr
-@@@ | | | | | | | | | ,Elt *
-@@@ | | | | | | | | | | ,Elt
-@@@ | | | | | | | | | | | ,ObjPtr
-@@@ | | | | | | | | | | | | ,ValueListPtr
-@@@ | | | | | | | | | | | | | ,Value
-@@@ | | | | | | | | | | | | | | ,ValueBinding
-@@@ | | | | | | | | | | | | | | | ,ValueList *
-@@@ | | | | | | | | | | | | | | | | ,StrSet *
-@@@ | | | | | | | | | | | | | | | | | ,CharSet
-@@@ | | | | | | | | | | | | | | | | | | ,CharLeaf **
-@@@ | | | | | | | | | | | | | | | | | | | ,Char16 *
-@@@ | | | | | | | | | | | | | | | | | | | | ,Char16
-@@@ | | | | | | | | | | | | | | | | | | | | | ,CharLeaf
-@@@ | | | | | | | | | | | | | | | | | | | | | | ,Char32
-@@@ | | | | | | | | | | | | | | | | | | | | | | | ,Cache
-@@@ | | | | | | | | | | | | | | | | | | | | | | | |
-le32d4 4321_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20
-le32d8 4321_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20
-le64 4321_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38
-be32d4 1234_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20
-be32d8 1234_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20
-be64 1234_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38
diff --git a/fontconfig/fc-arch/makefile b/fontconfig/fc-arch/makefile
deleted file mode 100644
index 2f18dff42..000000000
--- a/fontconfig/fc-arch/makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-ifneq ($(NORELDBG),1)
-$(error NORELDBG should have been set to 1)
-endif
-
-INCLUDES+=..\src
-
-TMPL=fcarch.tmpl.h
-STMPL=fcarch.tmpl.h
-TARG=fcarch.h
-
-ARCHITECTURE=x86-vc
-
-TTYAPP=fc-arch
-CSRCS=fc-arch.c
-
-DEFINES += HAVE_CONFIG_H
-INCLUDES := .. $(INCLUDES)
-
-$(TARG): $(OBJDIR)\fc-arch.exe $(STMPL) ..\src\fcint.h ..\config.h
- del -e $(TARG)
- $(OBJDIR)\fc-arch.exe $(ARCHITECTURE) < $(STMPL) > $(TARG).tmp
- move $(TARG).tmp $(TARG)
-
diff --git a/fontconfig/fc-cache/Makefile.am b/fontconfig/fc-cache/Makefile.am
index 5067c04c0..4402d8952 100644
--- a/fontconfig/fc-cache/Makefile.am
+++ b/fontconfig/fc-cache/Makefile.am
@@ -1,68 +1,68 @@
-#
-# fontconfig/fc-cache/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_CACHE_SRC=${top_srcdir}/fc-cache
-
-SGML = ${FC_CACHE_SRC}/fc-cache.sgml
-
-if OS_WIN32
-else
-install-data-local:
- -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)"
-
-uninstall-local:
- -$(RM) -rf "$(DESTDIR)$(fc_cachedir)"
-endif
-
-INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS)
-
-bin_PROGRAMS=fc-cache
-
-BUILT_MANS=fc-cache.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-cache.sgml $(BUILT_MANS)
-
-fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-cache/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOC2MAN = docbook2man
+
+FC_CACHE_SRC=${top_srcdir}/fc-cache
+
+SGML = ${FC_CACHE_SRC}/fc-cache.sgml
+
+if OS_WIN32
+else
+install-data-local:
+ -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)"
+
+uninstall-local:
+ -$(RM) -rf "$(DESTDIR)$(fc_cachedir)"
+endif
+
+INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS)
+
+bin_PROGRAMS=fc-cache
+
+BUILT_MANS=fc-cache.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-cache.sgml $(BUILT_MANS)
+
+fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-cache/fc-cache.c b/fontconfig/fc-cache/fc-cache.c
index 19e9d0df6..c7dcbbfd7 100644
--- a/fontconfig/fc-cache/fc-cache.c
+++ b/fontconfig/fc-cache/fc-cache.c
@@ -1,468 +1,472 @@
-/*
- * fontconfig/fc-cache/fc-cache.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "../fc-arch/fcarch.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <string.h>
-
-#if defined (_WIN32)
-#define STRICT
-#include <windows.h>
-#define sleep(x) Sleep((x) * 1000)
-#undef STRICT
-#endif
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"force", 0, 0, 'f'},
- {"really-force", 0, 0, 'r'},
- {"system-only", 0, 0, 's'},
- {"version", 0, 0, 'V'},
- {"verbose", 0, 0, 'v'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n",
- program);
-#else
- fprintf (file, "usage: %s [-frsvVh] [dirs]\n",
- program);
-#endif
- fprintf (file, "Build font information caches in [dirs]\n"
- "(all directories in font configuration by default).\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -f, --force scan directories with apparently valid caches\n");
- fprintf (file, " -r, --really-force erase all existing caches, then rescan\n");
- fprintf (file, " -s, --system-only scan system-wide directories only\n");
- fprintf (file, " -v, --verbose display status information while busy\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -f (force) scan directories with apparently valid caches\n");
- fprintf (file, " -r, (really force) erase all existing caches, then rescan\n");
- fprintf (file, " -s (system) scan system-wide directories only\n");
- fprintf (file, " -v (verbose) display status information while busy\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-static FcStrSet *processed_dirs;
-
-static int
-scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose)
-{
- int ret = 0;
- const FcChar8 *dir;
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcCache *cache;
- struct stat statb;
- FcBool was_valid;
- int i;
-
- /*
- * Now scan all of the directories into separate databases
- * and write out the results
- */
- while ((dir = FcStrListNext (list)))
- {
- if (verbose)
- {
- printf ("%s: ", dir);
- fflush (stdout);
- }
-
- if (!dir)
- {
- if (verbose)
- printf ("skipping, no such directory\n");
- continue;
- }
-
- if (FcStrSetMember (processed_dirs, dir))
- {
- if (verbose)
- printf ("skipping, looped directory detected\n");
- continue;
- }
-
- if (stat ((char *) dir, &statb) == -1)
- {
- switch (errno) {
- case ENOENT:
- case ENOTDIR:
- if (verbose)
- printf ("skipping, no such directory\n");
- break;
- default:
- fprintf (stderr, "\"%s\": ", dir);
- perror ("");
- ret++;
- break;
- }
- continue;
- }
-
- if (!S_ISDIR (statb.st_mode))
- {
- fprintf (stderr, "\"%s\": not a directory, skipping\n", dir);
- continue;
- }
-
- if (really_force)
- FcDirCacheUnlink (dir, config);
-
- cache = NULL;
- was_valid = FcFalse;
- if (!force) {
- cache = FcDirCacheLoad (dir, config, NULL);
- if (cache)
- was_valid = FcTrue;
- }
-
- if (!cache)
- {
- cache = FcDirCacheRead (dir, FcTrue, config);
- if (!cache)
- {
- fprintf (stderr, "%s: error scanning\n", dir);
- ret++;
- continue;
- }
- }
-
- if (was_valid)
- {
- if (verbose)
- printf ("skipping, existing cache is valid: %d fonts, %d dirs\n",
- FcCacheNumFont (cache), FcCacheNumSubdir (cache));
- }
- else
- {
- if (verbose)
- printf ("caching, new cache contents: %d fonts, %d dirs\n",
- FcCacheNumFont (cache), FcCacheNumSubdir (cache));
-
- if (!FcDirCacheValid (dir))
- {
- fprintf (stderr, "%s: failed to write cache\n", dir);
- (void) FcDirCacheUnlink (dir, config);
- ret++;
- }
- }
-
- subdirs = FcStrSetCreate ();
- if (!subdirs)
- {
- fprintf (stderr, "%s: Can't create subdir set\n", dir);
- ret++;
- FcDirCacheUnload (cache);
- continue;
- }
- for (i = 0; i < FcCacheNumSubdir (cache); i++)
- FcStrSetAdd (subdirs, FcCacheSubdir (cache, i));
-
- FcDirCacheUnload (cache);
-
- sublist = FcStrListCreate (subdirs);
- FcStrSetDestroy (subdirs);
- if (!sublist)
- {
- fprintf (stderr, "%s: Can't create subdir list\n", dir);
- ret++;
- continue;
- }
- FcStrSetAdd (processed_dirs, dir);
- ret += scanDirs (sublist, config, force, really_force, verbose);
- }
- FcStrListDone (list);
- return ret;
-}
-
-static FcBool
-cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose)
-{
- DIR *d;
- struct dirent *ent;
- FcChar8 *dir_base;
- FcBool ret = FcTrue;
- FcBool remove;
- FcCache *cache;
- struct stat target_stat;
-
- dir_base = FcStrPlus (dir, (FcChar8 *) "/");
- if (!dir_base)
- {
- fprintf (stderr, "%s: out of memory\n", dir);
- return FcFalse;
- }
- if (access ((char *) dir, W_OK) != 0)
- {
- if (verbose)
- printf ("%s: not cleaning %s cache directory\n", dir,
- access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent");
- FcStrFree (dir_base);
- return FcTrue;
- }
- if (verbose)
- printf ("%s: cleaning cache directory\n", dir);
- d = opendir ((char *) dir);
- if (!d)
- {
- perror ((char *) dir);
- FcStrFree (dir_base);
- return FcFalse;
- }
- while ((ent = readdir (d)))
- {
- FcChar8 *file_name;
- const FcChar8 *target_dir;
-
- if (ent->d_name[0] == '.')
- continue;
- /* skip cache files for different architectures and */
- /* files which are not cache files at all */
- if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) ||
- strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX))
- continue;
-
- file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name);
- if (!file_name)
- {
- fprintf (stderr, "%s: allocation failure\n", dir);
- ret = FcFalse;
- break;
- }
- remove = FcFalse;
- cache = FcDirCacheLoadFile (file_name, NULL);
- if (!cache)
- {
- if (verbose)
- printf ("%s: invalid cache file: %s\n", dir, ent->d_name);
- remove = FcTrue;
- }
- else
- {
- target_dir = FcCacheDir (cache);
- if (stat ((char *) target_dir, &target_stat) < 0)
- {
- if (verbose)
- printf ("%s: %s: missing directory: %s \n",
- dir, ent->d_name, target_dir);
- remove = FcTrue;
- }
- }
- if (remove)
- {
- if (unlink ((char *) file_name) < 0)
- {
- perror ((char *) file_name);
- ret = FcFalse;
- }
- }
- FcDirCacheUnload (cache);
- FcStrFree (file_name);
- }
-
- closedir (d);
- FcStrFree (dir_base);
- return ret;
-}
-
-static FcBool
-cleanCacheDirectories (FcConfig *config, FcBool verbose)
-{
- FcStrList *cache_dirs = FcConfigGetCacheDirs (config);
- FcChar8 *cache_dir;
- FcBool ret = FcTrue;
-
- if (!cache_dirs)
- return FcFalse;
- while ((cache_dir = FcStrListNext (cache_dirs)))
- {
- if (!cleanCacheDirectory (config, cache_dir, verbose))
- {
- ret = FcFalse;
- break;
- }
- }
- FcStrListDone (cache_dirs);
- return ret;
-}
-
-int
-main (int argc, char **argv)
-{
- FcStrSet *dirs;
- FcStrList *list;
- FcBool verbose = FcFalse;
- FcBool force = FcFalse;
- FcBool really_force = FcFalse;
- FcBool systemOnly = FcFalse;
- FcConfig *config;
- int i;
- int ret;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "frsVvh")) != -1)
-#endif
- {
- switch (c) {
- case 'r':
- really_force = FcTrue;
- /* fall through */
- case 'f':
- force = FcTrue;
- break;
- case 's':
- systemOnly = FcTrue;
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'v':
- verbose = FcTrue;
- break;
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (systemOnly)
- FcConfigEnableHome (FcFalse);
- config = FcInitLoadConfig ();
- if (!config)
- {
- fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
- return 1;
- }
- FcConfigSetCurrent (config);
-
- if (argv[i])
- {
- dirs = FcStrSetCreate ();
- if (!dirs)
- {
- fprintf (stderr, "%s: Can't create list of directories\n",
- argv[0]);
- return 1;
- }
- while (argv[i])
- {
- if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i]))
- {
- fprintf (stderr, "%s: Can't add directory\n", argv[0]);
- return 1;
- }
- i++;
- }
- list = FcStrListCreate (dirs);
- FcStrSetDestroy (dirs);
- }
- else
- list = FcConfigGetConfigDirs (config);
-
- if ((processed_dirs = FcStrSetCreate()) == NULL) {
- fprintf(stderr, "Cannot malloc\n");
- return 1;
- }
-
- ret = scanDirs (list, config, force, really_force, verbose);
-
- FcStrSetDestroy (processed_dirs);
-
- cleanCacheDirectories (config, verbose);
-
- /*
- * Now we need to sleep a second (or two, to be extra sure), to make
- * sure that timestamps for changes after this run of fc-cache are later
- * then any timestamps we wrote. We don't use gettimeofday() because
- * sleep(3) can't be interrupted by a signal here -- this isn't in the
- * library, and there aren't any signals flying around here.
- */
- FcConfigDestroy (config);
- FcFini ();
- sleep (2);
- if (verbose)
- printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded");
- return ret;
-}
+/*
+ * fontconfig/fc-cache/fc-cache.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "../src/fcarch.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <string.h>
+
+#if defined (_WIN32)
+#define STRICT
+#include <windows.h>
+#define sleep(x) Sleep((x) * 1000)
+#undef STRICT
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+const struct option longopts[] = {
+ {"force", 0, 0, 'f'},
+ {"really-force", 0, 0, 'r'},
+ {"system-only", 0, 0, 's'},
+ {"version", 0, 0, 'V'},
+ {"verbose", 0, 0, 'v'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-frsvVh] [dirs]\n",
+ program);
+#endif
+ fprintf (file, "Build font information caches in [dirs]\n"
+ "(all directories in font configuration by default).\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -f, --force scan directories with apparently valid caches\n");
+ fprintf (file, " -r, --really-force erase all existing caches, then rescan\n");
+ fprintf (file, " -s, --system-only scan system-wide directories only\n");
+ fprintf (file, " -v, --verbose display status information while busy\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -f (force) scan directories with apparently valid caches\n");
+ fprintf (file, " -r, (really force) erase all existing caches, then rescan\n");
+ fprintf (file, " -s (system) scan system-wide directories only\n");
+ fprintf (file, " -v (verbose) display status information while busy\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+static FcStrSet *processed_dirs;
+
+static int
+scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, int *changed)
+{
+ int ret = 0;
+ const FcChar8 *dir;
+ FcStrSet *subdirs;
+ FcStrList *sublist;
+ FcCache *cache;
+ struct stat statb;
+ FcBool was_valid;
+ int i;
+
+ /*
+ * Now scan all of the directories into separate databases
+ * and write out the results
+ */
+ while ((dir = FcStrListNext (list)))
+ {
+ if (verbose)
+ {
+ printf ("%s: ", dir);
+ fflush (stdout);
+ }
+
+ if (!dir)
+ {
+ if (verbose)
+ printf ("skipping, no such directory\n");
+ continue;
+ }
+
+ if (FcStrSetMember (processed_dirs, dir))
+ {
+ if (verbose)
+ printf ("skipping, looped directory detected\n");
+ continue;
+ }
+
+ if (stat ((char *) dir, &statb) == -1)
+ {
+ switch (errno) {
+ case ENOENT:
+ case ENOTDIR:
+ if (verbose)
+ printf ("skipping, no such directory\n");
+ break;
+ default:
+ fprintf (stderr, "\"%s\": ", dir);
+ perror ("");
+ ret++;
+ break;
+ }
+ continue;
+ }
+
+ if (!S_ISDIR (statb.st_mode))
+ {
+ fprintf (stderr, "\"%s\": not a directory, skipping\n", dir);
+ continue;
+ }
+
+ if (really_force)
+ FcDirCacheUnlink (dir, config);
+
+ cache = NULL;
+ was_valid = FcFalse;
+ if (!force) {
+ cache = FcDirCacheLoad (dir, config, NULL);
+ if (cache)
+ was_valid = FcTrue;
+ }
+
+ if (!cache)
+ {
+ (*changed)++;
+ cache = FcDirCacheRead (dir, FcTrue, config);
+ if (!cache)
+ {
+ fprintf (stderr, "%s: error scanning\n", dir);
+ ret++;
+ continue;
+ }
+ }
+
+ if (was_valid)
+ {
+ if (verbose)
+ printf ("skipping, existing cache is valid: %d fonts, %d dirs\n",
+ FcCacheNumFont (cache), FcCacheNumSubdir (cache));
+ }
+ else
+ {
+ if (verbose)
+ printf ("caching, new cache contents: %d fonts, %d dirs\n",
+ FcCacheNumFont (cache), FcCacheNumSubdir (cache));
+
+ if (!FcDirCacheValid (dir))
+ {
+ fprintf (stderr, "%s: failed to write cache\n", dir);
+ (void) FcDirCacheUnlink (dir, config);
+ ret++;
+ }
+ }
+
+ subdirs = FcStrSetCreate ();
+ if (!subdirs)
+ {
+ fprintf (stderr, "%s: Can't create subdir set\n", dir);
+ ret++;
+ FcDirCacheUnload (cache);
+ continue;
+ }
+ for (i = 0; i < FcCacheNumSubdir (cache); i++)
+ FcStrSetAdd (subdirs, FcCacheSubdir (cache, i));
+
+ FcDirCacheUnload (cache);
+
+ sublist = FcStrListCreate (subdirs);
+ FcStrSetDestroy (subdirs);
+ if (!sublist)
+ {
+ fprintf (stderr, "%s: Can't create subdir list\n", dir);
+ ret++;
+ continue;
+ }
+ FcStrSetAdd (processed_dirs, dir);
+ ret += scanDirs (sublist, config, force, really_force, verbose, changed);
+ }
+ FcStrListDone (list);
+ return ret;
+}
+
+static FcBool
+cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose)
+{
+ DIR *d;
+ struct dirent *ent;
+ FcChar8 *dir_base;
+ FcBool ret = FcTrue;
+ FcBool remove;
+ FcCache *cache;
+ struct stat target_stat;
+
+ dir_base = FcStrPlus (dir, (FcChar8 *) "/");
+ if (!dir_base)
+ {
+ fprintf (stderr, "%s: out of memory\n", dir);
+ return FcFalse;
+ }
+ if (access ((char *) dir, W_OK) != 0)
+ {
+ if (verbose)
+ printf ("%s: not cleaning %s cache directory\n", dir,
+ access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent");
+ FcStrFree (dir_base);
+ return FcTrue;
+ }
+ if (verbose)
+ printf ("%s: cleaning cache directory\n", dir);
+ d = opendir ((char *) dir);
+ if (!d)
+ {
+ perror ((char *) dir);
+ FcStrFree (dir_base);
+ return FcFalse;
+ }
+ while ((ent = readdir (d)))
+ {
+ FcChar8 *file_name;
+ const FcChar8 *target_dir;
+
+ if (ent->d_name[0] == '.')
+ continue;
+ /* skip cache files for different architectures and */
+ /* files which are not cache files at all */
+ if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) ||
+ strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX))
+ continue;
+
+ file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name);
+ if (!file_name)
+ {
+ fprintf (stderr, "%s: allocation failure\n", dir);
+ ret = FcFalse;
+ break;
+ }
+ remove = FcFalse;
+ cache = FcDirCacheLoadFile (file_name, NULL);
+ if (!cache)
+ {
+ if (verbose)
+ printf ("%s: invalid cache file: %s\n", dir, ent->d_name);
+ remove = FcTrue;
+ }
+ else
+ {
+ target_dir = FcCacheDir (cache);
+ if (stat ((char *) target_dir, &target_stat) < 0)
+ {
+ if (verbose)
+ printf ("%s: %s: missing directory: %s \n",
+ dir, ent->d_name, target_dir);
+ remove = FcTrue;
+ }
+ }
+ if (remove)
+ {
+ if (unlink ((char *) file_name) < 0)
+ {
+ perror ((char *) file_name);
+ ret = FcFalse;
+ }
+ }
+ FcDirCacheUnload (cache);
+ FcStrFree (file_name);
+ }
+
+ closedir (d);
+ FcStrFree (dir_base);
+ return ret;
+}
+
+static FcBool
+cleanCacheDirectories (FcConfig *config, FcBool verbose)
+{
+ FcStrList *cache_dirs = FcConfigGetCacheDirs (config);
+ FcChar8 *cache_dir;
+ FcBool ret = FcTrue;
+
+ if (!cache_dirs)
+ return FcFalse;
+ while ((cache_dir = FcStrListNext (cache_dirs)))
+ {
+ if (!cleanCacheDirectory (config, cache_dir, verbose))
+ {
+ ret = FcFalse;
+ break;
+ }
+ }
+ FcStrListDone (cache_dirs);
+ return ret;
+}
+
+int
+main (int argc, char **argv)
+{
+ FcStrSet *dirs;
+ FcStrList *list;
+ FcBool verbose = FcFalse;
+ FcBool force = FcFalse;
+ FcBool really_force = FcFalse;
+ FcBool systemOnly = FcFalse;
+ FcConfig *config;
+ int i;
+ int changed;
+ int ret;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "frsVvh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'r':
+ really_force = FcTrue;
+ /* fall through */
+ case 'f':
+ force = FcTrue;
+ break;
+ case 's':
+ systemOnly = FcTrue;
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'v':
+ verbose = FcTrue;
+ break;
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (systemOnly)
+ FcConfigEnableHome (FcFalse);
+ config = FcInitLoadConfig ();
+ if (!config)
+ {
+ fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
+ return 1;
+ }
+ FcConfigSetCurrent (config);
+
+ if (argv[i])
+ {
+ dirs = FcStrSetCreate ();
+ if (!dirs)
+ {
+ fprintf (stderr, "%s: Can't create list of directories\n",
+ argv[0]);
+ return 1;
+ }
+ while (argv[i])
+ {
+ if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i]))
+ {
+ fprintf (stderr, "%s: Can't add directory\n", argv[0]);
+ return 1;
+ }
+ i++;
+ }
+ list = FcStrListCreate (dirs);
+ FcStrSetDestroy (dirs);
+ }
+ else
+ list = FcConfigGetConfigDirs (config);
+
+ if ((processed_dirs = FcStrSetCreate()) == NULL) {
+ fprintf(stderr, "Cannot malloc\n");
+ return 1;
+ }
+
+ changed = 0;
+ ret = scanDirs (list, config, force, really_force, verbose, &changed);
+
+ FcStrSetDestroy (processed_dirs);
+
+ cleanCacheDirectories (config, verbose);
+
+ /*
+ * Now we need to sleep a second (or two, to be extra sure), to make
+ * sure that timestamps for changes after this run of fc-cache are later
+ * then any timestamps we wrote. We don't use gettimeofday() because
+ * sleep(3) can't be interrupted by a signal here -- this isn't in the
+ * library, and there aren't any signals flying around here.
+ */
+ FcConfigDestroy (config);
+ FcFini ();
+ if (changed)
+ sleep (2);
+ if (verbose)
+ printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded");
+ return ret;
+}
diff --git a/fontconfig/fc-cache/fc-cache.sgml b/fontconfig/fc-cache/fc-cache.sgml
index 0b602a39d..b5328f173 100644
--- a/fontconfig/fc-cache/fc-cache.sgml
+++ b/fontconfig/fc-cache/fc-cache.sgml
@@ -1,210 +1,220 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
- <!ENTITY dhsurname "<surname>Mouette</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>joss@debian.org</email>">
- <!ENTITY dhusername "Josselin Mouette">
- <!ENTITY dhucpackage "<refentrytitle>fc-cache</refentrytitle>">
- <!ENTITY dhpackage "fc-cache">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>build font information cache files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-fsvVh</option></arg>
- <arg><option>--force</option></arg>
- <arg><option>--system-only</option></arg>
- <arg><option>--verbose</option></arg>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg rep="repeat"><option><replaceable>dir</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> scans the font directories on
- the system and builds font information cache files for
- applications using fontconfig for their font handling.</para>
-
- <para>If directory arguments are not given,
- <command>&dhpackage;</command> uses each directory in the
- current font configuration. Each directory is scanned for
- font files readable by FreeType. A cache is created which
- contains properties of each font and the associated filename.
- This cache is used to speed up application startup when using
- the fontconfig library.</para>
-
- <para>Note that <command>&dhpackage;</command> must be executed
- once per architecture to generate font information customized
- for that architecture.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-f</option>
- <option>--force</option>
- </term>
- <listitem>
- <para>Force re-generation of apparently up-to-date cache files,
- overriding the timestamp checking.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-s</option>
- <option>--system-only</option>
- </term>
- <listitem>
- <para>Only scan system-wide directories, omitting the places
- located in the user's home directory.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Display status information while busy.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>dir</replaceable></option>
- </term>
- <listitem>
- <para>Directory to scan for fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>FILES</title>
- <variablelist>
- <varlistentry>
- <term><filename><replaceable>%cachdir%</replaceable>/*-<replaceable>%arch%</replaceable>.cache-2</filename></term>
- <listitem>
- <para>These files are generated by <command>&dhpackage;</command>
- and contain maps from file names to font properties. They are
- read by the fontconfig library at application startup to locate
- appropriate fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-cat</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by Keith Packard
- <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
+ <!ENTITY dhsurname "<surname>Mouette</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>joss@debian.org</email>">
+ <!ENTITY dhusername "Josselin Mouette">
+ <!ENTITY dhucpackage "<refentrytitle>fc-cache</refentrytitle>">
+ <!ENTITY dhpackage "fc-cache">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>build font information cache files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-frsvVh</option></arg>
+ <arg><option>--force</option></arg>
+ <arg><option>--really-force</option></arg>
+ <arg><option>--system-only</option></arg>
+ <arg><option>--verbose</option></arg>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg rep="repeat"><option><replaceable>dir</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> scans the font directories on
+ the system and builds font information cache files for
+ applications using fontconfig for their font handling.</para>
+
+ <para>If directory arguments are not given,
+ <command>&dhpackage;</command> uses each directory in the
+ current font configuration. Each directory is scanned for
+ font files readable by FreeType. A cache is created which
+ contains properties of each font and the associated filename.
+ This cache is used to speed up application startup when using
+ the fontconfig library.</para>
+
+ <para>Note that <command>&dhpackage;</command> must be executed
+ once per architecture to generate font information customized
+ for that architecture.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--force</option>
+ </term>
+ <listitem>
+ <para>Force re-generation of apparently up-to-date cache files,
+ overriding the timestamp checking.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>
+ <option>--really-force</option>
+ </term>
+ <listitem>
+ <para>Erase all existing cache files and rescan.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>
+ <option>--system-only</option>
+ </term>
+ <listitem>
+ <para>Only scan system-wide directories, omitting the places
+ located in the user's home directory.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Display status information while busy.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>dir</replaceable></option>
+ </term>
+ <listitem>
+ <para>Directory to scan for fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename><replaceable>%cachdir%</replaceable>/*-<replaceable>%arch%</replaceable>.cache-2</filename></term>
+ <listitem>
+ <para>These files are generated by <command>&dhpackage;</command>
+ and contain maps from file names to font properties. They are
+ read by the fontconfig library at application startup to locate
+ appropriate fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-cat</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was written by Keith Packard
+ <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-case/CaseFolding.txt b/fontconfig/fc-case/CaseFolding.txt
index bd0e86d03..0c0c1b8c8 100644
--- a/fontconfig/fc-case/CaseFolding.txt
+++ b/fontconfig/fc-case/CaseFolding.txt
@@ -1,1202 +1,1211 @@
-# CaseFolding-5.2.0.txt
-# Date: 2009-05-28, 23:02:34 GMT [MD]
-#
-# Unicode Character Database
-# Copyright (c) 1991-2009 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
-#
-# Case Folding Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It provides a case folding mapping generated from the Unicode Character Database.
-# If all characters are mapped according to the full mapping below, then
-# case differences (according to UnicodeData.txt and SpecialCasing.txt)
-# are eliminated.
-#
-# The data supports both implementations that require simple case foldings
-# (where string lengths don't change), and implementations that allow full case folding
-# (where string lengths may grow). Note that where they can be supported, the
-# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
-#
-# All code points not listed in this file map to themselves.
-#
-# NOTE: case folding does not preserve normalization formats!
-#
-# For information on case folding, including how to have case folding
-# preserve normalization formats, see Section 3.13 Default Case Algorithms in
-# The Unicode Standard, Version 5.0.
-#
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <code>; <status>; <mapping>; # <name>
-#
-# The status field is:
-# C: common case folding, common mappings shared by both simple and full mappings.
-# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
-# S: simple case folding, mappings to single characters where different from F.
-# T: special case for uppercase I and dotted uppercase I
-# - For non-Turkic languages, this mapping is normally not used.
-# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
-# Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
-# See the discussions of case mapping in the Unicode Standard for more information.
-#
-# Usage:
-# A. To do a simple case folding, use the mappings with status C + S.
-# B. To do a full case folding, use the mappings with status C + F.
-#
-# The mappings with status T can be used or omitted depending on the desired case-folding
-# behavior. (The default option is to exclude them.)
-#
-# =================================================================
-# @missing 0000..10FFFF; <codepoint>
-0041; C; 0061; # LATIN CAPITAL LETTER A
-0042; C; 0062; # LATIN CAPITAL LETTER B
-0043; C; 0063; # LATIN CAPITAL LETTER C
-0044; C; 0064; # LATIN CAPITAL LETTER D
-0045; C; 0065; # LATIN CAPITAL LETTER E
-0046; C; 0066; # LATIN CAPITAL LETTER F
-0047; C; 0067; # LATIN CAPITAL LETTER G
-0048; C; 0068; # LATIN CAPITAL LETTER H
-0049; C; 0069; # LATIN CAPITAL LETTER I
-0049; T; 0131; # LATIN CAPITAL LETTER I
-004A; C; 006A; # LATIN CAPITAL LETTER J
-004B; C; 006B; # LATIN CAPITAL LETTER K
-004C; C; 006C; # LATIN CAPITAL LETTER L
-004D; C; 006D; # LATIN CAPITAL LETTER M
-004E; C; 006E; # LATIN CAPITAL LETTER N
-004F; C; 006F; # LATIN CAPITAL LETTER O
-0050; C; 0070; # LATIN CAPITAL LETTER P
-0051; C; 0071; # LATIN CAPITAL LETTER Q
-0052; C; 0072; # LATIN CAPITAL LETTER R
-0053; C; 0073; # LATIN CAPITAL LETTER S
-0054; C; 0074; # LATIN CAPITAL LETTER T
-0055; C; 0075; # LATIN CAPITAL LETTER U
-0056; C; 0076; # LATIN CAPITAL LETTER V
-0057; C; 0077; # LATIN CAPITAL LETTER W
-0058; C; 0078; # LATIN CAPITAL LETTER X
-0059; C; 0079; # LATIN CAPITAL LETTER Y
-005A; C; 007A; # LATIN CAPITAL LETTER Z
-00B5; C; 03BC; # MICRO SIGN
-00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
-00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
-00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
-00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6; C; 00E6; # LATIN CAPITAL LETTER AE
-00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
-00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
-00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
-00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
-00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
-00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
-00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
-00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
-00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
-00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
-00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
-00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
-00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
-00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
-00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
-00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
-00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
-00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
-0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
-0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
-0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
-0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
-0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
-010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
-010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
-0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
-0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
-0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
-0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
-0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
-011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
-011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
-0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
-0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
-0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
-012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
-012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
-012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
-0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
-0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
-0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
-013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
-013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
-013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
-0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
-0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
-0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
-0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014A; C; 014B; # LATIN CAPITAL LETTER ENG
-014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
-014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
-0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0152; C; 0153; # LATIN CAPITAL LIGATURE OE
-0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
-0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
-0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
-015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
-015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
-0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
-0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
-0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
-0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
-0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
-016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
-016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
-016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
-0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
-0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
-017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
-017F; C; 0073; # LATIN SMALL LETTER LONG S
-0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
-0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
-0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
-0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
-0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
-0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
-018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
-018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
-018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
-018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
-0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
-0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
-0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
-0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
-0196; C; 0269; # LATIN CAPITAL LETTER IOTA
-0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
-0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
-019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
-019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
-019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
-01A2; C; 01A3; # LATIN CAPITAL LETTER OI
-01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
-01A6; C; 0280; # LATIN LETTER YR
-01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
-01A9; C; 0283; # LATIN CAPITAL LETTER ESH
-01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
-01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
-01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
-01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
-01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
-01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
-01B7; C; 0292; # LATIN CAPITAL LETTER EZH
-01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
-01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
-01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
-01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
-01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
-01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
-01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
-01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
-01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
-01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
-01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
-01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
-01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
-01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
-01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
-01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
-01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
-01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
-01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
-01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
-01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
-01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
-01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
-0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
-021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
-021C; C; 021D; # LATIN CAPITAL LETTER YOGH
-021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
-0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
-0222; C; 0223; # LATIN CAPITAL LETTER OU
-0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
-0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
-0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
-022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
-0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
-023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
-023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
-023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
-023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
-0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
-0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
-0244; C; 0289; # LATIN CAPITAL LETTER U BAR
-0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
-0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
-0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
-024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
-024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
-024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
-0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
-0370; C; 0371; # GREEK CAPITAL LETTER HETA
-0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
-0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
-0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
-0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
-038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
-038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
-038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
-0392; C; 03B2; # GREEK CAPITAL LETTER BETA
-0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
-0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
-0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
-0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
-0397; C; 03B7; # GREEK CAPITAL LETTER ETA
-0398; C; 03B8; # GREEK CAPITAL LETTER THETA
-0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
-039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
-039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
-039C; C; 03BC; # GREEK CAPITAL LETTER MU
-039D; C; 03BD; # GREEK CAPITAL LETTER NU
-039E; C; 03BE; # GREEK CAPITAL LETTER XI
-039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
-03A0; C; 03C0; # GREEK CAPITAL LETTER PI
-03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
-03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
-03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
-03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
-03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
-03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
-03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
-03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
-03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
-03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
-03D0; C; 03B2; # GREEK BETA SYMBOL
-03D1; C; 03B8; # GREEK THETA SYMBOL
-03D5; C; 03C6; # GREEK PHI SYMBOL
-03D6; C; 03C0; # GREEK PI SYMBOL
-03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
-03DA; C; 03DB; # GREEK LETTER STIGMA
-03DC; C; 03DD; # GREEK LETTER DIGAMMA
-03DE; C; 03DF; # GREEK LETTER KOPPA
-03E0; C; 03E1; # GREEK LETTER SAMPI
-03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
-03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
-03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
-03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
-03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
-03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
-03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
-03F0; C; 03BA; # GREEK KAPPA SYMBOL
-03F1; C; 03C1; # GREEK RHO SYMBOL
-03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
-03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
-03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
-03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
-03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
-03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
-03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
-03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
-0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
-0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
-0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
-0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
-0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
-0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
-0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
-040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
-040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
-040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
-040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
-040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
-040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
-0410; C; 0430; # CYRILLIC CAPITAL LETTER A
-0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
-0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
-0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
-0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
-0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
-0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
-0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
-0418; C; 0438; # CYRILLIC CAPITAL LETTER I
-0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
-041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
-041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
-041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
-041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
-041E; C; 043E; # CYRILLIC CAPITAL LETTER O
-041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
-0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
-0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
-0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
-0423; C; 0443; # CYRILLIC CAPITAL LETTER U
-0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
-0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
-0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
-0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
-0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
-0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
-042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
-042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
-042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
-042D; C; 044D; # CYRILLIC CAPITAL LETTER E
-042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
-042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
-0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
-0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
-0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
-0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
-0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
-046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
-0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
-0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
-0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
-0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
-047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
-047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
-0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
-048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
-048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
-0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
-04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
-04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
-04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
-04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
-04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
-04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
-04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
-04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
-04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
-04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
-04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
-04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
-04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
-04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
-04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
-04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
-04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
-04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
-04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
-04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
-04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
-0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
-0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
-0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
-0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
-0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
-050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
-050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
-050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
-0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
-0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
-0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
-0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
-0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
-051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
-051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
-051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
-0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
-0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
-0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
-0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
-0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
-0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
-0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
-0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
-0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
-0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
-0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
-0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
-053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
-053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
-053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
-053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
-053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
-053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
-0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
-0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
-0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
-0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
-0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
-0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
-0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
-0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
-0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
-0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
-054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
-054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
-054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
-054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
-054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
-054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
-0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
-0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
-0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
-0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
-0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
-0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
-0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
-0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
-10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
-10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
-10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
-10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
-10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
-10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
-10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
-10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
-10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
-10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
-10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
-10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
-10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
-10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
-10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
-10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
-10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
-10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
-10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
-10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
-10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
-10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
-10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
-10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
-10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
-10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
-10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
-10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
-10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
-10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
-10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
-10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
-10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
-10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
-10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
-10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
-10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
-10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
-1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
-1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
-1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
-1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
-1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
-1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
-1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
-1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
-1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
-1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
-1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
-1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
-1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
-1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
-1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
-1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
-1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
-1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
-1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
-1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
-1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
-1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
-1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
-1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
-1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
-1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
-1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
-1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
-1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
-1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
-1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
-1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
-1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
-1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
-1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
-1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
-1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
-1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
-1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
-1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
-1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
-1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
-1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
-1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
-1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
-1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
-1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
-1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
-1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
-1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
-1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
-1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
-1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
-1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
-1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
-1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
-1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
-1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
-1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
-1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
-1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
-1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
-1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
-1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
-1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
-1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
-1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
-1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
-1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
-1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
-1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
-1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
-1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
-1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
-1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
-1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
-1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
-1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
-1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
-1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
-1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
-1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
-1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
-1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
-1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
-1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
-1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
-1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
-1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
-1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
-1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
-1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
-1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
-1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-2126; C; 03C9; # OHM SIGN
-212A; C; 006B; # KELVIN SIGN
-212B; C; 00E5; # ANGSTROM SIGN
-2132; C; 214E; # TURNED CAPITAL F
-2160; C; 2170; # ROMAN NUMERAL ONE
-2161; C; 2171; # ROMAN NUMERAL TWO
-2162; C; 2172; # ROMAN NUMERAL THREE
-2163; C; 2173; # ROMAN NUMERAL FOUR
-2164; C; 2174; # ROMAN NUMERAL FIVE
-2165; C; 2175; # ROMAN NUMERAL SIX
-2166; C; 2176; # ROMAN NUMERAL SEVEN
-2167; C; 2177; # ROMAN NUMERAL EIGHT
-2168; C; 2178; # ROMAN NUMERAL NINE
-2169; C; 2179; # ROMAN NUMERAL TEN
-216A; C; 217A; # ROMAN NUMERAL ELEVEN
-216B; C; 217B; # ROMAN NUMERAL TWELVE
-216C; C; 217C; # ROMAN NUMERAL FIFTY
-216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
-216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
-216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
-2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
-24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
-24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
-24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
-24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
-24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
-24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
-24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
-24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
-24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
-24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
-24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
-24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
-24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
-24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
-24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
-24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
-24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
-24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
-24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
-24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
-24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
-24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
-24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
-24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
-24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
-24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
-2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
-2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
-2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
-2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
-2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
-2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
-2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
-2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
-2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
-2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
-2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
-2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
-2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
-2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
-2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
-2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
-2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
-2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
-2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
-2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
-2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
-2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
-2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
-2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
-2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
-2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
-2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
-2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
-2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
-2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
-2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
-2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
-2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
-2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
-2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
-2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
-2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
-2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
-2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
-2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
-2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
-2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
-2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
-2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
-2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
-2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
-2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
-2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
-2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
-2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
-2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
-2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
-2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
-2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
-2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
-2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
-2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
-2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
-2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
-2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
-2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
-2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
-2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
-2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
-2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
-2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
-2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
-2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
-2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
-2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
-2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
-2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
-2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
-2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
-2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
-2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
-2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
-2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
-2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
-2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
-2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
-2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
-2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
-2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
-2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
-2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
-2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
-2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
-2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
-2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
-2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
-2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
-2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
-2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
-2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
-2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
-2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
-2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
-2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
-2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
-2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
-2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
-2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
-2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
-2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
-2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
-2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
-2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
-2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
-2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
-2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
-2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
-2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
-2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
-A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
-A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
-A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
-A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
-A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
-A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
-A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
-A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
-A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
-A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
-A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
-A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
-A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
-A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
-A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
-A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
-A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
-A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
-A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
-A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
-A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
-A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
-A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
-A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
-A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
-A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
-A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
-A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
-A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
-A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
-A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
-A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
-A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
-A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
-A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
-A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
-A726; C; A727; # LATIN CAPITAL LETTER HENG
-A728; C; A729; # LATIN CAPITAL LETTER TZ
-A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
-A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
-A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
-A732; C; A733; # LATIN CAPITAL LETTER AA
-A734; C; A735; # LATIN CAPITAL LETTER AO
-A736; C; A737; # LATIN CAPITAL LETTER AU
-A738; C; A739; # LATIN CAPITAL LETTER AV
-A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
-A73C; C; A73D; # LATIN CAPITAL LETTER AY
-A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
-A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
-A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
-A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
-A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
-A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
-A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
-A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
-A74E; C; A74F; # LATIN CAPITAL LETTER OO
-A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
-A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
-A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
-A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
-A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
-A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
-A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
-A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
-A760; C; A761; # LATIN CAPITAL LETTER VY
-A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
-A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
-A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
-A768; C; A769; # LATIN CAPITAL LETTER VEND
-A76A; C; A76B; # LATIN CAPITAL LETTER ET
-A76C; C; A76D; # LATIN CAPITAL LETTER IS
-A76E; C; A76F; # LATIN CAPITAL LETTER CON
-A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
-A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
-A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
-A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
-A780; C; A781; # LATIN CAPITAL LETTER TURNED L
-A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
-A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
-A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
-A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
-FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
-FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
-FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
-FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
-FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
-FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
-FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
-FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
-FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
-FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
-FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
-FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
-FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
-FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
-FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
-FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
-FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
-FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
-FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
-FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
-FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
-FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
-FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
-FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
-FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
-FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
-FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
-FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
-FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
-FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
-FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
-FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
-FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
-FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
-FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
-FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
-FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
-FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
-10400; C; 10428; # DESERET CAPITAL LETTER LONG I
-10401; C; 10429; # DESERET CAPITAL LETTER LONG E
-10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
-10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
-10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
-10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
-10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
-10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
-10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
-10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
-1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
-1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
-1040C; C; 10434; # DESERET CAPITAL LETTER AY
-1040D; C; 10435; # DESERET CAPITAL LETTER OW
-1040E; C; 10436; # DESERET CAPITAL LETTER WU
-1040F; C; 10437; # DESERET CAPITAL LETTER YEE
-10410; C; 10438; # DESERET CAPITAL LETTER H
-10411; C; 10439; # DESERET CAPITAL LETTER PEE
-10412; C; 1043A; # DESERET CAPITAL LETTER BEE
-10413; C; 1043B; # DESERET CAPITAL LETTER TEE
-10414; C; 1043C; # DESERET CAPITAL LETTER DEE
-10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
-10416; C; 1043E; # DESERET CAPITAL LETTER JEE
-10417; C; 1043F; # DESERET CAPITAL LETTER KAY
-10418; C; 10440; # DESERET CAPITAL LETTER GAY
-10419; C; 10441; # DESERET CAPITAL LETTER EF
-1041A; C; 10442; # DESERET CAPITAL LETTER VEE
-1041B; C; 10443; # DESERET CAPITAL LETTER ETH
-1041C; C; 10444; # DESERET CAPITAL LETTER THEE
-1041D; C; 10445; # DESERET CAPITAL LETTER ES
-1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
-1041F; C; 10447; # DESERET CAPITAL LETTER ESH
-10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
-10421; C; 10449; # DESERET CAPITAL LETTER ER
-10422; C; 1044A; # DESERET CAPITAL LETTER EL
-10423; C; 1044B; # DESERET CAPITAL LETTER EM
-10424; C; 1044C; # DESERET CAPITAL LETTER EN
-10425; C; 1044D; # DESERET CAPITAL LETTER ENG
-10426; C; 1044E; # DESERET CAPITAL LETTER OI
-10427; C; 1044F; # DESERET CAPITAL LETTER EW
+# CaseFolding-6.0.0.txt
+# Date: 2010-05-18, 00:48:57 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2010 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Case Folding Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It provides a case folding mapping generated from the Unicode Character Database.
+# If all characters are mapped according to the full mapping below, then
+# case differences (according to UnicodeData.txt and SpecialCasing.txt)
+# are eliminated.
+#
+# The data supports both implementations that require simple case foldings
+# (where string lengths don't change), and implementations that allow full case folding
+# (where string lengths may grow). Note that where they can be supported, the
+# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+#
+# All code points not listed in this file map to themselves.
+#
+# NOTE: case folding does not preserve normalization formats!
+#
+# For information on case folding, including how to have case folding
+# preserve normalization formats, see Section 3.13 Default Case Algorithms in
+# The Unicode Standard, Version 5.0.
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <status>; <mapping>; # <name>
+#
+# The status field is:
+# C: common case folding, common mappings shared by both simple and full mappings.
+# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
+# S: simple case folding, mappings to single characters where different from F.
+# T: special case for uppercase I and dotted uppercase I
+# - For non-Turkic languages, this mapping is normally not used.
+# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
+# Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
+# See the discussions of case mapping in the Unicode Standard for more information.
+#
+# Usage:
+# A. To do a simple case folding, use the mappings with status C + S.
+# B. To do a full case folding, use the mappings with status C + F.
+#
+# The mappings with status T can be used or omitted depending on the desired case-folding
+# behavior. (The default option is to exclude them.)
+#
+# =================================================================
+# @missing 0000..10FFFF; <codepoint>
+0041; C; 0061; # LATIN CAPITAL LETTER A
+0042; C; 0062; # LATIN CAPITAL LETTER B
+0043; C; 0063; # LATIN CAPITAL LETTER C
+0044; C; 0064; # LATIN CAPITAL LETTER D
+0045; C; 0065; # LATIN CAPITAL LETTER E
+0046; C; 0066; # LATIN CAPITAL LETTER F
+0047; C; 0067; # LATIN CAPITAL LETTER G
+0048; C; 0068; # LATIN CAPITAL LETTER H
+0049; C; 0069; # LATIN CAPITAL LETTER I
+0049; T; 0131; # LATIN CAPITAL LETTER I
+004A; C; 006A; # LATIN CAPITAL LETTER J
+004B; C; 006B; # LATIN CAPITAL LETTER K
+004C; C; 006C; # LATIN CAPITAL LETTER L
+004D; C; 006D; # LATIN CAPITAL LETTER M
+004E; C; 006E; # LATIN CAPITAL LETTER N
+004F; C; 006F; # LATIN CAPITAL LETTER O
+0050; C; 0070; # LATIN CAPITAL LETTER P
+0051; C; 0071; # LATIN CAPITAL LETTER Q
+0052; C; 0072; # LATIN CAPITAL LETTER R
+0053; C; 0073; # LATIN CAPITAL LETTER S
+0054; C; 0074; # LATIN CAPITAL LETTER T
+0055; C; 0075; # LATIN CAPITAL LETTER U
+0056; C; 0076; # LATIN CAPITAL LETTER V
+0057; C; 0077; # LATIN CAPITAL LETTER W
+0058; C; 0078; # LATIN CAPITAL LETTER X
+0059; C; 0079; # LATIN CAPITAL LETTER Y
+005A; C; 007A; # LATIN CAPITAL LETTER Z
+00B5; C; 03BC; # MICRO SIGN
+00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
+00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
+00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
+00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6; C; 00E6; # LATIN CAPITAL LETTER AE
+00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
+00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
+00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
+00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
+00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
+00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
+00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
+00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
+00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
+00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
+00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
+00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
+00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
+0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
+0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
+0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
+0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
+0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
+010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
+0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
+0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
+0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
+0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
+011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
+011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
+0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
+0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
+0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
+012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
+012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
+012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
+0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
+0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
+0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
+013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
+013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
+013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
+0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
+0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
+0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
+0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A; C; 014B; # LATIN CAPITAL LETTER ENG
+014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
+014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
+0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152; C; 0153; # LATIN CAPITAL LIGATURE OE
+0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
+0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
+0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
+015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
+015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
+0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
+0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
+0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
+0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
+0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
+016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
+016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
+016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
+0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
+0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
+017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
+017F; C; 0073; # LATIN SMALL LETTER LONG S
+0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
+0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
+0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
+0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
+0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
+0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
+018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
+018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
+018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
+018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
+0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
+0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
+0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
+0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
+0196; C; 0269; # LATIN CAPITAL LETTER IOTA
+0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
+0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
+019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
+019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
+01A2; C; 01A3; # LATIN CAPITAL LETTER OI
+01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
+01A6; C; 0280; # LATIN LETTER YR
+01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
+01A9; C; 0283; # LATIN CAPITAL LETTER ESH
+01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
+01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
+01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
+01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
+01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
+01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
+01B7; C; 0292; # LATIN CAPITAL LETTER EZH
+01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
+01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
+01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
+01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
+01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
+01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
+01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
+01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
+01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
+01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
+01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
+01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
+01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
+01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
+01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
+01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
+01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
+01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
+01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
+01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
+01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
+01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C; C; 021D; # LATIN CAPITAL LETTER YOGH
+021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
+0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222; C; 0223; # LATIN CAPITAL LETTER OU
+0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
+0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
+022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
+023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
+0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
+0244; C; 0289; # LATIN CAPITAL LETTER U BAR
+0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
+0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
+0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
+024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
+024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
+0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
+0370; C; 0371; # GREEK CAPITAL LETTER HETA
+0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
+038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
+0392; C; 03B2; # GREEK CAPITAL LETTER BETA
+0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
+0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
+0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
+0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
+0397; C; 03B7; # GREEK CAPITAL LETTER ETA
+0398; C; 03B8; # GREEK CAPITAL LETTER THETA
+0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
+039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
+039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
+039C; C; 03BC; # GREEK CAPITAL LETTER MU
+039D; C; 03BD; # GREEK CAPITAL LETTER NU
+039E; C; 03BE; # GREEK CAPITAL LETTER XI
+039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
+03A0; C; 03C0; # GREEK CAPITAL LETTER PI
+03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
+03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
+03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
+03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
+03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
+03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
+03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
+03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
+03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
+03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
+03D0; C; 03B2; # GREEK BETA SYMBOL
+03D1; C; 03B8; # GREEK THETA SYMBOL
+03D5; C; 03C6; # GREEK PHI SYMBOL
+03D6; C; 03C0; # GREEK PI SYMBOL
+03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
+03DA; C; 03DB; # GREEK LETTER STIGMA
+03DC; C; 03DD; # GREEK LETTER DIGAMMA
+03DE; C; 03DF; # GREEK LETTER KOPPA
+03E0; C; 03E1; # GREEK LETTER SAMPI
+03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
+03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
+03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
+03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
+03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
+03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
+03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
+03F0; C; 03BA; # GREEK KAPPA SYMBOL
+03F1; C; 03C1; # GREEK RHO SYMBOL
+03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
+03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
+03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
+03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
+03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
+0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
+0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
+0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
+0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
+0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
+0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
+040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
+040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
+040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
+040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
+040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
+0410; C; 0430; # CYRILLIC CAPITAL LETTER A
+0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
+0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
+0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
+0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
+0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
+0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
+0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
+0418; C; 0438; # CYRILLIC CAPITAL LETTER I
+0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
+041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
+041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
+041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
+041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
+041E; C; 043E; # CYRILLIC CAPITAL LETTER O
+041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
+0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
+0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
+0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
+0423; C; 0443; # CYRILLIC CAPITAL LETTER U
+0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
+0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
+0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
+0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
+0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
+0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
+042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
+042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
+042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D; C; 044D; # CYRILLIC CAPITAL LETTER E
+042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
+042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
+0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
+0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
+0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
+0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
+0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
+046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
+0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
+0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
+0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
+0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
+047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
+0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
+048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
+0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
+04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
+04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
+04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
+04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
+04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
+04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
+04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
+0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
+0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
+0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
+0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
+050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
+050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
+050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
+0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
+0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
+0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
+0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
+051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
+051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
+051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
+0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
+0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
+0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
+0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
+0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
+0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
+0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
+0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
+0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
+053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
+053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
+053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
+053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
+053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
+053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
+0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
+0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
+0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
+0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
+0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
+0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
+0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
+0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
+0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
+0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
+054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
+054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
+054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
+054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
+054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
+054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
+0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
+0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
+0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
+0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
+0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
+0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
+0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
+0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
+1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
+1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
+1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
+1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
+1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
+1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
+1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
+1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
+1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
+1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
+1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
+1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
+1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
+1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
+1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
+1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126; C; 03C9; # OHM SIGN
+212A; C; 006B; # KELVIN SIGN
+212B; C; 00E5; # ANGSTROM SIGN
+2132; C; 214E; # TURNED CAPITAL F
+2160; C; 2170; # ROMAN NUMERAL ONE
+2161; C; 2171; # ROMAN NUMERAL TWO
+2162; C; 2172; # ROMAN NUMERAL THREE
+2163; C; 2173; # ROMAN NUMERAL FOUR
+2164; C; 2174; # ROMAN NUMERAL FIVE
+2165; C; 2175; # ROMAN NUMERAL SIX
+2166; C; 2176; # ROMAN NUMERAL SEVEN
+2167; C; 2177; # ROMAN NUMERAL EIGHT
+2168; C; 2178; # ROMAN NUMERAL NINE
+2169; C; 2179; # ROMAN NUMERAL TEN
+216A; C; 217A; # ROMAN NUMERAL ELEVEN
+216B; C; 217B; # ROMAN NUMERAL TWELVE
+216C; C; 217C; # ROMAN NUMERAL FIFTY
+216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
+216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
+216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
+2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
+24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
+24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
+24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
+24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
+24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
+24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
+24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
+24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
+24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
+24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
+24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
+24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
+24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
+24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
+24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
+24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
+24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
+24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
+24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
+24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
+24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
+24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
+24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
+24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
+24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
+2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
+2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
+2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
+2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
+2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
+2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
+2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
+2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
+2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
+2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
+A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
+A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
+A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
+A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
+A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
+A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
+A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
+A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE
+A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
+A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
+A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
+A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
+A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
+A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
+A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
+A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
+A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
+A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
+A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
+A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
+A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
+A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
+A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726; C; A727; # LATIN CAPITAL LETTER HENG
+A728; C; A729; # LATIN CAPITAL LETTER TZ
+A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
+A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
+A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732; C; A733; # LATIN CAPITAL LETTER AA
+A734; C; A735; # LATIN CAPITAL LETTER AO
+A736; C; A737; # LATIN CAPITAL LETTER AU
+A738; C; A739; # LATIN CAPITAL LETTER AV
+A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C; C; A73D; # LATIN CAPITAL LETTER AY
+A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
+A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
+A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
+A74E; C; A74F; # LATIN CAPITAL LETTER OO
+A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
+A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
+A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
+A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760; C; A761; # LATIN CAPITAL LETTER VY
+A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
+A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
+A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768; C; A769; # LATIN CAPITAL LETTER VEND
+A76A; C; A76B; # LATIN CAPITAL LETTER ET
+A76C; C; A76D; # LATIN CAPITAL LETTER IS
+A76E; C; A76F; # LATIN CAPITAL LETTER CON
+A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
+A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
+A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
+A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
+A780; C; A781; # LATIN CAPITAL LETTER TURNED L
+A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
+A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
+A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
+A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
+A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H
+A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER
+A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
+FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
+FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
+FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
+FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
+FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
+FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
+FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
+FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
+FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
+FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
+FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
+FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
+FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
+FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
+FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
+FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
+FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
+FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
+FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
+FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
+FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
+FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
+FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
+FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
+FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
+10400; C; 10428; # DESERET CAPITAL LETTER LONG I
+10401; C; 10429; # DESERET CAPITAL LETTER LONG E
+10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
+10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
+10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
+10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
+10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
+10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
+10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
+10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
+1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
+1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
+1040C; C; 10434; # DESERET CAPITAL LETTER AY
+1040D; C; 10435; # DESERET CAPITAL LETTER OW
+1040E; C; 10436; # DESERET CAPITAL LETTER WU
+1040F; C; 10437; # DESERET CAPITAL LETTER YEE
+10410; C; 10438; # DESERET CAPITAL LETTER H
+10411; C; 10439; # DESERET CAPITAL LETTER PEE
+10412; C; 1043A; # DESERET CAPITAL LETTER BEE
+10413; C; 1043B; # DESERET CAPITAL LETTER TEE
+10414; C; 1043C; # DESERET CAPITAL LETTER DEE
+10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
+10416; C; 1043E; # DESERET CAPITAL LETTER JEE
+10417; C; 1043F; # DESERET CAPITAL LETTER KAY
+10418; C; 10440; # DESERET CAPITAL LETTER GAY
+10419; C; 10441; # DESERET CAPITAL LETTER EF
+1041A; C; 10442; # DESERET CAPITAL LETTER VEE
+1041B; C; 10443; # DESERET CAPITAL LETTER ETH
+1041C; C; 10444; # DESERET CAPITAL LETTER THEE
+1041D; C; 10445; # DESERET CAPITAL LETTER ES
+1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
+1041F; C; 10447; # DESERET CAPITAL LETTER ESH
+10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
+10421; C; 10449; # DESERET CAPITAL LETTER ER
+10422; C; 1044A; # DESERET CAPITAL LETTER EL
+10423; C; 1044B; # DESERET CAPITAL LETTER EM
+10424; C; 1044C; # DESERET CAPITAL LETTER EN
+10425; C; 1044D; # DESERET CAPITAL LETTER ENG
+10426; C; 1044E; # DESERET CAPITAL LETTER OI
+10427; C; 1044F; # DESERET CAPITAL LETTER EW
diff --git a/fontconfig/fc-case/Makefile.am b/fontconfig/fc-case/Makefile.am
index bf0198454..47d9634c6 100644
--- a/fontconfig/fc-case/Makefile.am
+++ b/fontconfig/fc-case/Makefile.am
@@ -1,62 +1,64 @@
-#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fccase.tmpl.h
-STMPL=${top_srcdir}/fc-case/${TMPL}
-TARG=fccase.h
-
-noinst_PROGRAMS=fc-case
-
-noinst_HEADERS=$(TARG)
-
-fc_case_SRCS= \
- fc-case.c \
- fccaseint.h \
- fccaseread.c
-
-CASEFOLDING=CaseFolding.txt
-SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt
-
-EXTRA_DIST=$(TMPL) $(CASEFOLDING)
-
-$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES=$(TARG) $(ALIAS_FILES)
-
+#
+# $Id $
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
+
+TMPL=fccase.tmpl.h
+STMPL=${top_srcdir}/fc-case/${TMPL}
+TARG=fccase.h
+
+noinst_PROGRAMS=fc-case
+
+noinst_HEADERS=$(TARG)
+
+fc_case_SRCS= \
+ fc-case.c \
+ fccaseint.h \
+ fccaseread.c
+
+CASEFOLDING=CaseFolding.txt
+SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt
+
+EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING)
+
+if CROSS_COMPILING
+$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING)
+ @echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
+$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING)
+ $(AM_V_GEN) $(RM) $(TARG); \
+ ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \
+ mv $(TARG).tmp $(TARG)
+endif
+
+ALIAS_FILES = fcalias.h fcaliastail.h
+
+BUILT_SOURCES = $(ALIAS_FILES)
+
+$(ALIAS_FILES):
+ touch $(ALIAS_FILES)
+
+CLEANFILES = $(ALIAS_FILES)
+
+MAINTAINERCLEANFILES = $(TARG)
diff --git a/fontconfig/fc-case/fc-case.c b/fontconfig/fc-case/fc-case.c
index e86b34783..dd8b1f08a 100644
--- a/fontconfig/fc-case/fc-case.c
+++ b/fontconfig/fc-case/fc-case.c
@@ -1,363 +1,363 @@
-/*
- * fontconfig/fc-case/fc-case.c
- *
- * Copyright © 2004 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-
-#define MAX_OUT 32
-#define MAX_LINE 8192
-
-typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass;
-
-typedef struct _caseFoldClassMap {
- const char *name;
- CaseFoldClass class;
-} CaseFoldClassMap;
-
-static const CaseFoldClassMap caseFoldClassMap[] = {
- { "C", CaseFoldCommon },
- { "F", CaseFoldFull },
- { "S", CaseFoldSimple },
- { "T", CaseFoldTurkic },
- { 0, 0 }
-};
-
-typedef struct _caseFoldRaw {
- FcChar32 upper;
- CaseFoldClass class;
- int nout;
- FcChar32 lower[MAX_OUT];
-} CaseFoldRaw;
-
-static void
-panic (const char *reason)
-{
- fprintf (stderr, "fc-case: panic %s\n", reason);
- exit (1);
-}
-
-int maxExpand;
-static FcCaseFold *folds;
-int nfolds;
-
-static FcCaseFold *
-addFold (void)
-{
- if (folds)
- folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold));
- else
- folds = malloc (sizeof (FcCaseFold));
- if (!folds)
- panic ("out of memory");
- return &folds[nfolds++];
-}
-
-static int
-ucs4_to_utf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN])
-{
- int bits;
- FcChar8 *d = dest;
-
- if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
- else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
- else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
- else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
- else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
- else return 0;
-
- for ( ; bits >= 0; bits-= 6) {
- *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
- }
- return d - dest;
-}
-
-static int
-utf8_size (FcChar32 ucs4)
-{
- FcChar8 utf8[FC_UTF8_MAX_LEN];
- return ucs4_to_utf8 (ucs4, utf8 );
-}
-
-static FcChar8 *foldChars;
-static int nfoldChars;
-static int maxFoldChars;
-static FcChar32 minFoldChar;
-static FcChar32 maxFoldChar;
-
-static void
-addChar (FcChar32 c)
-{
- FcChar8 utf8[FC_UTF8_MAX_LEN];
- int len;
- int i;
-
- len = ucs4_to_utf8 (c, utf8);
- if (foldChars)
- foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8));
- else
- foldChars = malloc (sizeof (FcChar8) * len);
- if (!foldChars)
- panic ("out of memory");
- for (i = 0; i < len; i++)
- foldChars[nfoldChars + i] = utf8[i];
- nfoldChars += len;
-}
-
-static int
-foldExtends (FcCaseFold *fold, CaseFoldRaw *raw)
-{
- switch (fold->method) {
- case FC_CASE_FOLD_RANGE:
- if ((short) (raw->lower[0] - raw->upper) != fold->offset)
- return 0;
- if (raw->upper != fold->upper + fold->count)
- return 0;
- return 1;
- case FC_CASE_FOLD_EVEN_ODD:
- if ((short) (raw->lower[0] - raw->upper) != 1)
- return 0;
- if (raw->upper != fold->upper + fold->count + 1)
- return 0;
- return 1;
- case FC_CASE_FOLD_FULL:
- break;
- }
- return 0;
-}
-
-static const char *
-case_fold_method_name (FcChar16 method)
-{
- switch (method) {
- case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,";
- case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,";
- case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,";
- default: return "unknown";
- }
-}
-
-static void
-dump (void)
-{
- int i;
-
- printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds);
- printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars);
- printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars);
- printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand);
- printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar);
- printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar);
- printf ( "\n");
-
- /*
- * Dump out ranges
- */
- printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n");
- for (i = 0; i < nfolds; i++)
- {
- printf (" { 0x%08x, %-22s 0x%04x, %6d },\n",
- folds[i].upper, case_fold_method_name (folds[i].method),
- folds[i].count, folds[i].offset);
- }
- printf ("};\n\n");
-
- /*
- * Dump out "other" values
- */
-
- printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n");
- for (i = 0; i < nfoldChars; i++)
- {
- printf ("0x%02x", foldChars[i]);
- if (i != nfoldChars - 1)
- {
- if ((i & 0xf) == 0xf)
- printf (",\n");
- else
- printf (",");
- }
- }
- printf ("\n};\n");
-}
-
-/*
- * Read the standard Unicode CaseFolding.txt file
- */
-#define SEP "; \t\n"
-
-static int
-parseRaw (char *line, CaseFoldRaw *raw)
-{
- char *tok, *end;
- int i;
-
- if (!isxdigit (line[0]))
- return 0;
- /*
- * Get upper case value
- */
- tok = strtok (line, SEP);
- if (!tok || tok[0] == '#')
- return 0;
- raw->upper = strtol (tok, &end, 16);
- if (end == tok)
- return 0;
- /*
- * Get class
- */
- tok = strtok (NULL, SEP);
- if (!tok || tok[0] == '#')
- return 0;
- for (i = 0; caseFoldClassMap[i].name; i++)
- if (!strcmp (tok, caseFoldClassMap[i].name))
- {
- raw->class = caseFoldClassMap[i].class;
- break;
- }
- if (!caseFoldClassMap[i].name)
- return 0;
-
- /*
- * Get list of result characters
- */
- for (i = 0; i < MAX_OUT; i++)
- {
- tok = strtok (NULL, SEP);
- if (!tok || tok[0] == '#')
- break;
- raw->lower[i] = strtol (tok, &end, 16);
- if (end == tok)
- break;
- }
- if (i == 0)
- return 0;
- raw->nout = i;
- return 1;
-}
-
-static int
-caseFoldReadRaw (FILE *in, CaseFoldRaw *raw)
-{
- char line[MAX_LINE];
-
- for (;;)
- {
- if (!fgets (line, sizeof (line) - 1, in))
- return 0;
- if (parseRaw (line, raw))
- return 1;
- }
-}
-
-int
-main (int argc, char **argv)
-{
- FcCaseFold *fold = 0;
- CaseFoldRaw raw;
- int i;
- FILE *caseFile;
- char line[MAX_LINE];
- int expand;
-
- if (argc != 2)
- panic ("usage: fc-case CaseFolding.txt");
- caseFile = fopen (argv[1], "r");
- if (!caseFile)
- panic ("can't open case folding file");
-
- while (caseFoldReadRaw (caseFile, &raw))
- {
- if (!minFoldChar)
- minFoldChar = raw.upper;
- maxFoldChar = raw.upper;
- switch (raw.class) {
- case CaseFoldCommon:
- case CaseFoldFull:
- if (raw.nout == 1)
- {
- if (fold && foldExtends (fold, &raw))
- fold->count = raw.upper - fold->upper + 1;
- else
- {
- fold = addFold ();
- fold->upper = raw.upper;
- fold->offset = raw.lower[0] - raw.upper;
- if (fold->offset == 1)
- fold->method = FC_CASE_FOLD_EVEN_ODD;
- else
- fold->method = FC_CASE_FOLD_RANGE;
- fold->count = 1;
- }
- expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper);
- }
- else
- {
- fold = addFold ();
- fold->upper = raw.upper;
- fold->method = FC_CASE_FOLD_FULL;
- fold->offset = nfoldChars;
- for (i = 0; i < raw.nout; i++)
- addChar (raw.lower[i]);
- fold->count = nfoldChars - fold->offset;
- if (fold->count > maxFoldChars)
- maxFoldChars = fold->count;
- expand = fold->count - utf8_size (raw.upper);
- }
- if (expand > maxExpand)
- maxExpand = expand;
- break;
- case CaseFoldSimple:
- break;
- case CaseFoldTurkic:
- break;
- }
- }
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- /*
- * Dump these tables
- */
- dump ();
-
- /*
- * And flush out the rest of the input file
- */
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/*
+ * fontconfig/fc-case/fc-case.c
+ *
+ * Copyright © 2004 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <ctype.h>
+
+#define MAX_OUT 32
+#define MAX_LINE 8192
+
+typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass;
+
+typedef struct _caseFoldClassMap {
+ const char *name;
+ CaseFoldClass class;
+} CaseFoldClassMap;
+
+static const CaseFoldClassMap caseFoldClassMap[] = {
+ { "C", CaseFoldCommon },
+ { "F", CaseFoldFull },
+ { "S", CaseFoldSimple },
+ { "T", CaseFoldTurkic },
+ { 0, 0 }
+};
+
+typedef struct _caseFoldRaw {
+ FcChar32 upper;
+ CaseFoldClass class;
+ int nout;
+ FcChar32 lower[MAX_OUT];
+} CaseFoldRaw;
+
+static void
+panic (const char *reason)
+{
+ fprintf (stderr, "fc-case: panic %s\n", reason);
+ exit (1);
+}
+
+int maxExpand;
+static FcCaseFold *folds;
+int nfolds;
+
+static FcCaseFold *
+addFold (void)
+{
+ if (folds)
+ folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold));
+ else
+ folds = malloc (sizeof (FcCaseFold));
+ if (!folds)
+ panic ("out of memory");
+ return &folds[nfolds++];
+}
+
+static int
+ucs4_to_utf8 (FcChar32 ucs4,
+ FcChar8 dest[FC_UTF8_MAX_LEN])
+{
+ int bits;
+ FcChar8 *d = dest;
+
+ if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
+ else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
+ else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
+ else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
+ else return 0;
+
+ for ( ; bits >= 0; bits-= 6) {
+ *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
+ }
+ return d - dest;
+}
+
+static int
+utf8_size (FcChar32 ucs4)
+{
+ FcChar8 utf8[FC_UTF8_MAX_LEN];
+ return ucs4_to_utf8 (ucs4, utf8 );
+}
+
+static FcChar8 *foldChars;
+static int nfoldChars;
+static int maxFoldChars;
+static FcChar32 minFoldChar;
+static FcChar32 maxFoldChar;
+
+static void
+addChar (FcChar32 c)
+{
+ FcChar8 utf8[FC_UTF8_MAX_LEN];
+ int len;
+ int i;
+
+ len = ucs4_to_utf8 (c, utf8);
+ if (foldChars)
+ foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8));
+ else
+ foldChars = malloc (sizeof (FcChar8) * len);
+ if (!foldChars)
+ panic ("out of memory");
+ for (i = 0; i < len; i++)
+ foldChars[nfoldChars + i] = utf8[i];
+ nfoldChars += len;
+}
+
+static int
+foldExtends (FcCaseFold *fold, CaseFoldRaw *raw)
+{
+ switch (fold->method) {
+ case FC_CASE_FOLD_RANGE:
+ if ((short) (raw->lower[0] - raw->upper) != fold->offset)
+ return 0;
+ if (raw->upper != fold->upper + fold->count)
+ return 0;
+ return 1;
+ case FC_CASE_FOLD_EVEN_ODD:
+ if ((short) (raw->lower[0] - raw->upper) != 1)
+ return 0;
+ if (raw->upper != fold->upper + fold->count + 1)
+ return 0;
+ return 1;
+ case FC_CASE_FOLD_FULL:
+ break;
+ }
+ return 0;
+}
+
+static const char *
+case_fold_method_name (FcChar16 method)
+{
+ switch (method) {
+ case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,";
+ case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,";
+ case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,";
+ default: return "unknown";
+ }
+}
+
+static void
+dump (void)
+{
+ int i;
+
+ printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds);
+ printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars);
+ printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars);
+ printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand);
+ printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar);
+ printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar);
+ printf ( "\n");
+
+ /*
+ * Dump out ranges
+ */
+ printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n");
+ for (i = 0; i < nfolds; i++)
+ {
+ printf (" { 0x%08x, %-22s 0x%04x, %6d },\n",
+ folds[i].upper, case_fold_method_name (folds[i].method),
+ folds[i].count, folds[i].offset);
+ }
+ printf ("};\n\n");
+
+ /*
+ * Dump out "other" values
+ */
+
+ printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n");
+ for (i = 0; i < nfoldChars; i++)
+ {
+ printf ("0x%02x", foldChars[i]);
+ if (i != nfoldChars - 1)
+ {
+ if ((i & 0xf) == 0xf)
+ printf (",\n");
+ else
+ printf (",");
+ }
+ }
+ printf ("\n};\n");
+}
+
+/*
+ * Read the standard Unicode CaseFolding.txt file
+ */
+#define SEP "; \t\n"
+
+static int
+parseRaw (char *line, CaseFoldRaw *raw)
+{
+ char *tok, *end;
+ int i;
+
+ if (!isxdigit (line[0]))
+ return 0;
+ /*
+ * Get upper case value
+ */
+ tok = strtok (line, SEP);
+ if (!tok || tok[0] == '#')
+ return 0;
+ raw->upper = strtol (tok, &end, 16);
+ if (end == tok)
+ return 0;
+ /*
+ * Get class
+ */
+ tok = strtok (NULL, SEP);
+ if (!tok || tok[0] == '#')
+ return 0;
+ for (i = 0; caseFoldClassMap[i].name; i++)
+ if (!strcmp (tok, caseFoldClassMap[i].name))
+ {
+ raw->class = caseFoldClassMap[i].class;
+ break;
+ }
+ if (!caseFoldClassMap[i].name)
+ return 0;
+
+ /*
+ * Get list of result characters
+ */
+ for (i = 0; i < MAX_OUT; i++)
+ {
+ tok = strtok (NULL, SEP);
+ if (!tok || tok[0] == '#')
+ break;
+ raw->lower[i] = strtol (tok, &end, 16);
+ if (end == tok)
+ break;
+ }
+ if (i == 0)
+ return 0;
+ raw->nout = i;
+ return 1;
+}
+
+static int
+caseFoldReadRaw (FILE *in, CaseFoldRaw *raw)
+{
+ char line[MAX_LINE];
+
+ for (;;)
+ {
+ if (!fgets (line, sizeof (line) - 1, in))
+ return 0;
+ if (parseRaw (line, raw))
+ return 1;
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ FcCaseFold *fold = 0;
+ CaseFoldRaw raw;
+ int i;
+ FILE *caseFile;
+ char line[MAX_LINE];
+ int expand;
+
+ if (argc != 2)
+ panic ("usage: fc-case CaseFolding.txt");
+ caseFile = fopen (argv[1], "r");
+ if (!caseFile)
+ panic ("can't open case folding file");
+
+ while (caseFoldReadRaw (caseFile, &raw))
+ {
+ if (!minFoldChar)
+ minFoldChar = raw.upper;
+ maxFoldChar = raw.upper;
+ switch (raw.class) {
+ case CaseFoldCommon:
+ case CaseFoldFull:
+ if (raw.nout == 1)
+ {
+ if (fold && foldExtends (fold, &raw))
+ fold->count = raw.upper - fold->upper + 1;
+ else
+ {
+ fold = addFold ();
+ fold->upper = raw.upper;
+ fold->offset = raw.lower[0] - raw.upper;
+ if (fold->offset == 1)
+ fold->method = FC_CASE_FOLD_EVEN_ODD;
+ else
+ fold->method = FC_CASE_FOLD_RANGE;
+ fold->count = 1;
+ }
+ expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper);
+ }
+ else
+ {
+ fold = addFold ();
+ fold->upper = raw.upper;
+ fold->method = FC_CASE_FOLD_FULL;
+ fold->offset = nfoldChars;
+ for (i = 0; i < raw.nout; i++)
+ addChar (raw.lower[i]);
+ fold->count = nfoldChars - fold->offset;
+ if (fold->count > maxFoldChars)
+ maxFoldChars = fold->count;
+ expand = fold->count - utf8_size (raw.upper);
+ }
+ if (expand > maxExpand)
+ maxExpand = expand;
+ break;
+ case CaseFoldSimple:
+ break;
+ case CaseFoldTurkic:
+ break;
+ }
+ }
+ /*
+ * Scan the input until the marker is found
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ {
+ if (!strncmp (line, "@@@", 3))
+ break;
+ fputs (line, stdout);
+ }
+
+ /*
+ * Dump these tables
+ */
+ dump ();
+
+ /*
+ * And flush out the rest of the input file
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ fputs (line, stdout);
+
+ fflush (stdout);
+ exit (ferror (stdout));
+}
diff --git a/fontconfig/fc-case/fccase.tmpl.h b/fontconfig/fc-case/fccase.tmpl.h
index 62633293a..45d67d12b 100644
--- a/fontconfig/fc-case/fccase.tmpl.h
+++ b/fontconfig/fc-case/fccase.tmpl.h
@@ -1,25 +1,25 @@
-/*
- * fontconfig/fc-case/fccase.tmpl.h
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/*
+ * fontconfig/fc-case/fccase.tmpl.h
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/fontconfig/fc-cat/Makefile.am b/fontconfig/fc-cat/Makefile.am
index 27b637534..b88c1a499 100644
--- a/fontconfig/fc-cat/Makefile.am
+++ b/fontconfig/fc-cat/Makefile.am
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-cat/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_CAT_SRC=${top_srcdir}/fc-cat
-
-SGML = ${FC_CAT_SRC}/fc-cat.sgml
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-bin_PROGRAMS=fc-cat
-
-BUILT_MANS=fc-cat.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-cat.sgml ${BUILT_MANS}
-
-fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-cat/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOC2MAN = docbook2man
+
+FC_CAT_SRC=${top_srcdir}/fc-cat
+
+SGML = ${FC_CAT_SRC}/fc-cat.sgml
+
+INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
+
+bin_PROGRAMS=fc-cat
+
+BUILT_MANS=fc-cat.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-cat.sgml ${BUILT_MANS}
+
+fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-cat/fc-cat.c b/fontconfig/fc-cat/fc-cat.c
index a9326c8eb..7b52d5475 100644
--- a/fontconfig/fc-cat/fc-cat.c
+++ b/fontconfig/fc-cat/fc-cat.c
@@ -1,408 +1,409 @@
-/*
- * fontconfig/fc-cat/fc-cat.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include "../fc-arch/fcarch.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"version", 0, 0, 'V'},
- {"verbose", 0, 0, 'v'},
- {"recurse", 0, 0, 'r'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-/*
- * POSIX has broken stdio so that getc must do thread-safe locking,
- * this is a serious performance problem for applications doing large
- * amounts of IO with getc (as is done here). If available, use
- * the getc_unlocked varient instead.
- */
-
-#if defined(getc_unlocked) || defined(_IO_getc_unlocked)
-#define GETC(f) getc_unlocked(f)
-#define PUTC(c,f) putc_unlocked(c,f)
-#else
-#define GETC(f) getc(f)
-#define PUTC(c,f) putc(c,f)
-#endif
-
-static FcBool
-write_chars (FILE *f, const FcChar8 *chars)
-{
- FcChar8 c;
- while ((c = *chars++))
- {
- switch (c) {
- case '"':
- case '\\':
- if (PUTC ('\\', f) == EOF)
- return FcFalse;
- /* fall through */
- default:
- if (PUTC (c, f) == EOF)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-static FcBool
-write_ulong (FILE *f, unsigned long t)
-{
- int pow;
- unsigned long temp, digit;
-
- temp = t;
- pow = 1;
- while (temp >= 10)
- {
- temp /= 10;
- pow *= 10;
- }
- temp = t;
- while (pow)
- {
- digit = temp / pow;
- if (PUTC ((char) digit + '0', f) == EOF)
- return FcFalse;
- temp = temp - pow * digit;
- pow = pow / 10;
- }
- return FcTrue;
-}
-
-static FcBool
-write_int (FILE *f, int i)
-{
- return write_ulong (f, (unsigned long) i);
-}
-
-static FcBool
-write_string (FILE *f, const FcChar8 *string)
-{
-
- if (PUTC ('"', f) == EOF)
- return FcFalse;
- if (!write_chars (f, string))
- return FcFalse;
- if (PUTC ('"', f) == EOF)
- return FcFalse;
- return FcTrue;
-}
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n",
- program, FC_ARCHITECTURE);
- fprintf (file, " %s [-Vh] [--version] [--help]\n", program);
-#else
- fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n",
- program, FC_ARCHITECTURE);
-#endif
- fprintf (file, "Reads font information cache from:\n");
- fprintf (file, " 1) specified fontconfig cache file\n");
- fprintf (file, " 2) related to a particular font directory\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -r, --recurse recurse into subdirectories\n");
- fprintf (file, " -v, --verbose be verbose\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -r (recurse) recurse into subdirectories\n");
- fprintf (file, " -v (verbose) be verbose\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-/*
- * return the path from the directory containing 'cache' to 'file'
- */
-
-static const FcChar8 *
-file_base_name (const FcChar8 *cache, const FcChar8 *file)
-{
- int cache_len = strlen ((char *) cache);
-
- if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/')
- return file + cache_len + 1;
- return file;
-}
-
-#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
-
-static FcBool
-cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose)
-{
- FcChar8 *name, *dir;
- const FcChar8 *file, *base;
- int ret;
- int n;
- int id;
- int ndir = 0;
- FcStrList *list;
-
- list = FcStrListCreate (dirs);
- if (!list)
- goto bail2;
-
- while ((dir = FcStrListNext (list)))
- {
- base = file_base_name (base_name, dir);
- if (!write_string (stdout, base))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- if (!write_int (stdout, 0))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- if (!write_string (stdout, FC_FONT_FILE_DIR))
- goto bail3;
- if (PUTC ('\n', stdout) == EOF)
- goto bail3;
- ndir++;
- }
-
- for (n = 0; n < set->nfont; n++)
- {
- FcPattern *font = set->fonts[n];
-
- if (FcPatternGetString (font, FC_FILE, 0, (FcChar8 **) &file) != FcResultMatch)
- goto bail3;
- base = file_base_name (base_name, file);
- if (FcPatternGetInteger (font, FC_INDEX, 0, &id) != FcResultMatch)
- goto bail3;
- if (!write_string (stdout, base))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- if (!write_int (stdout, id))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- name = FcNameUnparse (font);
- if (!name)
- goto bail3;
- ret = write_string (stdout, name);
- FcStrFree (name);
- if (!ret)
- goto bail3;
- if (PUTC ('\n', stdout) == EOF)
- goto bail3;
- }
- if (verbose && !set->nfont && !ndir)
- printf ("<empty>\n");
-
- FcStrListDone (list);
-
- return FcTrue;
-
-bail3:
- FcStrListDone (list);
-bail2:
- return FcFalse;
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
- int ret = 0;
- FcFontSet *fs;
- FcStrSet *dirs;
- FcStrSet *args = NULL;
- FcStrList *arglist;
- FcCache *cache;
- FcConfig *config;
- FcChar8 *arg;
- int verbose = 0;
- int recurse = 0;
- FcBool first = FcTrue;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "Vvrh")) != -1)
-#endif
- {
- switch (c) {
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'v':
- verbose++;
- break;
- case 'r':
- recurse++;
- break;
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- config = FcInitLoadConfig ();
- if (!config)
- {
- fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
- return 1;
- }
- FcConfigSetCurrent (config);
-
- args = FcStrSetCreate ();
- if (!args)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- if (i < argc)
- {
- for (; i < argc; i++)
- {
- if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i]))
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- }
- arglist = FcStrListCreate (args);
- if (!arglist)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- }
- else
- {
- recurse++;
- arglist = FcConfigGetFontDirs (config);
- while ((arg = FcStrListNext (arglist)))
- if (!FcStrSetAdd (args, arg))
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- FcStrListDone (arglist);
- }
- arglist = FcStrListCreate (args);
- if (!arglist)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
-
- while ((arg = FcStrListNext (arglist)))
- {
- int j;
- FcChar8 *cache_file = NULL;
- struct stat file_stat;
-
- if (FcFileIsDir (arg))
- cache = FcDirCacheLoad (arg, config, &cache_file);
- else
- cache = FcDirCacheLoadFile (arg, &file_stat);
- if (!cache)
- {
- perror ((char *) arg);
- ret++;
- continue;
- }
-
- dirs = FcStrSetCreate ();
- fs = FcCacheCopySet (cache);
- for (j = 0; j < FcCacheNumSubdir (cache); j++)
- {
- FcStrSetAdd (dirs, FcCacheSubdir (cache, j));
- if (recurse)
- FcStrSetAdd (args, FcCacheSubdir (cache, j));
- }
-
- if (verbose)
- {
- if (!first)
- printf ("\n");
- printf ("Directory: %s\nCache: %s\n--------\n",
- FcCacheDir(cache), cache_file ? cache_file : arg);
- first = FcFalse;
- }
- cache_print_set (fs, dirs, FcCacheDir (cache), verbose);
-
- FcStrSetDestroy (dirs);
-
- FcFontSetDestroy (fs);
- FcDirCacheUnload (cache);
- if (cache_file)
- FcStrFree (cache_file);
- }
-
- return 0;
-}
+/*
+ * fontconfig/fc-cat/fc-cat.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include "../src/fcarch.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+const struct option longopts[] = {
+ {"version", 0, 0, 'V'},
+ {"verbose", 0, 0, 'v'},
+ {"recurse", 0, 0, 'r'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+/*
+ * POSIX has broken stdio so that getc must do thread-safe locking,
+ * this is a serious performance problem for applications doing large
+ * amounts of IO with getc (as is done here). If available, use
+ * the getc_unlocked varient instead.
+ */
+
+#if defined(getc_unlocked) || defined(_IO_getc_unlocked)
+#define GETC(f) getc_unlocked(f)
+#define PUTC(c,f) putc_unlocked(c,f)
+#else
+#define GETC(f) getc(f)
+#define PUTC(c,f) putc(c,f)
+#endif
+
+static FcBool
+write_chars (FILE *f, const FcChar8 *chars)
+{
+ FcChar8 c;
+ while ((c = *chars++))
+ {
+ switch (c) {
+ case '"':
+ case '\\':
+ if (PUTC ('\\', f) == EOF)
+ return FcFalse;
+ /* fall through */
+ default:
+ if (PUTC (c, f) == EOF)
+ return FcFalse;
+ }
+ }
+ return FcTrue;
+}
+
+static FcBool
+write_ulong (FILE *f, unsigned long t)
+{
+ int pow;
+ unsigned long temp, digit;
+
+ temp = t;
+ pow = 1;
+ while (temp >= 10)
+ {
+ temp /= 10;
+ pow *= 10;
+ }
+ temp = t;
+ while (pow)
+ {
+ digit = temp / pow;
+ if (PUTC ((char) digit + '0', f) == EOF)
+ return FcFalse;
+ temp = temp - pow * digit;
+ pow = pow / 10;
+ }
+ return FcTrue;
+}
+
+static FcBool
+write_int (FILE *f, int i)
+{
+ return write_ulong (f, (unsigned long) i);
+}
+
+static FcBool
+write_string (FILE *f, const FcChar8 *string)
+{
+
+ if (PUTC ('"', f) == EOF)
+ return FcFalse;
+ if (!write_chars (f, string))
+ return FcFalse;
+ if (PUTC ('"', f) == EOF)
+ return FcFalse;
+ return FcTrue;
+}
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n",
+ program, FC_ARCHITECTURE);
+ fprintf (file, " %s [-Vh] [--version] [--help]\n", program);
+#else
+ fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n",
+ program, FC_ARCHITECTURE);
+#endif
+ fprintf (file, "Reads font information cache from:\n");
+ fprintf (file, " 1) specified fontconfig cache file\n");
+ fprintf (file, " 2) related to a particular font directory\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -r, --recurse recurse into subdirectories\n");
+ fprintf (file, " -v, --verbose be verbose\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -r (recurse) recurse into subdirectories\n");
+ fprintf (file, " -v (verbose) be verbose\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+/*
+ * return the path from the directory containing 'cache' to 'file'
+ */
+
+static const FcChar8 *
+file_base_name (const FcChar8 *cache, const FcChar8 *file)
+{
+ int cache_len = strlen ((char *) cache);
+
+ if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/')
+ return file + cache_len + 1;
+ return file;
+}
+
+#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
+
+static FcBool
+cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose)
+{
+ FcChar8 *name, *dir;
+ const FcChar8 *file, *base;
+ int ret;
+ int n;
+ int id;
+ int ndir = 0;
+ FcStrList *list;
+
+ list = FcStrListCreate (dirs);
+ if (!list)
+ goto bail2;
+
+ while ((dir = FcStrListNext (list)))
+ {
+ base = file_base_name (base_name, dir);
+ if (!write_string (stdout, base))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_int (stdout, 0))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_string (stdout, FC_FONT_FILE_DIR))
+ goto bail3;
+ if (PUTC ('\n', stdout) == EOF)
+ goto bail3;
+ ndir++;
+ }
+
+ for (n = 0; n < set->nfont; n++)
+ {
+ FcPattern *font = set->fonts[n];
+
+ if (FcPatternGetString (font, FC_FILE, 0, (FcChar8 **) &file) != FcResultMatch)
+ goto bail3;
+ base = file_base_name (base_name, file);
+ if (FcPatternGetInteger (font, FC_INDEX, 0, &id) != FcResultMatch)
+ goto bail3;
+ if (!write_string (stdout, base))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_int (stdout, id))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ name = FcNameUnparse (font);
+ if (!name)
+ goto bail3;
+ ret = write_string (stdout, name);
+ FcStrFree (name);
+ if (!ret)
+ goto bail3;
+ if (PUTC ('\n', stdout) == EOF)
+ goto bail3;
+ }
+ if (verbose && !set->nfont && !ndir)
+ printf ("<empty>\n");
+
+ FcStrListDone (list);
+
+ return FcTrue;
+
+bail3:
+ FcStrListDone (list);
+bail2:
+ return FcFalse;
+}
+
+int
+main (int argc, char **argv)
+{
+ int i;
+ int ret = 0;
+ FcFontSet *fs;
+ FcStrSet *dirs;
+ FcStrSet *args = NULL;
+ FcStrList *arglist;
+ FcCache *cache;
+ FcConfig *config;
+ FcChar8 *arg;
+ int verbose = 0;
+ int recurse = 0;
+ FcBool first = FcTrue;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "Vvrh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'v':
+ verbose++;
+ break;
+ case 'r':
+ recurse++;
+ break;
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ config = FcInitLoadConfig ();
+ if (!config)
+ {
+ fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
+ return 1;
+ }
+ FcConfigSetCurrent (config);
+
+ args = FcStrSetCreate ();
+ if (!args)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ if (i < argc)
+ {
+ for (; i < argc; i++)
+ {
+ if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i]))
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ }
+ arglist = FcStrListCreate (args);
+ if (!arglist)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ }
+ else
+ {
+ recurse++;
+ arglist = FcConfigGetFontDirs (config);
+ while ((arg = FcStrListNext (arglist)))
+ if (!FcStrSetAdd (args, arg))
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ FcStrListDone (arglist);
+ }
+ arglist = FcStrListCreate (args);
+ if (!arglist)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+
+ while ((arg = FcStrListNext (arglist)))
+ {
+ int j;
+ FcChar8 *cache_file = NULL;
+ struct stat file_stat;
+
+ if (FcFileIsDir (arg))
+ cache = FcDirCacheLoad (arg, config, &cache_file);
+ else
+ cache = FcDirCacheLoadFile (arg, &file_stat);
+ if (!cache)
+ {
+ perror ((char *) arg);
+ ret++;
+ continue;
+ }
+
+ dirs = FcStrSetCreate ();
+ fs = FcCacheCopySet (cache);
+ for (j = 0; j < FcCacheNumSubdir (cache); j++)
+ {
+ FcStrSetAdd (dirs, FcCacheSubdir (cache, j));
+ if (recurse)
+ FcStrSetAdd (args, FcCacheSubdir (cache, j));
+ }
+
+ if (verbose)
+ {
+ if (!first)
+ printf ("\n");
+ printf ("Directory: %s\nCache: %s\n--------\n",
+ FcCacheDir(cache), cache_file ? cache_file : arg);
+ first = FcFalse;
+ }
+ cache_print_set (fs, dirs, FcCacheDir (cache), verbose);
+
+ FcStrSetDestroy (dirs);
+
+ FcFontSetDestroy (fs);
+ FcDirCacheUnload (cache);
+ if (cache_file)
+ FcStrFree (cache_file);
+ }
+
+ FcFini ();
+ return 0;
+}
diff --git a/fontconfig/fc-cat/fc-cat.sgml b/fontconfig/fc-cat/fc-cat.sgml
index b042dc65f..38ba0653e 100644
--- a/fontconfig/fc-cat/fc-cat.sgml
+++ b/fontconfig/fc-cat/fc-cat.sgml
@@ -1,168 +1,169 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
- <!ENTITY dhsurname "<surname>Lam</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>plam@mit.edu</email>">
- <!ENTITY dhusername "Patrick Lam">
- <!ENTITY dhucpackage "<refentrytitle>fc-cat</refentrytitle>">
- <!ENTITY dhpackage "fc-cat">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2005</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>read font information cache files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-rvVh</option></arg>
- <arg><option>--recurse</option></arg>
- <arg><option>--verbose</option></arg>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <group rep="repeat">
- <arg><option><replaceable>fonts-cache-2-files</replaceable></option></arg>
- <arg><option><replaceable>dirs</replaceable></option></arg>
- </group>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> reads the font information from
- cache files or related to font directories
- and emits it in ASCII form.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-r</option>
- <option>--recurse</option>
- </term>
- <listitem>
- <para>Recurse into subdirectories.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Be verbose.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
+ <!ENTITY dhsurname "<surname>Lam</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>plam@mit.edu</email>">
+ <!ENTITY dhusername "Patrick Lam">
+ <!ENTITY dhucpackage "<refentrytitle>fc-cat</refentrytitle>">
+ <!ENTITY dhpackage "fc-cat">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2005</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>read font information cache files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-rvVh</option></arg>
+ <arg><option>--recurse</option></arg>
+ <arg><option>--verbose</option></arg>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <group rep="repeat">
+ <arg><option><replaceable>fonts-cache-2-files</replaceable></option></arg>
+ <arg><option><replaceable>dirs</replaceable></option></arg>
+ </group>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> reads the font information from
+ cache files or related to font directories
+ and emits it in ASCII form.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-r</option>
+ <option>--recurse</option>
+ </term>
+ <listitem>
+ <para>Recurse into subdirectories.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Be verbose.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was written by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-glyphname/Makefile.am b/fontconfig/fc-glyphname/Makefile.am
index bcb4d0746..2484f377e 100644
--- a/fontconfig/fc-glyphname/Makefile.am
+++ b/fontconfig/fc-glyphname/Makefile.am
@@ -1,55 +1,57 @@
-#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fcglyphname.tmpl.h
-STMPL=${top_srcdir}/fc-glyphname/${TMPL}
-TARG=fcglyphname.h
-
-noinst_PROGRAMS=fc-glyphname
-
-GLYPHNAME=zapfdingbats.txt
-SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt
-
-EXTRA_DIST=$(TMPL) $(GLYPHNAME)
-
-$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES=$(TARG) $(ALIAS_FILES)
-
+#
+# $Id $
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
+
+TMPL=fcglyphname.tmpl.h
+STMPL=${top_srcdir}/fc-glyphname/${TMPL}
+TARG=fcglyphname.h
+
+noinst_PROGRAMS=fc-glyphname
+
+GLYPHNAME=zapfdingbats.txt
+SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt
+
+EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME)
+
+if CROSS_COMPILING
+$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME)
+ @echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
+$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME)
+ $(AM_V_GEN) $(RM) $(TARG); \
+ ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \
+ mv $(TARG).tmp $(TARG)
+endif
+
+ALIAS_FILES = fcalias.h fcaliastail.h
+
+BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
+
+$(ALIAS_FILES):
+ touch $(ALIAS_FILES)
+
+CLEANFILES = $(ALIAS_FILES)
+
+MAINTAINERCLEANFILES = $(TARG)
diff --git a/fontconfig/fc-glyphname/fc-glyphname.c b/fontconfig/fc-glyphname/fc-glyphname.c
index 5e1e8816f..0339073a2 100644
--- a/fontconfig/fc-glyphname/fc-glyphname.c
+++ b/fontconfig/fc-glyphname/fc-glyphname.c
@@ -1,325 +1,325 @@
-/*
- * fontconfig/fc-glyphname/fc-glyphname.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-
-static int
-rawindex (const FcGlyphName *gn);
-
-static void
-scan (FILE *f, char *filename);
-
-static int
-isprime (int i);
-
-static void
-find_hash (void);
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name);
-
-static void
-insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h);
-
-static void
-dump (FcGlyphName * const *table, const char *name);
-
-static FcGlyphName *
-FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
-{
- FcGlyphName *gn;
-
- gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name));
- if (!gn)
- return 0;
- gn->ucs = ucs;
- strcpy ((char *) gn->name, (char *) name);
- return gn;
-}
-
-static void
-fatal (const char *file, int lineno, const char *msg)
-{
- if (lineno)
- fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
- else
- fprintf (stderr, "%s: %s\n", file, msg);
-
- exit (1);
-}
-
-#define MAX_GLYPHFILE 256
-#define MAX_GLYPHNAME 10240
-#define MAX_NAMELEN 1024
-
-static FcGlyphName *raw[MAX_GLYPHNAME];
-static int nraw;
-static int max_name_len;
-static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
-static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
-static unsigned int hash, rehash;
-
-static int
-rawindex (const FcGlyphName *gn)
-{
- int i;
-
- for (i = 0; i < nraw; i++)
- if (raw[i] == gn)
- return i;
- return -1;
-}
-
-static void
-scan (FILE *f, char *filename)
-{
- char buf[MAX_NAMELEN];
- char name[MAX_NAMELEN];
- unsigned long ucs;
- FcGlyphName *gn;
- int lineno = 0;
- int len;
-
- while (fgets (buf, sizeof (buf), f))
- {
- lineno++;
- if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2)
- continue;
- gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name);
- if (!gn)
- fatal (filename, lineno, "out of memory");
- len = strlen (name);
- if (len > max_name_len)
- max_name_len = len;
- raw[nraw++] = gn;
- }
-}
-
-static int compare_string (const void *a, const void *b)
-{
- const char *const *as = a, *const *bs = b;
- return strcmp (*as, *bs);
-}
-
-static int compare_glyphname (const void *a, const void *b)
-{
- const FcGlyphName *const *ag = a, *const *bg = b;
-
- return strcmp ((char *) (*ag)->name, (char *) (*bg)->name);
-}
-
-static int
-isqrt (int a)
-{
- int l, h, m;
-
- l = 2;
- h = a/2;
- while ((h-l) > 1)
- {
- m = (h+l) >> 1;
- if (m * m < a)
- l = m;
- else
- h = m;
- }
- return h;
-}
-
-static int
-isprime (int i)
-{
- int l, t;
-
- if (i < 2)
- return FcFalse;
- if ((i & 1) == 0)
- {
- if (i == 2)
- return FcTrue;
- return FcFalse;
- }
- l = isqrt (i) + 1;
- for (t = 3; t <= l; t += 2)
- if (i % t == 0)
- return 0;
- return 1;
-}
-
-/*
- * Find a prime pair that leaves at least 25% of the hash table empty
- */
-
-static void
-find_hash (void)
-{
- int h;
-
- h = nraw + nraw / 4;
- if ((h & 1) == 0)
- h++;
- while (!isprime(h-2) || !isprime(h))
- h += 2;
- hash = h;
- rehash = h-2;
-}
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name)
-{
- FcChar32 h = 0;
- FcChar8 c;
-
- while ((c = *name++))
- {
- h = ((h << 1) | (h >> 31)) ^ c;
- }
- return h;
-}
-
-static void
-insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
-{
- int i, r = 0;
-
- i = (int) (h % hash);
- while (table[i])
- {
- if (!r) r = (int) (h % rehash + 1);
- i += r;
- if (i >= hash)
- i -= hash;
- }
- table[i] = gn;
-}
-
-static void
-dump (FcGlyphName * const *table, const char *name)
-{
- int i;
-
- printf ("static const FcGlyphId %s[%d] = {\n", name, hash);
-
- for (i = 0; i < hash; i++)
- if (table[i])
- printf (" %d,\n", rawindex(table[i]));
- else
- printf (" -1,\n");
-
- printf ("};\n");
-}
-
-int
-main (int argc, char **argv)
-{
- char *files[MAX_GLYPHFILE];
- char line[1024];
- FILE *f;
- int i;
- char *type;
-
- i = 0;
- while (argv[i+1])
- {
- if (i == MAX_GLYPHFILE)
- fatal (*argv, 0, "Too many glyphname files");
- files[i] = argv[i+1];
- i++;
- }
- files[i] = 0;
- qsort (files, i, sizeof (char *), compare_string);
- for (i = 0; files[i]; i++)
- {
- f = fopen (files[i], "r");
- if (!f)
- fatal (files[i], 0, strerror (errno));
- scan (f, files[i]);
- fclose (f);
- }
- qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname);
-
- find_hash ();
-
- for (i = 0; i < nraw; i++)
- {
- insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name));
- insert (raw[i], ucs_to_name, raw[i]->ucs);
- }
-
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n",
- nraw, hash, nraw * 100 / hash);
-
- printf ("#define FC_GLYPHNAME_HASH %u\n", hash);
- printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash);
- printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len);
- if (nraw < 128)
- type = "int8_t";
- else if (nraw < 32768)
- type = "int16_t";
- else
- type = "int32_t";
-
- printf ("typedef %s FcGlyphId;\n\n", type);
-
- /*
- * Dump out entries
- */
-
- printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n",
- max_name_len + 1, nraw);
-
- for (i = 0; i < nraw; i++)
- printf (" { 0x%lx, \"%s\" },\n",
- (unsigned long) raw[i]->ucs, raw[i]->name);
-
- printf ("};\n");
-
- /*
- * Dump out name_to_ucs table
- */
-
- dump (name_to_ucs, "_fc_name_to_ucs");
-
- /*
- * Dump out ucs_to_name table
- */
- dump (ucs_to_name, "_fc_ucs_to_name");
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/*
+ * fontconfig/fc-glyphname/fc-glyphname.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+
+static int
+rawindex (const FcGlyphName *gn);
+
+static void
+scan (FILE *f, char *filename);
+
+static int
+isprime (int i);
+
+static void
+find_hash (void);
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name);
+
+static void
+insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h);
+
+static void
+dump (FcGlyphName * const *table, const char *name);
+
+static FcGlyphName *
+FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
+{
+ FcGlyphName *gn;
+
+ gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name));
+ if (!gn)
+ return 0;
+ gn->ucs = ucs;
+ strcpy ((char *) gn->name, (char *) name);
+ return gn;
+}
+
+static void
+fatal (const char *file, int lineno, const char *msg)
+{
+ if (lineno)
+ fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
+ else
+ fprintf (stderr, "%s: %s\n", file, msg);
+
+ exit (1);
+}
+
+#define MAX_GLYPHFILE 256
+#define MAX_GLYPHNAME 10240
+#define MAX_NAMELEN 1024
+
+static FcGlyphName *raw[MAX_GLYPHNAME];
+static int nraw;
+static int max_name_len;
+static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
+static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
+static unsigned int hash, rehash;
+
+static int
+rawindex (const FcGlyphName *gn)
+{
+ int i;
+
+ for (i = 0; i < nraw; i++)
+ if (raw[i] == gn)
+ return i;
+ return -1;
+}
+
+static void
+scan (FILE *f, char *filename)
+{
+ char buf[MAX_NAMELEN];
+ char name[MAX_NAMELEN];
+ unsigned long ucs;
+ FcGlyphName *gn;
+ int lineno = 0;
+ int len;
+
+ while (fgets (buf, sizeof (buf), f))
+ {
+ lineno++;
+ if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2)
+ continue;
+ gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name);
+ if (!gn)
+ fatal (filename, lineno, "out of memory");
+ len = strlen (name);
+ if (len > max_name_len)
+ max_name_len = len;
+ raw[nraw++] = gn;
+ }
+}
+
+static int compare_string (const void *a, const void *b)
+{
+ const char *const *as = a, *const *bs = b;
+ return strcmp (*as, *bs);
+}
+
+static int compare_glyphname (const void *a, const void *b)
+{
+ const FcGlyphName *const *ag = a, *const *bg = b;
+
+ return strcmp ((char *) (*ag)->name, (char *) (*bg)->name);
+}
+
+static int
+isqrt (int a)
+{
+ int l, h, m;
+
+ l = 2;
+ h = a/2;
+ while ((h-l) > 1)
+ {
+ m = (h+l) >> 1;
+ if (m * m < a)
+ l = m;
+ else
+ h = m;
+ }
+ return h;
+}
+
+static int
+isprime (int i)
+{
+ int l, t;
+
+ if (i < 2)
+ return FcFalse;
+ if ((i & 1) == 0)
+ {
+ if (i == 2)
+ return FcTrue;
+ return FcFalse;
+ }
+ l = isqrt (i) + 1;
+ for (t = 3; t <= l; t += 2)
+ if (i % t == 0)
+ return 0;
+ return 1;
+}
+
+/*
+ * Find a prime pair that leaves at least 25% of the hash table empty
+ */
+
+static void
+find_hash (void)
+{
+ int h;
+
+ h = nraw + nraw / 4;
+ if ((h & 1) == 0)
+ h++;
+ while (!isprime(h-2) || !isprime(h))
+ h += 2;
+ hash = h;
+ rehash = h-2;
+}
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name)
+{
+ FcChar32 h = 0;
+ FcChar8 c;
+
+ while ((c = *name++))
+ {
+ h = ((h << 1) | (h >> 31)) ^ c;
+ }
+ return h;
+}
+
+static void
+insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
+{
+ int i, r = 0;
+
+ i = (int) (h % hash);
+ while (table[i])
+ {
+ if (!r) r = (int) (h % rehash + 1);
+ i += r;
+ if (i >= hash)
+ i -= hash;
+ }
+ table[i] = gn;
+}
+
+static void
+dump (FcGlyphName * const *table, const char *name)
+{
+ int i;
+
+ printf ("static const FcGlyphId %s[%d] = {\n", name, hash);
+
+ for (i = 0; i < hash; i++)
+ if (table[i])
+ printf (" %d,\n", rawindex(table[i]));
+ else
+ printf (" -1,\n");
+
+ printf ("};\n");
+}
+
+int
+main (int argc, char **argv)
+{
+ char *files[MAX_GLYPHFILE];
+ char line[1024];
+ FILE *f;
+ int i;
+ char *type;
+
+ i = 0;
+ while (argv[i+1])
+ {
+ if (i == MAX_GLYPHFILE)
+ fatal (*argv, 0, "Too many glyphname files");
+ files[i] = argv[i+1];
+ i++;
+ }
+ files[i] = 0;
+ qsort (files, i, sizeof (char *), compare_string);
+ for (i = 0; files[i]; i++)
+ {
+ f = fopen (files[i], "r");
+ if (!f)
+ fatal (files[i], 0, strerror (errno));
+ scan (f, files[i]);
+ fclose (f);
+ }
+ qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname);
+
+ find_hash ();
+
+ for (i = 0; i < nraw; i++)
+ {
+ insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name));
+ insert (raw[i], ucs_to_name, raw[i]->ucs);
+ }
+
+ /*
+ * Scan the input until the marker is found
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ {
+ if (!strncmp (line, "@@@", 3))
+ break;
+ fputs (line, stdout);
+ }
+
+ printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n",
+ nraw, hash, nraw * 100 / hash);
+
+ printf ("#define FC_GLYPHNAME_HASH %u\n", hash);
+ printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash);
+ printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len);
+ if (nraw < 128)
+ type = "int8_t";
+ else if (nraw < 32768)
+ type = "int16_t";
+ else
+ type = "int32_t";
+
+ printf ("typedef %s FcGlyphId;\n\n", type);
+
+ /*
+ * Dump out entries
+ */
+
+ printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n",
+ max_name_len + 1, nraw);
+
+ for (i = 0; i < nraw; i++)
+ printf (" { 0x%lx, \"%s\" },\n",
+ (unsigned long) raw[i]->ucs, raw[i]->name);
+
+ printf ("};\n");
+
+ /*
+ * Dump out name_to_ucs table
+ */
+
+ dump (name_to_ucs, "_fc_name_to_ucs");
+
+ /*
+ * Dump out ucs_to_name table
+ */
+ dump (ucs_to_name, "_fc_ucs_to_name");
+
+ while (fgets (line, sizeof (line), stdin))
+ fputs (line, stdout);
+
+ fflush (stdout);
+ exit (ferror (stdout));
+}
diff --git a/fontconfig/fc-glyphname/fcglyphname.tmpl.h b/fontconfig/fc-glyphname/fcglyphname.tmpl.h
index e2f76a2a5..7e2160996 100644
--- a/fontconfig/fc-glyphname/fcglyphname.tmpl.h
+++ b/fontconfig/fc-glyphname/fcglyphname.tmpl.h
@@ -1,25 +1,25 @@
-/*
- * fontconfig/fc-glyphname/fcglyphname.tmpl.h
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/*
+ * fontconfig/fc-glyphname/fcglyphname.tmpl.h
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/fontconfig/fc-lang/Makefile.am b/fontconfig/fc-lang/Makefile.am
index 923a4fff6..1f6a4aef3 100644
--- a/fontconfig/fc-lang/Makefile.am
+++ b/fontconfig/fc-lang/Makefile.am
@@ -1,300 +1,303 @@
-#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-CC = @CC_FOR_BUILD@
-EXEEXT = @EXEEXT_FOR_BUILD@
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fclang.tmpl.h
-STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h
-TARG=fclang.h
-
-noinst_PROGRAMS=fc-lang
-
-noinst_MANS=fc-lang.man
-
-EXTRA_DIST=$(TMPL) $(ORTH)
-
-$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES = $(TARG) $(ALIAS_FILES)
-
-# NOTE:
-#
-# The order of the orth files here is extremely important (part of the cache
-# format) and should not be modified. New orth files should be added at the
-# end. No files should be removed either.
-#
-ORTH = \
- aa.orth \
- ab.orth \
- af.orth \
- am.orth \
- ar.orth \
- as.orth \
- ast.orth \
- av.orth \
- ay.orth \
- az_az.orth \
- az_ir.orth \
- ba.orth \
- bm.orth \
- be.orth \
- bg.orth \
- bh.orth \
- bho.orth \
- bi.orth \
- bin.orth \
- bn.orth \
- bo.orth \
- br.orth \
- bs.orth \
- bua.orth \
- ca.orth \
- ce.orth \
- ch.orth \
- chm.orth \
- chr.orth \
- co.orth \
- cs.orth \
- cu.orth \
- cv.orth \
- cy.orth \
- da.orth \
- de.orth \
- dz.orth \
- el.orth \
- en.orth \
- eo.orth \
- es.orth \
- et.orth \
- eu.orth \
- fa.orth \
- fi.orth \
- fj.orth \
- fo.orth \
- fr.orth \
- ff.orth \
- fur.orth \
- fy.orth \
- ga.orth \
- gd.orth \
- gez.orth \
- gl.orth \
- gn.orth \
- gu.orth \
- gv.orth \
- ha.orth \
- haw.orth \
- he.orth \
- hi.orth \
- ho.orth \
- hr.orth \
- hu.orth \
- hy.orth \
- ia.orth \
- ig.orth \
- id.orth \
- ie.orth \
- ik.orth \
- io.orth \
- is.orth \
- it.orth \
- iu.orth \
- ja.orth \
- ka.orth \
- kaa.orth \
- ki.orth \
- kk.orth \
- kl.orth \
- km.orth \
- kn.orth \
- ko.orth \
- kok.orth \
- ks.orth \
- ku_am.orth \
- ku_ir.orth \
- kum.orth \
- kv.orth \
- kw.orth \
- ky.orth \
- la.orth \
- lb.orth \
- lez.orth \
- ln.orth \
- lo.orth \
- lt.orth \
- lv.orth \
- mg.orth \
- mh.orth \
- mi.orth \
- mk.orth \
- ml.orth \
- mn_cn.orth \
- mo.orth \
- mr.orth \
- mt.orth \
- my.orth \
- nb.orth \
- nds.orth \
- ne.orth \
- nl.orth \
- nn.orth \
- no.orth \
- nr.orth \
- nso.orth \
- ny.orth \
- oc.orth \
- om.orth \
- or.orth \
- os.orth \
- pa.orth \
- pl.orth \
- ps_af.orth \
- ps_pk.orth \
- pt.orth \
- rm.orth \
- ro.orth \
- ru.orth \
- sa.orth \
- sah.orth \
- sco.orth \
- se.orth \
- sel.orth \
- sh.orth \
- shs.orth \
- si.orth \
- sk.orth \
- sl.orth \
- sm.orth \
- sma.orth \
- smj.orth \
- smn.orth \
- sms.orth \
- so.orth \
- sq.orth \
- sr.orth \
- ss.orth \
- st.orth \
- sv.orth \
- sw.orth \
- syr.orth \
- ta.orth \
- te.orth \
- tg.orth \
- th.orth \
- ti_er.orth \
- ti_et.orth \
- tig.orth \
- tk.orth \
- tl.orth \
- tn.orth \
- to.orth \
- tr.orth \
- ts.orth \
- tt.orth \
- tw.orth \
- tyv.orth \
- ug.orth \
- uk.orth \
- ur.orth \
- uz.orth \
- ve.orth \
- vi.orth \
- vo.orth \
- vot.orth \
- wa.orth \
- wen.orth \
- wo.orth \
- xh.orth \
- yap.orth \
- yi.orth \
- yo.orth \
- zh_cn.orth \
- zh_hk.orth \
- zh_mo.orth \
- zh_sg.orth \
- zh_tw.orth \
- zu.orth \
- ak.orth \
- an.orth \
- ber_dz.orth \
- ber_ma.orth \
- byn.orth \
- crh.orth \
- csb.orth \
- dv.orth \
- ee.orth \
- fat.orth \
- fil.orth \
- hne.orth \
- hsb.orth \
- ht.orth \
- hz.orth \
- ii.orth \
- jv.orth \
- kab.orth \
- kj.orth \
- kr.orth \
- ku_iq.orth \
- ku_tr.orth \
- kwm.orth \
- lg.orth \
- li.orth \
- mai.orth \
- mn_mn.orth \
- ms.orth \
- na.orth \
- ng.orth \
- nv.orth \
- ota.orth \
- pa_pk.orth \
- pap_an.orth \
- pap_aw.orth \
- qu.orth \
- rn.orth \
- rw.orth \
- sc.orth \
- sd.orth \
- sg.orth \
- sid.orth \
- sn.orth \
- su.orth \
- ty.orth \
- wal.orth \
- za.orth \
- lah.orth
-# ^-------------- Add new orth files here
+#
+# $Id $
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
+
+TMPL=fclang.tmpl.h
+STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h
+TARG=fclang.h
+
+noinst_PROGRAMS=fc-lang
+
+noinst_MANS=fc-lang.man
+
+EXTRA_DIST = $(TARG) $(TMPL) $(ORTH)
+
+if CROSS_COMPILING
+$(TARG):$(ORTH) fc-lang.c $(STMPL)
+ @echo Warning: cannot rebuild $(TARG) when cross-compiling
+else
+$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL)
+ $(AM_V_GEN) $(RM) $(TARG); \
+ ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \
+ mv $(TARG).tmp $(TARG)
+endif
+
+ALIAS_FILES = fcalias.h fcaliastail.h
+
+BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
+
+$(ALIAS_FILES):
+ touch $(ALIAS_FILES)
+
+CLEANFILES = $(ALIAS_FILES)
+
+MAINTAINERCLEANFILES = $(TARG)
+
+# NOTE:
+#
+# The order of the orth files here is extremely important (part of the cache
+# format) and should not be modified. New orth files should be added at the
+# end. No files should be removed either.
+#
+ORTH = \
+ aa.orth \
+ ab.orth \
+ af.orth \
+ am.orth \
+ ar.orth \
+ as.orth \
+ ast.orth \
+ av.orth \
+ ay.orth \
+ az_az.orth \
+ az_ir.orth \
+ ba.orth \
+ bm.orth \
+ be.orth \
+ bg.orth \
+ bh.orth \
+ bho.orth \
+ bi.orth \
+ bin.orth \
+ bn.orth \
+ bo.orth \
+ br.orth \
+ bs.orth \
+ bua.orth \
+ ca.orth \
+ ce.orth \
+ ch.orth \
+ chm.orth \
+ chr.orth \
+ co.orth \
+ cs.orth \
+ cu.orth \
+ cv.orth \
+ cy.orth \
+ da.orth \
+ de.orth \
+ dz.orth \
+ el.orth \
+ en.orth \
+ eo.orth \
+ es.orth \
+ et.orth \
+ eu.orth \
+ fa.orth \
+ fi.orth \
+ fj.orth \
+ fo.orth \
+ fr.orth \
+ ff.orth \
+ fur.orth \
+ fy.orth \
+ ga.orth \
+ gd.orth \
+ gez.orth \
+ gl.orth \
+ gn.orth \
+ gu.orth \
+ gv.orth \
+ ha.orth \
+ haw.orth \
+ he.orth \
+ hi.orth \
+ ho.orth \
+ hr.orth \
+ hu.orth \
+ hy.orth \
+ ia.orth \
+ ig.orth \
+ id.orth \
+ ie.orth \
+ ik.orth \
+ io.orth \
+ is.orth \
+ it.orth \
+ iu.orth \
+ ja.orth \
+ ka.orth \
+ kaa.orth \
+ ki.orth \
+ kk.orth \
+ kl.orth \
+ km.orth \
+ kn.orth \
+ ko.orth \
+ kok.orth \
+ ks.orth \
+ ku_am.orth \
+ ku_ir.orth \
+ kum.orth \
+ kv.orth \
+ kw.orth \
+ ky.orth \
+ la.orth \
+ lb.orth \
+ lez.orth \
+ ln.orth \
+ lo.orth \
+ lt.orth \
+ lv.orth \
+ mg.orth \
+ mh.orth \
+ mi.orth \
+ mk.orth \
+ ml.orth \
+ mn_cn.orth \
+ mo.orth \
+ mr.orth \
+ mt.orth \
+ my.orth \
+ nb.orth \
+ nds.orth \
+ ne.orth \
+ nl.orth \
+ nn.orth \
+ no.orth \
+ nr.orth \
+ nso.orth \
+ ny.orth \
+ oc.orth \
+ om.orth \
+ or.orth \
+ os.orth \
+ pa.orth \
+ pl.orth \
+ ps_af.orth \
+ ps_pk.orth \
+ pt.orth \
+ rm.orth \
+ ro.orth \
+ ru.orth \
+ sa.orth \
+ sah.orth \
+ sco.orth \
+ se.orth \
+ sel.orth \
+ sh.orth \
+ shs.orth \
+ si.orth \
+ sk.orth \
+ sl.orth \
+ sm.orth \
+ sma.orth \
+ smj.orth \
+ smn.orth \
+ sms.orth \
+ so.orth \
+ sq.orth \
+ sr.orth \
+ ss.orth \
+ st.orth \
+ sv.orth \
+ sw.orth \
+ syr.orth \
+ ta.orth \
+ te.orth \
+ tg.orth \
+ th.orth \
+ ti_er.orth \
+ ti_et.orth \
+ tig.orth \
+ tk.orth \
+ tl.orth \
+ tn.orth \
+ to.orth \
+ tr.orth \
+ ts.orth \
+ tt.orth \
+ tw.orth \
+ tyv.orth \
+ ug.orth \
+ uk.orth \
+ ur.orth \
+ uz.orth \
+ ve.orth \
+ vi.orth \
+ vo.orth \
+ vot.orth \
+ wa.orth \
+ wen.orth \
+ wo.orth \
+ xh.orth \
+ yap.orth \
+ yi.orth \
+ yo.orth \
+ zh_cn.orth \
+ zh_hk.orth \
+ zh_mo.orth \
+ zh_sg.orth \
+ zh_tw.orth \
+ zu.orth \
+ ak.orth \
+ an.orth \
+ ber_dz.orth \
+ ber_ma.orth \
+ byn.orth \
+ crh.orth \
+ csb.orth \
+ dv.orth \
+ ee.orth \
+ fat.orth \
+ fil.orth \
+ hne.orth \
+ hsb.orth \
+ ht.orth \
+ hz.orth \
+ ii.orth \
+ jv.orth \
+ kab.orth \
+ kj.orth \
+ kr.orth \
+ ku_iq.orth \
+ ku_tr.orth \
+ kwm.orth \
+ lg.orth \
+ li.orth \
+ mai.orth \
+ mn_mn.orth \
+ ms.orth \
+ na.orth \
+ ng.orth \
+ nv.orth \
+ ota.orth \
+ pa_pk.orth \
+ pap_an.orth \
+ pap_aw.orth \
+ qu.orth \
+ rn.orth \
+ rw.orth \
+ sc.orth \
+ sd.orth \
+ sg.orth \
+ sid.orth \
+ sn.orth \
+ su.orth \
+ ty.orth \
+ wal.orth \
+ za.orth \
+ lah.orth
+# ^-------------- Add new orth files here
diff --git a/fontconfig/fc-lang/aa.orth b/fontconfig/fc-lang/aa.orth
index 58658ce84..d4e59d326 100644
--- a/fontconfig/fc-lang/aa.orth
+++ b/fontconfig/fc-lang/aa.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/aa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Afar (AA)
-#
-# Taken from http://www.arhotaba.com/waldegram.htm
-# and http://www.arhotaba.com/alphabet.htm
-#
-0041-005a # afar doesn't use J, P, V or Z
-0061-007a # afar doesn't use j, p, v or z
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+#
+# fontconfig/fc-lang/aa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Afar (AA)
+#
+# Taken from http://www.arhotaba.com/waldegram.htm
+# and http://www.arhotaba.com/alphabet.htm
+#
+0041-005a # afar doesn't use J, P, V or Z
+0061-007a # afar doesn't use j, p, v or z
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
diff --git a/fontconfig/fc-lang/ab.orth b/fontconfig/fc-lang/ab.orth
index 7049ac1e8..ce2d1608b 100644
--- a/fontconfig/fc-lang/ab.orth
+++ b/fontconfig/fc-lang/ab.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/ab.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Abkhazia (AB)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab # double angle quotes
-#00bb # double angle quotes
-0401
-040f
-0410-044f
-0451
-045f
-049e-049f
-04a6-04a9
-04ac-04ad
-04b2-04b7
-04bc-04bf
-04d8
-04d9
-04e0-04e1
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/ab.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Abkhazia (AB)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab # double angle quotes
+#00bb # double angle quotes
+0401
+040f
+0410-044f
+0451
+045f
+049e-049f
+04a6-04a9
+04ac-04ad
+04b2-04b7
+04bc-04bf
+04d8
+04d9
+04e0-04e1
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/af.orth b/fontconfig/fc-lang/af.orth
index 4c34460e9..df6bbc426 100644
--- a/fontconfig/fc-lang/af.orth
+++ b/fontconfig/fc-lang/af.orth
@@ -1,46 +1,46 @@
-#
-# fontconfig/fc-lang/af.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Afrikaans (AF)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c8
-00e8
-00c9
-00e9
-00ca
-00ea
-00cb
-00eb
-00ce
-00ee
-00cf
-00ef
-00d4
-00f4
-00db
-00fb
-0149
+#
+# fontconfig/fc-lang/af.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Afrikaans (AF)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c8
+00e8
+00c9
+00e9
+00ca
+00ea
+00cb
+00eb
+00ce
+00ee
+00cf
+00ef
+00d4
+00f4
+00db
+00fb
+0149
diff --git a/fontconfig/fc-lang/am.orth b/fontconfig/fc-lang/am.orth
index 2f00a9616..447aafc38 100644
--- a/fontconfig/fc-lang/am.orth
+++ b/fontconfig/fc-lang/am.orth
@@ -1,36 +1,36 @@
-#
-# fontconfig/fc-lang/am.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Amharic (AM)
-#
-# The same as Ethiopic
-#
-include gez.orth
-1238-123f # xe-xWa
-1268-126e # ve-vo
-1278-127f # ce-cWa
-1298-129f # Ne-NWa
-12a8 # ea
-12e0-12e8 # Ze-ZWa
-1300-1307 # je-jWa
-1328-132f # Ce-CWa
+#
+# fontconfig/fc-lang/am.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Amharic (AM)
+#
+# The same as Ethiopic
+#
+include gez.orth
+1238-123f # xe-xWa
+1268-126e # ve-vo
+1278-127f # ce-cWa
+1298-129f # Ne-NWa
+12a8 # ea
+12e0-12e8 # Ze-ZWa
+1300-1307 # je-jWa
+1328-132f # Ce-CWa
diff --git a/fontconfig/fc-lang/ar.orth b/fontconfig/fc-lang/ar.orth
index 39fcfa05d..cc2da0a16 100644
--- a/fontconfig/fc-lang/ar.orth
+++ b/fontconfig/fc-lang/ar.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/ar.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Arabic (ar)
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-063a
-0641-064a
-# Presentations forms:
-# fe80-fefc
+#
+# fontconfig/fc-lang/ar.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Arabic (ar)
+#
+# We are assuming that:
+# * Most fonts that claim to support an Arabic letter actually do so;
+# * Most modern text rendering software use OpenType tables, instead of
+# directly using presentation forms.
+# * Some good Arabic fonts do not support codepoints for Arabic presentation
+# forms.
+# Thus, we are switching to general forms of Arabic letters.
+#
+# General forms:
+0621-063a
+0641-064a
+# Presentations forms:
+# fe80-fefc
diff --git a/fontconfig/fc-lang/ast.orth b/fontconfig/fc-lang/ast.orth
index 20b81f418..9a9cf0921 100644
--- a/fontconfig/fc-lang/ast.orth
+++ b/fontconfig/fc-lang/ast.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/ast.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Orthography from http://www.evertype.com/alphabets/asturian.pdf
-#
-# Asturian/Bable/Leonese/Asturleonese (ast)
-#
-0041-005a
-0061-007a
-00c1
-00c9
-00cd
-00d1
-00d3
-00da
-00dc
-00e1
-00e9
-00ed
-00f1
-00f3
-00fa
-00fc
+#
+# fontconfig/fc-lang/ast.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Orthography from http://www.evertype.com/alphabets/asturian.pdf
+#
+# Asturian/Bable/Leonese/Asturleonese (ast)
+#
+0041-005a
+0061-007a
+00c1
+00c9
+00cd
+00d1
+00d3
+00da
+00dc
+00e1
+00e9
+00ed
+00f1
+00f3
+00fa
+00fc
diff --git a/fontconfig/fc-lang/av.orth b/fontconfig/fc-lang/av.orth
index 21e4c22de..9fc1c9a6d 100644
--- a/fontconfig/fc-lang/av.orth
+++ b/fontconfig/fc-lang/av.orth
@@ -1,97 +1,97 @@
-#
-# fontconfig/fc-lang/av.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Avaric (av)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/av.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Avaric (av)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/ay.orth b/fontconfig/fc-lang/ay.orth
index 8055e9336..d7338fa91 100644
--- a/fontconfig/fc-lang/ay.orth
+++ b/fontconfig/fc-lang/ay.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/ay.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Aymara (KW)
-#
-# Orthography from http://www.aymara.org/arusa/qillqa_eng.html
-#
-0041-005a
-0061-007a
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#
+# fontconfig/fc-lang/ay.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Aymara (KW)
+#
+# Orthography from http://www.aymara.org/arusa/qillqa_eng.html
+#
+0041-005a
+0061-007a
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
diff --git a/fontconfig/fc-lang/az_ir.orth b/fontconfig/fc-lang/az_ir.orth
index 6899791b6..dfa9681e5 100644
--- a/fontconfig/fc-lang/az_ir.orth
+++ b/fontconfig/fc-lang/az_ir.orth
@@ -1,32 +1,32 @@
-#
-# fontconfig/fc-lang/az_ir.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Azerbaijani in Iran (AZ-IR)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE
-# (only used over FARSI YEH).
-#
-include fa.orth
-0654 # ARABIC HAMZA ABOVE
+#
+# fontconfig/fc-lang/az_ir.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Azerbaijani in Iran (AZ-IR)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE
+# (only used over FARSI YEH).
+#
+include fa.orth
+0654 # ARABIC HAMZA ABOVE
diff --git a/fontconfig/fc-lang/ba.orth b/fontconfig/fc-lang/ba.orth
index 169083564..513c1c775 100644
--- a/fontconfig/fc-lang/ba.orth
+++ b/fontconfig/fc-lang/ba.orth
@@ -1,56 +1,56 @@
-#
-# fontconfig/fc-lang/ba.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bashkir (BA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00AA # FEMININE ORDINAL INDICATOR
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com
-#0451 # CYRILLIC SMALL LETTER IO in evertype.com
-
-0410-044f # CYRILLIC
-0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
-0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER
-04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA
-04A1 # CYRILLIC SMALL LETTER BASHKIR KA
-04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER
-04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER
-04AE # CYRILLIC CAPITAL LETTER STRAIGHT U
-04AF # CYRILLIC SMALL LETTER STRAIGHT U
-04BA # CYRILLIC CAPITAL LETTER SHHA
-04BB # CYRILLIC SMALL LETTER SHHA
-04D8 # CYRILLIC CAPITAL LETTER SCHWA
-04D9 # CYRILLIC SMALL LETTER SCHWA
-04E8 # CYRILLIC CAPITAL LETTER BARRED O
-04E9 # CYRILLIC SMALL LETTER BARRED O
-#2018-2019 # single quotes
-#201c-201d # double quotes
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/ba.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bashkir (BA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00AA # FEMININE ORDINAL INDICATOR
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com
+#0451 # CYRILLIC SMALL LETTER IO in evertype.com
+
+0410-044f # CYRILLIC
+0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
+0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1 # CYRILLIC SMALL LETTER BASHKIR KA
+04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AE # CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF # CYRILLIC SMALL LETTER STRAIGHT U
+04BA # CYRILLIC CAPITAL LETTER SHHA
+04BB # CYRILLIC SMALL LETTER SHHA
+04D8 # CYRILLIC CAPITAL LETTER SCHWA
+04D9 # CYRILLIC SMALL LETTER SCHWA
+04E8 # CYRILLIC CAPITAL LETTER BARRED O
+04E9 # CYRILLIC SMALL LETTER BARRED O
+#2018-2019 # single quotes
+#201c-201d # double quotes
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/be.orth b/fontconfig/fc-lang/be.orth
index ebcd19587..0d93d5dc7 100644
--- a/fontconfig/fc-lang/be.orth
+++ b/fontconfig/fc-lang/be.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/be.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Byelorussian (BE)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#02BC # MODIFIER LETTER APOSTROPHE
-#0401 # CYRILLIC CAPITAL LETTER IO evertype.com
-0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
-0410-044f
-#0451 # CYRILLIC SMALL LETTER IO evertype.com
-0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian)
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/be.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Byelorussian (BE)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#02BC # MODIFIER LETTER APOSTROPHE
+#0401 # CYRILLIC CAPITAL LETTER IO evertype.com
+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+0410-044f
+#0451 # CYRILLIC SMALL LETTER IO evertype.com
+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/bg.orth b/fontconfig/fc-lang/bg.orth
index 7c84790c8..bbedc44a2 100644
--- a/fontconfig/fc-lang/bg.orth
+++ b/fontconfig/fc-lang/bg.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/bg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bulgarian (BG)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com
-#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com
-0410-042a
-042c
-042e-042f
-0430-044a
-044c
-044e-044f
-#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com
-#045d # CYRILLIC SMALL I WITH GRAVE evertype.com
-#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com
-#0463 # CYRILLIC SMALL LETTER YAT evertype.com
-#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com
-#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com
+#
+# fontconfig/fc-lang/bg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bulgarian (BG)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com
+#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com
+0410-042a
+042c
+042e-042f
+0430-044a
+044c
+044e-044f
+#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com
+#045d # CYRILLIC SMALL I WITH GRAVE evertype.com
+#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com
+#0463 # CYRILLIC SMALL LETTER YAT evertype.com
+#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com
+#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com
diff --git a/fontconfig/fc-lang/bh.orth b/fontconfig/fc-lang/bh.orth
index 4dc39ef6c..c39a7a676 100644
--- a/fontconfig/fc-lang/bh.orth
+++ b/fontconfig/fc-lang/bh.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/bh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bihari (Devanagari script) (BH)
-include hi.orth
+#
+# fontconfig/fc-lang/bh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bihari (Devanagari script) (BH)
+include hi.orth
diff --git a/fontconfig/fc-lang/bho.orth b/fontconfig/fc-lang/bho.orth
index d5998b4d9..e72746bd7 100644
--- a/fontconfig/fc-lang/bho.orth
+++ b/fontconfig/fc-lang/bho.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/bho.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bhojpuri (Devanagari script) (BHO)
-include hi.orth
+#
+# fontconfig/fc-lang/bho.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bhojpuri (Devanagari script) (BHO)
+include hi.orth
diff --git a/fontconfig/fc-lang/bi.orth b/fontconfig/fc-lang/bi.orth
index 451783e7a..c488c0c82 100644
--- a/fontconfig/fc-lang/bi.orth
+++ b/fontconfig/fc-lang/bi.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/bi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bislama (BI)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c9
-00e9
-00cf
-00ef
-#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code)
-#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code)
-#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code)
-#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code)
-00dc
-00fc
+#
+# fontconfig/fc-lang/bi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bislama (BI)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c9
+00e9
+00cf
+00ef
+#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code)
+#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code)
+#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code)
+#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code)
+00dc
+00fc
diff --git a/fontconfig/fc-lang/bin.orth b/fontconfig/fc-lang/bin.orth
index 1ff2c4b14..e0f8f7ad3 100644
--- a/fontconfig/fc-lang/bin.orth
+++ b/fontconfig/fc-lang/bin.orth
@@ -1,55 +1,55 @@
-#
-# fontconfig/fc-lang/bin.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Edo or Bini (BIN)
-#
-# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CC # LATIN CAPITAL LETTER I WITH GRAVE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00EC # LATIN SMALL LETTER I WITH GRAVE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F2 # LATIN SMALL LETTER O WITH GRAVE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
-1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
-1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECD # LATIN SMALL LETTER O WITH DOT BELOW
-0300 # COMBINING GRAVE ACCENT (Varia)
-0301 # COMBINING ACUTE ACCENT (Oxia, Tonos)
+#
+# fontconfig/fc-lang/bin.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Edo or Bini (BIN)
+#
+# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CC # LATIN CAPITAL LETTER I WITH GRAVE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00EC # LATIN SMALL LETTER I WITH GRAVE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F2 # LATIN SMALL LETTER O WITH GRAVE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
+1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD # LATIN SMALL LETTER O WITH DOT BELOW
+0300 # COMBINING GRAVE ACCENT (Varia)
+0301 # COMBINING ACUTE ACCENT (Oxia, Tonos)
diff --git a/fontconfig/fc-lang/bm.orth b/fontconfig/fc-lang/bm.orth
index d87a5bf8f..f19d9e8a6 100644
--- a/fontconfig/fc-lang/bm.orth
+++ b/fontconfig/fc-lang/bm.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/bm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bambara (bm)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0190
-025b
-014a
-014b
-019d
-0272
-0186
-0254
+#
+# fontconfig/fc-lang/bm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bambara (bm)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0190
+025b
+014a
+014b
+019d
+0272
+0186
+0254
diff --git a/fontconfig/fc-lang/bo.orth b/fontconfig/fc-lang/bo.orth
index f09d18e74..00cb52dc5 100644
--- a/fontconfig/fc-lang/bo.orth
+++ b/fontconfig/fc-lang/bo.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/bo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tibetan (BO)
-#
-# Taken from the Unicode coverage of this language
-#
-0f40-0f47
-0f49-0f69
-0f71-0f76
-0f78
-0f7a-0f7d
-0f80-0f81
-0f90-0f97
-0f99-0fb9
-# Fixed-form subjoined consonants
-# These characters are used only for transliteration and transcription.
-#0fba-0fbc
-
+#
+# fontconfig/fc-lang/bo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tibetan (BO)
+#
+# Taken from the Unicode coverage of this language
+#
+0f40-0f47
+0f49-0f69
+0f71-0f76
+0f78
+0f7a-0f7d
+0f80-0f81
+0f90-0f97
+0f99-0fb9
+# Fixed-form subjoined consonants
+# These characters are used only for transliteration and transcription.
+#0fba-0fbc
+
diff --git a/fontconfig/fc-lang/br.orth b/fontconfig/fc-lang/br.orth
index fb90f0ff7..f38d7f579 100644
--- a/fontconfig/fc-lang/br.orth
+++ b/fontconfig/fc-lang/br.orth
@@ -1,47 +1,47 @@
-#
-# fontconfig/fc-lang/br.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Breton (BR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#0027
-0041-005a
-0061-007a
-#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#2019-201a # single quote and comma
+#
+# fontconfig/fc-lang/br.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Breton (BR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#0027
+0041-005a
+0061-007a
+#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#2019-201a # single quote and comma
diff --git a/fontconfig/fc-lang/bs.orth b/fontconfig/fc-lang/bs.orth
index 5df47069a..13dc27e23 100644
--- a/fontconfig/fc-lang/bs.orth
+++ b/fontconfig/fc-lang/bs.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/bs.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bosnian (BS)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0106
-0107
-010c
-010d
-0110
-0111
-0160
-0161
-017d
-017e
+#
+# fontconfig/fc-lang/bs.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bosnian (BS)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0106
+0107
+010c
+010d
+0110
+0111
+0160
+0161
+017d
+017e
diff --git a/fontconfig/fc-lang/bua.orth b/fontconfig/fc-lang/bua.orth
index cb6729964..14df6912a 100644
--- a/fontconfig/fc-lang/bua.orth
+++ b/fontconfig/fc-lang/bua.orth
@@ -1,102 +1,102 @@
-#
-# fontconfig/fc-lang/bua.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Buriat (Buryat) (BUA)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-04ae
-04af
-04ba
-04bb
+#
+# fontconfig/fc-lang/bua.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Buriat (Buryat) (BUA)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+04ae
+04af
+04ba
+04bb
diff --git a/fontconfig/fc-lang/ca.orth b/fontconfig/fc-lang/ca.orth
index 6ace8fa02..7cb4d67f1 100644
--- a/fontconfig/fc-lang/ca.orth
+++ b/fontconfig/fc-lang/ca.orth
@@ -1,58 +1,58 @@
-#
-# fontconfig/fc-lang/ca.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Catalan (CA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00B7 # MIDDLE DOT
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee
-00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E7 # LATIN SMALL LETTER C WITH CEDILLA
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee
-00F2 # LATIN SMALL LETTER O WITH GRAVE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
-#2018-2019 # single quotes
-#201c-201d # double quotes
+#
+# fontconfig/fc-lang/ca.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Catalan (CA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00B7 # MIDDLE DOT
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee
+00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E7 # LATIN SMALL LETTER C WITH CEDILLA
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee
+00F2 # LATIN SMALL LETTER O WITH GRAVE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/fontconfig/fc-lang/ce.orth b/fontconfig/fc-lang/ce.orth
index 4db7fbdab..502b1df44 100644
--- a/fontconfig/fc-lang/ce.orth
+++ b/fontconfig/fc-lang/ce.orth
@@ -1,97 +1,97 @@
-#
-# fontconfig/fc-lang/ce.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Chechen (CE)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/ce.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Chechen (CE)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/ch.orth b/fontconfig/fc-lang/ch.orth
index 795c821a1..45385b0c6 100644
--- a/fontconfig/fc-lang/ch.orth
+++ b/fontconfig/fc-lang/ch.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/ch.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chamorro (CH)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00e2
-00d1
-00f1
-00dc
-00fc
+#
+# fontconfig/fc-lang/ch.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chamorro (CH)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00e2
+00d1
+00f1
+00dc
+00fc
diff --git a/fontconfig/fc-lang/chm.orth b/fontconfig/fc-lang/chm.orth
index 0f4b13cc6..f400cd35c 100644
--- a/fontconfig/fc-lang/chm.orth
+++ b/fontconfig/fc-lang/chm.orth
@@ -1,109 +1,109 @@
-#
-# fontconfig/fc-lang/chm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Mari (Lower Cheremis / Upper Cheremis) (CHM)
-#
-# I've merged both of these languages together so that a font
-# for 'chm' will cover both orthographies
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-04a4
-04a5
-04d2
-04d3
-04e6
-04e7
-04f0
-04f1
-04f8
-04f9
+#
+# fontconfig/fc-lang/chm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Mari (Lower Cheremis / Upper Cheremis) (CHM)
+#
+# I've merged both of these languages together so that a font
+# for 'chm' will cover both orthographies
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+04a4
+04a5
+04d2
+04d3
+04e6
+04e7
+04f0
+04f1
+04f8
+04f9
diff --git a/fontconfig/fc-lang/chr.orth b/fontconfig/fc-lang/chr.orth
index f41951164..0d87148f6 100644
--- a/fontconfig/fc-lang/chr.orth
+++ b/fontconfig/fc-lang/chr.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/chr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Cherokee (chr)
-13a0-13f4
+#
+# fontconfig/fc-lang/chr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Cherokee (chr)
+13a0-13f4
diff --git a/fontconfig/fc-lang/co.orth b/fontconfig/fc-lang/co.orth
index ccfc7d4c9..91915bd5c 100644
--- a/fontconfig/fc-lang/co.orth
+++ b/fontconfig/fc-lang/co.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/co.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Corsican (CO)
-include fr.orth
+#
+# fontconfig/fc-lang/co.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Corsican (CO)
+include fr.orth
diff --git a/fontconfig/fc-lang/cs.orth b/fontconfig/fc-lang/cs.orth
index aa7e7aa5d..422d4b6b8 100644
--- a/fontconfig/fc-lang/cs.orth
+++ b/fontconfig/fc-lang/cs.orth
@@ -1,67 +1,67 @@
-#
-# fontconfig/fc-lang/cs.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Czech (CS)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-010C # LATIN CAPITAL LETTER C WITH CARON
-010D # LATIN SMALL LETTER C WITH CARON
-010E # LATIN CAPITAL LETTER D WITH CARON
-010F # LATIN SMALL LETTER D WITH CARON
-011A # LATIN CAPITAL LETTER E WITH CARON
-011B # LATIN SMALL LETTER E WITH CARON
-0147 # LATIN CAPITAL LETTER N WITH CARON
-0148 # LATIN SMALL LETTER N WITH CARON
-0158 # LATIN CAPITAL LETTER R WITH CARON
-0159 # LATIN SMALL LETTER R WITH CARON
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-0164 # LATIN CAPITAL LETTER T WITH CARON
-0165 # LATIN SMALL LETTER T WITH CARON
-016E # LATIN CAPITAL LETTER U WITH RING ABOVE
-016F # LATIN SMALL LETTER U WITH RING ABOVE
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
+#
+# fontconfig/fc-lang/cs.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Czech (CS)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+010C # LATIN CAPITAL LETTER C WITH CARON
+010D # LATIN SMALL LETTER C WITH CARON
+010E # LATIN CAPITAL LETTER D WITH CARON
+010F # LATIN SMALL LETTER D WITH CARON
+011A # LATIN CAPITAL LETTER E WITH CARON
+011B # LATIN SMALL LETTER E WITH CARON
+0147 # LATIN CAPITAL LETTER N WITH CARON
+0148 # LATIN SMALL LETTER N WITH CARON
+0158 # LATIN CAPITAL LETTER R WITH CARON
+0159 # LATIN SMALL LETTER R WITH CARON
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+0164 # LATIN CAPITAL LETTER T WITH CARON
+0165 # LATIN SMALL LETTER T WITH CARON
+016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+016F # LATIN SMALL LETTER U WITH RING ABOVE
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
diff --git a/fontconfig/fc-lang/cu.orth b/fontconfig/fc-lang/cu.orth
index 043ad74fb..6e7e7c290 100644
--- a/fontconfig/fc-lang/cu.orth
+++ b/fontconfig/fc-lang/cu.orth
@@ -1,42 +1,42 @@
-#
-# fontconfig/fc-lang/cu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Old Church Slavonic (CU)
-#
-# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf
-#
-0401-0402
-0405-0406
-0408
-040b
-040d
-040f-0418
-041a-042c
-042e-044c
-044e-0450
-0452
-0455-456
-0458
-045b
-045d
-045f-0479
+#
+# fontconfig/fc-lang/cu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Old Church Slavonic (CU)
+#
+# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf
+#
+0401-0402
+0405-0406
+0408
+040b
+040d
+040f-0418
+041a-042c
+042e-044c
+044e-0450
+0452
+0455-456
+0458
+045b
+045d
+045f-0479
diff --git a/fontconfig/fc-lang/cv.orth b/fontconfig/fc-lang/cv.orth
index 3fe1b02f7..44ebe9282 100644
--- a/fontconfig/fc-lang/cv.orth
+++ b/fontconfig/fc-lang/cv.orth
@@ -1,109 +1,109 @@
-#
-# fontconfig/fc-lang/cv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Chuvash (CV)
-#
-#
-# I'm guessing the c cedilla is really es with descender
-#
-#00c7 # C cedilla
-#00e7 # c cedilla
-04aa # capital es with descender
-04ab # small es with descender
-0102
-0103
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-04d6
-04d7
-04f2
-04f3
+#
+# fontconfig/fc-lang/cv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Chuvash (CV)
+#
+#
+# I'm guessing the c cedilla is really es with descender
+#
+#00c7 # C cedilla
+#00e7 # c cedilla
+04aa # capital es with descender
+04ab # small es with descender
+0102
+0103
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+04d6
+04d7
+04f2
+04f3
diff --git a/fontconfig/fc-lang/cy.orth b/fontconfig/fc-lang/cy.orth
index db790c9ad..617df3d34 100644
--- a/fontconfig/fc-lang/cy.orth
+++ b/fontconfig/fc-lang/cy.orth
@@ -1,63 +1,63 @@
-#
-# fontconfig/fc-lang/cy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Welsh (CY)
-#
-# Coverage given by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
-# and separately by Jessica Perry Hekman <jphekman@arborius.net>
-# with help from Mark Kille and Jerry Hunter.
-#
-0041-005a
-0061-007a
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-#
-# Non-Latin-1 characters needed for Welsh:
-#
-0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
-0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-#
-# And stricktly speaking for dictionary authors also:
-#
-1E80 # LATIN CAPITAL LETTER W WITH GRAVE
-1E81 # LATIN SMALL LETTER W WITH GRAVE
-1E82 # LATIN CAPITAL LETTER W WITH ACUTE
-1E83 # LATIN SMALL LETTER W WITH ACUTE
-1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
-1E85 # LATIN SMALL LETTER W WITH DIAERESIS
-1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
-1EF3 # LATIN SMALL LETTER Y WITH GRAVE
+#
+# fontconfig/fc-lang/cy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Welsh (CY)
+#
+# Coverage given by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
+# and separately by Jessica Perry Hekman <jphekman@arborius.net>
+# with help from Mark Kille and Jerry Hunter.
+#
+0041-005a
+0061-007a
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+#
+# Non-Latin-1 characters needed for Welsh:
+#
+0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+#
+# And stricktly speaking for dictionary authors also:
+#
+1E80 # LATIN CAPITAL LETTER W WITH GRAVE
+1E81 # LATIN SMALL LETTER W WITH GRAVE
+1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+1E83 # LATIN SMALL LETTER W WITH ACUTE
+1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85 # LATIN SMALL LETTER W WITH DIAERESIS
+1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3 # LATIN SMALL LETTER Y WITH GRAVE
diff --git a/fontconfig/fc-lang/da.orth b/fontconfig/fc-lang/da.orth
index b1f646714..3e74d81bb 100644
--- a/fontconfig/fc-lang/da.orth
+++ b/fontconfig/fc-lang/da.orth
@@ -1,89 +1,89 @@
-#
-# fontconfig/fc-lang/da.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Danish (DA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-# Note:
-# The sources cited at www.evertype.com appear to have unified
-# all of the nordic languages making the orthography significantly
-# larger than needed for Danish. The orthography used here is
-# just that from eki.ee with the evertype.com additions commented out
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-#00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-#00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00D8 # LATIN CAPITAL LETTER O WITH STROKE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-#00DE # LATIN CAPITAL LETTER THORN (Icelandic)
-#00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-00E6 # LATIN SMALL LETTER AE (ash) *
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA
-#00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-#00EB # LATIN SMALL LETTER E WITH DIAERESIS
-00ED # LATIN SMALL LETTER I WITH ACUTE
-#00F0 # LATIN SMALL LETTER ETH (Icelandic)
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00F8 # LATIN SMALL LETTER O WITH STROKE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-#00FE # LATIN SMALL LETTER THORN (Icelandic)
-#0152 # LATIN CAPITAL LIGATURE OE
-#0153 # LATIN SMALL LIGATURE OE
-#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
-#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) *
-#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/da.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Danish (DA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+# Note:
+# The sources cited at www.evertype.com appear to have unified
+# all of the nordic languages making the orthography significantly
+# larger than needed for Danish. The orthography used here is
+# just that from eki.ee with the evertype.com additions commented out
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+#00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+#00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8 # LATIN CAPITAL LETTER O WITH STROKE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+#00DE # LATIN CAPITAL LETTER THORN (Icelandic)
+#00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+00E6 # LATIN SMALL LETTER AE (ash) *
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA
+#00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+#00EB # LATIN SMALL LETTER E WITH DIAERESIS
+00ED # LATIN SMALL LETTER I WITH ACUTE
+#00F0 # LATIN SMALL LETTER ETH (Icelandic)
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00F8 # LATIN SMALL LETTER O WITH STROKE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+#00FE # LATIN SMALL LETTER THORN (Icelandic)
+#0152 # LATIN CAPITAL LIGATURE OE
+#0153 # LATIN SMALL LIGATURE OE
+#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
+#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) *
+#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/de.orth b/fontconfig/fc-lang/de.orth
index 15bf17855..69dc73066 100644
--- a/fontconfig/fc-lang/de.orth
+++ b/fontconfig/fc-lang/de.orth
@@ -1,49 +1,49 @@
-#
-# fontconfig/fc-lang/de.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# German (DE)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DF # LATIN SMALL LETTER SHARP S (German)
-#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#2018 # single quotes
-#201a # single quotes
-#201c # double quotes
-#201e # double quotes
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/de.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# German (DE)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DF # LATIN SMALL LETTER SHARP S (German)
+#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#2018 # single quotes
+#201a # single quotes
+#201c # double quotes
+#201e # double quotes
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/dz.orth b/fontconfig/fc-lang/dz.orth
index c7843af22..58dc1a202 100644
--- a/fontconfig/fc-lang/dz.orth
+++ b/fontconfig/fc-lang/dz.orth
@@ -1,28 +1,28 @@
-#
-# fontconfig/fc-lang/dz.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dzongkha (DZ)
-#
-# Uses Tibetan script
-#
-include bo.orth
+#
+# fontconfig/fc-lang/dz.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dzongkha (DZ)
+#
+# Uses Tibetan script
+#
+include bo.orth
diff --git a/fontconfig/fc-lang/el.orth b/fontconfig/fc-lang/el.orth
index 0b9782ea6..3c7eb0636 100644
--- a/fontconfig/fc-lang/el.orth
+++ b/fontconfig/fc-lang/el.orth
@@ -1,32 +1,32 @@
-#
-# fontconfig/fc-lang/el.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Greek (EL)
-#
-# From vvas@hal.csd.auth.gr (Vasilis Vasaitis)
-#
-0386
-0388-038a
-038c
-038e-03a1
-03a3-03ce
+#
+# fontconfig/fc-lang/el.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Greek (EL)
+#
+# From vvas@hal.csd.auth.gr (Vasilis Vasaitis)
+#
+0386
+0388-038a
+038c
+038e-03a1
+03a3-03ce
diff --git a/fontconfig/fc-lang/en.orth b/fontconfig/fc-lang/en.orth
index c521e2183..ce4214cd0 100644
--- a/fontconfig/fc-lang/en.orth
+++ b/fontconfig/fc-lang/en.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/en.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# English (EN)
-0041-005a
-0061-007a
-00c0
-00c7-00cb
-00cf
-00d1
-00d4
-00d6
-00e0
-00e7-00eb
-00ef
-00f1
-00f4
-00f6
-#2018-2019 # single quotes
-#201c-201d # double quotes
+#
+# fontconfig/fc-lang/en.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# English (EN)
+0041-005a
+0061-007a
+00c0
+00c7-00cb
+00cf
+00d1
+00d4
+00d6
+00e0
+00e7-00eb
+00ef
+00f1
+00f4
+00f6
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/fontconfig/fc-lang/eo.orth b/fontconfig/fc-lang/eo.orth
index 80501c7bf..e9c247a26 100644
--- a/fontconfig/fc-lang/eo.orth
+++ b/fontconfig/fc-lang/eo.orth
@@ -1,32 +1,32 @@
-#
-# fontconfig/fc-lang/eo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Esperanto (EO)
-0041-005a
-0061-007a
-0108-0109
-011c-011d
-0124-0125
-0134-0135
-015c-015d
-016c-016d
+#
+# fontconfig/fc-lang/eo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Esperanto (EO)
+0041-005a
+0061-007a
+0108-0109
+011c-011d
+0124-0125
+0134-0135
+015c-015d
+016c-016d
diff --git a/fontconfig/fc-lang/es.orth b/fontconfig/fc-lang/es.orth
index 603ef6062..9d43a33d9 100644
--- a/fontconfig/fc-lang/es.orth
+++ b/fontconfig/fc-lang/es.orth
@@ -1,50 +1,50 @@
-#
-# fontconfig/fc-lang/es.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Spanish (ES)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00A1 # INVERTED EXCLAMATION MARK
-#00BF # INVERTED QUESTION MARK
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#
+#
+# fontconfig/fc-lang/es.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Spanish (ES)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00A1 # INVERTED EXCLAMATION MARK
+#00BF # INVERTED QUESTION MARK
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#
diff --git a/fontconfig/fc-lang/et.orth b/fontconfig/fc-lang/et.orth
index db2d2c140..da1108613 100644
--- a/fontconfig/fc-lang/et.orth
+++ b/fontconfig/fc-lang/et.orth
@@ -1,47 +1,47 @@
-#
-# fontconfig/fc-lang/et.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Estonian (ET)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00D5 # LATIN CAPITAL LETTER O WITH TILDE
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00F5 # LATIN SMALL LETTER O WITH TILDE
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
-#2018 # # single quote
-#201a # # single quote
-#201c # # double quote
-#201e # # double quote
+#
+# fontconfig/fc-lang/et.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Estonian (ET)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00D5 # LATIN CAPITAL LETTER O WITH TILDE
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00F5 # LATIN SMALL LETTER O WITH TILDE
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
+#2018 # # single quote
+#201a # # single quote
+#201c # # double quote
+#201e # # double quote
diff --git a/fontconfig/fc-lang/eu.orth b/fontconfig/fc-lang/eu.orth
index 6ff35779d..ad3f5d91a 100644
--- a/fontconfig/fc-lang/eu.orth
+++ b/fontconfig/fc-lang/eu.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/eu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Basque (EU)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# The orthography from evertype.com comes from the Académie de la Langue
-# Basque prior to 1926. eki.ee adds some additional letters, marked here
-# and commented out. I've also commented out some older letters
-# from the evertype.com orthography which are (apparently) no longer
-# in use
-#
-0041-005a
-0061-007a
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee
-00D1 LATIN CAPITAL LETTER N WITH TILDE
-00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee
-00F1 LATIN SMALL LETTER N WITH TILDE
-00FC LATIN SMALL LETTER U WITH DIAERESIS
-#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com
-#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com
+#
+# fontconfig/fc-lang/eu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Basque (EU)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# The orthography from evertype.com comes from the Académie de la Langue
+# Basque prior to 1926. eki.ee adds some additional letters, marked here
+# and commented out. I've also commented out some older letters
+# from the evertype.com orthography which are (apparently) no longer
+# in use
+#
+0041-005a
+0061-007a
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee
+00D1 LATIN CAPITAL LETTER N WITH TILDE
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee
+00F1 LATIN SMALL LETTER N WITH TILDE
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com
+#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com
diff --git a/fontconfig/fc-lang/fa.orth b/fontconfig/fc-lang/fa.orth
index 2d9d7fa59..e404478bb 100644
--- a/fontconfig/fc-lang/fa.orth
+++ b/fontconfig/fc-lang/fa.orth
@@ -1,73 +1,73 @@
-#
-# fontconfig/fc-lang/fa.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Persian (fa)
-#
-# Sources:
-# * ISIRI 6219:2002, "Information Technology — Persian Information
-# Interchange and Display Mechanism, using Unicode"
-# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and
-# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available
-# at http://www.persianacademy.ir/fa/das.aspx
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-0624
-0626-0628
-0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography
-062a-063a
-0641-0642
-0644-0648
-064b # FATHATAN, considered mandatory in the official orthography
-# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare
-# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography
-# 0651 # SHADDA, considered mandatory only for legal texts
-# 0652 # SUKUN, not mandatory in the official orthography
-0654 # HAMZA ABOVE, considered mandatory in the official orthography
-# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used
-# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory
-067e
-0686
-0698
-06a9
-06af
-06cc
-# Presentations forms:
-#fb56-fb59
-#fb7a-fb7d
-#fb8a-fb8b
-#fb8e-fb95
-#fbfc-fbff
-#fe80-fe86
-#fe89-fed8
-#fedd-feee
-##fef5-fef8 # These four happen very rarely
-#fefb-fefc
+#
+# fontconfig/fc-lang/fa.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Persian (fa)
+#
+# Sources:
+# * ISIRI 6219:2002, "Information Technology — Persian Information
+# Interchange and Display Mechanism, using Unicode"
+# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and
+# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available
+# at http://www.persianacademy.ir/fa/das.aspx
+#
+# We are assuming that:
+# * Most fonts that claim to support an Arabic letter actually do so;
+# * Most modern text rendering software use OpenType tables, instead of
+# directly using presentation forms.
+# * Some good Arabic fonts do not support codepoints for Arabic presentation
+# forms.
+# Thus, we are switching to general forms of Arabic letters.
+#
+# General forms:
+0621-0624
+0626-0628
+0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography
+062a-063a
+0641-0642
+0644-0648
+064b # FATHATAN, considered mandatory in the official orthography
+# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare
+# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography
+# 0651 # SHADDA, considered mandatory only for legal texts
+# 0652 # SUKUN, not mandatory in the official orthography
+0654 # HAMZA ABOVE, considered mandatory in the official orthography
+# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used
+# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory
+067e
+0686
+0698
+06a9
+06af
+06cc
+# Presentations forms:
+#fb56-fb59
+#fb7a-fb7d
+#fb8a-fb8b
+#fb8e-fb95
+#fbfc-fbff
+#fe80-fe86
+#fe89-fed8
+#fedd-feee
+##fef5-fef8 # These four happen very rarely
+#fefb-fefc
diff --git a/fontconfig/fc-lang/fc-lang.c b/fontconfig/fc-lang/fc-lang.c
index 21d568d7e..67d0f1d5f 100644
--- a/fontconfig/fc-lang/fc-lang.c
+++ b/fontconfig/fc-lang/fc-lang.c
@@ -1,577 +1,592 @@
-/*
- * fontconfig/fc-lang/fc-lang.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fccharset.c"
-#include "fcstr.c"
-#include "fcserialize.c"
-
-/*
- * fc-lang
- *
- * Read a set of language orthographies and build C declarations for
- * charsets which can then be used to identify which languages are
- * supported by a given font. Note that this uses some utilities
- * from the fontconfig library, so the necessary file is simply
- * included in this compilation. A couple of extra utility
- * functions are also needed in slightly modified form
- */
-
-void
-FcMemAlloc (int kind, int size)
-{
-}
-
-void
-FcMemFree (int kind, int size)
-{
-}
-
-FcPrivate void
-FcCacheObjectReference (void *object)
-{
-}
-
-FcPrivate void
-FcCacheObjectDereference (void *object)
-{
-}
-
-int FcDebugVal;
-
-FcChar8 *
-FcConfigHome (void)
-{
- return (FcChar8 *) getenv ("HOME");
-}
-
-static void
-fatal (const char *file, int lineno, const char *msg)
-{
- if (lineno)
- fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
- else
- fprintf (stderr, "%s: %s\n", file, msg);
- exit (1);
-}
-
-static char *
-get_line (FILE *f, char *line, int *lineno)
-{
- char *hash;
- int end;
- if (!fgets (line, 1024, f))
- return 0;
- ++(*lineno);
- hash = strchr (line, '#');
- if (hash)
- *hash = '\0';
-
- end = strlen (line);
- while (end > 0 && isspace (line[end-1]))
- line[--end] = '\0';
-
- if (line[0] == '\0' || line[0] == '\n' || line[0] == '\032' || line[0] == '\r')
- return get_line (f, line, lineno);
- return line;
-}
-
-static char *dir = 0;
-
-static FILE *
-scanopen (char *file)
-{
- FILE *f;
-
- f = fopen (file, "r");
- if (!f && dir)
- {
- char path[1024];
-
- strcpy (path, dir);
- strcat (path, "/");
- strcat (path, file);
- f = fopen (path, "r");
- }
- return f;
-}
-
-/*
- * build a single charset from a source file
- *
- * The file format is quite simple, either
- * a single hex value or a pair separated with a dash
- *
- * Comments begin with '#'
- */
-
-static const FcCharSet *
-scan (FILE *f, char *file, FcCharSetFreezer *freezer)
-{
- FcCharSet *c = 0;
- FcCharSet *n;
- int start, end, ucs4;
- char line[1024];
- int lineno = 0;
-
- while (get_line (f, line, &lineno))
- {
- if (!strncmp (line, "include", 7))
- {
- FILE *included_f;
- char *included_file;
- included_file = strchr (line, ' ');
- if (!included_file)
- fatal (file, lineno,
- "invalid syntax, expected: include filename");
- while (isspace(*included_file))
- included_file++;
- included_f = scanopen (included_file);
- if (!included_f)
- fatal (included_file, 0, "can't open");
- n = scan (included_f, included_file, freezer);
- fclose (included_f);
- if (!c)
- c = FcCharSetCreate ();
- if (!FcCharSetMerge (c, n, NULL))
- fatal (file, lineno, "out of memory");
- FcCharSetDestroy (n);
- continue;
- }
- if (strchr (line, '-'))
- {
- if (sscanf (line, "%x-%x", &start, &end) != 2)
- fatal (file, lineno, "parse error");
- }
- else
- {
- if (sscanf (line, "%x", &start) != 1)
- fatal (file, lineno, "parse error");
- end = start;
- }
- if (!c)
- c = FcCharSetCreate ();
- for (ucs4 = start; ucs4 <= end; ucs4++)
- {
- if (!FcCharSetAddChar (c, ucs4))
- fatal (file, lineno, "out of memory");
- }
- }
- n = FcCharSetFreeze (freezer, c);
- FcCharSetDestroy (c);
- return n;
-}
-
-/*
- * Convert a file name into a name suitable for C declarations
- */
-static char *
-get_name (char *file)
-{
- char *name;
- char *dot;
-
- dot = strchr (file, '.');
- if (!dot)
- dot = file + strlen(file);
- name = malloc (dot - file + 1);
- strncpy (name, file, dot - file);
- name[dot-file] = '\0';
- return name;
-}
-
-/*
- * Convert a C name into a language name
- */
-static char *
-get_lang (char *name)
-{
- char *lang = malloc (strlen (name) + 1);
- char *l = lang;
- char c;
-
- while ((c = *name++))
- {
- if (isupper ((int) (unsigned char) c))
- c = tolower ((int) (unsigned char) c);
- if (c == '_')
- c = '-';
- if (c == ' ')
- continue;
- *l++ = c;
- }
- *l++ = '\0';
- return lang;
-}
-
-typedef struct _Entry {
- int id;
- char *file;
-} Entry;
-
-static int compare (const void *a, const void *b)
-{
- const Entry const *as = a, *bs = b;
- return FcStrCmpIgnoreCase (as->file, bs->file);
-}
-
-#define MAX_LANG 1024
-#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32)
-
-#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f)))
-#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1)
-
-int
-main (int argc, char **argv)
-{
- static Entry entries[MAX_LANG];
- static const FcCharSet *sets[MAX_LANG];
- static int duplicate[MAX_LANG];
- static int country[MAX_LANG];
- static char *names[MAX_LANG];
- static char *langs[MAX_LANG];
- static int off[MAX_LANG];
- FILE *f;
- int ncountry = 0;
- int i = 0;
- int nsets = 0;
- int argi;
- FcCharLeaf **leaves;
- int total_leaves = 0;
- int l, sl, tl, tn;
- static char line[1024];
- static FcChar32 map[MAX_LANG_SET_MAP];
- int num_lang_set_map;
- int setRangeStart[26];
- int setRangeEnd[26];
- FcChar8 setRangeChar;
- FcCharSetFreezer *freezer;
-
- freezer = FcCharSetFreezerCreate ();
- if (!freezer)
- fatal (argv[0], 0, "out of memory");
- argi = 1;
- while (argv[argi])
- {
- if (!strcmp (argv[argi], "-d"))
- {
- argi++;
- dir = argv[argi++];
- continue;
- }
- if (i == MAX_LANG)
- fatal (argv[0], 0, "Too many languages");
- entries[i].id = i;
- entries[i].file = argv[argi++];
- i++;
- }
- entries[i].file = 0;
- qsort (entries, i, sizeof (Entry), compare);
- i = 0;
- while (entries[i].file)
- {
- f = scanopen (entries[i].file);
- if (!f)
- fatal (entries[i].file, 0, strerror (errno));
- sets[i] = scan (f, entries[i].file, freezer);
- names[i] = get_name (entries[i].file);
- langs[i] = get_lang(names[i]);
- if (strchr (langs[i], '-'))
- country[ncountry++] = i;
-
- total_leaves += sets[i]->num;
- i++;
- fclose (f);
- }
- nsets = i;
- sets[i] = 0;
- leaves = malloc (total_leaves * sizeof (FcCharLeaf *));
- tl = 0;
- /*
- * Find unique leaves
- */
- for (i = 0; sets[i]; i++)
- {
- for (sl = 0; sl < sets[i]->num; sl++)
- {
- for (l = 0; l < tl; l++)
- if (leaves[l] == FcCharSetLeaf(sets[i], sl))
- break;
- if (l == tl)
- leaves[tl++] = FcCharSetLeaf(sets[i], sl);
- }
- }
-
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- printf ("/* total size: %d unique leaves: %d */\n\n",
- total_leaves, tl);
-
- /*
- * Find duplicate charsets
- */
- duplicate[0] = -1;
- for (i = 1; sets[i]; i++)
- {
- int j;
-
- duplicate[i] = -1;
- for (j = 0; j < i; j++)
- if (sets[j] == sets[i])
- {
- duplicate[i] = j;
- break;
- }
- }
-
- tn = 0;
- for (i = 0; sets[i]; i++) {
- if (duplicate[i] >= 0)
- continue;
- off[i] = tn;
- tn += sets[i]->num;
- }
-
- printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets);
- printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl);
- printf ("#define NUM0 (OFF0 + %d * sizeof (intptr_t))\n", tn);
- printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n");
- printf ("#define OFF(s,o) (OFF0 + o * sizeof (intptr_t) - SET(s))\n");
- printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n");
- printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n");
- printf ("#define fcLangCharSets (fcLangData.langCharSets)\n");
- printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n");
- printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n");
- printf ("\n");
-
- printf ("static const struct {\n"
- " FcLangCharSet langCharSets[%d];\n"
- " FcCharLeaf leaves[%d];\n"
- " intptr_t leaf_offsets[%d];\n"
- " FcChar16 numbers[%d];\n"
- " FcChar%s langIndices[%d];\n"
- " FcChar%s langIndicesInv[%d];\n"
- "} fcLangData = {\n",
- nsets, tl, tn, tn,
- nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets);
-
- /*
- * Dump sets
- */
-
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int j = duplicate[i];
-
- if (j < 0)
- j = i;
-
- printf (" { \"%s\", "
- " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n",
- langs[i],
- sets[j]->num, i, off[j], i, off[j], i);
- }
- printf ("},\n");
-
- /*
- * Dump leaves
- */
- printf ("{\n");
- for (l = 0; l < tl; l++)
- {
- printf (" { { /* %d */", l);
- for (i = 0; i < 256/32; i++)
- {
- if (i % 4 == 0)
- printf ("\n ");
- printf (" 0x%08x,", leaves[l]->map[i]);
- }
- printf ("\n } },\n");
- }
- printf ("},\n");
-
- /*
- * Dump leaves
- */
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int n;
-
- if (duplicate[i] >= 0)
- continue;
- printf (" /* %s */\n", names[i]);
- for (n = 0; n < sets[i]->num; n++)
- {
- if (n % 4 == 0)
- printf (" ");
- for (l = 0; l < tl; l++)
- if (leaves[l] == FcCharSetLeaf(sets[i], n))
- break;
- if (l == tl)
- fatal (names[i], 0, "can't find leaf");
- printf (" LEAF(%3d,%3d),", off[i], l);
- if (n % 4 == 3)
- printf ("\n");
- }
- if (n % 4 != 0)
- printf ("\n");
- }
- printf ("},\n");
-
-
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int n;
-
- if (duplicate[i] >= 0)
- continue;
- printf (" /* %s */\n", names[i]);
- for (n = 0; n < sets[i]->num; n++)
- {
- if (n % 8 == 0)
- printf (" ");
- printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]);
- if (n % 8 == 7)
- printf ("\n");
- }
- if (n % 8 != 0)
- printf ("\n");
- }
- printf ("},\n");
-
- /* langIndices */
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- printf (" %d, /* %s */\n", entries[i].id, names[i]);
- }
- printf ("},\n");
-
- /* langIndicesInv */
- printf ("{\n");
- {
- static int entries_inv[MAX_LANG];
- for (i = 0; sets[i]; i++)
- entries_inv[entries[i].id] = i;
- for (i = 0; sets[i]; i++)
- printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]);
- }
- printf ("}\n");
-
- printf ("};\n\n");
-
- printf ("#define NUM_LANG_CHAR_SET %d\n", i);
- num_lang_set_map = (i + 31) / 32;
- printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map);
- /*
- * Dump indices with country codes
- */
- if (ncountry)
- {
- int c;
- int ncountry_ent = 0;
- printf ("\n");
- printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n");
- for (c = 0; c < ncountry; c++)
- {
- i = country[c];
- if (i >= 0)
- {
- int lang = strchr (langs[i], '-') - langs[i];
- int d, k;
-
- for (k = 0; k < num_lang_set_map; k++)
- map[k] = 0;
-
- BitSet (map, i);
- for (d = c + 1; d < ncountry; d++)
- {
- int j = country[d];
- if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1))
- {
- BitSet(map, j);
- country[d] = -1;
- }
- }
- printf (" {");
- for (k = 0; k < num_lang_set_map; k++)
- printf (" 0x%08x,", map[k]);
- printf (" }, /* %*.*s */\n",
- lang, lang, langs[i]);
- ++ncountry_ent;
- }
- }
- printf ("};\n\n");
- printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent);
- }
-
-
- /*
- * Find ranges for each letter for faster searching
- */
- setRangeChar = 'a';
- memset(setRangeStart, '\0', sizeof (setRangeStart));
- memset(setRangeEnd, '\0', sizeof (setRangeEnd));
- for (i = 0; sets[i]; i++)
- {
- char c = names[i][0];
-
- while (setRangeChar <= c && c <= 'z')
- setRangeStart[setRangeChar++ - 'a'] = i;
- }
- for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++)
- setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1;
- setRangeEnd[setRangeChar - 'a'] = i - 1;
-
- /*
- * Dump sets start/finish for the fastpath
- */
- printf ("\n");
- printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n");
- printf ("\n");
- for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++)
- {
- printf (" { %d, %d }, /* %c */\n",
- setRangeStart[setRangeChar - 'a'],
- setRangeEnd[setRangeChar - 'a'], setRangeChar);
- }
- printf ("};\n\n");
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/*
+ * fontconfig/fc-lang/fc-lang.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fccharset.c"
+#include "fcstr.c"
+#include "fcserialize.c"
+
+/*
+ * fc-lang
+ *
+ * Read a set of language orthographies and build C declarations for
+ * charsets which can then be used to identify which languages are
+ * supported by a given font. Note that this uses some utilities
+ * from the fontconfig library, so the necessary file is simply
+ * included in this compilation. A couple of extra utility
+ * functions are also needed in slightly modified form
+ */
+
+void
+FcMemAlloc (int kind, int size)
+{
+}
+
+void
+FcMemFree (int kind, int size)
+{
+}
+
+FcPrivate void
+FcCacheObjectReference (void *object)
+{
+}
+
+FcPrivate void
+FcCacheObjectDereference (void *object)
+{
+}
+
+int FcDebugVal;
+
+FcChar8 *
+FcConfigHome (void)
+{
+ return (FcChar8 *) getenv ("HOME");
+}
+
+static void
+fatal (const char *file, int lineno, const char *msg)
+{
+ if (lineno)
+ fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
+ else
+ fprintf (stderr, "%s: %s\n", file, msg);
+ exit (1);
+}
+
+static char *
+get_line (FILE *f, char *buf, int *lineno)
+{
+ char *hash;
+ char *line;
+ int end;
+
+next:
+ line = buf;
+ if (!fgets (line, 1024, f))
+ return 0;
+ ++(*lineno);
+ hash = strchr (line, '#');
+ if (hash)
+ *hash = '\0';
+
+ while (line[0] && isspace (line[0]))
+ line++;
+ end = strlen (line);
+ while (end > 0 && isspace (line[end-1]))
+ line[--end] = '\0';
+
+ if (line[0] == '\0' || line[0] == '\n' || line[0] == '\r')
+ goto next;
+
+ return line;
+}
+
+static char *dir = 0;
+
+static FILE *
+scanopen (char *file)
+{
+ FILE *f;
+
+ f = fopen (file, "r");
+ if (!f && dir)
+ {
+ char path[1024];
+
+ strcpy (path, dir);
+ strcat (path, "/");
+ strcat (path, file);
+ f = fopen (path, "r");
+ }
+ return f;
+}
+
+/*
+ * build a single charset from a source file
+ *
+ * The file format is quite simple, either
+ * a single hex value or a pair separated with a dash
+ *
+ * Comments begin with '#'
+ */
+
+static FcCharSet *
+scan (FILE *f, char *file, FcCharSetFreezer *freezer)
+{
+ FcCharSet *c = 0;
+ FcCharSet *n;
+ FcBool del;
+ int start, end, ucs4;
+ char buf[1024];
+ char *line;
+ int lineno = 0;
+
+ while ((line = get_line (f, buf, &lineno)))
+ {
+ if (!strncmp (line, "include", 7))
+ {
+ FILE *included_f;
+ char *included_file;
+ included_file = strchr (line, ' ');
+ if (!included_file)
+ fatal (file, lineno,
+ "invalid syntax, expected: include filename");
+ while (isspace(*included_file))
+ included_file++;
+ included_f = scanopen (included_file);
+ if (!included_f)
+ fatal (included_file, 0, "can't open");
+ n = scan (included_f, included_file, freezer);
+ fclose (included_f);
+ if (!c)
+ c = FcCharSetCreate ();
+ if (!FcCharSetMerge (c, n, NULL))
+ fatal (file, lineno, "out of memory");
+ FcCharSetDestroy (n);
+ continue;
+ }
+ del = FcFalse;
+ if (line[0] == '-')
+ {
+ del = FcTrue;
+ line++;
+ }
+ if (strchr (line, '-'))
+ {
+ if (sscanf (line, "%x-%x", &start, &end) != 2)
+ fatal (file, lineno, "parse error");
+ }
+ else
+ {
+ if (sscanf (line, "%x", &start) != 1)
+ fatal (file, lineno, "parse error");
+ end = start;
+ }
+ if (!c)
+ c = FcCharSetCreate ();
+ for (ucs4 = start; ucs4 <= end; ucs4++)
+ {
+ if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4)))
+ fatal (file, lineno, "out of memory");
+ }
+ }
+ n = (FcCharSet *) FcCharSetFreeze (freezer, c);
+ FcCharSetDestroy (c);
+ return n;
+}
+
+/*
+ * Convert a file name into a name suitable for C declarations
+ */
+static char *
+get_name (char *file)
+{
+ char *name;
+ char *dot;
+
+ dot = strchr (file, '.');
+ if (!dot)
+ dot = file + strlen(file);
+ name = malloc (dot - file + 1);
+ strncpy (name, file, dot - file);
+ name[dot-file] = '\0';
+ return name;
+}
+
+/*
+ * Convert a C name into a language name
+ */
+static char *
+get_lang (char *name)
+{
+ char *lang = malloc (strlen (name) + 1);
+ char *l = lang;
+ char c;
+
+ while ((c = *name++))
+ {
+ if (isupper ((int) (unsigned char) c))
+ c = tolower ((int) (unsigned char) c);
+ if (c == '_')
+ c = '-';
+ if (c == ' ')
+ continue;
+ *l++ = c;
+ }
+ *l++ = '\0';
+ return lang;
+}
+
+typedef struct _Entry {
+ int id;
+ char *file;
+} Entry;
+
+static int compare (const void *a, const void *b)
+{
+ const Entry *as = a, *bs = b;
+ return FcStrCmpIgnoreCase ((const FcChar8 *) as->file, (const FcChar8 *) bs->file);
+}
+
+#define MAX_LANG 1024
+#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32)
+
+#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f)))
+#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1)
+
+int
+main (int argc, char **argv)
+{
+ static Entry entries[MAX_LANG];
+ static FcCharSet *sets[MAX_LANG];
+ static int duplicate[MAX_LANG];
+ static int country[MAX_LANG];
+ static char *names[MAX_LANG];
+ static char *langs[MAX_LANG];
+ static int off[MAX_LANG];
+ FILE *f;
+ int ncountry = 0;
+ int i = 0;
+ int nsets = 0;
+ int argi;
+ FcCharLeaf **leaves;
+ int total_leaves = 0;
+ int l, sl, tl, tn;
+ static char line[1024];
+ static FcChar32 map[MAX_LANG_SET_MAP];
+ int num_lang_set_map;
+ int setRangeStart[26];
+ int setRangeEnd[26];
+ FcChar8 setRangeChar;
+ FcCharSetFreezer *freezer;
+
+ freezer = FcCharSetFreezerCreate ();
+ if (!freezer)
+ fatal (argv[0], 0, "out of memory");
+ argi = 1;
+ while (argv[argi])
+ {
+ if (!strcmp (argv[argi], "-d"))
+ {
+ argi++;
+ dir = argv[argi++];
+ continue;
+ }
+ if (i == MAX_LANG)
+ fatal (argv[0], 0, "Too many languages");
+ entries[i].id = i;
+ entries[i].file = argv[argi++];
+ i++;
+ }
+ entries[i].file = 0;
+ qsort (entries, i, sizeof (Entry), compare);
+ i = 0;
+ while (entries[i].file)
+ {
+ f = scanopen (entries[i].file);
+ if (!f)
+ fatal (entries[i].file, 0, strerror (errno));
+ sets[i] = scan (f, entries[i].file, freezer);
+ names[i] = get_name (entries[i].file);
+ langs[i] = get_lang(names[i]);
+ if (strchr (langs[i], '-'))
+ country[ncountry++] = i;
+
+ total_leaves += sets[i]->num;
+ i++;
+ fclose (f);
+ }
+ nsets = i;
+ sets[i] = 0;
+ leaves = malloc (total_leaves * sizeof (FcCharLeaf *));
+ tl = 0;
+ /*
+ * Find unique leaves
+ */
+ for (i = 0; sets[i]; i++)
+ {
+ for (sl = 0; sl < sets[i]->num; sl++)
+ {
+ for (l = 0; l < tl; l++)
+ if (leaves[l] == FcCharSetLeaf(sets[i], sl))
+ break;
+ if (l == tl)
+ leaves[tl++] = FcCharSetLeaf(sets[i], sl);
+ }
+ }
+
+ /*
+ * Scan the input until the marker is found
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ {
+ if (!strncmp (line, "@@@", 3))
+ break;
+ fputs (line, stdout);
+ }
+
+ printf ("/* total size: %d unique leaves: %d */\n\n",
+ total_leaves, tl);
+
+ /*
+ * Find duplicate charsets
+ */
+ duplicate[0] = -1;
+ for (i = 1; sets[i]; i++)
+ {
+ int j;
+
+ duplicate[i] = -1;
+ for (j = 0; j < i; j++)
+ if (sets[j] == sets[i])
+ {
+ duplicate[i] = j;
+ break;
+ }
+ }
+
+ tn = 0;
+ for (i = 0; sets[i]; i++) {
+ if (duplicate[i] >= 0)
+ continue;
+ off[i] = tn;
+ tn += sets[i]->num;
+ }
+
+ printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets);
+ printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl);
+ printf ("#define NUM0 (OFF0 + %d * sizeof (uintptr_t))\n", tn);
+ printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n");
+ printf ("#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))\n");
+ printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n");
+ printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n");
+ printf ("#define fcLangCharSets (fcLangData.langCharSets)\n");
+ printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n");
+ printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n");
+ printf ("\n");
+
+ printf ("static const struct {\n"
+ " FcLangCharSet langCharSets[%d];\n"
+ " FcCharLeaf leaves[%d];\n"
+ " uintptr_t leaf_offsets[%d];\n"
+ " FcChar16 numbers[%d];\n"
+ " FcChar%s langIndices[%d];\n"
+ " FcChar%s langIndicesInv[%d];\n"
+ "} fcLangData = {\n",
+ nsets, tl, tn, tn,
+ nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets);
+
+ /*
+ * Dump sets
+ */
+
+ printf ("{\n");
+ for (i = 0; sets[i]; i++)
+ {
+ int j = duplicate[i];
+
+ if (j < 0)
+ j = i;
+
+ printf (" { \"%s\", "
+ " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n",
+ langs[i],
+ sets[j]->num, i, off[j], i, off[j], i);
+ }
+ printf ("},\n");
+
+ /*
+ * Dump leaves
+ */
+ printf ("{\n");
+ for (l = 0; l < tl; l++)
+ {
+ printf (" { { /* %d */", l);
+ for (i = 0; i < 256/32; i++)
+ {
+ if (i % 4 == 0)
+ printf ("\n ");
+ printf (" 0x%08x,", leaves[l]->map[i]);
+ }
+ printf ("\n } },\n");
+ }
+ printf ("},\n");
+
+ /*
+ * Dump leaves
+ */
+ printf ("{\n");
+ for (i = 0; sets[i]; i++)
+ {
+ int n;
+
+ if (duplicate[i] >= 0)
+ continue;
+ printf (" /* %s */\n", names[i]);
+ for (n = 0; n < sets[i]->num; n++)
+ {
+ if (n % 4 == 0)
+ printf (" ");
+ for (l = 0; l < tl; l++)
+ if (leaves[l] == FcCharSetLeaf(sets[i], n))
+ break;
+ if (l == tl)
+ fatal (names[i], 0, "can't find leaf");
+ printf (" LEAF(%3d,%3d),", off[i], l);
+ if (n % 4 == 3)
+ printf ("\n");
+ }
+ if (n % 4 != 0)
+ printf ("\n");
+ }
+ printf ("},\n");
+
+
+ printf ("{\n");
+ for (i = 0; sets[i]; i++)
+ {
+ int n;
+
+ if (duplicate[i] >= 0)
+ continue;
+ printf (" /* %s */\n", names[i]);
+ for (n = 0; n < sets[i]->num; n++)
+ {
+ if (n % 8 == 0)
+ printf (" ");
+ printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]);
+ if (n % 8 == 7)
+ printf ("\n");
+ }
+ if (n % 8 != 0)
+ printf ("\n");
+ }
+ printf ("},\n");
+
+ /* langIndices */
+ printf ("{\n");
+ for (i = 0; sets[i]; i++)
+ {
+ printf (" %d, /* %s */\n", entries[i].id, names[i]);
+ }
+ printf ("},\n");
+
+ /* langIndicesInv */
+ printf ("{\n");
+ {
+ static int entries_inv[MAX_LANG];
+ for (i = 0; sets[i]; i++)
+ entries_inv[entries[i].id] = i;
+ for (i = 0; sets[i]; i++)
+ printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]);
+ }
+ printf ("}\n");
+
+ printf ("};\n\n");
+
+ printf ("#define NUM_LANG_CHAR_SET %d\n", i);
+ num_lang_set_map = (i + 31) / 32;
+ printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map);
+ /*
+ * Dump indices with country codes
+ */
+ if (ncountry)
+ {
+ int c;
+ int ncountry_ent = 0;
+ printf ("\n");
+ printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n");
+ for (c = 0; c < ncountry; c++)
+ {
+ i = country[c];
+ if (i >= 0)
+ {
+ int lang = strchr (langs[i], '-') - langs[i];
+ int d, k;
+
+ for (k = 0; k < num_lang_set_map; k++)
+ map[k] = 0;
+
+ BitSet (map, i);
+ for (d = c + 1; d < ncountry; d++)
+ {
+ int j = country[d];
+ if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1))
+ {
+ BitSet(map, j);
+ country[d] = -1;
+ }
+ }
+ printf (" {");
+ for (k = 0; k < num_lang_set_map; k++)
+ printf (" 0x%08x,", map[k]);
+ printf (" }, /* %*.*s */\n",
+ lang, lang, langs[i]);
+ ++ncountry_ent;
+ }
+ }
+ printf ("};\n\n");
+ printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent);
+ }
+
+
+ /*
+ * Find ranges for each letter for faster searching
+ */
+ setRangeChar = 'a';
+ memset(setRangeStart, '\0', sizeof (setRangeStart));
+ memset(setRangeEnd, '\0', sizeof (setRangeEnd));
+ for (i = 0; sets[i]; i++)
+ {
+ char c = names[i][0];
+
+ while (setRangeChar <= c && c <= 'z')
+ setRangeStart[setRangeChar++ - 'a'] = i;
+ }
+ for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++)
+ setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1;
+ setRangeEnd[setRangeChar - 'a'] = i - 1;
+
+ /*
+ * Dump sets start/finish for the fastpath
+ */
+ printf ("\n");
+ printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n");
+ printf ("\n");
+ for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++)
+ {
+ printf (" { %d, %d }, /* %c */\n",
+ setRangeStart[setRangeChar - 'a'],
+ setRangeEnd[setRangeChar - 'a'], setRangeChar);
+ }
+ printf ("};\n\n");
+
+ while (fgets (line, sizeof (line), stdin))
+ fputs (line, stdout);
+
+ fflush (stdout);
+ exit (ferror (stdout));
+}
diff --git a/fontconfig/fc-lang/fc-lang.man b/fontconfig/fc-lang/fc-lang.man
index 8767be6fc..2e8774935 100644
--- a/fontconfig/fc-lang/fc-lang.man
+++ b/fontconfig/fc-lang/fc-lang.man
@@ -1,39 +1,39 @@
-.\"
-.\" Copyright © 2002 Keith Packard
-.\"
-.\" Permission to use, copy, modify, distribute, and sell this software and its
-.\" documentation for any purpose is hereby granted without fee, provided that
-.\" the above copyright notice appear in all copies and that both that
-.\" copyright notice and this permission notice appear in supporting
-.\" documentation, and that the name of Keith Packard not be used in
-.\" advertising or publicity pertaining to distribution of the software without
-.\" specific, written prior permission. Keith Packard makes no
-.\" representations about the suitability of this software for any purpose. It
-.\" is provided "as is" without express or implied warranty.
-.\"
-.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-.\" PERFORMANCE OF THIS SOFTWARE.
-.\"
-.\"
-.\" fontconfig/fc-lang/fc-lang.man
-.\"
-.TH FC-LANG 1 __vendorversion__
-.SH NAME
-fc-lang, fclang.h \- create an database of language orthographies
-.SH SYNOPSIS
-.B "fc-lang"
-.RI [ language-coverage
-\|.\|.\|. ]
-.SH DESCRIPTION
-.I Fc-lang
-builds the fclang.h file used in the fontconfig library to automatically
-determine language coverage for fonts which don't contain this information.
-.SH FILES
-.TP 15
-.B fclang.tmpl.h
-The template file in which the tables are inserted
+.\"
+.\" Copyright © 2002 Keith Packard
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software and its
+.\" documentation for any purpose is hereby granted without fee, provided that
+.\" the above copyright notice appear in all copies and that both that
+.\" copyright notice and this permission notice appear in supporting
+.\" documentation, and that the name of the author(s) not be used in
+.\" advertising or publicity pertaining to distribution of the software without
+.\" specific, written prior permission. The authors make no
+.\" representations about the suitability of this software for any purpose. It
+.\" is provided "as is" without express or implied warranty.
+.\"
+.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+.\" PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\"
+.\" fontconfig/fc-lang/fc-lang.man
+.\"
+.TH FC-LANG 1 __vendorversion__
+.SH NAME
+fc-lang, fclang.h \- create an database of language orthographies
+.SH SYNOPSIS
+.B "fc-lang"
+.RI [ language-coverage
+\|.\|.\|. ]
+.SH DESCRIPTION
+.I Fc-lang
+builds the fclang.h file used in the fontconfig library to automatically
+determine language coverage for fonts which don't contain this information.
+.SH FILES
+.TP 15
+.B fclang.tmpl.h
+The template file in which the tables are inserted
diff --git a/fontconfig/fc-lang/fclang.tmpl.h b/fontconfig/fc-lang/fclang.tmpl.h
index c7d388918..946537bd7 100644
--- a/fontconfig/fc-lang/fclang.tmpl.h
+++ b/fontconfig/fc-lang/fclang.tmpl.h
@@ -1,25 +1,25 @@
-/*
- * fontconfig/fc-lang/fclang.tmpl.h
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/*
+ * fontconfig/fc-lang/fclang.tmpl.h
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/fontconfig/fc-lang/ff.orth b/fontconfig/fc-lang/ff.orth
index 25b4e359c..05a12ffa0 100644
--- a/fontconfig/fc-lang/ff.orth
+++ b/fontconfig/fc-lang/ff.orth
@@ -1,38 +1,38 @@
-#
-# fontconfig/fc-lang/ff.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Fulah (Fula) (ff)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0181
-0253
-018a
-0257
-014a
-014b
-019d
-0272
-01b3-01b4
+#
+# fontconfig/fc-lang/ff.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Fulah (Fula) (ff)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0181
+0253
+018a
+0257
+014a
+014b
+019d
+0272
+01b3-01b4
diff --git a/fontconfig/fc-lang/fi.orth b/fontconfig/fc-lang/fi.orth
index ccac86e21..eb3cd02e3 100644
--- a/fontconfig/fc-lang/fi.orth
+++ b/fontconfig/fc-lang/fi.orth
@@ -1,51 +1,51 @@
-#
-# fontconfig/fc-lang/fi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Finnish (FI)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com
-#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com
-#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
-#2019 # single quote
-#201d # double quote
-#203a # angle quote
+#
+# fontconfig/fc-lang/fi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Finnish (FI)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com
+#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com
+#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
+#2019 # single quote
+#201d # double quote
+#203a # angle quote
diff --git a/fontconfig/fc-lang/fj.orth b/fontconfig/fc-lang/fj.orth
index 5b7b6fb3f..a0e40d4ba 100644
--- a/fontconfig/fc-lang/fj.orth
+++ b/fontconfig/fc-lang/fj.orth
@@ -1,34 +1,34 @@
-#
-# fontconfig/fc-lang/fj.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Fijian (KW)
-#
-# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html
-#
-# There may be diacritical marks used, but I couldn't find any information
-# about them, nor any Fijian text using them.
-#
-# Fijian doesn't use h, x, z and uses f, j and p in loan words
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/fj.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Fijian (KW)
+#
+# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html
+#
+# There may be diacritical marks used, but I couldn't find any information
+# about them, nor any Fijian text using them.
+#
+# Fijian doesn't use h, x, z and uses f, j and p in loan words
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/fo.orth b/fontconfig/fc-lang/fo.orth
index 9d5d8c585..6bf70af76 100644
--- a/fontconfig/fc-lang/fo.orth
+++ b/fontconfig/fc-lang/fo.orth
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-lang/fo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Faroese (FO)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
-00D8 # LATIN CAPITAL LETTER O WITH STROKE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
-00E6 # LATIN SMALL LETTER AE (ash) *
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F0 # LATIN SMALL LETTER ETH (Icelandic)
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
-00F8 # LATIN SMALL LETTER O WITH STROKE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+#
+# fontconfig/fc-lang/fo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Faroese (FO)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
+00D8 # LATIN CAPITAL LETTER O WITH STROKE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
+00E6 # LATIN SMALL LETTER AE (ash) *
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F0 # LATIN SMALL LETTER ETH (Icelandic)
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
+00F8 # LATIN SMALL LETTER O WITH STROKE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/fontconfig/fc-lang/fr.orth b/fontconfig/fc-lang/fr.orth
index 3441b9ec4..e5eb4495f 100644
--- a/fontconfig/fc-lang/fr.orth
+++ b/fontconfig/fc-lang/fr.orth
@@ -1,58 +1,58 @@
-#
-# fontconfig/fc-lang/fr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# French (FR)
-0041-005a
-0061-007a
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-00E7 # LATIN SMALL LETTER C WITH CEDILLA
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-00EB # LATIN SMALL LETTER E WITH DIAERESIS
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0152 # LATIN CAPITAL LIGATURE OE
-0153 # LATIN SMALL LIGATURE OE
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-00E6 # LATIN SMALL LETTER AE (ash) *
+#
+# fontconfig/fc-lang/fr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# French (FR)
+0041-005a
+0061-007a
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+00E7 # LATIN SMALL LETTER C WITH CEDILLA
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+00EB # LATIN SMALL LETTER E WITH DIAERESIS
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0152 # LATIN CAPITAL LIGATURE OE
+0153 # LATIN SMALL LIGATURE OE
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+00E6 # LATIN SMALL LETTER AE (ash) *
diff --git a/fontconfig/fc-lang/fur.orth b/fontconfig/fc-lang/fur.orth
index 066feb0f1..fa3e76a83 100644
--- a/fontconfig/fc-lang/fur.orth
+++ b/fontconfig/fc-lang/fur.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/fur.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Friulian (FUR)
-#
-# Orthography from http://www.evertype.com/alphabets/friulian.pdf
-#
-0041-005a
-0061-007a
-00c0-00c2
-00c8
-00cc
-00d2
-00d9
-00e0-00e2
-00e8
-00ec
-00f2
-00f9
+#
+# fontconfig/fc-lang/fur.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Friulian (FUR)
+#
+# Orthography from http://www.evertype.com/alphabets/friulian.pdf
+#
+0041-005a
+0061-007a
+00c0-00c2
+00c8
+00cc
+00d2
+00d9
+00e0-00e2
+00e8
+00ec
+00f2
+00f9
diff --git a/fontconfig/fc-lang/fy.orth b/fontconfig/fc-lang/fy.orth
index b17f4d68e..a853f4111 100644
--- a/fontconfig/fc-lang/fy.orth
+++ b/fontconfig/fc-lang/fy.orth
@@ -1,61 +1,61 @@
-#
-# fontconfig/fc-lang/fy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Frisian (FY)
-#
-# West Frisian orthography from
-# http://www.evertype.com/alphabets/west-frisian.pdf
-#
-#
-# Checked with orthography from eki.ee/letter which include
-# a few others (commented out here).
-#
-# Added in ß from German orthography
-#
-0041-005a
-0061-007a
-00c2
-00c4
-00c9
-00ca
-00cb
-#00ce # eki.ee
-00cf
-00d4
-00d6
-00da
-00db
-00dc
-00df
-00e2
-00e4
-00e9
-00ea
-00eb
-#00ee # eki.ee
-00ef
-00f4
-00f6
-00fa
-00fb
-00fc
+#
+# fontconfig/fc-lang/fy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Frisian (FY)
+#
+# West Frisian orthography from
+# http://www.evertype.com/alphabets/west-frisian.pdf
+#
+#
+# Checked with orthography from eki.ee/letter which include
+# a few others (commented out here).
+#
+# Added in ß from German orthography
+#
+0041-005a
+0061-007a
+00c2
+00c4
+00c9
+00ca
+00cb
+#00ce # eki.ee
+00cf
+00d4
+00d6
+00da
+00db
+00dc
+00df
+00e2
+00e4
+00e9
+00ea
+00eb
+#00ee # eki.ee
+00ef
+00f4
+00f6
+00fa
+00fb
+00fc
diff --git a/fontconfig/fc-lang/ga.orth b/fontconfig/fc-lang/ga.orth
index 880114e4d..4c3798c49 100644
--- a/fontconfig/fc-lang/ga.orth
+++ b/fontconfig/fc-lang/ga.orth
@@ -1,84 +1,84 @@
-#
-# fontconfig/fc-lang/ga.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Irish (GA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# The orthography from evertype.com includes the lenited consonants
-# as indicated with seimhiu (dot above). I've included those here
-# even though they're not present in the orthography listed from eki.ee;
-# eki.ee mentions that the seimhiu form is still written but is
-# often written by a following h instead.
-#
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com
-#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com
-#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-#00EC # LATIN SMALL LETTER I WITH GRAVE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com
-00FA # LATIN SMALL LETTER U WITH ACUTE
-010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
-010B # LATIN SMALL LETTER C WITH DOT ABOVE
-0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0121 # LATIN SMALL LETTER G WITH DOT ABOVE
-#017F # LATIN SMALL LETTER LONG S evertype.com
-#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com
-1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
-1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
-1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
-1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
-1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
-1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
-1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
-#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com
-#1680-169c # Ogham
-#2018-2019 # single quotes
-#201c-201d # double quotes
-#204a # tironian sign et
+#
+# fontconfig/fc-lang/ga.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Irish (GA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# The orthography from evertype.com includes the lenited consonants
+# as indicated with seimhiu (dot above). I've included those here
+# even though they're not present in the orthography listed from eki.ee;
+# eki.ee mentions that the seimhiu form is still written but is
+# often written by a following h instead.
+#
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com
+#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com
+#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+#00EC # LATIN SMALL LETTER I WITH GRAVE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com
+00FA # LATIN SMALL LETTER U WITH ACUTE
+010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B # LATIN SMALL LETTER C WITH DOT ABOVE
+0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+#017F # LATIN SMALL LETTER LONG S evertype.com
+#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com
+1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com
+#1680-169c # Ogham
+#2018-2019 # single quotes
+#201c-201d # double quotes
+#204a # tironian sign et
diff --git a/fontconfig/fc-lang/gd.orth b/fontconfig/fc-lang/gd.orth
index 39c308efd..e5b90fc56 100644
--- a/fontconfig/fc-lang/gd.orth
+++ b/fontconfig/fc-lang/gd.orth
@@ -1,51 +1,51 @@
-#
-# fontconfig/fc-lang/gd.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Scots Gaelic (GD)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c7
-00c8
-00c9
-00cc
-00d2
-00d3
-00d9
-00e0
-00e1
-00e7
-00e8
-00e9
-00ec
-00f2
-00f3
-00f9
-#2018-2019 # single quotes
-#201c-201d # double quotes
+#
+# fontconfig/fc-lang/gd.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Scots Gaelic (GD)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c7
+00c8
+00c9
+00cc
+00d2
+00d3
+00d9
+00e0
+00e1
+00e7
+00e8
+00e9
+00ec
+00f2
+00f3
+00f9
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/fontconfig/fc-lang/gez.orth b/fontconfig/fc-lang/gez.orth
index 7d915fa28..88cadfecb 100644
--- a/fontconfig/fc-lang/gez.orth
+++ b/fontconfig/fc-lang/gez.orth
@@ -1,60 +1,60 @@
-#
-# fontconfig/fc-lang/gez.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ethiopic (Geez) (eth)
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-1226 # me-`so, skip `sWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1260-1267 # be-bWa
-1270-1277 # te-to
-1280-1286 # `he-`ho
-1288 # hWe
-128a-128d # hWi-hW
-1290-1297 # ne-nWa
-12a0-12a7 # a-o, skip ea
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12df # ze-zWa
-12e8-12ee # ye-yo
-12f0-12f7 # de-dWa
-1308-130e # ge-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-1328 # Te-TWa
-1330-1346 # Pe-`So
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
-#1361-1368 # punctuation
-#1369-1371 # digits
-#1372-137c # numbers
-#
+#
+# fontconfig/fc-lang/gez.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ethiopic (Geez) (eth)
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-1226 # me-`so, skip `sWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1260-1267 # be-bWa
+1270-1277 # te-to
+1280-1286 # `he-`ho
+1288 # hWe
+128a-128d # hWi-hW
+1290-1297 # ne-nWa
+12a0-12a7 # a-o, skip ea
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12df # ze-zWa
+12e8-12ee # ye-yo
+12f0-12f7 # de-dWa
+1308-130e # ge-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-1328 # Te-TWa
+1330-1346 # Pe-`So
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+#1361-1368 # punctuation
+#1369-1371 # digits
+#1372-137c # numbers
+#
diff --git a/fontconfig/fc-lang/gl.orth b/fontconfig/fc-lang/gl.orth
index 5538be580..364f0f2c2 100644
--- a/fontconfig/fc-lang/gl.orth
+++ b/fontconfig/fc-lang/gl.orth
@@ -1,50 +1,50 @@
-#
-# fontconfig/fc-lang/gl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Galician (GL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00a1
-#00ab
-#00bb
-#00bf
-00c1
-00c9
-00cd
-00d1
-00d3
-00da
-00dc
-00e1
-00e9
-00ed
-00f1
-00f3
-00fa
-00fc
-#2019-201a # single qutoes
+#
+# fontconfig/fc-lang/gl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Galician (GL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00a1
+#00ab
+#00bb
+#00bf
+00c1
+00c9
+00cd
+00d1
+00d3
+00da
+00dc
+00e1
+00e9
+00ed
+00f1
+00f3
+00fa
+00fc
+#2019-201a # single qutoes
diff --git a/fontconfig/fc-lang/gn.orth b/fontconfig/fc-lang/gn.orth
index 36ddb7657..d9fca71c4 100644
--- a/fontconfig/fc-lang/gn.orth
+++ b/fontconfig/fc-lang/gn.orth
@@ -1,48 +1,48 @@
-#
-# fontconfig/fc-lang/gn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Guaraní (GN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00e3
-00c9
-00e9
-1ebd
-#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS)
-00cd
-00ed
-0129
-00d1
-00f1
-00d3
-00f3
-00f5
-00da
-00fa
-0169
-1ef9
+#
+# fontconfig/fc-lang/gn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Guaraní (GN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00e3
+00c9
+00e9
+1ebd
+#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS)
+00cd
+00ed
+0129
+00d1
+00f1
+00d3
+00f3
+00f5
+00da
+00fa
+0169
+1ef9
diff --git a/fontconfig/fc-lang/gu.orth b/fontconfig/fc-lang/gu.orth
index 464690737..48d6d8af5 100644
--- a/fontconfig/fc-lang/gu.orth
+++ b/fontconfig/fc-lang/gu.orth
@@ -1,41 +1,41 @@
-#
-# fontconfig/fc-lang/gu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Gujarati (gu)
-#
-# Taken from the Unicode coverage of this language
-#
-0a81-0a83
-0a85-0a8b
-0a8d
-0a8f-0a91
-0a93-0aa8
-0aaa-0ab0
-0ab2-0ab3
-0ab5-0ab9
-0abc-0ac5
-0ac7-0ac9
-0acb-0acd
-0ad0
-0ae0
-#0ae6-0aef # Digits
+#
+# fontconfig/fc-lang/gu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Gujarati (gu)
+#
+# Taken from the Unicode coverage of this language
+#
+0a81-0a83
+0a85-0a8b
+0a8d
+0a8f-0a91
+0a93-0aa8
+0aaa-0ab0
+0ab2-0ab3
+0ab5-0ab9
+0abc-0ac5
+0ac7-0ac9
+0acb-0acd
+0ad0
+0ae0
+#0ae6-0aef # Digits
diff --git a/fontconfig/fc-lang/gv.orth b/fontconfig/fc-lang/gv.orth
index c22c666bb..f089768c4 100644
--- a/fontconfig/fc-lang/gv.orth
+++ b/fontconfig/fc-lang/gv.orth
@@ -1,31 +1,31 @@
-#
-# fontconfig/fc-lang/gv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Manx Gaelic (GV)
-#
-# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf
-#
-0041-005a
-0061-007a
-00c7
-00e7
+#
+# fontconfig/fc-lang/gv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Manx Gaelic (GV)
+#
+# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf
+#
+0041-005a
+0061-007a
+00c7
+00e7
diff --git a/fontconfig/fc-lang/ha.orth b/fontconfig/fc-lang/ha.orth
index cea4faf73..33d95c36c 100644
--- a/fontconfig/fc-lang/ha.orth
+++ b/fontconfig/fc-lang/ha.orth
@@ -1,36 +1,36 @@
-#
-# fontconfig/fc-lang/ha.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hausa (HA)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0181
-0253
-018a
-0257
-0198-0199
-01b3 # used in Niger
-01b4 # used in Niger
+#
+# fontconfig/fc-lang/ha.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hausa (HA)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0181
+0253
+018a
+0257
+0198-0199
+01b3 # used in Niger
+01b4 # used in Niger
diff --git a/fontconfig/fc-lang/haw.orth b/fontconfig/fc-lang/haw.orth
index 563fbd0d9..e48192bdf 100644
--- a/fontconfig/fc-lang/haw.orth
+++ b/fontconfig/fc-lang/haw.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/haw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hawaiian (HAW)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-02bb
+#
+# fontconfig/fc-lang/haw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hawaiian (HAW)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+02bb
diff --git a/fontconfig/fc-lang/he.orth b/fontconfig/fc-lang/he.orth
index bd68fa42a..ceada0b65 100644
--- a/fontconfig/fc-lang/he.orth
+++ b/fontconfig/fc-lang/he.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/he.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hebrew (HE)
-05d0-05ea
+#
+# fontconfig/fc-lang/he.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hebrew (HE)
+05d0-05ea
diff --git a/fontconfig/fc-lang/hi.orth b/fontconfig/fc-lang/hi.orth
index 3e2226a90..1e10f4658 100644
--- a/fontconfig/fc-lang/hi.orth
+++ b/fontconfig/fc-lang/hi.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/hi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hindi (Devanagari script) (HI)
-#
-# From Unicode coverage for Devanagari
-#
-0905-0914 # Independent vowels
-0915-0939 # Consonants
-093f-094c # Dependent vowel signs
-094d # virama
-#0958-095f # Additional consonants
-#0960-0965 # Generic additions
-#0966-096f # Digits
-#0970 # Abbreviation sign
+#
+# fontconfig/fc-lang/hi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hindi (Devanagari script) (HI)
+#
+# From Unicode coverage for Devanagari
+#
+0905-0914 # Independent vowels
+0915-0939 # Consonants
+093f-094c # Dependent vowel signs
+094d # virama
+#0958-095f # Additional consonants
+#0960-0965 # Generic additions
+#0966-096f # Digits
+#0970 # Abbreviation sign
diff --git a/fontconfig/fc-lang/ho.orth b/fontconfig/fc-lang/ho.orth
index f488c3c0e..c2ac24615 100644
--- a/fontconfig/fc-lang/ho.orth
+++ b/fontconfig/fc-lang/ho.orth
@@ -1,33 +1,33 @@
-#
-# fontconfig/fc-lang/ho.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hiri Motu (HO)
-#
-# I found one sample of Hiri Motu text, a translation of the first part of
-# Genesis at
-# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six
-#
-# It appears to use only ASCII glyphs, so we'll go with that for now
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/ho.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hiri Motu (HO)
+#
+# I found one sample of Hiri Motu text, a translation of the first part of
+# Genesis at
+# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six
+#
+# It appears to use only ASCII glyphs, so we'll go with that for now
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/hr.orth b/fontconfig/fc-lang/hr.orth
index 755c3670b..3fed0e4a3 100644
--- a/fontconfig/fc-lang/hr.orth
+++ b/fontconfig/fc-lang/hr.orth
@@ -1,49 +1,49 @@
-#
-# fontconfig/fc-lang/hr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Croatian (HR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00c0 # evertype.com
-#00c8 # evertype.com
-#00cc # evertype.com
-#00d2 # evertype.com
-#00d9 # evertype.com
-#00e0 # evertype.com
-#00e8 # evertype.com
-#00ec # evertype.com
-#00f2 # evertype.com
-#00f9 # evertype.com
-0106-0107
-010c-010d
-0110-0111
-0160-0161
-017d-017e
-#01c4-01cc # evertype.com
-#01f1-01f5 # evertype.com
-#0200-0217 # evertype.com
+#
+# fontconfig/fc-lang/hr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Croatian (HR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00c0 # evertype.com
+#00c8 # evertype.com
+#00cc # evertype.com
+#00d2 # evertype.com
+#00d9 # evertype.com
+#00e0 # evertype.com
+#00e8 # evertype.com
+#00ec # evertype.com
+#00f2 # evertype.com
+#00f9 # evertype.com
+0106-0107
+010c-010d
+0110-0111
+0160-0161
+017d-017e
+#01c4-01cc # evertype.com
+#01f1-01f5 # evertype.com
+#0200-0217 # evertype.com
diff --git a/fontconfig/fc-lang/hu.orth b/fontconfig/fc-lang/hu.orth
index 76c024ae9..8ef0d9a1b 100644
--- a/fontconfig/fc-lang/hu.orth
+++ b/fontconfig/fc-lang/hu.orth
@@ -1,49 +1,49 @@
-#
-# fontconfig/fc-lang/hu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hungarian (HU)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
-00c1
-00c9
-00cd
-00d3
-00d6
-00da
-00dc
-#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
-00e1
-00e9
-00ed
-00f3
-00f6
-00fa
-00fc
-0150-0151
-0170-0171
+#
+# fontconfig/fc-lang/hu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hungarian (HU)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
+00c1
+00c9
+00cd
+00d3
+00d6
+00da
+00dc
+#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
+00e1
+00e9
+00ed
+00f3
+00f6
+00fa
+00fc
+0150-0151
+0170-0171
diff --git a/fontconfig/fc-lang/hy.orth b/fontconfig/fc-lang/hy.orth
index 22dd8291b..15e8d649f 100644
--- a/fontconfig/fc-lang/hy.orth
+++ b/fontconfig/fc-lang/hy.orth
@@ -1,26 +1,26 @@
-#
-# fontconfig/fc-lang/hy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Armenian (HY)
-0531-0556
-0561-0587
+#
+# fontconfig/fc-lang/hy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Armenian (HY)
+0531-0556
+0561-0587
diff --git a/fontconfig/fc-lang/ia.orth b/fontconfig/fc-lang/ia.orth
index e1ee8e76a..1a434d72e 100644
--- a/fontconfig/fc-lang/ia.orth
+++ b/fontconfig/fc-lang/ia.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/ia.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Interlingua (IA)
-#
-# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/ia.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Interlingua (IA)
+#
+# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/id.orth b/fontconfig/fc-lang/id.orth
index 313c14643..89e1a8d2f 100644
--- a/fontconfig/fc-lang/id.orth
+++ b/fontconfig/fc-lang/id.orth
@@ -1,31 +1,31 @@
-#
-# fontconfig/fc-lang/id.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Indonesian (ID)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c9
-00e9
+#
+# fontconfig/fc-lang/id.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Indonesian (ID)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c9
+00e9
diff --git a/fontconfig/fc-lang/ie.orth b/fontconfig/fc-lang/ie.orth
index 7c9440558..261070f99 100644
--- a/fontconfig/fc-lang/ie.orth
+++ b/fontconfig/fc-lang/ie.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/ie.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Interlingue (IE)
-#
-# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/ie.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Interlingue (IE)
+#
+# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/ig.orth b/fontconfig/fc-lang/ig.orth
index 5486fea17..0453b21e5 100644
--- a/fontconfig/fc-lang/ig.orth
+++ b/fontconfig/fc-lang/ig.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/ig.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Igbo (ig)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-1eca
-1ecb
-1ecc
-1ecd
-1ee4
-1ee5
+#
+# fontconfig/fc-lang/ig.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Igbo (ig)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+1eca
+1ecb
+1ecc
+1ecd
+1ee4
+1ee5
diff --git a/fontconfig/fc-lang/ik.orth b/fontconfig/fc-lang/ik.orth
index 138018849..21b16a888 100644
--- a/fontconfig/fc-lang/ik.orth
+++ b/fontconfig/fc-lang/ik.orth
@@ -1,100 +1,100 @@
-#
-# fontconfig/fc-lang/ik.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Inupiaq (Inupiak, Eskimo) (IK)
-#
-# I'm making a guess that this is language is set using Cyrillic
-#
-0401
-040e
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-045e
+#
+# fontconfig/fc-lang/ik.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Inupiaq (Inupiak, Eskimo) (IK)
+#
+# I'm making a guess that this is language is set using Cyrillic
+#
+0401
+040e
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+045e
diff --git a/fontconfig/fc-lang/io.orth b/fontconfig/fc-lang/io.orth
index eaaac3953..abe63ae08 100644
--- a/fontconfig/fc-lang/io.orth
+++ b/fontconfig/fc-lang/io.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/io.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ido (IO)
-#
-# Orthography taken from http://www.homunculus.com/babel/aido.html
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/io.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ido (IO)
+#
+# Orthography taken from http://www.homunculus.com/babel/aido.html
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/is.orth b/fontconfig/fc-lang/is.orth
index c33e7d271..fcb8f4158 100644
--- a/fontconfig/fc-lang/is.orth
+++ b/fontconfig/fc-lang/is.orth
@@ -1,64 +1,64 @@
-#
-# fontconfig/fc-lang/is.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Icelandic (IS)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
-00c6
-00c9
-#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com
-00cd
-00d0
-00d3
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee
-#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com
-00da
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00dd
-00de
-00e1
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
-00e6
-00e9
-00ed
-00f0
-00f3
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee
-#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com
-00fa
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00fd
-00fe
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+#
+# fontconfig/fc-lang/is.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Icelandic (IS)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
+00c6
+00c9
+#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com
+00cd
+00d0
+00d3
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee
+#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com
+00da
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00dd
+00de
+00e1
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
+00e6
+00e9
+00ed
+00f0
+00f3
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee
+#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com
+00fa
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00fd
+00fe
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/fontconfig/fc-lang/it.orth b/fontconfig/fc-lang/it.orth
index ad1a22d6c..f216fa1d8 100644
--- a/fontconfig/fc-lang/it.orth
+++ b/fontconfig/fc-lang/it.orth
@@ -1,51 +1,51 @@
-#
-# fontconfig/fc-lang/it.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Italian (IT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-#00c1
-00c8-00c9
-00cc
-00cd
-#00ce
-00cf
-00d2-00d3
-00d9
-00da
-00e0
-#00e1
-00e8-00e9
-00ec
-00ed
-#00ee
-00ef
-00f2-00f3
-00f9
-00fa
+#
+# fontconfig/fc-lang/it.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Italian (IT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+#00c1
+00c8-00c9
+00cc
+00cd
+#00ce
+00cf
+00d2-00d3
+00d9
+00da
+00e0
+#00e1
+00e8-00e9
+00ec
+00ed
+#00ee
+00ef
+00f2-00f3
+00f9
+00fa
diff --git a/fontconfig/fc-lang/iu.orth b/fontconfig/fc-lang/iu.orth
index 1c1300a0b..6dde0bf98 100644
--- a/fontconfig/fc-lang/iu.orth
+++ b/fontconfig/fc-lang/iu.orth
@@ -1,77 +1,77 @@
-#
-# fontconfig/fc-lang/iu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Inuktitut (IU)
-#
-# Taken from alphabetic coverage of the Pigiarniq font as
-# produced by the legislative assembly of Nunavut
-# http://www.assembly.nu.ca/unicode/fonts/
-#
-1401-1406
-140a-140b
-142f-1434
-1438-1439
-1449
-144c-1451
-1455-1456
-1466
-146b-1470
-1472-1473
-1483
-1489-148e
-1490-1491
-14a1
-14a3-14a8
-14aa-14ab
-14bb
-14c0-14c5
-14c7-14c8
-14d0
-14d3-14d8
-14da-14db
-14ea
-14ed-14f2
-14f4-14f5
-14fa
-14fc
-14fe
-1500
-1502
-1505
-1526-152b
-152d-152e
-153e
-1542
-1545-1549
-154b-154c
-1550
-1553-155a
-155d
-1575-1577
-1579-157c
-157e-1585
-158b-1596
-15a0-15a6
-15a8-15ae
-166f
-1670-1676
+#
+# fontconfig/fc-lang/iu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Inuktitut (IU)
+#
+# Taken from alphabetic coverage of the Pigiarniq font as
+# produced by the legislative assembly of Nunavut
+# http://www.assembly.nu.ca/unicode/fonts/
+#
+1401-1406
+140a-140b
+142f-1434
+1438-1439
+1449
+144c-1451
+1455-1456
+1466
+146b-1470
+1472-1473
+1483
+1489-148e
+1490-1491
+14a1
+14a3-14a8
+14aa-14ab
+14bb
+14c0-14c5
+14c7-14c8
+14d0
+14d3-14d8
+14da-14db
+14ea
+14ed-14f2
+14f4-14f5
+14fa
+14fc
+14fe
+1500
+1502
+1505
+1526-152b
+152d-152e
+153e
+1542
+1545-1549
+154b-154c
+1550
+1553-155a
+155d
+1575-1577
+1579-157c
+157e-1585
+158b-1596
+15a0-15a6
+15a8-15ae
+166f
+1670-1676
diff --git a/fontconfig/fc-lang/ja.orth b/fontconfig/fc-lang/ja.orth
index 572ca91e4..5f8ea38d6 100644
--- a/fontconfig/fc-lang/ja.orth
+++ b/fontconfig/fc-lang/ja.orth
@@ -1,6565 +1,6565 @@
-#
-# fontconfig/fc-lang/ja.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage from JIS X 0208 (1990)
-#
-0x3000 # IDEOGRAPHIC SPACE
-0x3001 # IDEOGRAPHIC COMMA
-0x3002 # IDEOGRAPHIC FULL STOP
-0x3005 # IDEOGRAPHIC ITERATION MARK
-0x3006 # IDEOGRAPHIC CLOSING MARK
-0x3007 # IDEOGRAPHIC NUMBER ZERO
-0x3041 # HIRAGANA LETTER SMALL A
-0x3042 # HIRAGANA LETTER A
-0x3043 # HIRAGANA LETTER SMALL I
-0x3044 # HIRAGANA LETTER I
-0x3045 # HIRAGANA LETTER SMALL U
-0x3046 # HIRAGANA LETTER U
-0x3047 # HIRAGANA LETTER SMALL E
-0x3048 # HIRAGANA LETTER E
-0x3049 # HIRAGANA LETTER SMALL O
-0x304A # HIRAGANA LETTER O
-0x304B # HIRAGANA LETTER KA
-0x304C # HIRAGANA LETTER GA
-0x304D # HIRAGANA LETTER KI
-0x304E # HIRAGANA LETTER GI
-0x304F # HIRAGANA LETTER KU
-0x3050 # HIRAGANA LETTER GU
-0x3051 # HIRAGANA LETTER KE
-0x3052 # HIRAGANA LETTER GE
-0x3053 # HIRAGANA LETTER KO
-0x3054 # HIRAGANA LETTER GO
-0x3055 # HIRAGANA LETTER SA
-0x3056 # HIRAGANA LETTER ZA
-0x3057 # HIRAGANA LETTER SI
-0x3058 # HIRAGANA LETTER ZI
-0x3059 # HIRAGANA LETTER SU
-0x305A # HIRAGANA LETTER ZU
-0x305B # HIRAGANA LETTER SE
-0x305C # HIRAGANA LETTER ZE
-0x305D # HIRAGANA LETTER SO
-0x305E # HIRAGANA LETTER ZO
-0x305F # HIRAGANA LETTER TA
-0x3060 # HIRAGANA LETTER DA
-0x3061 # HIRAGANA LETTER TI
-0x3062 # HIRAGANA LETTER DI
-0x3063 # HIRAGANA LETTER SMALL TU
-0x3064 # HIRAGANA LETTER TU
-0x3065 # HIRAGANA LETTER DU
-0x3066 # HIRAGANA LETTER TE
-0x3067 # HIRAGANA LETTER DE
-0x3068 # HIRAGANA LETTER TO
-0x3069 # HIRAGANA LETTER DO
-0x306A # HIRAGANA LETTER NA
-0x306B # HIRAGANA LETTER NI
-0x306C # HIRAGANA LETTER NU
-0x306D # HIRAGANA LETTER NE
-0x306E # HIRAGANA LETTER NO
-0x306F # HIRAGANA LETTER HA
-0x3070 # HIRAGANA LETTER BA
-0x3071 # HIRAGANA LETTER PA
-0x3072 # HIRAGANA LETTER HI
-0x3073 # HIRAGANA LETTER BI
-0x3074 # HIRAGANA LETTER PI
-0x3075 # HIRAGANA LETTER HU
-0x3076 # HIRAGANA LETTER BU
-0x3077 # HIRAGANA LETTER PU
-0x3078 # HIRAGANA LETTER HE
-0x3079 # HIRAGANA LETTER BE
-0x307A # HIRAGANA LETTER PE
-0x307B # HIRAGANA LETTER HO
-0x307C # HIRAGANA LETTER BO
-0x307D # HIRAGANA LETTER PO
-0x307E # HIRAGANA LETTER MA
-0x307F # HIRAGANA LETTER MI
-0x3080 # HIRAGANA LETTER MU
-0x3081 # HIRAGANA LETTER ME
-0x3082 # HIRAGANA LETTER MO
-0x3083 # HIRAGANA LETTER SMALL YA
-0x3084 # HIRAGANA LETTER YA
-0x3085 # HIRAGANA LETTER SMALL YU
-0x3086 # HIRAGANA LETTER YU
-0x3087 # HIRAGANA LETTER SMALL YO
-0x3088 # HIRAGANA LETTER YO
-0x3089 # HIRAGANA LETTER RA
-0x308A # HIRAGANA LETTER RI
-0x308B # HIRAGANA LETTER RU
-0x308C # HIRAGANA LETTER RE
-0x308D # HIRAGANA LETTER RO
-0x308E # HIRAGANA LETTER SMALL WA
-0x308F # HIRAGANA LETTER WA
-0x3090 # HIRAGANA LETTER WI
-0x3091 # HIRAGANA LETTER WE
-0x3092 # HIRAGANA LETTER WO
-0x3093 # HIRAGANA LETTER N
-0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK
-0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-0x309D # HIRAGANA ITERATION MARK
-0x309E # HIRAGANA VOICED ITERATION MARK
-0x30A1 # KATAKANA LETTER SMALL A
-0x30A2 # KATAKANA LETTER A
-0x30A3 # KATAKANA LETTER SMALL I
-0x30A4 # KATAKANA LETTER I
-0x30A5 # KATAKANA LETTER SMALL U
-0x30A6 # KATAKANA LETTER U
-0x30A7 # KATAKANA LETTER SMALL E
-0x30A8 # KATAKANA LETTER E
-0x30A9 # KATAKANA LETTER SMALL O
-0x30AA # KATAKANA LETTER O
-0x30AB # KATAKANA LETTER KA
-0x30AC # KATAKANA LETTER GA
-0x30AD # KATAKANA LETTER KI
-0x30AE # KATAKANA LETTER GI
-0x30AF # KATAKANA LETTER KU
-0x30B0 # KATAKANA LETTER GU
-0x30B1 # KATAKANA LETTER KE
-0x30B2 # KATAKANA LETTER GE
-0x30B3 # KATAKANA LETTER KO
-0x30B4 # KATAKANA LETTER GO
-0x30B5 # KATAKANA LETTER SA
-0x30B6 # KATAKANA LETTER ZA
-0x30B7 # KATAKANA LETTER SI
-0x30B8 # KATAKANA LETTER ZI
-0x30B9 # KATAKANA LETTER SU
-0x30BA # KATAKANA LETTER ZU
-0x30BB # KATAKANA LETTER SE
-0x30BC # KATAKANA LETTER ZE
-0x30BD # KATAKANA LETTER SO
-0x30BE # KATAKANA LETTER ZO
-0x30BF # KATAKANA LETTER TA
-0x30C0 # KATAKANA LETTER DA
-0x30C1 # KATAKANA LETTER TI
-0x30C2 # KATAKANA LETTER DI
-0x30C3 # KATAKANA LETTER SMALL TU
-0x30C4 # KATAKANA LETTER TU
-0x30C5 # KATAKANA LETTER DU
-0x30C6 # KATAKANA LETTER TE
-0x30C7 # KATAKANA LETTER DE
-0x30C8 # KATAKANA LETTER TO
-0x30C9 # KATAKANA LETTER DO
-0x30CA # KATAKANA LETTER NA
-0x30CB # KATAKANA LETTER NI
-0x30CC # KATAKANA LETTER NU
-0x30CD # KATAKANA LETTER NE
-0x30CE # KATAKANA LETTER NO
-0x30CF # KATAKANA LETTER HA
-0x30D0 # KATAKANA LETTER BA
-0x30D1 # KATAKANA LETTER PA
-0x30D2 # KATAKANA LETTER HI
-0x30D3 # KATAKANA LETTER BI
-0x30D4 # KATAKANA LETTER PI
-0x30D5 # KATAKANA LETTER HU
-0x30D6 # KATAKANA LETTER BU
-0x30D7 # KATAKANA LETTER PU
-0x30D8 # KATAKANA LETTER HE
-0x30D9 # KATAKANA LETTER BE
-0x30DA # KATAKANA LETTER PE
-0x30DB # KATAKANA LETTER HO
-0x30DC # KATAKANA LETTER BO
-0x30DD # KATAKANA LETTER PO
-0x30DE # KATAKANA LETTER MA
-0x30DF # KATAKANA LETTER MI
-0x30E0 # KATAKANA LETTER MU
-0x30E1 # KATAKANA LETTER ME
-0x30E2 # KATAKANA LETTER MO
-0x30E3 # KATAKANA LETTER SMALL YA
-0x30E4 # KATAKANA LETTER YA
-0x30E5 # KATAKANA LETTER SMALL YU
-0x30E6 # KATAKANA LETTER YU
-0x30E7 # KATAKANA LETTER SMALL YO
-0x30E8 # KATAKANA LETTER YO
-0x30E9 # KATAKANA LETTER RA
-0x30EA # KATAKANA LETTER RI
-0x30EB # KATAKANA LETTER RU
-0x30EC # KATAKANA LETTER RE
-0x30ED # KATAKANA LETTER RO
-0x30EE # KATAKANA LETTER SMALL WA
-0x30EF # KATAKANA LETTER WA
-0x30F0 # KATAKANA LETTER WI
-0x30F1 # KATAKANA LETTER WE
-0x30F2 # KATAKANA LETTER WO
-0x30F3 # KATAKANA LETTER N
-0x30F4 # KATAKANA LETTER VU
-0x30F5 # KATAKANA LETTER SMALL KA
-0x30F6 # KATAKANA LETTER SMALL KE
-0x30FB # KATAKANA MIDDLE DOT
-0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK
-0x30FD # KATAKANA ITERATION MARK
-0x30FE # KATAKANA VOICED ITERATION MARK
-0x4E00 # <CJK>
-0x4E01 # <CJK>
-0x4E03 # <CJK>
-0x4E07 # <CJK>
-0x4E08 # <CJK>
-0x4E09 # <CJK>
-0x4E0A # <CJK>
-0x4E0B # <CJK>
-0x4E0D # <CJK>
-0x4E0E # <CJK>
-0x4E10 # <CJK>
-0x4E11 # <CJK>
-0x4E14 # <CJK>
-0x4E15 # <CJK>
-0x4E16 # <CJK>
-0x4E17 # <CJK>
-0x4E18 # <CJK>
-0x4E19 # <CJK>
-0x4E1E # <CJK>
-0x4E21 # <CJK>
-0x4E26 # <CJK>
-0x4E2A # <CJK>
-0x4E2D # <CJK>
-0x4E31 # <CJK>
-0x4E32 # <CJK>
-0x4E36 # <CJK>
-0x4E38 # <CJK>
-0x4E39 # <CJK>
-0x4E3B # <CJK>
-0x4E3C # <CJK>
-0x4E3F # <CJK>
-0x4E42 # <CJK>
-0x4E43 # <CJK>
-0x4E45 # <CJK>
-0x4E4B # <CJK>
-0x4E4D # <CJK>
-0x4E4E # <CJK>
-0x4E4F # <CJK>
-0x4E55 # <CJK>
-0x4E56 # <CJK>
-0x4E57 # <CJK>
-0x4E58 # <CJK>
-0x4E59 # <CJK>
-0x4E5D # <CJK>
-0x4E5E # <CJK>
-0x4E5F # <CJK>
-0x4E62 # <CJK>
-0x4E71 # <CJK>
-0x4E73 # <CJK>
-0x4E7E # <CJK>
-0x4E80 # <CJK>
-0x4E82 # <CJK>
-0x4E85 # <CJK>
-0x4E86 # <CJK>
-0x4E88 # <CJK>
-0x4E89 # <CJK>
-0x4E8A # <CJK>
-0x4E8B # <CJK>
-0x4E8C # <CJK>
-0x4E8E # <CJK>
-0x4E91 # <CJK>
-0x4E92 # <CJK>
-0x4E94 # <CJK>
-0x4E95 # <CJK>
-0x4E98 # <CJK>
-0x4E99 # <CJK>
-0x4E9B # <CJK>
-0x4E9C # <CJK>
-0x4E9E # <CJK>
-0x4E9F # <CJK>
-0x4EA0 # <CJK>
-0x4EA1 # <CJK>
-0x4EA2 # <CJK>
-0x4EA4 # <CJK>
-0x4EA5 # <CJK>
-0x4EA6 # <CJK>
-0x4EA8 # <CJK>
-0x4EAB # <CJK>
-0x4EAC # <CJK>
-0x4EAD # <CJK>
-0x4EAE # <CJK>
-0x4EB0 # <CJK>
-0x4EB3 # <CJK>
-0x4EB6 # <CJK>
-0x4EBA # <CJK>
-0x4EC0 # <CJK>
-0x4EC1 # <CJK>
-0x4EC2 # <CJK>
-0x4EC4 # <CJK>
-0x4EC6 # <CJK>
-0x4EC7 # <CJK>
-0x4ECA # <CJK>
-0x4ECB # <CJK>
-0x4ECD # <CJK>
-0x4ECE # <CJK>
-0x4ECF # <CJK>
-0x4ED4 # <CJK>
-0x4ED5 # <CJK>
-0x4ED6 # <CJK>
-0x4ED7 # <CJK>
-0x4ED8 # <CJK>
-0x4ED9 # <CJK>
-0x4EDD # <CJK>
-0x4EDE # <CJK>
-0x4EDF # <CJK>
-0x4EE3 # <CJK>
-0x4EE4 # <CJK>
-0x4EE5 # <CJK>
-0x4EED # <CJK>
-0x4EEE # <CJK>
-0x4EF0 # <CJK>
-0x4EF2 # <CJK>
-0x4EF6 # <CJK>
-0x4EF7 # <CJK>
-0x4EFB # <CJK>
-0x4F01 # <CJK>
-0x4F09 # <CJK>
-0x4F0A # <CJK>
-0x4F0D # <CJK>
-0x4F0E # <CJK>
-0x4F0F # <CJK>
-0x4F10 # <CJK>
-0x4F11 # <CJK>
-0x4F1A # <CJK>
-0x4F1C # <CJK>
-0x4F1D # <CJK>
-0x4F2F # <CJK>
-0x4F30 # <CJK>
-0x4F34 # <CJK>
-0x4F36 # <CJK>
-0x4F38 # <CJK>
-0x4F3A # <CJK>
-0x4F3C # <CJK>
-0x4F3D # <CJK>
-0x4F43 # <CJK>
-0x4F46 # <CJK>
-0x4F47 # <CJK>
-0x4F4D # <CJK>
-0x4F4E # <CJK>
-0x4F4F # <CJK>
-0x4F50 # <CJK>
-0x4F51 # <CJK>
-0x4F53 # <CJK>
-0x4F55 # <CJK>
-0x4F57 # <CJK>
-0x4F59 # <CJK>
-0x4F5A # <CJK>
-0x4F5B # <CJK>
-0x4F5C # <CJK>
-0x4F5D # <CJK>
-0x4F5E # <CJK>
-0x4F69 # <CJK>
-0x4F6F # <CJK>
-0x4F70 # <CJK>
-0x4F73 # <CJK>
-0x4F75 # <CJK>
-0x4F76 # <CJK>
-0x4F7B # <CJK>
-0x4F7C # <CJK>
-0x4F7F # <CJK>
-0x4F83 # <CJK>
-0x4F86 # <CJK>
-0x4F88 # <CJK>
-0x4F8B # <CJK>
-0x4F8D # <CJK>
-0x4F8F # <CJK>
-0x4F91 # <CJK>
-0x4F96 # <CJK>
-0x4F98 # <CJK>
-0x4F9B # <CJK>
-0x4F9D # <CJK>
-0x4FA0 # <CJK>
-0x4FA1 # <CJK>
-0x4FAB # <CJK>
-0x4FAD # <CJK>
-0x4FAE # <CJK>
-0x4FAF # <CJK>
-0x4FB5 # <CJK>
-0x4FB6 # <CJK>
-0x4FBF # <CJK>
-0x4FC2 # <CJK>
-0x4FC3 # <CJK>
-0x4FC4 # <CJK>
-0x4FCA # <CJK>
-0x4FCE # <CJK>
-0x4FD0 # <CJK>
-0x4FD1 # <CJK>
-0x4FD4 # <CJK>
-0x4FD7 # <CJK>
-0x4FD8 # <CJK>
-0x4FDA # <CJK>
-0x4FDB # <CJK>
-0x4FDD # <CJK>
-0x4FDF # <CJK>
-0x4FE1 # <CJK>
-0x4FE3 # <CJK>
-0x4FE4 # <CJK>
-0x4FE5 # <CJK>
-0x4FEE # <CJK>
-0x4FEF # <CJK>
-0x4FF3 # <CJK>
-0x4FF5 # <CJK>
-0x4FF6 # <CJK>
-0x4FF8 # <CJK>
-0x4FFA # <CJK>
-0x4FFE # <CJK>
-0x5005 # <CJK>
-0x5006 # <CJK>
-0x5009 # <CJK>
-0x500B # <CJK>
-0x500D # <CJK>
-0x500F # <CJK>
-0x5011 # <CJK>
-0x5012 # <CJK>
-0x5014 # <CJK>
-0x5016 # <CJK>
-0x5019 # <CJK>
-0x501A # <CJK>
-0x501F # <CJK>
-0x5021 # <CJK>
-0x5023 # <CJK>
-0x5024 # <CJK>
-0x5025 # <CJK>
-0x5026 # <CJK>
-0x5028 # <CJK>
-0x5029 # <CJK>
-0x502A # <CJK>
-0x502B # <CJK>
-0x502C # <CJK>
-0x502D # <CJK>
-0x5036 # <CJK>
-0x5039 # <CJK>
-0x5043 # <CJK>
-0x5047 # <CJK>
-0x5048 # <CJK>
-0x5049 # <CJK>
-0x504F # <CJK>
-0x5050 # <CJK>
-0x5055 # <CJK>
-0x5056 # <CJK>
-0x505A # <CJK>
-0x505C # <CJK>
-0x5065 # <CJK>
-0x506C # <CJK>
-0x5072 # <CJK>
-0x5074 # <CJK>
-0x5075 # <CJK>
-0x5076 # <CJK>
-0x5078 # <CJK>
-0x507D # <CJK>
-0x5080 # <CJK>
-0x5085 # <CJK>
-0x508D # <CJK>
-0x5091 # <CJK>
-0x5098 # <CJK>
-0x5099 # <CJK>
-0x509A # <CJK>
-0x50AC # <CJK>
-0x50AD # <CJK>
-0x50B2 # <CJK>
-0x50B3 # <CJK>
-0x50B4 # <CJK>
-0x50B5 # <CJK>
-0x50B7 # <CJK>
-0x50BE # <CJK>
-0x50C2 # <CJK>
-0x50C5 # <CJK>
-0x50C9 # <CJK>
-0x50CA # <CJK>
-0x50CD # <CJK>
-0x50CF # <CJK>
-0x50D1 # <CJK>
-0x50D5 # <CJK>
-0x50D6 # <CJK>
-0x50DA # <CJK>
-0x50DE # <CJK>
-0x50E3 # <CJK>
-0x50E5 # <CJK>
-0x50E7 # <CJK>
-0x50ED # <CJK>
-0x50EE # <CJK>
-0x50F5 # <CJK>
-0x50F9 # <CJK>
-0x50FB # <CJK>
-0x5100 # <CJK>
-0x5101 # <CJK>
-0x5102 # <CJK>
-0x5104 # <CJK>
-0x5109 # <CJK>
-0x5112 # <CJK>
-0x5114 # <CJK>
-0x5115 # <CJK>
-0x5116 # <CJK>
-0x5118 # <CJK>
-0x511A # <CJK>
-0x511F # <CJK>
-0x5121 # <CJK>
-0x512A # <CJK>
-0x5132 # <CJK>
-0x5137 # <CJK>
-0x513A # <CJK>
-0x513B # <CJK>
-0x513C # <CJK>
-0x513F # <CJK>
-0x5140 # <CJK>
-0x5141 # <CJK>
-0x5143 # <CJK>
-0x5144 # <CJK>
-0x5145 # <CJK>
-0x5146 # <CJK>
-0x5147 # <CJK>
-0x5148 # <CJK>
-0x5149 # <CJK>
-0x514B # <CJK>
-0x514C # <CJK>
-0x514D # <CJK>
-0x514E # <CJK>
-0x5150 # <CJK>
-0x5152 # <CJK>
-0x5154 # <CJK>
-0x515A # <CJK>
-0x515C # <CJK>
-0x5162 # <CJK>
-0x5165 # <CJK>
-0x5168 # <CJK>
-0x5169 # <CJK>
-0x516A # <CJK>
-0x516B # <CJK>
-0x516C # <CJK>
-0x516D # <CJK>
-0x516E # <CJK>
-0x5171 # <CJK>
-0x5175 # <CJK>
-0x5176 # <CJK>
-0x5177 # <CJK>
-0x5178 # <CJK>
-0x517C # <CJK>
-0x5180 # <CJK>
-0x5182 # <CJK>
-0x5185 # <CJK>
-0x5186 # <CJK>
-0x5189 # <CJK>
-0x518A # <CJK>
-0x518C # <CJK>
-0x518D # <CJK>
-0x518F # <CJK>
-0x5190 # <CJK>
-0x5191 # <CJK>
-0x5192 # <CJK>
-0x5193 # <CJK>
-0x5195 # <CJK>
-0x5196 # <CJK>
-0x5197 # <CJK>
-0x5199 # <CJK>
-0x51A0 # <CJK>
-0x51A2 # <CJK>
-0x51A4 # <CJK>
-0x51A5 # <CJK>
-0x51A6 # <CJK>
-0x51A8 # <CJK>
-0x51A9 # <CJK>
-0x51AA # <CJK>
-0x51AB # <CJK>
-0x51AC # <CJK>
-0x51B0 # <CJK>
-0x51B1 # <CJK>
-0x51B2 # <CJK>
-0x51B3 # <CJK>
-0x51B4 # <CJK>
-0x51B5 # <CJK>
-0x51B6 # <CJK>
-0x51B7 # <CJK>
-0x51BD # <CJK>
-0x51C4 # <CJK>
-0x51C5 # <CJK>
-0x51C6 # <CJK>
-0x51C9 # <CJK>
-0x51CB # <CJK>
-0x51CC # <CJK>
-0x51CD # <CJK>
-0x51D6 # <CJK>
-0x51DB # <CJK>
-#0x51DC # <CJK> # not in kochi fonts
-0x51DD # <CJK>
-0x51E0 # <CJK>
-0x51E1 # <CJK>
-0x51E6 # <CJK>
-0x51E7 # <CJK>
-0x51E9 # <CJK>
-0x51EA # <CJK>
-0x51ED # <CJK>
-0x51F0 # <CJK>
-0x51F1 # <CJK>
-0x51F5 # <CJK>
-0x51F6 # <CJK>
-0x51F8 # <CJK>
-0x51F9 # <CJK>
-0x51FA # <CJK>
-0x51FD # <CJK>
-0x51FE # <CJK>
-0x5200 # <CJK>
-0x5203 # <CJK>
-0x5204 # <CJK>
-0x5206 # <CJK>
-0x5207 # <CJK>
-0x5208 # <CJK>
-0x520A # <CJK>
-0x520B # <CJK>
-0x520E # <CJK>
-0x5211 # <CJK>
-0x5214 # <CJK>
-0x5217 # <CJK>
-0x521D # <CJK>
-0x5224 # <CJK>
-0x5225 # <CJK>
-0x5227 # <CJK>
-0x5229 # <CJK>
-0x522A # <CJK>
-0x522E # <CJK>
-0x5230 # <CJK>
-0x5233 # <CJK>
-0x5236 # <CJK>
-0x5237 # <CJK>
-0x5238 # <CJK>
-0x5239 # <CJK>
-0x523A # <CJK>
-0x523B # <CJK>
-0x5243 # <CJK>
-0x5244 # <CJK>
-0x5247 # <CJK>
-0x524A # <CJK>
-0x524B # <CJK>
-0x524C # <CJK>
-0x524D # <CJK>
-0x524F # <CJK>
-0x5254 # <CJK>
-0x5256 # <CJK>
-0x525B # <CJK>
-0x525E # <CJK>
-0x5263 # <CJK>
-0x5264 # <CJK>
-0x5265 # <CJK>
-0x5269 # <CJK>
-0x526A # <CJK>
-0x526F # <CJK>
-0x5270 # <CJK>
-0x5271 # <CJK>
-0x5272 # <CJK>
-0x5273 # <CJK>
-0x5274 # <CJK>
-0x5275 # <CJK>
-0x527D # <CJK>
-0x527F # <CJK>
-0x5283 # <CJK>
-0x5287 # <CJK>
-0x5288 # <CJK>
-0x5289 # <CJK>
-0x528D # <CJK>
-0x5291 # <CJK>
-0x5292 # <CJK>
-0x5294 # <CJK>
-0x529B # <CJK>
-0x529F # <CJK>
-0x52A0 # <CJK>
-0x52A3 # <CJK>
-0x52A9 # <CJK>
-0x52AA # <CJK>
-0x52AB # <CJK>
-0x52AC # <CJK>
-0x52AD # <CJK>
-0x52B1 # <CJK>
-0x52B4 # <CJK>
-0x52B5 # <CJK>
-0x52B9 # <CJK>
-0x52BC # <CJK>
-0x52BE # <CJK>
-0x52C1 # <CJK>
-0x52C3 # <CJK>
-0x52C5 # <CJK>
-0x52C7 # <CJK>
-0x52C9 # <CJK>
-0x52CD # <CJK>
-0x52D2 # <CJK>
-0x52D5 # <CJK>
-0x52D7 # <CJK>
-0x52D8 # <CJK>
-0x52D9 # <CJK>
-0x52DD # <CJK>
-0x52DE # <CJK>
-0x52DF # <CJK>
-0x52E0 # <CJK>
-0x52E2 # <CJK>
-0x52E3 # <CJK>
-0x52E4 # <CJK>
-0x52E6 # <CJK>
-0x52E7 # <CJK>
-0x52F2 # <CJK>
-0x52F3 # <CJK>
-0x52F5 # <CJK>
-0x52F8 # <CJK>
-0x52F9 # <CJK>
-0x52FA # <CJK>
-0x52FE # <CJK>
-0x52FF # <CJK>
-0x5301 # <CJK>
-0x5302 # <CJK>
-0x5305 # <CJK>
-0x5306 # <CJK>
-0x5308 # <CJK>
-0x530D # <CJK>
-0x530F # <CJK>
-0x5310 # <CJK>
-0x5315 # <CJK>
-0x5316 # <CJK>
-0x5317 # <CJK>
-0x5319 # <CJK>
-0x531A # <CJK>
-0x531D # <CJK>
-0x5320 # <CJK>
-0x5321 # <CJK>
-0x5323 # <CJK>
-0x532A # <CJK>
-0x532F # <CJK>
-0x5331 # <CJK>
-0x5333 # <CJK>
-0x5338 # <CJK>
-0x5339 # <CJK>
-0x533A # <CJK>
-0x533B # <CJK>
-0x533F # <CJK>
-0x5340 # <CJK>
-0x5341 # <CJK>
-0x5343 # <CJK>
-0x5345 # <CJK>
-0x5346 # <CJK>
-0x5347 # <CJK>
-0x5348 # <CJK>
-0x5349 # <CJK>
-0x534A # <CJK>
-0x534D # <CJK>
-0x5351 # <CJK>
-0x5352 # <CJK>
-0x5353 # <CJK>
-0x5354 # <CJK>
-0x5357 # <CJK>
-0x5358 # <CJK>
-0x535A # <CJK>
-0x535C # <CJK>
-0x535E # <CJK>
-0x5360 # <CJK>
-0x5366 # <CJK>
-0x5369 # <CJK>
-0x536E # <CJK>
-0x536F # <CJK>
-0x5370 # <CJK>
-0x5371 # <CJK>
-0x5373 # <CJK>
-0x5374 # <CJK>
-0x5375 # <CJK>
-0x5377 # <CJK>
-0x5378 # <CJK>
-0x537B # <CJK>
-0x537F # <CJK>
-0x5382 # <CJK>
-0x5384 # <CJK>
-0x5396 # <CJK>
-0x5398 # <CJK>
-0x539A # <CJK>
-0x539F # <CJK>
-0x53A0 # <CJK>
-0x53A5 # <CJK>
-0x53A6 # <CJK>
-0x53A8 # <CJK>
-0x53A9 # <CJK>
-0x53AD # <CJK>
-0x53AE # <CJK>
-0x53B0 # <CJK>
-0x53B3 # <CJK>
-0x53B6 # <CJK>
-0x53BB # <CJK>
-0x53C2 # <CJK>
-0x53C3 # <CJK>
-0x53C8 # <CJK>
-0x53C9 # <CJK>
-0x53CA # <CJK>
-0x53CB # <CJK>
-0x53CC # <CJK>
-0x53CD # <CJK>
-0x53CE # <CJK>
-0x53D4 # <CJK>
-0x53D6 # <CJK>
-0x53D7 # <CJK>
-0x53D9 # <CJK>
-0x53DB # <CJK>
-0x53DF # <CJK>
-0x53E1 # <CJK>
-0x53E2 # <CJK>
-0x53E3 # <CJK>
-0x53E4 # <CJK>
-0x53E5 # <CJK>
-0x53E8 # <CJK>
-0x53E9 # <CJK>
-0x53EA # <CJK>
-0x53EB # <CJK>
-0x53EC # <CJK>
-0x53ED # <CJK>
-0x53EE # <CJK>
-0x53EF # <CJK>
-0x53F0 # <CJK>
-0x53F1 # <CJK>
-0x53F2 # <CJK>
-0x53F3 # <CJK>
-0x53F6 # <CJK>
-0x53F7 # <CJK>
-0x53F8 # <CJK>
-0x53FA # <CJK>
-0x5401 # <CJK>
-0x5403 # <CJK>
-0x5404 # <CJK>
-0x5408 # <CJK>
-0x5409 # <CJK>
-0x540A # <CJK>
-0x540B # <CJK>
-0x540C # <CJK>
-0x540D # <CJK>
-0x540E # <CJK>
-0x540F # <CJK>
-0x5410 # <CJK>
-0x5411 # <CJK>
-0x541B # <CJK>
-0x541D # <CJK>
-0x541F # <CJK>
-0x5420 # <CJK>
-0x5426 # <CJK>
-0x5429 # <CJK>
-0x542B # <CJK>
-0x542C # <CJK>
-0x542D # <CJK>
-0x542E # <CJK>
-0x5436 # <CJK>
-0x5438 # <CJK>
-0x5439 # <CJK>
-0x543B # <CJK>
-0x543C # <CJK>
-0x543D # <CJK>
-0x543E # <CJK>
-0x5440 # <CJK>
-0x5442 # <CJK>
-0x5446 # <CJK>
-0x5448 # <CJK>
-0x5449 # <CJK>
-0x544A # <CJK>
-0x544E # <CJK>
-0x5451 # <CJK>
-0x545F # <CJK>
-0x5468 # <CJK>
-0x546A # <CJK>
-0x5470 # <CJK>
-0x5471 # <CJK>
-0x5473 # <CJK>
-0x5475 # <CJK>
-0x5476 # <CJK>
-0x5477 # <CJK>
-0x547B # <CJK>
-0x547C # <CJK>
-0x547D # <CJK>
-0x5480 # <CJK>
-0x5484 # <CJK>
-0x5486 # <CJK>
-0x548B # <CJK>
-0x548C # <CJK>
-0x548E # <CJK>
-0x548F # <CJK>
-0x5490 # <CJK>
-0x5492 # <CJK>
-0x54A2 # <CJK>
-0x54A4 # <CJK>
-0x54A5 # <CJK>
-0x54A8 # <CJK>
-0x54AB # <CJK>
-0x54AC # <CJK>
-0x54AF # <CJK>
-0x54B2 # <CJK>
-0x54B3 # <CJK>
-0x54B8 # <CJK>
-0x54BC # <CJK>
-0x54BD # <CJK>
-0x54BE # <CJK>
-0x54C0 # <CJK>
-0x54C1 # <CJK>
-0x54C2 # <CJK>
-0x54C4 # <CJK>
-0x54C7 # <CJK>
-0x54C8 # <CJK>
-0x54C9 # <CJK>
-0x54D8 # <CJK>
-0x54E1 # <CJK>
-0x54E2 # <CJK>
-0x54E5 # <CJK>
-0x54E6 # <CJK>
-0x54E8 # <CJK>
-0x54E9 # <CJK>
-0x54ED # <CJK>
-0x54EE # <CJK>
-0x54F2 # <CJK>
-0x54FA # <CJK>
-0x54FD # <CJK>
-0x5504 # <CJK>
-0x5506 # <CJK>
-0x5507 # <CJK>
-0x550F # <CJK>
-0x5510 # <CJK>
-0x5514 # <CJK>
-0x5516 # <CJK>
-0x552E # <CJK>
-0x552F # <CJK>
-0x5531 # <CJK>
-0x5533 # <CJK>
-0x5538 # <CJK>
-0x5539 # <CJK>
-0x553E # <CJK>
-0x5540 # <CJK>
-0x5544 # <CJK>
-0x5545 # <CJK>
-0x5546 # <CJK>
-0x554C # <CJK>
-0x554F # <CJK>
-0x5553 # <CJK>
-0x5556 # <CJK>
-0x5557 # <CJK>
-0x555C # <CJK>
-0x555D # <CJK>
-0x5563 # <CJK>
-0x557B # <CJK>
-0x557C # <CJK>
-0x557E # <CJK>
-0x5580 # <CJK>
-0x5583 # <CJK>
-0x5584 # <CJK>
-0x5587 # <CJK>
-0x5589 # <CJK>
-0x558A # <CJK>
-0x558B # <CJK>
-0x5598 # <CJK>
-0x5599 # <CJK>
-0x559A # <CJK>
-0x559C # <CJK>
-0x559D # <CJK>
-0x559E # <CJK>
-0x559F # <CJK>
-0x55A7 # <CJK>
-0x55A8 # <CJK>
-0x55A9 # <CJK>
-0x55AA # <CJK>
-0x55AB # <CJK>
-0x55AC # <CJK>
-0x55AE # <CJK>
-0x55B0 # <CJK>
-0x55B6 # <CJK>
-0x55C4 # <CJK>
-0x55C5 # <CJK>
-0x55C7 # <CJK>
-0x55D4 # <CJK>
-0x55DA # <CJK>
-0x55DC # <CJK>
-0x55DF # <CJK>
-0x55E3 # <CJK>
-0x55E4 # <CJK>
-0x55F7 # <CJK>
-0x55F9 # <CJK>
-0x55FD # <CJK>
-0x55FE # <CJK>
-0x5606 # <CJK>
-0x5609 # <CJK>
-0x5614 # <CJK>
-0x5616 # <CJK>
-0x5617 # <CJK>
-0x5618 # <CJK>
-0x561B # <CJK>
-0x5629 # <CJK>
-0x562F # <CJK>
-0x5631 # <CJK>
-0x5632 # <CJK>
-0x5634 # <CJK>
-0x5636 # <CJK>
-0x5638 # <CJK>
-0x5642 # <CJK>
-0x564C # <CJK>
-0x564E # <CJK>
-0x5650 # <CJK>
-0x565B # <CJK>
-0x5664 # <CJK>
-0x5668 # <CJK>
-0x566A # <CJK>
-0x566B # <CJK>
-0x566C # <CJK>
-0x5674 # <CJK>
-0x5678 # <CJK>
-0x567A # <CJK>
-0x5680 # <CJK>
-0x5686 # <CJK>
-0x5687 # <CJK>
-0x568A # <CJK>
-0x568F # <CJK>
-0x5694 # <CJK>
-0x56A0 # <CJK>
-0x56A2 # <CJK>
-0x56A5 # <CJK>
-0x56AE # <CJK>
-0x56B4 # <CJK>
-0x56B6 # <CJK>
-0x56BC # <CJK>
-0x56C0 # <CJK>
-0x56C1 # <CJK>
-0x56C2 # <CJK>
-0x56C3 # <CJK>
-0x56C8 # <CJK>
-0x56CE # <CJK>
-0x56D1 # <CJK>
-0x56D3 # <CJK>
-0x56D7 # <CJK>
-0x56D8 # <CJK>
-0x56DA # <CJK>
-0x56DB # <CJK>
-0x56DE # <CJK>
-0x56E0 # <CJK>
-0x56E3 # <CJK>
-0x56EE # <CJK>
-0x56F0 # <CJK>
-0x56F2 # <CJK>
-0x56F3 # <CJK>
-0x56F9 # <CJK>
-0x56FA # <CJK>
-0x56FD # <CJK>
-0x56FF # <CJK>
-0x5700 # <CJK>
-0x5703 # <CJK>
-0x5704 # <CJK>
-0x5708 # <CJK>
-0x5709 # <CJK>
-0x570B # <CJK>
-0x570D # <CJK>
-0x570F # <CJK>
-0x5712 # <CJK>
-0x5713 # <CJK>
-0x5716 # <CJK>
-0x5718 # <CJK>
-0x571C # <CJK>
-0x571F # <CJK>
-0x5726 # <CJK>
-0x5727 # <CJK>
-0x5728 # <CJK>
-0x572D # <CJK>
-0x5730 # <CJK>
-0x5737 # <CJK>
-0x5738 # <CJK>
-0x573B # <CJK>
-0x5740 # <CJK>
-0x5742 # <CJK>
-0x5747 # <CJK>
-0x574A # <CJK>
-0x574E # <CJK>
-0x574F # <CJK>
-0x5750 # <CJK>
-0x5751 # <CJK>
-0x5761 # <CJK>
-0x5764 # <CJK>
-0x5766 # <CJK>
-0x5769 # <CJK>
-0x576A # <CJK>
-0x577F # <CJK>
-0x5782 # <CJK>
-0x5788 # <CJK>
-0x5789 # <CJK>
-0x578B # <CJK>
-0x5793 # <CJK>
-0x57A0 # <CJK>
-0x57A2 # <CJK>
-0x57A3 # <CJK>
-0x57A4 # <CJK>
-0x57AA # <CJK>
-0x57B0 # <CJK>
-0x57B3 # <CJK>
-0x57C0 # <CJK>
-0x57C3 # <CJK>
-0x57C6 # <CJK>
-0x57CB # <CJK>
-0x57CE # <CJK>
-0x57D2 # <CJK>
-0x57D3 # <CJK>
-0x57D4 # <CJK>
-0x57D6 # <CJK>
-0x57DC # <CJK>
-0x57DF # <CJK>
-0x57E0 # <CJK>
-0x57E3 # <CJK>
-0x57F4 # <CJK>
-0x57F7 # <CJK>
-0x57F9 # <CJK>
-0x57FA # <CJK>
-0x57FC # <CJK>
-0x5800 # <CJK>
-0x5802 # <CJK>
-0x5805 # <CJK>
-0x5806 # <CJK>
-0x580A # <CJK>
-0x580B # <CJK>
-0x5815 # <CJK>
-0x5819 # <CJK>
-0x581D # <CJK>
-0x5821 # <CJK>
-0x5824 # <CJK>
-0x582A # <CJK>
-0x582F # <CJK>
-0x5830 # <CJK>
-0x5831 # <CJK>
-0x5834 # <CJK>
-0x5835 # <CJK>
-0x583A # <CJK>
-0x583D # <CJK>
-0x5840 # <CJK>
-0x5841 # <CJK>
-0x584A # <CJK>
-0x584B # <CJK>
-0x5851 # <CJK>
-0x5852 # <CJK>
-0x5854 # <CJK>
-0x5857 # <CJK>
-0x5858 # <CJK>
-0x5859 # <CJK>
-0x585A # <CJK>
-0x585E # <CJK>
-0x5862 # <CJK>
-0x5869 # <CJK>
-0x586B # <CJK>
-0x5870 # <CJK>
-0x5872 # <CJK>
-0x5875 # <CJK>
-0x5879 # <CJK>
-0x587E # <CJK>
-0x5883 # <CJK>
-0x5885 # <CJK>
-0x5893 # <CJK>
-0x5897 # <CJK>
-0x589C # <CJK>
-0x589F # <CJK>
-0x58A8 # <CJK>
-0x58AB # <CJK>
-0x58AE # <CJK>
-0x58B3 # <CJK>
-0x58B8 # <CJK>
-0x58B9 # <CJK>
-0x58BA # <CJK>
-0x58BB # <CJK>
-0x58BE # <CJK>
-0x58C1 # <CJK>
-0x58C5 # <CJK>
-0x58C7 # <CJK>
-0x58CA # <CJK>
-0x58CC # <CJK>
-0x58D1 # <CJK>
-0x58D3 # <CJK>
-0x58D5 # <CJK>
-0x58D7 # <CJK>
-0x58D8 # <CJK>
-0x58D9 # <CJK>
-0x58DC # <CJK>
-0x58DE # <CJK>
-0x58DF # <CJK>
-0x58E4 # <CJK>
-0x58E5 # <CJK>
-0x58EB # <CJK>
-0x58EC # <CJK>
-0x58EE # <CJK>
-0x58EF # <CJK>
-0x58F0 # <CJK>
-0x58F1 # <CJK>
-0x58F2 # <CJK>
-0x58F7 # <CJK>
-0x58F9 # <CJK>
-0x58FA # <CJK>
-0x58FB # <CJK>
-0x58FC # <CJK>
-0x58FD # <CJK>
-0x5902 # <CJK>
-0x5909 # <CJK>
-0x590A # <CJK>
-0x590F # <CJK>
-0x5910 # <CJK>
-0x5915 # <CJK>
-0x5916 # <CJK>
-0x5918 # <CJK>
-0x5919 # <CJK>
-0x591A # <CJK>
-0x591B # <CJK>
-0x591C # <CJK>
-0x5922 # <CJK>
-0x5925 # <CJK>
-0x5927 # <CJK>
-0x5929 # <CJK>
-0x592A # <CJK>
-0x592B # <CJK>
-0x592C # <CJK>
-0x592D # <CJK>
-0x592E # <CJK>
-0x5931 # <CJK>
-0x5932 # <CJK>
-0x5937 # <CJK>
-0x5938 # <CJK>
-0x593E # <CJK>
-0x5944 # <CJK>
-0x5947 # <CJK>
-0x5948 # <CJK>
-0x5949 # <CJK>
-0x594E # <CJK>
-0x594F # <CJK>
-0x5950 # <CJK>
-0x5951 # <CJK>
-0x5954 # <CJK>
-0x5955 # <CJK>
-0x5957 # <CJK>
-0x5958 # <CJK>
-0x595A # <CJK>
-0x5960 # <CJK>
-0x5962 # <CJK>
-0x5965 # <CJK>
-0x5967 # <CJK>
-0x5968 # <CJK>
-0x5969 # <CJK>
-0x596A # <CJK>
-0x596C # <CJK>
-0x596E # <CJK>
-0x5973 # <CJK>
-0x5974 # <CJK>
-0x5978 # <CJK>
-0x597D # <CJK>
-0x5981 # <CJK>
-0x5982 # <CJK>
-0x5983 # <CJK>
-0x5984 # <CJK>
-0x598A # <CJK>
-0x598D # <CJK>
-0x5993 # <CJK>
-0x5996 # <CJK>
-0x5999 # <CJK>
-0x599B # <CJK>
-0x599D # <CJK>
-0x59A3 # <CJK>
-0x59A5 # <CJK>
-0x59A8 # <CJK>
-0x59AC # <CJK>
-0x59B2 # <CJK>
-0x59B9 # <CJK>
-0x59BB # <CJK>
-0x59BE # <CJK>
-0x59C6 # <CJK>
-0x59C9 # <CJK>
-0x59CB # <CJK>
-0x59D0 # <CJK>
-0x59D1 # <CJK>
-0x59D3 # <CJK>
-0x59D4 # <CJK>
-0x59D9 # <CJK>
-0x59DA # <CJK>
-0x59DC # <CJK>
-0x59E5 # <CJK>
-0x59E6 # <CJK>
-0x59E8 # <CJK>
-0x59EA # <CJK>
-0x59EB # <CJK>
-0x59F6 # <CJK>
-0x59FB # <CJK>
-0x59FF # <CJK>
-0x5A01 # <CJK>
-0x5A03 # <CJK>
-0x5A09 # <CJK>
-0x5A11 # <CJK>
-0x5A18 # <CJK>
-0x5A1A # <CJK>
-0x5A1C # <CJK>
-0x5A1F # <CJK>
-0x5A20 # <CJK>
-0x5A25 # <CJK>
-0x5A29 # <CJK>
-0x5A2F # <CJK>
-0x5A35 # <CJK>
-0x5A36 # <CJK>
-0x5A3C # <CJK>
-0x5A40 # <CJK>
-0x5A41 # <CJK>
-0x5A46 # <CJK>
-0x5A49 # <CJK>
-0x5A5A # <CJK>
-0x5A62 # <CJK>
-0x5A66 # <CJK>
-0x5A6A # <CJK>
-0x5A6C # <CJK>
-0x5A7F # <CJK>
-0x5A92 # <CJK>
-0x5A9A # <CJK>
-0x5A9B # <CJK>
-0x5ABC # <CJK>
-0x5ABD # <CJK>
-0x5ABE # <CJK>
-0x5AC1 # <CJK>
-0x5AC2 # <CJK>
-0x5AC9 # <CJK>
-0x5ACB # <CJK>
-0x5ACC # <CJK>
-0x5AD0 # <CJK>
-0x5AD6 # <CJK>
-0x5AD7 # <CJK>
-0x5AE1 # <CJK>
-0x5AE3 # <CJK>
-0x5AE6 # <CJK>
-0x5AE9 # <CJK>
-0x5AFA # <CJK>
-0x5AFB # <CJK>
-0x5B09 # <CJK>
-0x5B0B # <CJK>
-0x5B0C # <CJK>
-0x5B16 # <CJK>
-0x5B22 # <CJK>
-0x5B2A # <CJK>
-0x5B2C # <CJK>
-0x5B30 # <CJK>
-0x5B32 # <CJK>
-0x5B36 # <CJK>
-0x5B3E # <CJK>
-0x5B40 # <CJK>
-0x5B43 # <CJK>
-0x5B45 # <CJK>
-0x5B50 # <CJK>
-0x5B51 # <CJK>
-0x5B54 # <CJK>
-0x5B55 # <CJK>
-0x5B57 # <CJK>
-0x5B58 # <CJK>
-0x5B5A # <CJK>
-0x5B5B # <CJK>
-0x5B5C # <CJK>
-0x5B5D # <CJK>
-0x5B5F # <CJK>
-0x5B63 # <CJK>
-0x5B64 # <CJK>
-0x5B65 # <CJK>
-0x5B66 # <CJK>
-0x5B69 # <CJK>
-0x5B6B # <CJK>
-0x5B70 # <CJK>
-0x5B71 # <CJK>
-0x5B73 # <CJK>
-0x5B75 # <CJK>
-0x5B78 # <CJK>
-0x5B7A # <CJK>
-0x5B80 # <CJK>
-0x5B83 # <CJK>
-0x5B85 # <CJK>
-0x5B87 # <CJK>
-0x5B88 # <CJK>
-0x5B89 # <CJK>
-0x5B8B # <CJK>
-0x5B8C # <CJK>
-0x5B8D # <CJK>
-0x5B8F # <CJK>
-0x5B95 # <CJK>
-0x5B97 # <CJK>
-0x5B98 # <CJK>
-0x5B99 # <CJK>
-0x5B9A # <CJK>
-0x5B9B # <CJK>
-0x5B9C # <CJK>
-0x5B9D # <CJK>
-0x5B9F # <CJK>
-0x5BA2 # <CJK>
-0x5BA3 # <CJK>
-0x5BA4 # <CJK>
-0x5BA5 # <CJK>
-0x5BA6 # <CJK>
-0x5BAE # <CJK>
-0x5BB0 # <CJK>
-0x5BB3 # <CJK>
-0x5BB4 # <CJK>
-0x5BB5 # <CJK>
-0x5BB6 # <CJK>
-0x5BB8 # <CJK>
-0x5BB9 # <CJK>
-0x5BBF # <CJK>
-0x5BC2 # <CJK>
-0x5BC3 # <CJK>
-0x5BC4 # <CJK>
-0x5BC5 # <CJK>
-0x5BC6 # <CJK>
-0x5BC7 # <CJK>
-0x5BC9 # <CJK>
-0x5BCC # <CJK>
-0x5BD0 # <CJK>
-0x5BD2 # <CJK>
-0x5BD3 # <CJK>
-0x5BD4 # <CJK>
-0x5BDB # <CJK>
-0x5BDD # <CJK>
-0x5BDE # <CJK>
-0x5BDF # <CJK>
-0x5BE1 # <CJK>
-0x5BE2 # <CJK>
-0x5BE4 # <CJK>
-0x5BE5 # <CJK>
-0x5BE6 # <CJK>
-0x5BE7 # <CJK>
-0x5BE8 # <CJK>
-0x5BE9 # <CJK>
-0x5BEB # <CJK>
-0x5BEE # <CJK>
-0x5BF0 # <CJK>
-0x5BF3 # <CJK>
-0x5BF5 # <CJK>
-0x5BF6 # <CJK>
-0x5BF8 # <CJK>
-0x5BFA # <CJK>
-0x5BFE # <CJK>
-0x5BFF # <CJK>
-0x5C01 # <CJK>
-0x5C02 # <CJK>
-0x5C04 # <CJK>
-0x5C05 # <CJK>
-0x5C06 # <CJK>
-0x5C07 # <CJK>
-0x5C08 # <CJK>
-0x5C09 # <CJK>
-0x5C0A # <CJK>
-0x5C0B # <CJK>
-0x5C0D # <CJK>
-0x5C0E # <CJK>
-0x5C0F # <CJK>
-0x5C11 # <CJK>
-0x5C13 # <CJK>
-0x5C16 # <CJK>
-0x5C1A # <CJK>
-0x5C20 # <CJK>
-0x5C22 # <CJK>
-0x5C24 # <CJK>
-0x5C28 # <CJK>
-0x5C2D # <CJK>
-0x5C31 # <CJK>
-0x5C38 # <CJK>
-0x5C39 # <CJK>
-0x5C3A # <CJK>
-0x5C3B # <CJK>
-0x5C3C # <CJK>
-0x5C3D # <CJK>
-0x5C3E # <CJK>
-0x5C3F # <CJK>
-0x5C40 # <CJK>
-0x5C41 # <CJK>
-0x5C45 # <CJK>
-0x5C46 # <CJK>
-0x5C48 # <CJK>
-0x5C4A # <CJK>
-0x5C4B # <CJK>
-0x5C4D # <CJK>
-0x5C4E # <CJK>
-0x5C4F # <CJK>
-0x5C50 # <CJK>
-0x5C51 # <CJK>
-0x5C53 # <CJK>
-0x5C55 # <CJK>
-0x5C5E # <CJK>
-0x5C60 # <CJK>
-0x5C61 # <CJK>
-0x5C64 # <CJK>
-0x5C65 # <CJK>
-0x5C6C # <CJK>
-0x5C6E # <CJK>
-0x5C6F # <CJK>
-0x5C71 # <CJK>
-0x5C76 # <CJK>
-0x5C79 # <CJK>
-0x5C8C # <CJK>
-0x5C90 # <CJK>
-0x5C91 # <CJK>
-0x5C94 # <CJK>
-0x5CA1 # <CJK>
-0x5CA8 # <CJK>
-0x5CA9 # <CJK>
-0x5CAB # <CJK>
-0x5CAC # <CJK>
-0x5CB1 # <CJK>
-0x5CB3 # <CJK>
-0x5CB6 # <CJK>
-0x5CB7 # <CJK>
-0x5CB8 # <CJK>
-0x5CBB # <CJK>
-0x5CBC # <CJK>
-0x5CBE # <CJK>
-0x5CC5 # <CJK>
-0x5CC7 # <CJK>
-0x5CD9 # <CJK>
-0x5CE0 # <CJK>
-0x5CE1 # <CJK>
-0x5CE8 # <CJK>
-0x5CE9 # <CJK>
-0x5CEA # <CJK>
-0x5CED # <CJK>
-0x5CEF # <CJK>
-0x5CF0 # <CJK>
-0x5CF6 # <CJK>
-0x5CFA # <CJK>
-0x5CFB # <CJK>
-0x5CFD # <CJK>
-0x5D07 # <CJK>
-0x5D0B # <CJK>
-0x5D0E # <CJK>
-0x5D11 # <CJK>
-0x5D14 # <CJK>
-0x5D15 # <CJK>
-0x5D16 # <CJK>
-0x5D17 # <CJK>
-0x5D18 # <CJK>
-0x5D19 # <CJK>
-0x5D1A # <CJK>
-0x5D1B # <CJK>
-0x5D1F # <CJK>
-0x5D22 # <CJK>
-0x5D29 # <CJK>
-0x5D4B # <CJK>
-0x5D4C # <CJK>
-0x5D4E # <CJK>
-0x5D50 # <CJK>
-0x5D52 # <CJK>
-0x5D5C # <CJK>
-0x5D69 # <CJK>
-0x5D6C # <CJK>
-0x5D6F # <CJK>
-0x5D73 # <CJK>
-0x5D76 # <CJK>
-0x5D82 # <CJK>
-0x5D84 # <CJK>
-0x5D87 # <CJK>
-0x5D8B # <CJK>
-0x5D8C # <CJK>
-0x5D90 # <CJK>
-0x5D9D # <CJK>
-0x5DA2 # <CJK>
-0x5DAC # <CJK>
-0x5DAE # <CJK>
-0x5DB7 # <CJK>
-0x5DBA # <CJK>
-0x5DBC # <CJK>
-0x5DBD # <CJK>
-0x5DC9 # <CJK>
-0x5DCC # <CJK>
-0x5DCD # <CJK>
-0x5DD2 # <CJK>
-0x5DD3 # <CJK>
-0x5DD6 # <CJK>
-0x5DDB # <CJK>
-0x5DDD # <CJK>
-0x5DDE # <CJK>
-0x5DE1 # <CJK>
-0x5DE3 # <CJK>
-0x5DE5 # <CJK>
-0x5DE6 # <CJK>
-0x5DE7 # <CJK>
-0x5DE8 # <CJK>
-0x5DEB # <CJK>
-0x5DEE # <CJK>
-0x5DF1 # <CJK>
-0x5DF2 # <CJK>
-0x5DF3 # <CJK>
-0x5DF4 # <CJK>
-0x5DF5 # <CJK>
-0x5DF7 # <CJK>
-0x5DFB # <CJK>
-0x5DFD # <CJK>
-0x5DFE # <CJK>
-0x5E02 # <CJK>
-0x5E03 # <CJK>
-0x5E06 # <CJK>
-0x5E0B # <CJK>
-0x5E0C # <CJK>
-0x5E11 # <CJK>
-0x5E16 # <CJK>
-0x5E19 # <CJK>
-0x5E1A # <CJK>
-0x5E1B # <CJK>
-0x5E1D # <CJK>
-0x5E25 # <CJK>
-0x5E2B # <CJK>
-0x5E2D # <CJK>
-0x5E2F # <CJK>
-0x5E30 # <CJK>
-0x5E33 # <CJK>
-0x5E36 # <CJK>
-0x5E37 # <CJK>
-0x5E38 # <CJK>
-0x5E3D # <CJK>
-0x5E40 # <CJK>
-0x5E43 # <CJK>
-0x5E44 # <CJK>
-0x5E45 # <CJK>
-0x5E47 # <CJK>
-0x5E4C # <CJK>
-0x5E4E # <CJK>
-0x5E54 # <CJK>
-0x5E55 # <CJK>
-0x5E57 # <CJK>
-0x5E5F # <CJK>
-0x5E61 # <CJK>
-0x5E62 # <CJK>
-0x5E63 # <CJK>
-0x5E64 # <CJK>
-0x5E72 # <CJK>
-0x5E73 # <CJK>
-0x5E74 # <CJK>
-0x5E75 # <CJK>
-0x5E76 # <CJK>
-0x5E78 # <CJK>
-0x5E79 # <CJK>
-0x5E7A # <CJK>
-0x5E7B # <CJK>
-0x5E7C # <CJK>
-0x5E7D # <CJK>
-0x5E7E # <CJK>
-0x5E7F # <CJK>
-0x5E81 # <CJK>
-0x5E83 # <CJK>
-0x5E84 # <CJK>
-0x5E87 # <CJK>
-0x5E8A # <CJK>
-0x5E8F # <CJK>
-0x5E95 # <CJK>
-0x5E96 # <CJK>
-0x5E97 # <CJK>
-0x5E9A # <CJK>
-0x5E9C # <CJK>
-0x5EA0 # <CJK>
-0x5EA6 # <CJK>
-0x5EA7 # <CJK>
-0x5EAB # <CJK>
-0x5EAD # <CJK>
-0x5EB5 # <CJK>
-0x5EB6 # <CJK>
-0x5EB7 # <CJK>
-0x5EB8 # <CJK>
-0x5EC1 # <CJK>
-0x5EC2 # <CJK>
-0x5EC3 # <CJK>
-0x5EC8 # <CJK>
-0x5EC9 # <CJK>
-0x5ECA # <CJK>
-0x5ECF # <CJK>
-0x5ED0 # <CJK>
-0x5ED3 # <CJK>
-0x5ED6 # <CJK>
-0x5EDA # <CJK>
-0x5EDB # <CJK>
-0x5EDD # <CJK>
-0x5EDF # <CJK>
-0x5EE0 # <CJK>
-0x5EE1 # <CJK>
-0x5EE2 # <CJK>
-0x5EE3 # <CJK>
-0x5EE8 # <CJK>
-0x5EE9 # <CJK>
-0x5EEC # <CJK>
-0x5EF0 # <CJK>
-0x5EF1 # <CJK>
-0x5EF3 # <CJK>
-0x5EF4 # <CJK>
-0x5EF6 # <CJK>
-0x5EF7 # <CJK>
-0x5EF8 # <CJK>
-0x5EFA # <CJK>
-0x5EFB # <CJK>
-0x5EFC # <CJK>
-0x5EFE # <CJK>
-0x5EFF # <CJK>
-0x5F01 # <CJK>
-0x5F03 # <CJK>
-0x5F04 # <CJK>
-0x5F09 # <CJK>
-0x5F0A # <CJK>
-0x5F0B # <CJK>
-0x5F0C # <CJK>
-0x5F0D # <CJK>
-0x5F0F # <CJK>
-0x5F10 # <CJK>
-0x5F11 # <CJK>
-0x5F13 # <CJK>
-0x5F14 # <CJK>
-0x5F15 # <CJK>
-0x5F16 # <CJK>
-0x5F17 # <CJK>
-0x5F18 # <CJK>
-0x5F1B # <CJK>
-0x5F1F # <CJK>
-0x5F25 # <CJK>
-0x5F26 # <CJK>
-0x5F27 # <CJK>
-0x5F29 # <CJK>
-0x5F2D # <CJK>
-0x5F2F # <CJK>
-0x5F31 # <CJK>
-0x5F35 # <CJK>
-0x5F37 # <CJK>
-0x5F38 # <CJK>
-0x5F3C # <CJK>
-0x5F3E # <CJK>
-0x5F41 # <CJK>
-0x5F48 # <CJK>
-0x5F4A # <CJK>
-0x5F4C # <CJK>
-0x5F4E # <CJK>
-0x5F51 # <CJK>
-0x5F53 # <CJK>
-0x5F56 # <CJK>
-0x5F57 # <CJK>
-0x5F59 # <CJK>
-0x5F5C # <CJK>
-0x5F5D # <CJK>
-0x5F61 # <CJK>
-0x5F62 # <CJK>
-0x5F66 # <CJK>
-0x5F69 # <CJK>
-0x5F6A # <CJK>
-0x5F6B # <CJK>
-0x5F6C # <CJK>
-0x5F6D # <CJK>
-0x5F70 # <CJK>
-0x5F71 # <CJK>
-0x5F73 # <CJK>
-0x5F77 # <CJK>
-0x5F79 # <CJK>
-0x5F7C # <CJK>
-0x5F7F # <CJK>
-0x5F80 # <CJK>
-0x5F81 # <CJK>
-0x5F82 # <CJK>
-0x5F83 # <CJK>
-0x5F84 # <CJK>
-0x5F85 # <CJK>
-0x5F87 # <CJK>
-0x5F88 # <CJK>
-0x5F8A # <CJK>
-0x5F8B # <CJK>
-0x5F8C # <CJK>
-0x5F90 # <CJK>
-0x5F91 # <CJK>
-0x5F92 # <CJK>
-0x5F93 # <CJK>
-0x5F97 # <CJK>
-0x5F98 # <CJK>
-0x5F99 # <CJK>
-0x5F9E # <CJK>
-0x5FA0 # <CJK>
-0x5FA1 # <CJK>
-0x5FA8 # <CJK>
-0x5FA9 # <CJK>
-0x5FAA # <CJK>
-0x5FAD # <CJK>
-0x5FAE # <CJK>
-0x5FB3 # <CJK>
-0x5FB4 # <CJK>
-0x5FB9 # <CJK>
-0x5FBC # <CJK>
-0x5FBD # <CJK>
-0x5FC3 # <CJK>
-0x5FC5 # <CJK>
-0x5FCC # <CJK>
-0x5FCD # <CJK>
-0x5FD6 # <CJK>
-0x5FD7 # <CJK>
-0x5FD8 # <CJK>
-0x5FD9 # <CJK>
-0x5FDC # <CJK>
-0x5FDD # <CJK>
-0x5FE0 # <CJK>
-0x5FE4 # <CJK>
-0x5FEB # <CJK>
-0x5FF0 # <CJK>
-0x5FF1 # <CJK>
-0x5FF5 # <CJK>
-0x5FF8 # <CJK>
-0x5FFB # <CJK>
-0x5FFD # <CJK>
-0x5FFF # <CJK>
-0x600E # <CJK>
-0x600F # <CJK>
-0x6010 # <CJK>
-0x6012 # <CJK>
-0x6015 # <CJK>
-0x6016 # <CJK>
-0x6019 # <CJK>
-0x601B # <CJK>
-0x601C # <CJK>
-0x601D # <CJK>
-0x6020 # <CJK>
-0x6021 # <CJK>
-0x6025 # <CJK>
-0x6026 # <CJK>
-0x6027 # <CJK>
-0x6028 # <CJK>
-0x6029 # <CJK>
-0x602A # <CJK>
-0x602B # <CJK>
-0x602F # <CJK>
-0x6031 # <CJK>
-0x603A # <CJK>
-0x6041 # <CJK>
-0x6042 # <CJK>
-0x6043 # <CJK>
-0x6046 # <CJK>
-0x604A # <CJK>
-0x604B # <CJK>
-0x604D # <CJK>
-0x6050 # <CJK>
-0x6052 # <CJK>
-0x6055 # <CJK>
-0x6059 # <CJK>
-0x605A # <CJK>
-0x605F # <CJK>
-0x6060 # <CJK>
-0x6062 # <CJK>
-0x6063 # <CJK>
-0x6064 # <CJK>
-0x6065 # <CJK>
-0x6068 # <CJK>
-0x6069 # <CJK>
-0x606A # <CJK>
-0x606B # <CJK>
-0x606C # <CJK>
-0x606D # <CJK>
-0x606F # <CJK>
-0x6070 # <CJK>
-0x6075 # <CJK>
-0x6077 # <CJK>
-0x6081 # <CJK>
-0x6083 # <CJK>
-0x6084 # <CJK>
-0x6089 # <CJK>
-0x608B # <CJK>
-0x608C # <CJK>
-0x608D # <CJK>
-0x6092 # <CJK>
-0x6094 # <CJK>
-0x6096 # <CJK>
-0x6097 # <CJK>
-0x609A # <CJK>
-0x609B # <CJK>
-0x609F # <CJK>
-0x60A0 # <CJK>
-0x60A3 # <CJK>
-0x60A6 # <CJK>
-0x60A7 # <CJK>
-0x60A9 # <CJK>
-0x60AA # <CJK>
-0x60B2 # <CJK>
-0x60B3 # <CJK>
-0x60B4 # <CJK>
-0x60B5 # <CJK>
-0x60B6 # <CJK>
-0x60B8 # <CJK>
-0x60BC # <CJK>
-0x60BD # <CJK>
-0x60C5 # <CJK>
-0x60C6 # <CJK>
-0x60C7 # <CJK>
-0x60D1 # <CJK>
-0x60D3 # <CJK>
-0x60D8 # <CJK>
-0x60DA # <CJK>
-0x60DC # <CJK>
-0x60DF # <CJK>
-0x60E0 # <CJK>
-0x60E1 # <CJK>
-0x60E3 # <CJK>
-0x60E7 # <CJK>
-0x60E8 # <CJK>
-0x60F0 # <CJK>
-0x60F1 # <CJK>
-0x60F3 # <CJK>
-0x60F4 # <CJK>
-0x60F6 # <CJK>
-0x60F7 # <CJK>
-0x60F9 # <CJK>
-0x60FA # <CJK>
-0x60FB # <CJK>
-0x6100 # <CJK>
-0x6101 # <CJK>
-0x6103 # <CJK>
-0x6106 # <CJK>
-0x6108 # <CJK>
-0x6109 # <CJK>
-0x610D # <CJK>
-0x610E # <CJK>
-0x610F # <CJK>
-0x6115 # <CJK>
-0x611A # <CJK>
-0x611B # <CJK>
-0x611F # <CJK>
-0x6121 # <CJK>
-0x6127 # <CJK>
-0x6128 # <CJK>
-0x612C # <CJK>
-0x6134 # <CJK>
-0x613C # <CJK>
-0x613D # <CJK>
-0x613E # <CJK>
-0x613F # <CJK>
-0x6142 # <CJK>
-0x6144 # <CJK>
-0x6147 # <CJK>
-0x6148 # <CJK>
-0x614A # <CJK>
-0x614B # <CJK>
-0x614C # <CJK>
-0x614D # <CJK>
-0x614E # <CJK>
-0x6153 # <CJK>
-0x6155 # <CJK>
-0x6158 # <CJK>
-0x6159 # <CJK>
-0x615A # <CJK>
-0x615D # <CJK>
-0x615F # <CJK>
-0x6162 # <CJK>
-0x6163 # <CJK>
-0x6165 # <CJK>
-0x6167 # <CJK>
-0x6168 # <CJK>
-0x616B # <CJK>
-0x616E # <CJK>
-0x616F # <CJK>
-0x6170 # <CJK>
-0x6171 # <CJK>
-0x6173 # <CJK>
-0x6174 # <CJK>
-0x6175 # <CJK>
-0x6176 # <CJK>
-0x6177 # <CJK>
-0x617E # <CJK>
-0x6182 # <CJK>
-0x6187 # <CJK>
-0x618A # <CJK>
-0x618E # <CJK>
-0x6190 # <CJK>
-0x6191 # <CJK>
-0x6194 # <CJK>
-0x6196 # <CJK>
-0x6199 # <CJK>
-0x619A # <CJK>
-0x61A4 # <CJK>
-0x61A7 # <CJK>
-0x61A9 # <CJK>
-0x61AB # <CJK>
-0x61AC # <CJK>
-0x61AE # <CJK>
-0x61B2 # <CJK>
-0x61B6 # <CJK>
-0x61BA # <CJK>
-0x61BE # <CJK>
-0x61C3 # <CJK>
-0x61C6 # <CJK>
-0x61C7 # <CJK>
-0x61C8 # <CJK>
-0x61C9 # <CJK>
-0x61CA # <CJK>
-0x61CB # <CJK>
-0x61CC # <CJK>
-0x61CD # <CJK>
-0x61D0 # <CJK>
-0x61E3 # <CJK>
-0x61E6 # <CJK>
-0x61F2 # <CJK>
-0x61F4 # <CJK>
-0x61F6 # <CJK>
-0x61F7 # <CJK>
-0x61F8 # <CJK>
-0x61FA # <CJK>
-0x61FC # <CJK>
-0x61FD # <CJK>
-0x61FE # <CJK>
-0x61FF # <CJK>
-0x6200 # <CJK>
-0x6208 # <CJK>
-0x6209 # <CJK>
-0x620A # <CJK>
-0x620C # <CJK>
-0x620D # <CJK>
-0x620E # <CJK>
-0x6210 # <CJK>
-0x6211 # <CJK>
-0x6212 # <CJK>
-0x6214 # <CJK>
-0x6216 # <CJK>
-0x621A # <CJK>
-0x621B # <CJK>
-0x621D # <CJK>
-0x621E # <CJK>
-0x621F # <CJK>
-0x6221 # <CJK>
-0x6226 # <CJK>
-0x622A # <CJK>
-0x622E # <CJK>
-0x622F # <CJK>
-0x6230 # <CJK>
-0x6232 # <CJK>
-0x6233 # <CJK>
-0x6234 # <CJK>
-0x6238 # <CJK>
-0x623B # <CJK>
-0x623F # <CJK>
-0x6240 # <CJK>
-0x6241 # <CJK>
-0x6247 # <CJK>
-0x6248 # <CJK>
-0x6249 # <CJK>
-0x624B # <CJK>
-0x624D # <CJK>
-0x624E # <CJK>
-0x6253 # <CJK>
-0x6255 # <CJK>
-0x6258 # <CJK>
-0x625B # <CJK>
-0x625E # <CJK>
-0x6260 # <CJK>
-0x6263 # <CJK>
-0x6268 # <CJK>
-0x626E # <CJK>
-0x6271 # <CJK>
-0x6276 # <CJK>
-0x6279 # <CJK>
-0x627C # <CJK>
-0x627E # <CJK>
-0x627F # <CJK>
-0x6280 # <CJK>
-0x6282 # <CJK>
-0x6283 # <CJK>
-0x6284 # <CJK>
-0x6289 # <CJK>
-0x628A # <CJK>
-0x6291 # <CJK>
-0x6292 # <CJK>
-0x6293 # <CJK>
-0x6294 # <CJK>
-0x6295 # <CJK>
-0x6296 # <CJK>
-0x6297 # <CJK>
-0x6298 # <CJK>
-0x629B # <CJK>
-0x629C # <CJK>
-0x629E # <CJK>
-0x62AB # <CJK>
-0x62AC # <CJK>
-0x62B1 # <CJK>
-0x62B5 # <CJK>
-0x62B9 # <CJK>
-0x62BB # <CJK>
-0x62BC # <CJK>
-0x62BD # <CJK>
-0x62C2 # <CJK>
-0x62C5 # <CJK>
-0x62C6 # <CJK>
-0x62C7 # <CJK>
-0x62C8 # <CJK>
-0x62C9 # <CJK>
-0x62CA # <CJK>
-0x62CC # <CJK>
-0x62CD # <CJK>
-0x62CF # <CJK>
-0x62D0 # <CJK>
-0x62D1 # <CJK>
-0x62D2 # <CJK>
-0x62D3 # <CJK>
-0x62D4 # <CJK>
-0x62D7 # <CJK>
-0x62D8 # <CJK>
-0x62D9 # <CJK>
-0x62DB # <CJK>
-0x62DC # <CJK>
-0x62DD # <CJK>
-0x62E0 # <CJK>
-0x62E1 # <CJK>
-0x62EC # <CJK>
-0x62ED # <CJK>
-0x62EE # <CJK>
-0x62EF # <CJK>
-0x62F1 # <CJK>
-0x62F3 # <CJK>
-0x62F5 # <CJK>
-0x62F6 # <CJK>
-0x62F7 # <CJK>
-0x62FE # <CJK>
-0x62FF # <CJK>
-0x6301 # <CJK>
-0x6302 # <CJK>
-0x6307 # <CJK>
-0x6308 # <CJK>
-0x6309 # <CJK>
-0x630C # <CJK>
-0x6311 # <CJK>
-0x6319 # <CJK>
-0x631F # <CJK>
-0x6327 # <CJK>
-0x6328 # <CJK>
-0x632B # <CJK>
-0x632F # <CJK>
-0x633A # <CJK>
-0x633D # <CJK>
-0x633E # <CJK>
-0x633F # <CJK>
-0x6349 # <CJK>
-0x634C # <CJK>
-0x634D # <CJK>
-0x634F # <CJK>
-0x6350 # <CJK>
-0x6355 # <CJK>
-0x6357 # <CJK>
-0x635C # <CJK>
-0x6367 # <CJK>
-0x6368 # <CJK>
-0x6369 # <CJK>
-0x636B # <CJK>
-0x636E # <CJK>
-0x6372 # <CJK>
-0x6376 # <CJK>
-0x6377 # <CJK>
-0x637A # <CJK>
-0x637B # <CJK>
-0x6380 # <CJK>
-0x6383 # <CJK>
-0x6388 # <CJK>
-0x6389 # <CJK>
-0x638C # <CJK>
-0x638E # <CJK>
-0x638F # <CJK>
-0x6392 # <CJK>
-0x6396 # <CJK>
-0x6398 # <CJK>
-0x639B # <CJK>
-0x639F # <CJK>
-0x63A0 # <CJK>
-0x63A1 # <CJK>
-0x63A2 # <CJK>
-0x63A3 # <CJK>
-0x63A5 # <CJK>
-0x63A7 # <CJK>
-0x63A8 # <CJK>
-0x63A9 # <CJK>
-0x63AA # <CJK>
-0x63AB # <CJK>
-0x63AC # <CJK>
-0x63B2 # <CJK>
-0x63B4 # <CJK>
-0x63B5 # <CJK>
-0x63BB # <CJK>
-0x63BE # <CJK>
-0x63C0 # <CJK>
-0x63C3 # <CJK>
-0x63C4 # <CJK>
-0x63C6 # <CJK>
-0x63C9 # <CJK>
-0x63CF # <CJK>
-0x63D0 # <CJK>
-0x63D2 # <CJK>
-0x63D6 # <CJK>
-0x63DA # <CJK>
-0x63DB # <CJK>
-0x63E1 # <CJK>
-0x63E3 # <CJK>
-0x63E9 # <CJK>
-0x63EE # <CJK>
-0x63F4 # <CJK>
-0x63F6 # <CJK>
-0x63FA # <CJK>
-0x6406 # <CJK>
-0x640D # <CJK>
-0x640F # <CJK>
-0x6413 # <CJK>
-0x6416 # <CJK>
-0x6417 # <CJK>
-0x641C # <CJK>
-0x6426 # <CJK>
-0x6428 # <CJK>
-0x642C # <CJK>
-0x642D # <CJK>
-0x6434 # <CJK>
-0x6436 # <CJK>
-0x643A # <CJK>
-0x643E # <CJK>
-0x6442 # <CJK>
-0x644E # <CJK>
-0x6458 # <CJK>
-0x6467 # <CJK>
-0x6469 # <CJK>
-0x646F # <CJK>
-0x6476 # <CJK>
-0x6478 # <CJK>
-0x647A # <CJK>
-0x6483 # <CJK>
-0x6488 # <CJK>
-0x6492 # <CJK>
-0x6493 # <CJK>
-0x6495 # <CJK>
-0x649A # <CJK>
-0x649E # <CJK>
-0x64A4 # <CJK>
-0x64A5 # <CJK>
-0x64A9 # <CJK>
-0x64AB # <CJK>
-0x64AD # <CJK>
-0x64AE # <CJK>
-0x64B0 # <CJK>
-0x64B2 # <CJK>
-0x64B9 # <CJK>
-0x64BB # <CJK>
-0x64BC # <CJK>
-0x64C1 # <CJK>
-0x64C2 # <CJK>
-0x64C5 # <CJK>
-0x64C7 # <CJK>
-0x64CD # <CJK>
-0x64D2 # <CJK>
-0x64D4 # <CJK>
-0x64D8 # <CJK>
-0x64DA # <CJK>
-0x64E0 # <CJK>
-0x64E1 # <CJK>
-0x64E2 # <CJK>
-0x64E3 # <CJK>
-0x64E6 # <CJK>
-0x64E7 # <CJK>
-0x64EC # <CJK>
-0x64EF # <CJK>
-0x64F1 # <CJK>
-0x64F2 # <CJK>
-0x64F4 # <CJK>
-0x64F6 # <CJK>
-0x64FA # <CJK>
-0x64FD # <CJK>
-0x64FE # <CJK>
-0x6500 # <CJK>
-0x6505 # <CJK>
-0x6518 # <CJK>
-0x651C # <CJK>
-0x651D # <CJK>
-0x6523 # <CJK>
-0x6524 # <CJK>
-0x652A # <CJK>
-0x652B # <CJK>
-0x652C # <CJK>
-0x652F # <CJK>
-0x6534 # <CJK>
-0x6535 # <CJK>
-0x6536 # <CJK>
-0x6537 # <CJK>
-0x6538 # <CJK>
-0x6539 # <CJK>
-0x653B # <CJK>
-0x653E # <CJK>
-0x653F # <CJK>
-0x6545 # <CJK>
-0x6548 # <CJK>
-0x654D # <CJK>
-0x654F # <CJK>
-0x6551 # <CJK>
-0x6555 # <CJK>
-0x6556 # <CJK>
-0x6557 # <CJK>
-0x6558 # <CJK>
-0x6559 # <CJK>
-0x655D # <CJK>
-0x655E # <CJK>
-0x6562 # <CJK>
-0x6563 # <CJK>
-0x6566 # <CJK>
-0x656C # <CJK>
-0x6570 # <CJK>
-0x6572 # <CJK>
-0x6574 # <CJK>
-0x6575 # <CJK>
-0x6577 # <CJK>
-0x6578 # <CJK>
-0x6582 # <CJK>
-0x6583 # <CJK>
-0x6587 # <CJK>
-0x6588 # <CJK>
-0x6589 # <CJK>
-0x658C # <CJK>
-0x658E # <CJK>
-0x6590 # <CJK>
-0x6591 # <CJK>
-0x6597 # <CJK>
-0x6599 # <CJK>
-0x659B # <CJK>
-0x659C # <CJK>
-0x659F # <CJK>
-0x65A1 # <CJK>
-0x65A4 # <CJK>
-0x65A5 # <CJK>
-0x65A7 # <CJK>
-0x65AB # <CJK>
-0x65AC # <CJK>
-0x65AD # <CJK>
-0x65AF # <CJK>
-0x65B0 # <CJK>
-0x65B7 # <CJK>
-0x65B9 # <CJK>
-0x65BC # <CJK>
-0x65BD # <CJK>
-0x65C1 # <CJK>
-0x65C3 # <CJK>
-0x65C4 # <CJK>
-0x65C5 # <CJK>
-0x65C6 # <CJK>
-0x65CB # <CJK>
-0x65CC # <CJK>
-0x65CF # <CJK>
-0x65D2 # <CJK>
-0x65D7 # <CJK>
-0x65D9 # <CJK>
-0x65DB # <CJK>
-0x65E0 # <CJK>
-0x65E1 # <CJK>
-0x65E2 # <CJK>
-0x65E5 # <CJK>
-0x65E6 # <CJK>
-0x65E7 # <CJK>
-0x65E8 # <CJK>
-0x65E9 # <CJK>
-0x65EC # <CJK>
-0x65ED # <CJK>
-0x65F1 # <CJK>
-0x65FA # <CJK>
-0x65FB # <CJK>
-0x6602 # <CJK>
-0x6603 # <CJK>
-0x6606 # <CJK>
-0x6607 # <CJK>
-0x660A # <CJK>
-0x660C # <CJK>
-0x660E # <CJK>
-0x660F # <CJK>
-0x6613 # <CJK>
-0x6614 # <CJK>
-0x661C # <CJK>
-0x661F # <CJK>
-0x6620 # <CJK>
-0x6625 # <CJK>
-0x6627 # <CJK>
-0x6628 # <CJK>
-0x662D # <CJK>
-0x662F # <CJK>
-0x6634 # <CJK>
-0x6635 # <CJK>
-0x6636 # <CJK>
-0x663C # <CJK>
-0x663F # <CJK>
-0x6641 # <CJK>
-0x6642 # <CJK>
-0x6643 # <CJK>
-0x6644 # <CJK>
-0x6649 # <CJK>
-0x664B # <CJK>
-0x664F # <CJK>
-0x6652 # <CJK>
-0x665D # <CJK>
-0x665E # <CJK>
-0x665F # <CJK>
-0x6662 # <CJK>
-0x6664 # <CJK>
-0x6666 # <CJK>
-0x6667 # <CJK>
-0x6668 # <CJK>
-0x6669 # <CJK>
-0x666E # <CJK>
-0x666F # <CJK>
-0x6670 # <CJK>
-0x6674 # <CJK>
-0x6676 # <CJK>
-0x667A # <CJK>
-0x6681 # <CJK>
-0x6683 # <CJK>
-0x6684 # <CJK>
-0x6687 # <CJK>
-0x6688 # <CJK>
-0x6689 # <CJK>
-0x668E # <CJK>
-0x6691 # <CJK>
-0x6696 # <CJK>
-0x6697 # <CJK>
-0x6698 # <CJK>
-0x669D # <CJK>
-0x66A2 # <CJK>
-0x66A6 # <CJK>
-0x66AB # <CJK>
-0x66AE # <CJK>
-0x66B4 # <CJK>
-0x66B8 # <CJK>
-0x66B9 # <CJK>
-0x66BC # <CJK>
-0x66BE # <CJK>
-0x66C1 # <CJK>
-0x66C4 # <CJK>
-0x66C7 # <CJK>
-0x66C9 # <CJK>
-0x66D6 # <CJK>
-0x66D9 # <CJK>
-0x66DA # <CJK>
-0x66DC # <CJK>
-0x66DD # <CJK>
-0x66E0 # <CJK>
-0x66E6 # <CJK>
-0x66E9 # <CJK>
-0x66F0 # <CJK>
-0x66F2 # <CJK>
-0x66F3 # <CJK>
-0x66F4 # <CJK>
-0x66F5 # <CJK>
-0x66F7 # <CJK>
-0x66F8 # <CJK>
-0x66F9 # <CJK>
-0x66FC # <CJK>
-0x66FD # <CJK>
-0x66FE # <CJK>
-0x66FF # <CJK>
-0x6700 # <CJK>
-0x6703 # <CJK>
-0x6708 # <CJK>
-0x6709 # <CJK>
-0x670B # <CJK>
-0x670D # <CJK>
-0x670F # <CJK>
-0x6714 # <CJK>
-0x6715 # <CJK>
-0x6716 # <CJK>
-0x6717 # <CJK>
-0x671B # <CJK>
-0x671D # <CJK>
-0x671E # <CJK>
-0x671F # <CJK>
-0x6726 # <CJK>
-0x6727 # <CJK>
-0x6728 # <CJK>
-0x672A # <CJK>
-0x672B # <CJK>
-0x672C # <CJK>
-0x672D # <CJK>
-0x672E # <CJK>
-0x6731 # <CJK>
-0x6734 # <CJK>
-0x6736 # <CJK>
-0x6737 # <CJK>
-0x6738 # <CJK>
-0x673A # <CJK>
-0x673D # <CJK>
-0x673F # <CJK>
-0x6741 # <CJK>
-0x6746 # <CJK>
-0x6749 # <CJK>
-0x674E # <CJK>
-0x674F # <CJK>
-0x6750 # <CJK>
-0x6751 # <CJK>
-0x6753 # <CJK>
-0x6756 # <CJK>
-0x6759 # <CJK>
-0x675C # <CJK>
-0x675E # <CJK>
-0x675F # <CJK>
-0x6760 # <CJK>
-0x6761 # <CJK>
-0x6762 # <CJK>
-0x6763 # <CJK>
-0x6764 # <CJK>
-0x6765 # <CJK>
-0x676A # <CJK>
-0x676D # <CJK>
-0x676F # <CJK>
-0x6770 # <CJK>
-0x6771 # <CJK>
-0x6772 # <CJK>
-0x6773 # <CJK>
-0x6775 # <CJK>
-0x6777 # <CJK>
-0x677C # <CJK>
-0x677E # <CJK>
-0x677F # <CJK>
-0x6785 # <CJK>
-0x6787 # <CJK>
-0x6789 # <CJK>
-0x678B # <CJK>
-0x678C # <CJK>
-0x6790 # <CJK>
-0x6795 # <CJK>
-0x6797 # <CJK>
-0x679A # <CJK>
-0x679C # <CJK>
-0x679D # <CJK>
-0x67A0 # <CJK>
-0x67A1 # <CJK>
-0x67A2 # <CJK>
-0x67A6 # <CJK>
-0x67A9 # <CJK>
-0x67AF # <CJK>
-0x67B3 # <CJK>
-0x67B4 # <CJK>
-0x67B6 # <CJK>
-0x67B7 # <CJK>
-0x67B8 # <CJK>
-0x67B9 # <CJK>
-0x67C1 # <CJK>
-0x67C4 # <CJK>
-0x67C6 # <CJK>
-0x67CA # <CJK>
-0x67CE # <CJK>
-0x67CF # <CJK>
-0x67D0 # <CJK>
-0x67D1 # <CJK>
-0x67D3 # <CJK>
-0x67D4 # <CJK>
-0x67D8 # <CJK>
-0x67DA # <CJK>
-0x67DD # <CJK>
-0x67DE # <CJK>
-0x67E2 # <CJK>
-0x67E4 # <CJK>
-0x67E7 # <CJK>
-0x67E9 # <CJK>
-0x67EC # <CJK>
-0x67EE # <CJK>
-0x67EF # <CJK>
-0x67F1 # <CJK>
-0x67F3 # <CJK>
-0x67F4 # <CJK>
-0x67F5 # <CJK>
-0x67FB # <CJK>
-0x67FE # <CJK>
-0x67FF # <CJK>
-0x6802 # <CJK>
-0x6803 # <CJK>
-0x6804 # <CJK>
-0x6813 # <CJK>
-0x6816 # <CJK>
-0x6817 # <CJK>
-0x681E # <CJK>
-0x6821 # <CJK>
-0x6822 # <CJK>
-0x6829 # <CJK>
-0x682A # <CJK>
-0x682B # <CJK>
-0x6832 # <CJK>
-0x6834 # <CJK>
-0x6838 # <CJK>
-0x6839 # <CJK>
-0x683C # <CJK>
-0x683D # <CJK>
-0x6840 # <CJK>
-0x6841 # <CJK>
-0x6842 # <CJK>
-0x6843 # <CJK>
-0x6846 # <CJK>
-0x6848 # <CJK>
-0x684D # <CJK>
-0x684E # <CJK>
-0x6850 # <CJK>
-0x6851 # <CJK>
-0x6853 # <CJK>
-0x6854 # <CJK>
-0x6859 # <CJK>
-0x685C # <CJK>
-0x685D # <CJK>
-0x685F # <CJK>
-0x6863 # <CJK>
-0x6867 # <CJK>
-0x6874 # <CJK>
-0x6876 # <CJK>
-0x6877 # <CJK>
-0x687E # <CJK>
-0x687F # <CJK>
-0x6881 # <CJK>
-0x6883 # <CJK>
-0x6885 # <CJK>
-0x688D # <CJK>
-0x688F # <CJK>
-0x6893 # <CJK>
-0x6894 # <CJK>
-0x6897 # <CJK>
-0x689B # <CJK>
-0x689D # <CJK>
-0x689F # <CJK>
-0x68A0 # <CJK>
-0x68A2 # <CJK>
-0x68A6 # <CJK>
-0x68A7 # <CJK>
-0x68A8 # <CJK>
-0x68AD # <CJK>
-0x68AF # <CJK>
-0x68B0 # <CJK>
-0x68B1 # <CJK>
-0x68B3 # <CJK>
-0x68B5 # <CJK>
-0x68B6 # <CJK>
-0x68B9 # <CJK>
-0x68BA # <CJK>
-0x68BC # <CJK>
-0x68C4 # <CJK>
-0x68C6 # <CJK>
-0x68C9 # <CJK>
-0x68CA # <CJK>
-0x68CB # <CJK>
-0x68CD # <CJK>
-0x68D2 # <CJK>
-0x68D4 # <CJK>
-0x68D5 # <CJK>
-0x68D7 # <CJK>
-0x68D8 # <CJK>
-0x68DA # <CJK>
-0x68DF # <CJK>
-0x68E0 # <CJK>
-0x68E1 # <CJK>
-0x68E3 # <CJK>
-0x68E7 # <CJK>
-0x68EE # <CJK>
-0x68EF # <CJK>
-0x68F2 # <CJK>
-0x68F9 # <CJK>
-0x68FA # <CJK>
-0x6900 # <CJK>
-0x6901 # <CJK>
-0x6904 # <CJK>
-0x6905 # <CJK>
-0x6908 # <CJK>
-0x690B # <CJK>
-0x690C # <CJK>
-0x690D # <CJK>
-0x690E # <CJK>
-0x690F # <CJK>
-0x6912 # <CJK>
-0x6919 # <CJK>
-0x691A # <CJK>
-0x691B # <CJK>
-0x691C # <CJK>
-0x6921 # <CJK>
-0x6922 # <CJK>
-0x6923 # <CJK>
-0x6925 # <CJK>
-0x6926 # <CJK>
-0x6928 # <CJK>
-0x692A # <CJK>
-0x6930 # <CJK>
-0x6934 # <CJK>
-0x6936 # <CJK>
-0x6939 # <CJK>
-0x693D # <CJK>
-0x693F # <CJK>
-0x694A # <CJK>
-0x6953 # <CJK>
-0x6954 # <CJK>
-0x6955 # <CJK>
-0x6959 # <CJK>
-0x695A # <CJK>
-0x695C # <CJK>
-0x695D # <CJK>
-0x695E # <CJK>
-0x6960 # <CJK>
-0x6961 # <CJK>
-0x6962 # <CJK>
-0x696A # <CJK>
-0x696B # <CJK>
-0x696D # <CJK>
-0x696E # <CJK>
-0x696F # <CJK>
-0x6973 # <CJK>
-0x6974 # <CJK>
-0x6975 # <CJK>
-0x6977 # <CJK>
-0x6978 # <CJK>
-0x6979 # <CJK>
-0x697C # <CJK>
-0x697D # <CJK>
-0x697E # <CJK>
-0x6981 # <CJK>
-0x6982 # <CJK>
-0x698A # <CJK>
-0x698E # <CJK>
-0x6991 # <CJK>
-0x6994 # <CJK>
-0x6995 # <CJK>
-0x699B # <CJK>
-0x699C # <CJK>
-0x69A0 # <CJK>
-0x69A7 # <CJK>
-0x69AE # <CJK>
-0x69B1 # <CJK>
-0x69B2 # <CJK>
-0x69B4 # <CJK>
-0x69BB # <CJK>
-0x69BE # <CJK>
-0x69BF # <CJK>
-0x69C1 # <CJK>
-0x69C3 # <CJK>
-0x69C7 # <CJK>
-0x69CA # <CJK>
-0x69CB # <CJK>
-0x69CC # <CJK>
-0x69CD # <CJK>
-0x69CE # <CJK>
-0x69D0 # <CJK>
-0x69D3 # <CJK>
-0x69D8 # <CJK>
-0x69D9 # <CJK>
-0x69DD # <CJK>
-0x69DE # <CJK>
-0x69E7 # <CJK>
-0x69E8 # <CJK>
-0x69EB # <CJK>
-0x69ED # <CJK>
-0x69F2 # <CJK>
-0x69F9 # <CJK>
-0x69FB # <CJK>
-0x69FD # <CJK>
-0x69FF # <CJK>
-0x6A02 # <CJK>
-0x6A05 # <CJK>
-0x6A0A # <CJK>
-0x6A0B # <CJK>
-0x6A0C # <CJK>
-0x6A12 # <CJK>
-0x6A13 # <CJK>
-0x6A14 # <CJK>
-0x6A17 # <CJK>
-0x6A19 # <CJK>
-0x6A1B # <CJK>
-0x6A1E # <CJK>
-0x6A1F # <CJK>
-0x6A21 # <CJK>
-0x6A22 # <CJK>
-0x6A23 # <CJK>
-0x6A29 # <CJK>
-0x6A2A # <CJK>
-0x6A2B # <CJK>
-0x6A2E # <CJK>
-0x6A35 # <CJK>
-0x6A36 # <CJK>
-0x6A38 # <CJK>
-0x6A39 # <CJK>
-0x6A3A # <CJK>
-0x6A3D # <CJK>
-0x6A44 # <CJK>
-0x6A47 # <CJK>
-0x6A48 # <CJK>
-0x6A4B # <CJK>
-0x6A58 # <CJK>
-0x6A59 # <CJK>
-0x6A5F # <CJK>
-0x6A61 # <CJK>
-0x6A62 # <CJK>
-0x6A66 # <CJK>
-0x6A72 # <CJK>
-0x6A78 # <CJK>
-0x6A7F # <CJK>
-0x6A80 # <CJK>
-0x6A84 # <CJK>
-0x6A8D # <CJK>
-0x6A8E # <CJK>
-0x6A90 # <CJK>
-0x6A97 # <CJK>
-0x6A9C # <CJK>
-0x6AA0 # <CJK>
-0x6AA2 # <CJK>
-0x6AA3 # <CJK>
-0x6AAA # <CJK>
-0x6AAC # <CJK>
-0x6AAE # <CJK>
-0x6AB3 # <CJK>
-0x6AB8 # <CJK>
-0x6ABB # <CJK>
-0x6AC1 # <CJK>
-0x6AC2 # <CJK>
-0x6AC3 # <CJK>
-0x6AD1 # <CJK>
-0x6AD3 # <CJK>
-0x6ADA # <CJK>
-0x6ADB # <CJK>
-0x6ADE # <CJK>
-0x6ADF # <CJK>
-0x6AE8 # <CJK>
-0x6AEA # <CJK>
-0x6AFA # <CJK>
-0x6AFB # <CJK>
-0x6B04 # <CJK>
-0x6B05 # <CJK>
-0x6B0A # <CJK>
-0x6B12 # <CJK>
-0x6B16 # <CJK>
-0x6B1D # <CJK>
-0x6B1F # <CJK>
-0x6B20 # <CJK>
-0x6B21 # <CJK>
-0x6B23 # <CJK>
-0x6B27 # <CJK>
-0x6B32 # <CJK>
-0x6B37 # <CJK>
-0x6B38 # <CJK>
-0x6B39 # <CJK>
-0x6B3A # <CJK>
-0x6B3D # <CJK>
-0x6B3E # <CJK>
-0x6B43 # <CJK>
-0x6B47 # <CJK>
-0x6B49 # <CJK>
-0x6B4C # <CJK>
-0x6B4E # <CJK>
-0x6B50 # <CJK>
-0x6B53 # <CJK>
-0x6B54 # <CJK>
-0x6B59 # <CJK>
-0x6B5B # <CJK>
-0x6B5F # <CJK>
-0x6B61 # <CJK>
-0x6B62 # <CJK>
-0x6B63 # <CJK>
-0x6B64 # <CJK>
-0x6B66 # <CJK>
-0x6B69 # <CJK>
-0x6B6A # <CJK>
-0x6B6F # <CJK>
-0x6B73 # <CJK>
-0x6B74 # <CJK>
-0x6B78 # <CJK>
-0x6B79 # <CJK>
-0x6B7B # <CJK>
-0x6B7F # <CJK>
-0x6B80 # <CJK>
-0x6B83 # <CJK>
-0x6B84 # <CJK>
-0x6B86 # <CJK>
-0x6B89 # <CJK>
-0x6B8A # <CJK>
-0x6B8B # <CJK>
-0x6B8D # <CJK>
-0x6B95 # <CJK>
-0x6B96 # <CJK>
-0x6B98 # <CJK>
-0x6B9E # <CJK>
-0x6BA4 # <CJK>
-0x6BAA # <CJK>
-0x6BAB # <CJK>
-0x6BAF # <CJK>
-0x6BB1 # <CJK>
-0x6BB2 # <CJK>
-0x6BB3 # <CJK>
-0x6BB4 # <CJK>
-0x6BB5 # <CJK>
-0x6BB7 # <CJK>
-0x6BBA # <CJK>
-0x6BBB # <CJK>
-0x6BBC # <CJK>
-0x6BBF # <CJK>
-0x6BC0 # <CJK>
-0x6BC5 # <CJK>
-0x6BC6 # <CJK>
-0x6BCB # <CJK>
-0x6BCD # <CJK>
-0x6BCE # <CJK>
-0x6BD2 # <CJK>
-0x6BD3 # <CJK>
-0x6BD4 # <CJK>
-0x6BD8 # <CJK>
-0x6BDB # <CJK>
-0x6BDF # <CJK>
-0x6BEB # <CJK>
-0x6BEC # <CJK>
-0x6BEF # <CJK>
-0x6BF3 # <CJK>
-0x6C08 # <CJK>
-0x6C0F # <CJK>
-0x6C11 # <CJK>
-0x6C13 # <CJK>
-0x6C14 # <CJK>
-0x6C17 # <CJK>
-0x6C1B # <CJK>
-0x6C23 # <CJK>
-0x6C24 # <CJK>
-0x6C34 # <CJK>
-0x6C37 # <CJK>
-0x6C38 # <CJK>
-0x6C3E # <CJK>
-0x6C40 # <CJK>
-0x6C41 # <CJK>
-0x6C42 # <CJK>
-0x6C4E # <CJK>
-0x6C50 # <CJK>
-0x6C55 # <CJK>
-0x6C57 # <CJK>
-0x6C5A # <CJK>
-0x6C5D # <CJK>
-0x6C5E # <CJK>
-0x6C5F # <CJK>
-0x6C60 # <CJK>
-0x6C62 # <CJK>
-0x6C68 # <CJK>
-0x6C6A # <CJK>
-0x6C70 # <CJK>
-0x6C72 # <CJK>
-0x6C73 # <CJK>
-0x6C7A # <CJK>
-0x6C7D # <CJK>
-0x6C7E # <CJK>
-0x6C81 # <CJK>
-0x6C82 # <CJK>
-0x6C83 # <CJK>
-0x6C88 # <CJK>
-0x6C8C # <CJK>
-0x6C8D # <CJK>
-0x6C90 # <CJK>
-0x6C92 # <CJK>
-0x6C93 # <CJK>
-0x6C96 # <CJK>
-0x6C99 # <CJK>
-0x6C9A # <CJK>
-0x6C9B # <CJK>
-0x6CA1 # <CJK>
-0x6CA2 # <CJK>
-0x6CAB # <CJK>
-0x6CAE # <CJK>
-0x6CB1 # <CJK>
-0x6CB3 # <CJK>
-0x6CB8 # <CJK>
-0x6CB9 # <CJK>
-0x6CBA # <CJK>
-0x6CBB # <CJK>
-0x6CBC # <CJK>
-0x6CBD # <CJK>
-0x6CBE # <CJK>
-0x6CBF # <CJK>
-0x6CC1 # <CJK>
-0x6CC4 # <CJK>
-0x6CC5 # <CJK>
-0x6CC9 # <CJK>
-0x6CCA # <CJK>
-0x6CCC # <CJK>
-0x6CD3 # <CJK>
-0x6CD5 # <CJK>
-0x6CD7 # <CJK>
-0x6CD9 # <CJK>
-0x6CDB # <CJK>
-0x6CDD # <CJK>
-0x6CE1 # <CJK>
-0x6CE2 # <CJK>
-0x6CE3 # <CJK>
-0x6CE5 # <CJK>
-0x6CE8 # <CJK>
-0x6CEA # <CJK>
-0x6CEF # <CJK>
-0x6CF0 # <CJK>
-0x6CF1 # <CJK>
-0x6CF3 # <CJK>
-0x6D0B # <CJK>
-0x6D0C # <CJK>
-0x6D12 # <CJK>
-0x6D17 # <CJK>
-0x6D19 # <CJK>
-0x6D1B # <CJK>
-0x6D1E # <CJK>
-0x6D1F # <CJK>
-0x6D25 # <CJK>
-0x6D29 # <CJK>
-0x6D2A # <CJK>
-0x6D2B # <CJK>
-0x6D32 # <CJK>
-0x6D33 # <CJK>
-0x6D35 # <CJK>
-0x6D36 # <CJK>
-0x6D38 # <CJK>
-0x6D3B # <CJK>
-0x6D3D # <CJK>
-0x6D3E # <CJK>
-0x6D41 # <CJK>
-0x6D44 # <CJK>
-0x6D45 # <CJK>
-0x6D59 # <CJK>
-0x6D5A # <CJK>
-0x6D5C # <CJK>
-0x6D63 # <CJK>
-0x6D64 # <CJK>
-0x6D66 # <CJK>
-0x6D69 # <CJK>
-0x6D6A # <CJK>
-0x6D6C # <CJK>
-0x6D6E # <CJK>
-0x6D74 # <CJK>
-0x6D77 # <CJK>
-0x6D78 # <CJK>
-0x6D79 # <CJK>
-0x6D85 # <CJK>
-0x6D88 # <CJK>
-0x6D8C # <CJK>
-0x6D8E # <CJK>
-0x6D93 # <CJK>
-0x6D95 # <CJK>
-0x6D99 # <CJK>
-0x6D9B # <CJK>
-0x6D9C # <CJK>
-0x6DAF # <CJK>
-0x6DB2 # <CJK>
-0x6DB5 # <CJK>
-0x6DB8 # <CJK>
-0x6DBC # <CJK>
-0x6DC0 # <CJK>
-0x6DC5 # <CJK>
-0x6DC6 # <CJK>
-0x6DC7 # <CJK>
-0x6DCB # <CJK>
-0x6DCC # <CJK>
-0x6DD1 # <CJK>
-0x6DD2 # <CJK>
-0x6DD5 # <CJK>
-0x6DD8 # <CJK>
-0x6DD9 # <CJK>
-0x6DDE # <CJK>
-0x6DE1 # <CJK>
-0x6DE4 # <CJK>
-0x6DE6 # <CJK>
-0x6DE8 # <CJK>
-0x6DEA # <CJK>
-0x6DEB # <CJK>
-0x6DEC # <CJK>
-0x6DEE # <CJK>
-0x6DF1 # <CJK>
-0x6DF3 # <CJK>
-0x6DF5 # <CJK>
-0x6DF7 # <CJK>
-0x6DF9 # <CJK>
-0x6DFA # <CJK>
-0x6DFB # <CJK>
-0x6E05 # <CJK>
-0x6E07 # <CJK>
-0x6E08 # <CJK>
-0x6E09 # <CJK>
-0x6E0A # <CJK>
-0x6E0B # <CJK>
-0x6E13 # <CJK>
-0x6E15 # <CJK>
-0x6E19 # <CJK>
-0x6E1A # <CJK>
-0x6E1B # <CJK>
-0x6E1D # <CJK>
-0x6E1F # <CJK>
-0x6E20 # <CJK>
-0x6E21 # <CJK>
-0x6E23 # <CJK>
-0x6E24 # <CJK>
-0x6E25 # <CJK>
-0x6E26 # <CJK>
-0x6E29 # <CJK>
-0x6E2B # <CJK>
-0x6E2C # <CJK>
-0x6E2D # <CJK>
-0x6E2E # <CJK>
-0x6E2F # <CJK>
-0x6E38 # <CJK>
-0x6E3A # <CJK>
-0x6E3E # <CJK>
-0x6E43 # <CJK>
-0x6E4A # <CJK>
-0x6E4D # <CJK>
-0x6E4E # <CJK>
-0x6E56 # <CJK>
-0x6E58 # <CJK>
-0x6E5B # <CJK>
-0x6E5F # <CJK>
-0x6E67 # <CJK>
-0x6E6B # <CJK>
-0x6E6E # <CJK>
-0x6E6F # <CJK>
-0x6E72 # <CJK>
-0x6E76 # <CJK>
-0x6E7E # <CJK>
-0x6E7F # <CJK>
-0x6E80 # <CJK>
-0x6E82 # <CJK>
-0x6E8C # <CJK>
-0x6E8F # <CJK>
-0x6E90 # <CJK>
-0x6E96 # <CJK>
-0x6E98 # <CJK>
-0x6E9C # <CJK>
-0x6E9D # <CJK>
-0x6E9F # <CJK>
-0x6EA2 # <CJK>
-0x6EA5 # <CJK>
-0x6EAA # <CJK>
-0x6EAF # <CJK>
-0x6EB2 # <CJK>
-0x6EB6 # <CJK>
-0x6EB7 # <CJK>
-0x6EBA # <CJK>
-0x6EBD # <CJK>
-0x6EC2 # <CJK>
-0x6EC4 # <CJK>
-0x6EC5 # <CJK>
-0x6EC9 # <CJK>
-0x6ECB # <CJK>
-0x6ECC # <CJK>
-0x6ED1 # <CJK>
-0x6ED3 # <CJK>
-0x6ED4 # <CJK>
-0x6ED5 # <CJK>
-0x6EDD # <CJK>
-0x6EDE # <CJK>
-0x6EEC # <CJK>
-0x6EEF # <CJK>
-0x6EF2 # <CJK>
-0x6EF4 # <CJK>
-0x6EF7 # <CJK>
-0x6EF8 # <CJK>
-0x6EFE # <CJK>
-0x6EFF # <CJK>
-0x6F01 # <CJK>
-0x6F02 # <CJK>
-0x6F06 # <CJK>
-0x6F09 # <CJK>
-0x6F0F # <CJK>
-0x6F11 # <CJK>
-0x6F13 # <CJK>
-0x6F14 # <CJK>
-0x6F15 # <CJK>
-0x6F20 # <CJK>
-0x6F22 # <CJK>
-0x6F23 # <CJK>
-0x6F2B # <CJK>
-0x6F2C # <CJK>
-0x6F31 # <CJK>
-0x6F32 # <CJK>
-0x6F38 # <CJK>
-0x6F3E # <CJK>
-0x6F3F # <CJK>
-0x6F41 # <CJK>
-0x6F45 # <CJK>
-0x6F54 # <CJK>
-0x6F58 # <CJK>
-0x6F5B # <CJK>
-0x6F5C # <CJK>
-0x6F5F # <CJK>
-0x6F64 # <CJK>
-0x6F66 # <CJK>
-0x6F6D # <CJK>
-0x6F6E # <CJK>
-0x6F6F # <CJK>
-0x6F70 # <CJK>
-0x6F74 # <CJK>
-0x6F78 # <CJK>
-0x6F7A # <CJK>
-0x6F7C # <CJK>
-0x6F80 # <CJK>
-0x6F81 # <CJK>
-0x6F82 # <CJK>
-0x6F84 # <CJK>
-0x6F86 # <CJK>
-0x6F8E # <CJK>
-0x6F91 # <CJK>
-0x6F97 # <CJK>
-0x6FA1 # <CJK>
-0x6FA3 # <CJK>
-0x6FA4 # <CJK>
-0x6FAA # <CJK>
-0x6FB1 # <CJK>
-0x6FB3 # <CJK>
-0x6FB9 # <CJK>
-0x6FC0 # <CJK>
-0x6FC1 # <CJK>
-0x6FC2 # <CJK>
-0x6FC3 # <CJK>
-0x6FC6 # <CJK>
-0x6FD4 # <CJK>
-0x6FD5 # <CJK>
-0x6FD8 # <CJK>
-0x6FDB # <CJK>
-0x6FDF # <CJK>
-0x6FE0 # <CJK>
-0x6FE1 # <CJK>
-0x6FE4 # <CJK>
-0x6FEB # <CJK>
-0x6FEC # <CJK>
-0x6FEE # <CJK>
-0x6FEF # <CJK>
-0x6FF1 # <CJK>
-0x6FF3 # <CJK>
-0x6FF6 # <CJK>
-0x6FFA # <CJK>
-0x6FFE # <CJK>
-0x7001 # <CJK>
-0x7009 # <CJK>
-0x700B # <CJK>
-0x700F # <CJK>
-0x7011 # <CJK>
-0x7015 # <CJK>
-0x7018 # <CJK>
-0x701A # <CJK>
-0x701B # <CJK>
-0x701D # <CJK>
-0x701E # <CJK>
-0x701F # <CJK>
-0x7026 # <CJK>
-0x7027 # <CJK>
-0x702C # <CJK>
-0x7030 # <CJK>
-0x7032 # <CJK>
-0x703E # <CJK>
-0x704C # <CJK>
-0x7051 # <CJK>
-0x7058 # <CJK>
-0x7063 # <CJK>
-0x706B # <CJK>
-0x706F # <CJK>
-0x7070 # <CJK>
-0x7078 # <CJK>
-0x707C # <CJK>
-0x707D # <CJK>
-0x7089 # <CJK>
-0x708A # <CJK>
-0x708E # <CJK>
-0x7092 # <CJK>
-0x7099 # <CJK>
-0x70AC # <CJK>
-0x70AD # <CJK>
-0x70AE # <CJK>
-0x70AF # <CJK>
-0x70B3 # <CJK>
-0x70B8 # <CJK>
-0x70B9 # <CJK>
-0x70BA # <CJK>
-0x70C8 # <CJK>
-0x70CB # <CJK>
-0x70CF # <CJK>
-0x70D9 # <CJK>
-0x70DD # <CJK>
-0x70DF # <CJK>
-0x70F1 # <CJK>
-0x70F9 # <CJK>
-0x70FD # <CJK>
-0x7109 # <CJK>
-0x7114 # <CJK>
-0x7119 # <CJK>
-0x711A # <CJK>
-0x711C # <CJK>
-0x7121 # <CJK>
-0x7126 # <CJK>
-0x7136 # <CJK>
-0x713C # <CJK>
-0x7149 # <CJK>
-0x714C # <CJK>
-0x714E # <CJK>
-0x7155 # <CJK>
-0x7156 # <CJK>
-0x7159 # <CJK>
-0x7162 # <CJK>
-0x7164 # <CJK>
-0x7165 # <CJK>
-0x7166 # <CJK>
-0x7167 # <CJK>
-0x7169 # <CJK>
-0x716C # <CJK>
-0x716E # <CJK>
-0x717D # <CJK>
-0x7184 # <CJK>
-0x7188 # <CJK>
-0x718A # <CJK>
-0x718F # <CJK>
-0x7194 # <CJK>
-0x7195 # <CJK>
-#0x7199 # <CJK> # not in kochi fonts
-0x719F # <CJK>
-0x71A8 # <CJK>
-0x71AC # <CJK>
-0x71B1 # <CJK>
-0x71B9 # <CJK>
-0x71BE # <CJK>
-0x71C3 # <CJK>
-0x71C8 # <CJK>
-0x71C9 # <CJK>
-0x71CE # <CJK>
-0x71D0 # <CJK>
-0x71D2 # <CJK>
-0x71D4 # <CJK>
-0x71D5 # <CJK>
-0x71D7 # <CJK>
-0x71DF # <CJK>
-0x71E0 # <CJK>
-0x71E5 # <CJK>
-0x71E6 # <CJK>
-0x71E7 # <CJK>
-0x71EC # <CJK>
-0x71ED # <CJK>
-0x71EE # <CJK>
-0x71F5 # <CJK>
-0x71F9 # <CJK>
-0x71FB # <CJK>
-0x71FC # <CJK>
-0x71FF # <CJK>
-0x7206 # <CJK>
-0x720D # <CJK>
-0x7210 # <CJK>
-0x721B # <CJK>
-0x7228 # <CJK>
-0x722A # <CJK>
-0x722C # <CJK>
-0x722D # <CJK>
-0x7230 # <CJK>
-0x7232 # <CJK>
-0x7235 # <CJK>
-0x7236 # <CJK>
-0x723A # <CJK>
-0x723B # <CJK>
-0x723C # <CJK>
-0x723D # <CJK>
-0x723E # <CJK>
-0x723F # <CJK>
-0x7240 # <CJK>
-0x7246 # <CJK>
-0x7247 # <CJK>
-0x7248 # <CJK>
-0x724B # <CJK>
-0x724C # <CJK>
-0x7252 # <CJK>
-0x7258 # <CJK>
-0x7259 # <CJK>
-0x725B # <CJK>
-0x725D # <CJK>
-0x725F # <CJK>
-0x7261 # <CJK>
-0x7262 # <CJK>
-0x7267 # <CJK>
-0x7269 # <CJK>
-0x7272 # <CJK>
-0x7274 # <CJK>
-0x7279 # <CJK>
-0x727D # <CJK>
-0x727E # <CJK>
-0x7280 # <CJK>
-0x7281 # <CJK>
-0x7282 # <CJK>
-0x7287 # <CJK>
-0x7292 # <CJK>
-0x7296 # <CJK>
-0x72A0 # <CJK>
-0x72A2 # <CJK>
-0x72A7 # <CJK>
-0x72AC # <CJK>
-0x72AF # <CJK>
-0x72B2 # <CJK>
-0x72B6 # <CJK>
-0x72B9 # <CJK>
-0x72C2 # <CJK>
-0x72C3 # <CJK>
-0x72C4 # <CJK>
-0x72C6 # <CJK>
-0x72CE # <CJK>
-0x72D0 # <CJK>
-0x72D2 # <CJK>
-0x72D7 # <CJK>
-0x72D9 # <CJK>
-0x72DB # <CJK>
-0x72E0 # <CJK>
-0x72E1 # <CJK>
-0x72E2 # <CJK>
-0x72E9 # <CJK>
-0x72EC # <CJK>
-0x72ED # <CJK>
-0x72F7 # <CJK>
-0x72F8 # <CJK>
-0x72F9 # <CJK>
-0x72FC # <CJK>
-0x72FD # <CJK>
-0x730A # <CJK>
-0x7316 # <CJK>
-0x7317 # <CJK>
-0x731B # <CJK>
-0x731C # <CJK>
-0x731D # <CJK>
-0x731F # <CJK>
-0x7325 # <CJK>
-0x7329 # <CJK>
-0x732A # <CJK>
-0x732B # <CJK>
-0x732E # <CJK>
-0x732F # <CJK>
-0x7334 # <CJK>
-0x7336 # <CJK>
-0x7337 # <CJK>
-0x733E # <CJK>
-0x733F # <CJK>
-0x7344 # <CJK>
-0x7345 # <CJK>
-0x734E # <CJK>
-0x734F # <CJK>
-0x7357 # <CJK>
-0x7363 # <CJK>
-0x7368 # <CJK>
-0x736A # <CJK>
-0x7370 # <CJK>
-0x7372 # <CJK>
-0x7375 # <CJK>
-0x7378 # <CJK>
-0x737A # <CJK>
-0x737B # <CJK>
-0x7384 # <CJK>
-0x7387 # <CJK>
-0x7389 # <CJK>
-0x738B # <CJK>
-0x7396 # <CJK>
-0x73A9 # <CJK>
-0x73B2 # <CJK>
-0x73B3 # <CJK>
-0x73BB # <CJK>
-0x73C0 # <CJK>
-0x73C2 # <CJK>
-0x73C8 # <CJK>
-0x73CA # <CJK>
-0x73CD # <CJK>
-0x73CE # <CJK>
-0x73DE # <CJK>
-0x73E0 # <CJK>
-0x73E5 # <CJK>
-0x73EA # <CJK>
-0x73ED # <CJK>
-0x73EE # <CJK>
-0x73F1 # <CJK>
-0x73F8 # <CJK>
-0x73FE # <CJK>
-0x7403 # <CJK>
-0x7405 # <CJK>
-0x7406 # <CJK>
-0x7409 # <CJK>
-0x7422 # <CJK>
-0x7425 # <CJK>
-0x7432 # <CJK>
-0x7433 # <CJK>
-0x7434 # <CJK>
-0x7435 # <CJK>
-0x7436 # <CJK>
-0x743A # <CJK>
-0x743F # <CJK>
-0x7441 # <CJK>
-0x7455 # <CJK>
-0x7459 # <CJK>
-0x745A # <CJK>
-0x745B # <CJK>
-0x745C # <CJK>
-0x745E # <CJK>
-0x745F # <CJK>
-0x7460 # <CJK>
-0x7463 # <CJK>
-0x7464 # <CJK>
-0x7469 # <CJK>
-0x746A # <CJK>
-0x746F # <CJK>
-0x7470 # <CJK>
-0x7473 # <CJK>
-0x7476 # <CJK>
-0x747E # <CJK>
-0x7483 # <CJK>
-0x748B # <CJK>
-0x749E # <CJK>
-0x74A2 # <CJK>
-0x74A7 # <CJK>
-0x74B0 # <CJK>
-0x74BD # <CJK>
-0x74CA # <CJK>
-0x74CF # <CJK>
-0x74D4 # <CJK>
-0x74DC # <CJK>
-0x74E0 # <CJK>
-0x74E2 # <CJK>
-0x74E3 # <CJK>
-0x74E6 # <CJK>
-0x74E7 # <CJK>
-0x74E9 # <CJK>
-0x74EE # <CJK>
-0x74F0 # <CJK>
-0x74F1 # <CJK>
-0x74F2 # <CJK>
-0x74F6 # <CJK>
-0x74F7 # <CJK>
-0x74F8 # <CJK>
-0x7503 # <CJK>
-0x7504 # <CJK>
-0x7505 # <CJK>
-0x750C # <CJK>
-0x750D # <CJK>
-0x750E # <CJK>
-0x7511 # <CJK>
-0x7513 # <CJK>
-0x7515 # <CJK>
-0x7518 # <CJK>
-0x751A # <CJK>
-0x751C # <CJK>
-0x751E # <CJK>
-0x751F # <CJK>
-0x7523 # <CJK>
-0x7525 # <CJK>
-0x7526 # <CJK>
-0x7528 # <CJK>
-0x752B # <CJK>
-0x752C # <CJK>
-0x7530 # <CJK>
-0x7531 # <CJK>
-0x7532 # <CJK>
-0x7533 # <CJK>
-0x7537 # <CJK>
-0x7538 # <CJK>
-0x753A # <CJK>
-0x753B # <CJK>
-0x753C # <CJK>
-0x7544 # <CJK>
-0x7546 # <CJK>
-0x7549 # <CJK>
-0x754A # <CJK>
-0x754B # <CJK>
-0x754C # <CJK>
-0x754D # <CJK>
-0x754F # <CJK>
-0x7551 # <CJK>
-0x7554 # <CJK>
-0x7559 # <CJK>
-0x755A # <CJK>
-0x755B # <CJK>
-0x755C # <CJK>
-0x755D # <CJK>
-0x7560 # <CJK>
-0x7562 # <CJK>
-0x7564 # <CJK>
-0x7565 # <CJK>
-0x7566 # <CJK>
-0x7567 # <CJK>
-0x7569 # <CJK>
-0x756A # <CJK>
-0x756B # <CJK>
-0x756D # <CJK>
-0x7570 # <CJK>
-0x7573 # <CJK>
-0x7574 # <CJK>
-0x7576 # <CJK>
-0x7577 # <CJK>
-0x7578 # <CJK>
-0x757F # <CJK>
-0x7582 # <CJK>
-0x7586 # <CJK>
-0x7587 # <CJK>
-0x7589 # <CJK>
-0x758A # <CJK>
-0x758B # <CJK>
-0x758E # <CJK>
-0x758F # <CJK>
-0x7591 # <CJK>
-0x7594 # <CJK>
-0x759A # <CJK>
-0x759D # <CJK>
-0x75A3 # <CJK>
-0x75A5 # <CJK>
-0x75AB # <CJK>
-0x75B1 # <CJK>
-0x75B2 # <CJK>
-0x75B3 # <CJK>
-0x75B5 # <CJK>
-0x75B8 # <CJK>
-0x75B9 # <CJK>
-0x75BC # <CJK>
-0x75BD # <CJK>
-0x75BE # <CJK>
-0x75C2 # <CJK>
-0x75C3 # <CJK>
-0x75C5 # <CJK>
-0x75C7 # <CJK>
-0x75CA # <CJK>
-0x75CD # <CJK>
-0x75D2 # <CJK>
-0x75D4 # <CJK>
-0x75D5 # <CJK>
-0x75D8 # <CJK>
-0x75D9 # <CJK>
-0x75DB # <CJK>
-0x75DE # <CJK>
-0x75E2 # <CJK>
-0x75E3 # <CJK>
-0x75E9 # <CJK>
-0x75F0 # <CJK>
-0x75F2 # <CJK>
-0x75F3 # <CJK>
-0x75F4 # <CJK>
-0x75FA # <CJK>
-0x75FC # <CJK>
-0x75FE # <CJK>
-0x75FF # <CJK>
-0x7601 # <CJK>
-0x7609 # <CJK>
-0x760B # <CJK>
-0x760D # <CJK>
-0x761F # <CJK>
-0x7620 # <CJK>
-0x7621 # <CJK>
-0x7622 # <CJK>
-0x7624 # <CJK>
-0x7627 # <CJK>
-0x7630 # <CJK>
-0x7634 # <CJK>
-0x763B # <CJK>
-0x7642 # <CJK>
-0x7646 # <CJK>
-0x7647 # <CJK>
-0x7648 # <CJK>
-0x764C # <CJK>
-0x7652 # <CJK>
-0x7656 # <CJK>
-0x7658 # <CJK>
-0x765C # <CJK>
-0x7661 # <CJK>
-0x7662 # <CJK>
-0x7667 # <CJK>
-0x7668 # <CJK>
-0x7669 # <CJK>
-0x766A # <CJK>
-0x766C # <CJK>
-0x7670 # <CJK>
-0x7672 # <CJK>
-0x7676 # <CJK>
-0x7678 # <CJK>
-0x767A # <CJK>
-0x767B # <CJK>
-0x767C # <CJK>
-0x767D # <CJK>
-0x767E # <CJK>
-0x7680 # <CJK>
-0x7683 # <CJK>
-0x7684 # <CJK>
-0x7686 # <CJK>
-0x7687 # <CJK>
-0x7688 # <CJK>
-0x768B # <CJK>
-0x768E # <CJK>
-0x7690 # <CJK>
-0x7693 # <CJK>
-0x7696 # <CJK>
-0x7699 # <CJK>
-0x769A # <CJK>
-0x76AE # <CJK>
-0x76B0 # <CJK>
-0x76B4 # <CJK>
-0x76B7 # <CJK>
-0x76B8 # <CJK>
-0x76B9 # <CJK>
-0x76BA # <CJK>
-0x76BF # <CJK>
-0x76C2 # <CJK>
-0x76C3 # <CJK>
-0x76C6 # <CJK>
-0x76C8 # <CJK>
-0x76CA # <CJK>
-0x76CD # <CJK>
-0x76D2 # <CJK>
-0x76D6 # <CJK>
-0x76D7 # <CJK>
-0x76DB # <CJK>
-0x76DC # <CJK>
-0x76DE # <CJK>
-0x76DF # <CJK>
-0x76E1 # <CJK>
-0x76E3 # <CJK>
-0x76E4 # <CJK>
-0x76E5 # <CJK>
-0x76E7 # <CJK>
-0x76EA # <CJK>
-0x76EE # <CJK>
-0x76F2 # <CJK>
-0x76F4 # <CJK>
-0x76F8 # <CJK>
-0x76FB # <CJK>
-0x76FE # <CJK>
-0x7701 # <CJK>
-0x7704 # <CJK>
-0x7707 # <CJK>
-0x7708 # <CJK>
-0x7709 # <CJK>
-0x770B # <CJK>
-0x770C # <CJK>
-0x771B # <CJK>
-0x771E # <CJK>
-0x771F # <CJK>
-0x7720 # <CJK>
-0x7724 # <CJK>
-0x7725 # <CJK>
-0x7726 # <CJK>
-0x7729 # <CJK>
-0x7737 # <CJK>
-0x7738 # <CJK>
-0x773A # <CJK>
-0x773C # <CJK>
-0x7740 # <CJK>
-0x7747 # <CJK>
-0x775A # <CJK>
-0x775B # <CJK>
-0x7761 # <CJK>
-0x7763 # <CJK>
-0x7765 # <CJK>
-0x7766 # <CJK>
-0x7768 # <CJK>
-0x776B # <CJK>
-0x7779 # <CJK>
-0x777E # <CJK>
-0x777F # <CJK>
-0x778B # <CJK>
-0x778E # <CJK>
-0x7791 # <CJK>
-0x779E # <CJK>
-0x77A0 # <CJK>
-0x77A5 # <CJK>
-0x77AC # <CJK>
-0x77AD # <CJK>
-0x77B0 # <CJK>
-0x77B3 # <CJK>
-0x77B6 # <CJK>
-0x77B9 # <CJK>
-0x77BB # <CJK>
-0x77BC # <CJK>
-0x77BD # <CJK>
-0x77BF # <CJK>
-0x77C7 # <CJK>
-0x77CD # <CJK>
-0x77D7 # <CJK>
-0x77DA # <CJK>
-0x77DB # <CJK>
-0x77DC # <CJK>
-0x77E2 # <CJK>
-0x77E3 # <CJK>
-0x77E5 # <CJK>
-0x77E7 # <CJK>
-0x77E9 # <CJK>
-0x77ED # <CJK>
-0x77EE # <CJK>
-0x77EF # <CJK>
-0x77F3 # <CJK>
-0x77FC # <CJK>
-0x7802 # <CJK>
-0x780C # <CJK>
-0x7812 # <CJK>
-0x7814 # <CJK>
-0x7815 # <CJK>
-0x7820 # <CJK>
-0x7825 # <CJK>
-0x7826 # <CJK>
-0x7827 # <CJK>
-0x7832 # <CJK>
-0x7834 # <CJK>
-0x783A # <CJK>
-0x783F # <CJK>
-0x7845 # <CJK>
-0x785D # <CJK>
-0x786B # <CJK>
-0x786C # <CJK>
-0x786F # <CJK>
-0x7872 # <CJK>
-0x7874 # <CJK>
-0x787C # <CJK>
-0x7881 # <CJK>
-0x7886 # <CJK>
-0x7887 # <CJK>
-0x788C # <CJK>
-0x788D # <CJK>
-0x788E # <CJK>
-0x7891 # <CJK>
-0x7893 # <CJK>
-0x7895 # <CJK>
-0x7897 # <CJK>
-0x789A # <CJK>
-0x78A3 # <CJK>
-0x78A7 # <CJK>
-0x78A9 # <CJK>
-0x78AA # <CJK>
-0x78AF # <CJK>
-0x78B5 # <CJK>
-0x78BA # <CJK>
-0x78BC # <CJK>
-0x78BE # <CJK>
-0x78C1 # <CJK>
-0x78C5 # <CJK>
-0x78C6 # <CJK>
-0x78CA # <CJK>
-0x78CB # <CJK>
-0x78D0 # <CJK>
-0x78D1 # <CJK>
-0x78D4 # <CJK>
-0x78DA # <CJK>
-0x78E7 # <CJK>
-0x78E8 # <CJK>
-0x78EC # <CJK>
-0x78EF # <CJK>
-0x78F4 # <CJK>
-0x78FD # <CJK>
-0x7901 # <CJK>
-0x7907 # <CJK>
-0x790E # <CJK>
-0x7911 # <CJK>
-0x7912 # <CJK>
-0x7919 # <CJK>
-0x7926 # <CJK>
-0x792A # <CJK>
-0x792B # <CJK>
-0x792C # <CJK>
-0x793A # <CJK>
-0x793C # <CJK>
-0x793E # <CJK>
-0x7940 # <CJK>
-0x7941 # <CJK>
-0x7947 # <CJK>
-0x7948 # <CJK>
-0x7949 # <CJK>
-0x7950 # <CJK>
-0x7953 # <CJK>
-0x7955 # <CJK>
-0x7956 # <CJK>
-0x7957 # <CJK>
-0x795A # <CJK>
-0x795D # <CJK>
-0x795E # <CJK>
-0x795F # <CJK>
-0x7960 # <CJK>
-0x7962 # <CJK>
-0x7965 # <CJK>
-0x7968 # <CJK>
-0x796D # <CJK>
-0x7977 # <CJK>
-0x797A # <CJK>
-0x797F # <CJK>
-0x7980 # <CJK>
-0x7981 # <CJK>
-0x7984 # <CJK>
-0x7985 # <CJK>
-0x798A # <CJK>
-0x798D # <CJK>
-0x798E # <CJK>
-0x798F # <CJK>
-0x799D # <CJK>
-0x79A6 # <CJK>
-0x79A7 # <CJK>
-0x79AA # <CJK>
-0x79AE # <CJK>
-0x79B0 # <CJK>
-0x79B3 # <CJK>
-0x79B9 # <CJK>
-0x79BA # <CJK>
-0x79BD # <CJK>
-0x79BE # <CJK>
-0x79BF # <CJK>
-0x79C0 # <CJK>
-0x79C1 # <CJK>
-0x79C9 # <CJK>
-0x79CB # <CJK>
-0x79D1 # <CJK>
-0x79D2 # <CJK>
-0x79D5 # <CJK>
-0x79D8 # <CJK>
-0x79DF # <CJK>
-0x79E1 # <CJK>
-0x79E3 # <CJK>
-0x79E4 # <CJK>
-0x79E6 # <CJK>
-0x79E7 # <CJK>
-0x79E9 # <CJK>
-0x79EC # <CJK>
-0x79F0 # <CJK>
-0x79FB # <CJK>
-0x7A00 # <CJK>
-0x7A08 # <CJK>
-0x7A0B # <CJK>
-0x7A0D # <CJK>
-0x7A0E # <CJK>
-0x7A14 # <CJK>
-0x7A17 # <CJK>
-0x7A18 # <CJK>
-0x7A19 # <CJK>
-0x7A1A # <CJK>
-0x7A1C # <CJK>
-0x7A1F # <CJK>
-0x7A20 # <CJK>
-0x7A2E # <CJK>
-0x7A31 # <CJK>
-0x7A32 # <CJK>
-0x7A37 # <CJK>
-0x7A3B # <CJK>
-0x7A3C # <CJK>
-0x7A3D # <CJK>
-0x7A3E # <CJK>
-0x7A3F # <CJK>
-0x7A40 # <CJK>
-0x7A42 # <CJK>
-0x7A43 # <CJK>
-0x7A46 # <CJK>
-0x7A49 # <CJK>
-0x7A4D # <CJK>
-0x7A4E # <CJK>
-0x7A4F # <CJK>
-0x7A50 # <CJK>
-0x7A57 # <CJK>
-0x7A61 # <CJK>
-0x7A62 # <CJK>
-0x7A63 # <CJK>
-0x7A69 # <CJK>
-0x7A6B # <CJK>
-0x7A70 # <CJK>
-0x7A74 # <CJK>
-0x7A76 # <CJK>
-0x7A79 # <CJK>
-0x7A7A # <CJK>
-0x7A7D # <CJK>
-0x7A7F # <CJK>
-0x7A81 # <CJK>
-0x7A83 # <CJK>
-0x7A84 # <CJK>
-0x7A88 # <CJK>
-0x7A92 # <CJK>
-0x7A93 # <CJK>
-0x7A95 # <CJK>
-0x7A96 # <CJK>
-0x7A97 # <CJK>
-0x7A98 # <CJK>
-0x7A9F # <CJK>
-0x7AA9 # <CJK>
-0x7AAA # <CJK>
-0x7AAE # <CJK>
-0x7AAF # <CJK>
-0x7AB0 # <CJK>
-0x7AB6 # <CJK>
-0x7ABA # <CJK>
-0x7ABF # <CJK>
-0x7AC3 # <CJK>
-0x7AC4 # <CJK>
-0x7AC5 # <CJK>
-0x7AC7 # <CJK>
-0x7AC8 # <CJK>
-0x7ACA # <CJK>
-0x7ACB # <CJK>
-0x7ACD # <CJK>
-0x7ACF # <CJK>
-0x7AD2 # <CJK>
-0x7AD3 # <CJK>
-0x7AD5 # <CJK>
-0x7AD9 # <CJK>
-0x7ADA # <CJK>
-0x7ADC # <CJK>
-0x7ADD # <CJK>
-0x7ADF # <CJK>
-0x7AE0 # <CJK>
-0x7AE1 # <CJK>
-0x7AE2 # <CJK>
-0x7AE3 # <CJK>
-0x7AE5 # <CJK>
-0x7AE6 # <CJK>
-0x7AEA # <CJK>
-0x7AED # <CJK>
-0x7AEF # <CJK>
-0x7AF0 # <CJK>
-0x7AF6 # <CJK>
-0x7AF8 # <CJK>
-0x7AF9 # <CJK>
-0x7AFA # <CJK>
-0x7AFF # <CJK>
-0x7B02 # <CJK>
-0x7B04 # <CJK>
-0x7B06 # <CJK>
-0x7B08 # <CJK>
-0x7B0A # <CJK>
-0x7B0B # <CJK>
-0x7B0F # <CJK>
-0x7B11 # <CJK>
-0x7B18 # <CJK>
-0x7B19 # <CJK>
-0x7B1B # <CJK>
-0x7B1E # <CJK>
-0x7B20 # <CJK>
-0x7B25 # <CJK>
-0x7B26 # <CJK>
-0x7B28 # <CJK>
-0x7B2C # <CJK>
-0x7B33 # <CJK>
-0x7B35 # <CJK>
-0x7B36 # <CJK>
-0x7B39 # <CJK>
-0x7B45 # <CJK>
-0x7B46 # <CJK>
-0x7B48 # <CJK>
-0x7B49 # <CJK>
-0x7B4B # <CJK>
-0x7B4C # <CJK>
-0x7B4D # <CJK>
-0x7B4F # <CJK>
-0x7B50 # <CJK>
-0x7B51 # <CJK>
-0x7B52 # <CJK>
-0x7B54 # <CJK>
-0x7B56 # <CJK>
-0x7B5D # <CJK>
-0x7B65 # <CJK>
-0x7B67 # <CJK>
-0x7B6C # <CJK>
-0x7B6E # <CJK>
-0x7B70 # <CJK>
-0x7B71 # <CJK>
-0x7B74 # <CJK>
-0x7B75 # <CJK>
-0x7B7A # <CJK>
-0x7B86 # <CJK>
-0x7B87 # <CJK>
-0x7B8B # <CJK>
-0x7B8D # <CJK>
-0x7B8F # <CJK>
-0x7B92 # <CJK>
-0x7B94 # <CJK>
-0x7B95 # <CJK>
-0x7B97 # <CJK>
-0x7B98 # <CJK>
-0x7B99 # <CJK>
-0x7B9A # <CJK>
-0x7B9C # <CJK>
-0x7B9D # <CJK>
-0x7B9F # <CJK>
-0x7BA1 # <CJK>
-0x7BAA # <CJK>
-0x7BAD # <CJK>
-0x7BB1 # <CJK>
-0x7BB4 # <CJK>
-0x7BB8 # <CJK>
-0x7BC0 # <CJK>
-0x7BC1 # <CJK>
-0x7BC4 # <CJK>
-0x7BC6 # <CJK>
-0x7BC7 # <CJK>
-0x7BC9 # <CJK>
-0x7BCB # <CJK>
-0x7BCC # <CJK>
-0x7BCF # <CJK>
-0x7BDD # <CJK>
-0x7BE0 # <CJK>
-0x7BE4 # <CJK>
-0x7BE5 # <CJK>
-0x7BE6 # <CJK>
-0x7BE9 # <CJK>
-0x7BED # <CJK>
-0x7BF3 # <CJK>
-0x7BF6 # <CJK>
-0x7BF7 # <CJK>
-0x7C00 # <CJK>
-0x7C07 # <CJK>
-0x7C0D # <CJK>
-0x7C11 # <CJK>
-0x7C12 # <CJK>
-0x7C13 # <CJK>
-0x7C14 # <CJK>
-0x7C17 # <CJK>
-0x7C1F # <CJK>
-0x7C21 # <CJK>
-0x7C23 # <CJK>
-0x7C27 # <CJK>
-0x7C2A # <CJK>
-0x7C2B # <CJK>
-0x7C37 # <CJK>
-0x7C38 # <CJK>
-0x7C3D # <CJK>
-0x7C3E # <CJK>
-0x7C3F # <CJK>
-0x7C40 # <CJK>
-0x7C43 # <CJK>
-0x7C4C # <CJK>
-0x7C4D # <CJK>
-0x7C4F # <CJK>
-0x7C50 # <CJK>
-0x7C54 # <CJK>
-0x7C56 # <CJK>
-0x7C58 # <CJK>
-0x7C5F # <CJK>
-0x7C60 # <CJK>
-0x7C64 # <CJK>
-0x7C65 # <CJK>
-0x7C6C # <CJK>
-0x7C73 # <CJK>
-0x7C75 # <CJK>
-0x7C7E # <CJK>
-0x7C81 # <CJK>
-0x7C82 # <CJK>
-0x7C83 # <CJK>
-0x7C89 # <CJK>
-0x7C8B # <CJK>
-0x7C8D # <CJK>
-0x7C90 # <CJK>
-0x7C92 # <CJK>
-0x7C95 # <CJK>
-0x7C97 # <CJK>
-0x7C98 # <CJK>
-0x7C9B # <CJK>
-0x7C9F # <CJK>
-0x7CA1 # <CJK>
-0x7CA2 # <CJK>
-0x7CA4 # <CJK>
-0x7CA5 # <CJK>
-0x7CA7 # <CJK>
-0x7CA8 # <CJK>
-0x7CAB # <CJK>
-0x7CAD # <CJK>
-0x7CAE # <CJK>
-0x7CB1 # <CJK>
-0x7CB2 # <CJK>
-0x7CB3 # <CJK>
-0x7CB9 # <CJK>
-0x7CBD # <CJK>
-0x7CBE # <CJK>
-0x7CC0 # <CJK>
-0x7CC2 # <CJK>
-0x7CC5 # <CJK>
-0x7CCA # <CJK>
-0x7CCE # <CJK>
-0x7CD2 # <CJK>
-0x7CD6 # <CJK>
-0x7CD8 # <CJK>
-0x7CDC # <CJK>
-0x7CDE # <CJK>
-0x7CDF # <CJK>
-0x7CE0 # <CJK>
-0x7CE2 # <CJK>
-0x7CE7 # <CJK>
-0x7CEF # <CJK>
-0x7CF2 # <CJK>
-0x7CF4 # <CJK>
-0x7CF6 # <CJK>
-0x7CF8 # <CJK>
-0x7CFA # <CJK>
-0x7CFB # <CJK>
-0x7CFE # <CJK>
-0x7D00 # <CJK>
-0x7D02 # <CJK>
-0x7D04 # <CJK>
-0x7D05 # <CJK>
-0x7D06 # <CJK>
-0x7D0A # <CJK>
-0x7D0B # <CJK>
-0x7D0D # <CJK>
-0x7D10 # <CJK>
-0x7D14 # <CJK>
-0x7D15 # <CJK>
-0x7D17 # <CJK>
-0x7D18 # <CJK>
-0x7D19 # <CJK>
-0x7D1A # <CJK>
-0x7D1B # <CJK>
-0x7D1C # <CJK>
-0x7D20 # <CJK>
-0x7D21 # <CJK>
-0x7D22 # <CJK>
-0x7D2B # <CJK>
-0x7D2C # <CJK>
-0x7D2E # <CJK>
-0x7D2F # <CJK>
-0x7D30 # <CJK>
-0x7D32 # <CJK>
-0x7D33 # <CJK>
-0x7D35 # <CJK>
-0x7D39 # <CJK>
-0x7D3A # <CJK>
-0x7D3F # <CJK>
-0x7D42 # <CJK>
-0x7D43 # <CJK>
-0x7D44 # <CJK>
-0x7D45 # <CJK>
-0x7D46 # <CJK>
-0x7D4B # <CJK>
-0x7D4C # <CJK>
-0x7D4E # <CJK>
-0x7D4F # <CJK>
-0x7D50 # <CJK>
-0x7D56 # <CJK>
-0x7D5B # <CJK>
-0x7D5E # <CJK>
-0x7D61 # <CJK>
-0x7D62 # <CJK>
-0x7D63 # <CJK>
-0x7D66 # <CJK>
-0x7D68 # <CJK>
-0x7D6E # <CJK>
-0x7D71 # <CJK>
-0x7D72 # <CJK>
-0x7D73 # <CJK>
-0x7D75 # <CJK>
-0x7D76 # <CJK>
-0x7D79 # <CJK>
-0x7D7D # <CJK>
-0x7D89 # <CJK>
-0x7D8F # <CJK>
-0x7D93 # <CJK>
-0x7D99 # <CJK>
-0x7D9A # <CJK>
-0x7D9B # <CJK>
-0x7D9C # <CJK>
-0x7D9F # <CJK>
-0x7DA2 # <CJK>
-0x7DA3 # <CJK>
-0x7DAB # <CJK>
-0x7DAC # <CJK>
-0x7DAD # <CJK>
-0x7DAE # <CJK>
-0x7DAF # <CJK>
-0x7DB0 # <CJK>
-0x7DB1 # <CJK>
-0x7DB2 # <CJK>
-0x7DB4 # <CJK>
-0x7DB5 # <CJK>
-0x7DB8 # <CJK>
-0x7DBA # <CJK>
-0x7DBB # <CJK>
-0x7DBD # <CJK>
-0x7DBE # <CJK>
-0x7DBF # <CJK>
-0x7DC7 # <CJK>
-0x7DCA # <CJK>
-0x7DCB # <CJK>
-0x7DCF # <CJK>
-0x7DD1 # <CJK>
-0x7DD2 # <CJK>
-0x7DD5 # <CJK>
-0x7DD8 # <CJK>
-0x7DDA # <CJK>
-0x7DDC # <CJK>
-0x7DDD # <CJK>
-0x7DDE # <CJK>
-0x7DE0 # <CJK>
-0x7DE1 # <CJK>
-0x7DE4 # <CJK>
-0x7DE8 # <CJK>
-0x7DE9 # <CJK>
-0x7DEC # <CJK>
-0x7DEF # <CJK>
-0x7DF2 # <CJK>
-0x7DF4 # <CJK>
-0x7DFB # <CJK>
-0x7E01 # <CJK>
-0x7E04 # <CJK>
-0x7E05 # <CJK>
-0x7E09 # <CJK>
-0x7E0A # <CJK>
-0x7E0B # <CJK>
-0x7E12 # <CJK>
-0x7E1B # <CJK>
-0x7E1E # <CJK>
-0x7E1F # <CJK>
-0x7E21 # <CJK>
-0x7E22 # <CJK>
-0x7E23 # <CJK>
-0x7E26 # <CJK>
-0x7E2B # <CJK>
-0x7E2E # <CJK>
-0x7E31 # <CJK>
-0x7E32 # <CJK>
-0x7E35 # <CJK>
-0x7E37 # <CJK>
-0x7E39 # <CJK>
-0x7E3A # <CJK>
-0x7E3B # <CJK>
-0x7E3D # <CJK>
-0x7E3E # <CJK>
-0x7E41 # <CJK>
-0x7E43 # <CJK>
-0x7E46 # <CJK>
-0x7E4A # <CJK>
-0x7E4B # <CJK>
-0x7E4D # <CJK>
-0x7E54 # <CJK>
-0x7E55 # <CJK>
-0x7E56 # <CJK>
-0x7E59 # <CJK>
-0x7E5A # <CJK>
-0x7E5D # <CJK>
-0x7E5E # <CJK>
-0x7E66 # <CJK>
-0x7E67 # <CJK>
-0x7E69 # <CJK>
-0x7E6A # <CJK>
-0x7E6D # <CJK>
-0x7E70 # <CJK>
-0x7E79 # <CJK>
-0x7E7B # <CJK>
-0x7E7C # <CJK>
-0x7E7D # <CJK>
-0x7E7F # <CJK>
-0x7E82 # <CJK>
-0x7E83 # <CJK>
-0x7E88 # <CJK>
-0x7E89 # <CJK>
-0x7E8C # <CJK>
-0x7E8E # <CJK>
-0x7E8F # <CJK>
-0x7E90 # <CJK>
-0x7E92 # <CJK>
-0x7E93 # <CJK>
-0x7E94 # <CJK>
-0x7E96 # <CJK>
-0x7E9B # <CJK>
-0x7E9C # <CJK>
-0x7F36 # <CJK>
-0x7F38 # <CJK>
-0x7F3A # <CJK>
-0x7F45 # <CJK>
-0x7F4C # <CJK>
-0x7F4D # <CJK>
-0x7F4E # <CJK>
-0x7F50 # <CJK>
-0x7F51 # <CJK>
-0x7F54 # <CJK>
-0x7F55 # <CJK>
-0x7F58 # <CJK>
-0x7F5F # <CJK>
-0x7F60 # <CJK>
-0x7F67 # <CJK>
-0x7F68 # <CJK>
-0x7F69 # <CJK>
-0x7F6A # <CJK>
-0x7F6B # <CJK>
-0x7F6E # <CJK>
-0x7F70 # <CJK>
-0x7F72 # <CJK>
-0x7F75 # <CJK>
-0x7F77 # <CJK>
-0x7F78 # <CJK>
-0x7F79 # <CJK>
-0x7F82 # <CJK>
-0x7F83 # <CJK>
-0x7F85 # <CJK>
-0x7F86 # <CJK>
-0x7F87 # <CJK>
-0x7F88 # <CJK>
-0x7F8A # <CJK>
-0x7F8C # <CJK>
-0x7F8E # <CJK>
-0x7F94 # <CJK>
-0x7F9A # <CJK>
-0x7F9D # <CJK>
-0x7F9E # <CJK>
-0x7FA3 # <CJK>
-0x7FA4 # <CJK>
-0x7FA8 # <CJK>
-0x7FA9 # <CJK>
-0x7FAE # <CJK>
-0x7FAF # <CJK>
-0x7FB2 # <CJK>
-0x7FB6 # <CJK>
-0x7FB8 # <CJK>
-0x7FB9 # <CJK>
-0x7FBD # <CJK>
-0x7FC1 # <CJK>
-0x7FC5 # <CJK>
-0x7FC6 # <CJK>
-0x7FCA # <CJK>
-0x7FCC # <CJK>
-0x7FD2 # <CJK>
-0x7FD4 # <CJK>
-0x7FD5 # <CJK>
-0x7FE0 # <CJK>
-0x7FE1 # <CJK>
-0x7FE6 # <CJK>
-0x7FE9 # <CJK>
-0x7FEB # <CJK>
-0x7FF0 # <CJK>
-0x7FF3 # <CJK>
-0x7FF9 # <CJK>
-0x7FFB # <CJK>
-0x7FFC # <CJK>
-0x8000 # <CJK>
-0x8001 # <CJK>
-0x8003 # <CJK>
-0x8004 # <CJK>
-0x8005 # <CJK>
-0x8006 # <CJK>
-0x800B # <CJK>
-0x800C # <CJK>
-0x8010 # <CJK>
-0x8012 # <CJK>
-0x8015 # <CJK>
-0x8017 # <CJK>
-0x8018 # <CJK>
-0x8019 # <CJK>
-0x801C # <CJK>
-0x8021 # <CJK>
-0x8028 # <CJK>
-0x8033 # <CJK>
-0x8036 # <CJK>
-0x803B # <CJK>
-0x803D # <CJK>
-0x803F # <CJK>
-0x8046 # <CJK>
-0x804A # <CJK>
-0x8052 # <CJK>
-0x8056 # <CJK>
-0x8058 # <CJK>
-0x805A # <CJK>
-0x805E # <CJK>
-0x805F # <CJK>
-0x8061 # <CJK>
-0x8062 # <CJK>
-0x8068 # <CJK>
-0x806F # <CJK>
-0x8070 # <CJK>
-0x8072 # <CJK>
-0x8073 # <CJK>
-0x8074 # <CJK>
-0x8076 # <CJK>
-0x8077 # <CJK>
-0x8079 # <CJK>
-0x807D # <CJK>
-0x807E # <CJK>
-0x807F # <CJK>
-0x8084 # <CJK>
-0x8085 # <CJK>
-0x8086 # <CJK>
-0x8087 # <CJK>
-0x8089 # <CJK>
-0x808B # <CJK>
-0x808C # <CJK>
-0x8093 # <CJK>
-0x8096 # <CJK>
-0x8098 # <CJK>
-0x809A # <CJK>
-0x809B # <CJK>
-0x809D # <CJK>
-0x80A1 # <CJK>
-0x80A2 # <CJK>
-0x80A5 # <CJK>
-0x80A9 # <CJK>
-0x80AA # <CJK>
-0x80AC # <CJK>
-0x80AD # <CJK>
-0x80AF # <CJK>
-0x80B1 # <CJK>
-0x80B2 # <CJK>
-0x80B4 # <CJK>
-0x80BA # <CJK>
-0x80C3 # <CJK>
-0x80C4 # <CJK>
-0x80C6 # <CJK>
-0x80CC # <CJK>
-0x80CE # <CJK>
-0x80D6 # <CJK>
-0x80D9 # <CJK>
-0x80DA # <CJK>
-0x80DB # <CJK>
-0x80DD # <CJK>
-0x80DE # <CJK>
-0x80E1 # <CJK>
-0x80E4 # <CJK>
-0x80E5 # <CJK>
-0x80EF # <CJK>
-0x80F1 # <CJK>
-0x80F4 # <CJK>
-0x80F8 # <CJK>
-0x80FC # <CJK>
-0x80FD # <CJK>
-0x8102 # <CJK>
-0x8105 # <CJK>
-0x8106 # <CJK>
-0x8107 # <CJK>
-0x8108 # <CJK>
-0x8109 # <CJK>
-0x810A # <CJK>
-0x811A # <CJK>
-0x811B # <CJK>
-0x8123 # <CJK>
-0x8129 # <CJK>
-0x812F # <CJK>
-0x8131 # <CJK>
-0x8133 # <CJK>
-0x8139 # <CJK>
-0x813E # <CJK>
-0x8146 # <CJK>
-0x814B # <CJK>
-0x814E # <CJK>
-0x8150 # <CJK>
-0x8151 # <CJK>
-0x8153 # <CJK>
-0x8154 # <CJK>
-0x8155 # <CJK>
-0x815F # <CJK>
-0x8165 # <CJK>
-0x8166 # <CJK>
-0x816B # <CJK>
-0x816E # <CJK>
-0x8170 # <CJK>
-0x8171 # <CJK>
-0x8174 # <CJK>
-0x8178 # <CJK>
-0x8179 # <CJK>
-0x817A # <CJK>
-0x817F # <CJK>
-0x8180 # <CJK>
-0x8182 # <CJK>
-0x8183 # <CJK>
-0x8188 # <CJK>
-0x818A # <CJK>
-0x818F # <CJK>
-0x8193 # <CJK>
-0x8195 # <CJK>
-0x819A # <CJK>
-0x819C # <CJK>
-0x819D # <CJK>
-0x81A0 # <CJK>
-0x81A3 # <CJK>
-0x81A4 # <CJK>
-0x81A8 # <CJK>
-0x81A9 # <CJK>
-0x81B0 # <CJK>
-0x81B3 # <CJK>
-0x81B5 # <CJK>
-0x81B8 # <CJK>
-0x81BA # <CJK>
-0x81BD # <CJK>
-0x81BE # <CJK>
-0x81BF # <CJK>
-0x81C0 # <CJK>
-0x81C2 # <CJK>
-0x81C6 # <CJK>
-0x81C8 # <CJK>
-0x81C9 # <CJK>
-0x81CD # <CJK>
-0x81D1 # <CJK>
-0x81D3 # <CJK>
-0x81D8 # <CJK>
-0x81D9 # <CJK>
-0x81DA # <CJK>
-0x81DF # <CJK>
-0x81E0 # <CJK>
-0x81E3 # <CJK>
-0x81E5 # <CJK>
-0x81E7 # <CJK>
-0x81E8 # <CJK>
-0x81EA # <CJK>
-0x81ED # <CJK>
-0x81F3 # <CJK>
-0x81F4 # <CJK>
-0x81FA # <CJK>
-0x81FB # <CJK>
-0x81FC # <CJK>
-0x81FE # <CJK>
-0x8201 # <CJK>
-0x8202 # <CJK>
-0x8205 # <CJK>
-0x8207 # <CJK>
-0x8208 # <CJK>
-0x8209 # <CJK>
-0x820A # <CJK>
-0x820C # <CJK>
-0x820D # <CJK>
-0x820E # <CJK>
-0x8210 # <CJK>
-0x8212 # <CJK>
-0x8216 # <CJK>
-0x8217 # <CJK>
-0x8218 # <CJK>
-0x821B # <CJK>
-0x821C # <CJK>
-0x821E # <CJK>
-0x821F # <CJK>
-0x8229 # <CJK>
-0x822A # <CJK>
-0x822B # <CJK>
-0x822C # <CJK>
-0x822E # <CJK>
-0x8233 # <CJK>
-0x8235 # <CJK>
-0x8236 # <CJK>
-0x8237 # <CJK>
-0x8238 # <CJK>
-0x8239 # <CJK>
-0x8240 # <CJK>
-0x8247 # <CJK>
-0x8258 # <CJK>
-0x8259 # <CJK>
-0x825A # <CJK>
-0x825D # <CJK>
-0x825F # <CJK>
-0x8262 # <CJK>
-0x8264 # <CJK>
-0x8266 # <CJK>
-0x8268 # <CJK>
-0x826A # <CJK>
-0x826B # <CJK>
-0x826E # <CJK>
-0x826F # <CJK>
-0x8271 # <CJK>
-0x8272 # <CJK>
-0x8276 # <CJK>
-0x8277 # <CJK>
-0x8278 # <CJK>
-0x827E # <CJK>
-0x828B # <CJK>
-0x828D # <CJK>
-0x8292 # <CJK>
-0x8299 # <CJK>
-0x829D # <CJK>
-0x829F # <CJK>
-0x82A5 # <CJK>
-0x82A6 # <CJK>
-0x82AB # <CJK>
-0x82AC # <CJK>
-0x82AD # <CJK>
-0x82AF # <CJK>
-0x82B1 # <CJK>
-0x82B3 # <CJK>
-0x82B8 # <CJK>
-0x82B9 # <CJK>
-0x82BB # <CJK>
-0x82BD # <CJK>
-0x82C5 # <CJK>
-0x82D1 # <CJK>
-0x82D2 # <CJK>
-0x82D3 # <CJK>
-0x82D4 # <CJK>
-0x82D7 # <CJK>
-0x82D9 # <CJK>
-0x82DB # <CJK>
-0x82DC # <CJK>
-0x82DE # <CJK>
-0x82DF # <CJK>
-0x82E1 # <CJK>
-0x82E3 # <CJK>
-0x82E5 # <CJK>
-0x82E6 # <CJK>
-0x82E7 # <CJK>
-0x82EB # <CJK>
-0x82F1 # <CJK>
-0x82F3 # <CJK>
-0x82F4 # <CJK>
-0x82F9 # <CJK>
-0x82FA # <CJK>
-0x82FB # <CJK>
-0x8302 # <CJK>
-0x8303 # <CJK>
-0x8304 # <CJK>
-0x8305 # <CJK>
-0x8306 # <CJK>
-0x8309 # <CJK>
-0x830E # <CJK>
-0x8316 # <CJK>
-0x8317 # <CJK>
-0x8318 # <CJK>
-0x831C # <CJK>
-0x8323 # <CJK>
-0x8328 # <CJK>
-0x832B # <CJK>
-0x832F # <CJK>
-0x8331 # <CJK>
-0x8332 # <CJK>
-0x8334 # <CJK>
-0x8335 # <CJK>
-0x8336 # <CJK>
-0x8338 # <CJK>
-0x8339 # <CJK>
-0x8340 # <CJK>
-0x8345 # <CJK>
-0x8349 # <CJK>
-0x834A # <CJK>
-0x834F # <CJK>
-0x8350 # <CJK>
-0x8352 # <CJK>
-0x8358 # <CJK>
-0x8373 # <CJK>
-0x8375 # <CJK>
-0x8377 # <CJK>
-0x837B # <CJK>
-0x837C # <CJK>
-0x8385 # <CJK>
-0x8387 # <CJK>
-0x8389 # <CJK>
-0x838A # <CJK>
-0x838E # <CJK>
-0x8393 # <CJK>
-0x8396 # <CJK>
-0x839A # <CJK>
-0x839E # <CJK>
-0x839F # <CJK>
-0x83A0 # <CJK>
-0x83A2 # <CJK>
-0x83A8 # <CJK>
-0x83AA # <CJK>
-0x83AB # <CJK>
-0x83B1 # <CJK>
-0x83B5 # <CJK>
-0x83BD # <CJK>
-0x83C1 # <CJK>
-0x83C5 # <CJK>
-0x83CA # <CJK>
-0x83CC # <CJK>
-0x83CE # <CJK>
-0x83D3 # <CJK>
-0x83D6 # <CJK>
-0x83D8 # <CJK>
-0x83DC # <CJK>
-0x83DF # <CJK>
-0x83E0 # <CJK>
-0x83E9 # <CJK>
-0x83EB # <CJK>
-0x83EF # <CJK>
-0x83F0 # <CJK>
-0x83F1 # <CJK>
-0x83F2 # <CJK>
-0x83F4 # <CJK>
-0x83F7 # <CJK>
-0x83FB # <CJK>
-0x83FD # <CJK>
-0x8403 # <CJK>
-0x8404 # <CJK>
-0x8407 # <CJK>
-0x840B # <CJK>
-0x840C # <CJK>
-0x840D # <CJK>
-0x840E # <CJK>
-0x8413 # <CJK>
-0x8420 # <CJK>
-0x8422 # <CJK>
-0x8429 # <CJK>
-0x842A # <CJK>
-0x842C # <CJK>
-0x8431 # <CJK>
-0x8435 # <CJK>
-0x8438 # <CJK>
-0x843C # <CJK>
-0x843D # <CJK>
-0x8446 # <CJK>
-0x8449 # <CJK>
-0x844E # <CJK>
-0x8457 # <CJK>
-0x845B # <CJK>
-0x8461 # <CJK>
-0x8462 # <CJK>
-0x8463 # <CJK>
-0x8466 # <CJK>
-0x8469 # <CJK>
-0x846B # <CJK>
-0x846C # <CJK>
-0x846D # <CJK>
-0x846E # <CJK>
-0x846F # <CJK>
-0x8471 # <CJK>
-0x8475 # <CJK>
-0x8477 # <CJK>
-0x8479 # <CJK>
-0x847A # <CJK>
-0x8482 # <CJK>
-0x8484 # <CJK>
-0x848B # <CJK>
-0x8490 # <CJK>
-0x8494 # <CJK>
-0x8499 # <CJK>
-0x849C # <CJK>
-0x849F # <CJK>
-0x84A1 # <CJK>
-0x84AD # <CJK>
-0x84B2 # <CJK>
-0x84B8 # <CJK>
-0x84B9 # <CJK>
-0x84BB # <CJK>
-0x84BC # <CJK>
-0x84BF # <CJK>
-0x84C1 # <CJK>
-0x84C4 # <CJK>
-0x84C6 # <CJK>
-0x84C9 # <CJK>
-0x84CA # <CJK>
-0x84CB # <CJK>
-0x84CD # <CJK>
-0x84D0 # <CJK>
-0x84D1 # <CJK>
-0x84D6 # <CJK>
-0x84D9 # <CJK>
-0x84DA # <CJK>
-0x84EC # <CJK>
-0x84EE # <CJK>
-0x84F4 # <CJK>
-0x84FC # <CJK>
-0x84FF # <CJK>
-0x8500 # <CJK>
-0x8506 # <CJK>
-0x8511 # <CJK>
-0x8513 # <CJK>
-0x8514 # <CJK>
-0x8515 # <CJK>
-0x8517 # <CJK>
-0x8518 # <CJK>
-0x851A # <CJK>
-0x851F # <CJK>
-0x8521 # <CJK>
-0x8526 # <CJK>
-0x852C # <CJK>
-0x852D # <CJK>
-0x8535 # <CJK>
-0x853D # <CJK>
-0x8540 # <CJK>
-0x8541 # <CJK>
-0x8543 # <CJK>
-0x8548 # <CJK>
-0x8549 # <CJK>
-0x854A # <CJK>
-0x854B # <CJK>
-0x854E # <CJK>
-0x8555 # <CJK>
-0x8557 # <CJK>
-0x8558 # <CJK>
-0x855A # <CJK>
-0x8563 # <CJK>
-0x8568 # <CJK>
-0x8569 # <CJK>
-0x856A # <CJK>
-0x856D # <CJK>
-0x8577 # <CJK>
-0x857E # <CJK>
-0x8580 # <CJK>
-0x8584 # <CJK>
-0x8587 # <CJK>
-0x8588 # <CJK>
-0x858A # <CJK>
-0x8590 # <CJK>
-0x8591 # <CJK>
-0x8594 # <CJK>
-0x8597 # <CJK>
-0x8599 # <CJK>
-0x859B # <CJK>
-0x859C # <CJK>
-0x85A4 # <CJK>
-0x85A6 # <CJK>
-0x85A8 # <CJK>
-0x85A9 # <CJK>
-0x85AA # <CJK>
-0x85AB # <CJK>
-0x85AC # <CJK>
-0x85AE # <CJK>
-0x85AF # <CJK>
-0x85B9 # <CJK>
-0x85BA # <CJK>
-0x85C1 # <CJK>
-0x85C9 # <CJK>
-0x85CD # <CJK>
-0x85CF # <CJK>
-0x85D0 # <CJK>
-0x85D5 # <CJK>
-0x85DC # <CJK>
-0x85DD # <CJK>
-0x85E4 # <CJK>
-0x85E5 # <CJK>
-0x85E9 # <CJK>
-0x85EA # <CJK>
-0x85F7 # <CJK>
-0x85F9 # <CJK>
-0x85FA # <CJK>
-0x85FB # <CJK>
-0x85FE # <CJK>
-0x8602 # <CJK>
-0x8606 # <CJK>
-0x8607 # <CJK>
-0x860A # <CJK>
-0x860B # <CJK>
-0x8613 # <CJK>
-0x8616 # <CJK>
-0x8617 # <CJK>
-0x861A # <CJK>
-0x8622 # <CJK>
-0x862D # <CJK>
-0x862F # <CJK>
-0x8630 # <CJK>
-0x863F # <CJK>
-0x864D # <CJK>
-0x864E # <CJK>
-0x8650 # <CJK>
-0x8654 # <CJK>
-0x8655 # <CJK>
-0x865A # <CJK>
-0x865C # <CJK>
-0x865E # <CJK>
-0x865F # <CJK>
-0x8667 # <CJK>
-0x866B # <CJK>
-0x8671 # <CJK>
-0x8679 # <CJK>
-0x867B # <CJK>
-0x868A # <CJK>
-0x868B # <CJK>
-0x868C # <CJK>
-0x8693 # <CJK>
-0x8695 # <CJK>
-0x86A3 # <CJK>
-0x86A4 # <CJK>
-0x86A9 # <CJK>
-0x86AA # <CJK>
-0x86AB # <CJK>
-0x86AF # <CJK>
-0x86B0 # <CJK>
-0x86B6 # <CJK>
-0x86C4 # <CJK>
-0x86C6 # <CJK>
-0x86C7 # <CJK>
-0x86C9 # <CJK>
-0x86CB # <CJK>
-0x86CD # <CJK>
-0x86CE # <CJK>
-0x86D4 # <CJK>
-0x86D9 # <CJK>
-0x86DB # <CJK>
-0x86DE # <CJK>
-0x86DF # <CJK>
-0x86E4 # <CJK>
-0x86E9 # <CJK>
-0x86EC # <CJK>
-0x86ED # <CJK>
-0x86EE # <CJK>
-0x86EF # <CJK>
-0x86F8 # <CJK>
-0x86F9 # <CJK>
-0x86FB # <CJK>
-0x86FE # <CJK>
-0x8700 # <CJK>
-0x8702 # <CJK>
-0x8703 # <CJK>
-0x8706 # <CJK>
-0x8708 # <CJK>
-0x8709 # <CJK>
-0x870A # <CJK>
-0x870D # <CJK>
-0x8711 # <CJK>
-0x8712 # <CJK>
-0x8718 # <CJK>
-0x871A # <CJK>
-0x871C # <CJK>
-0x8725 # <CJK>
-0x8729 # <CJK>
-0x8734 # <CJK>
-0x8737 # <CJK>
-0x873B # <CJK>
-0x873F # <CJK>
-0x8749 # <CJK>
-0x874B # <CJK>
-0x874C # <CJK>
-0x874E # <CJK>
-0x8753 # <CJK>
-0x8755 # <CJK>
-0x8757 # <CJK>
-0x8759 # <CJK>
-0x875F # <CJK>
-0x8760 # <CJK>
-0x8763 # <CJK>
-0x8766 # <CJK>
-0x8768 # <CJK>
-0x876A # <CJK>
-0x876E # <CJK>
-0x8774 # <CJK>
-0x8776 # <CJK>
-0x8778 # <CJK>
-0x877F # <CJK>
-0x8782 # <CJK>
-0x878D # <CJK>
-0x879F # <CJK>
-0x87A2 # <CJK>
-0x87AB # <CJK>
-0x87AF # <CJK>
-0x87B3 # <CJK>
-0x87BA # <CJK>
-0x87BB # <CJK>
-0x87BD # <CJK>
-0x87C0 # <CJK>
-0x87C4 # <CJK>
-0x87C6 # <CJK>
-0x87C7 # <CJK>
-0x87CB # <CJK>
-0x87D0 # <CJK>
-0x87D2 # <CJK>
-0x87E0 # <CJK>
-0x87EF # <CJK>
-0x87F2 # <CJK>
-0x87F6 # <CJK>
-0x87F7 # <CJK>
-0x87F9 # <CJK>
-0x87FB # <CJK>
-0x87FE # <CJK>
-0x8805 # <CJK>
-0x880D # <CJK>
-0x880E # <CJK>
-0x880F # <CJK>
-0x8811 # <CJK>
-0x8815 # <CJK>
-0x8816 # <CJK>
-0x8821 # <CJK>
-0x8822 # <CJK>
-0x8823 # <CJK>
-0x8827 # <CJK>
-0x8831 # <CJK>
-0x8836 # <CJK>
-0x8839 # <CJK>
-0x883B # <CJK>
-0x8840 # <CJK>
-0x8842 # <CJK>
-0x8844 # <CJK>
-0x8846 # <CJK>
-0x884C # <CJK>
-0x884D # <CJK>
-0x8852 # <CJK>
-0x8853 # <CJK>
-0x8857 # <CJK>
-0x8859 # <CJK>
-0x885B # <CJK>
-0x885D # <CJK>
-0x885E # <CJK>
-0x8861 # <CJK>
-0x8862 # <CJK>
-0x8863 # <CJK>
-0x8868 # <CJK>
-0x886B # <CJK>
-0x8870 # <CJK>
-0x8872 # <CJK>
-0x8875 # <CJK>
-0x8877 # <CJK>
-0x887D # <CJK>
-0x887E # <CJK>
-0x887F # <CJK>
-0x8881 # <CJK>
-0x8882 # <CJK>
-0x8888 # <CJK>
-0x888B # <CJK>
-0x888D # <CJK>
-0x8892 # <CJK>
-0x8896 # <CJK>
-0x8897 # <CJK>
-0x8899 # <CJK>
-0x889E # <CJK>
-0x88A2 # <CJK>
-0x88A4 # <CJK>
-0x88AB # <CJK>
-0x88AE # <CJK>
-0x88B0 # <CJK>
-0x88B1 # <CJK>
-0x88B4 # <CJK>
-0x88B5 # <CJK>
-0x88B7 # <CJK>
-0x88BF # <CJK>
-0x88C1 # <CJK>
-0x88C2 # <CJK>
-0x88C3 # <CJK>
-0x88C4 # <CJK>
-0x88C5 # <CJK>
-0x88CF # <CJK>
-0x88D4 # <CJK>
-0x88D5 # <CJK>
-0x88D8 # <CJK>
-0x88D9 # <CJK>
-0x88DC # <CJK>
-0x88DD # <CJK>
-0x88DF # <CJK>
-0x88E1 # <CJK>
-0x88E8 # <CJK>
-0x88F2 # <CJK>
-0x88F3 # <CJK>
-0x88F4 # <CJK>
-0x88F8 # <CJK>
-0x88F9 # <CJK>
-0x88FC # <CJK>
-0x88FD # <CJK>
-0x88FE # <CJK>
-0x8902 # <CJK>
-0x8904 # <CJK>
-0x8907 # <CJK>
-0x890A # <CJK>
-0x890C # <CJK>
-0x8910 # <CJK>
-0x8912 # <CJK>
-0x8913 # <CJK>
-0x891D # <CJK>
-0x891E # <CJK>
-0x8925 # <CJK>
-0x892A # <CJK>
-0x892B # <CJK>
-0x8936 # <CJK>
-0x8938 # <CJK>
-0x893B # <CJK>
-0x8941 # <CJK>
-0x8943 # <CJK>
-0x8944 # <CJK>
-0x894C # <CJK>
-0x894D # <CJK>
-0x8956 # <CJK>
-0x895E # <CJK>
-0x895F # <CJK>
-0x8960 # <CJK>
-0x8964 # <CJK>
-0x8966 # <CJK>
-0x896A # <CJK>
-0x896D # <CJK>
-0x896F # <CJK>
-0x8972 # <CJK>
-0x8974 # <CJK>
-0x8977 # <CJK>
-0x897E # <CJK>
-0x897F # <CJK>
-0x8981 # <CJK>
-0x8983 # <CJK>
-0x8986 # <CJK>
-0x8987 # <CJK>
-0x8988 # <CJK>
-0x898A # <CJK>
-0x898B # <CJK>
-0x898F # <CJK>
-0x8993 # <CJK>
-0x8996 # <CJK>
-0x8997 # <CJK>
-0x8998 # <CJK>
-0x899A # <CJK>
-0x89A1 # <CJK>
-0x89A6 # <CJK>
-0x89A7 # <CJK>
-0x89A9 # <CJK>
-0x89AA # <CJK>
-0x89AC # <CJK>
-0x89AF # <CJK>
-0x89B2 # <CJK>
-0x89B3 # <CJK>
-0x89BA # <CJK>
-0x89BD # <CJK>
-0x89BF # <CJK>
-0x89C0 # <CJK>
-0x89D2 # <CJK>
-0x89DA # <CJK>
-0x89DC # <CJK>
-0x89DD # <CJK>
-0x89E3 # <CJK>
-0x89E6 # <CJK>
-0x89E7 # <CJK>
-0x89F4 # <CJK>
-0x89F8 # <CJK>
-0x8A00 # <CJK>
-0x8A02 # <CJK>
-0x8A03 # <CJK>
-0x8A08 # <CJK>
-0x8A0A # <CJK>
-0x8A0C # <CJK>
-0x8A0E # <CJK>
-0x8A10 # <CJK>
-0x8A13 # <CJK>
-0x8A16 # <CJK>
-0x8A17 # <CJK>
-0x8A18 # <CJK>
-0x8A1B # <CJK>
-0x8A1D # <CJK>
-0x8A1F # <CJK>
-0x8A23 # <CJK>
-0x8A25 # <CJK>
-0x8A2A # <CJK>
-0x8A2D # <CJK>
-0x8A31 # <CJK>
-0x8A33 # <CJK>
-0x8A34 # <CJK>
-0x8A36 # <CJK>
-0x8A3A # <CJK>
-0x8A3B # <CJK>
-0x8A3C # <CJK>
-0x8A41 # <CJK>
-0x8A46 # <CJK>
-0x8A48 # <CJK>
-0x8A50 # <CJK>
-0x8A51 # <CJK>
-0x8A52 # <CJK>
-0x8A54 # <CJK>
-0x8A55 # <CJK>
-0x8A5B # <CJK>
-0x8A5E # <CJK>
-0x8A60 # <CJK>
-0x8A62 # <CJK>
-0x8A63 # <CJK>
-0x8A66 # <CJK>
-0x8A69 # <CJK>
-0x8A6B # <CJK>
-0x8A6C # <CJK>
-0x8A6D # <CJK>
-0x8A6E # <CJK>
-0x8A70 # <CJK>
-0x8A71 # <CJK>
-0x8A72 # <CJK>
-0x8A73 # <CJK>
-0x8A7C # <CJK>
-0x8A82 # <CJK>
-0x8A84 # <CJK>
-0x8A85 # <CJK>
-0x8A87 # <CJK>
-0x8A89 # <CJK>
-0x8A8C # <CJK>
-0x8A8D # <CJK>
-0x8A91 # <CJK>
-0x8A93 # <CJK>
-0x8A95 # <CJK>
-0x8A98 # <CJK>
-0x8A9A # <CJK>
-0x8A9E # <CJK>
-0x8AA0 # <CJK>
-0x8AA1 # <CJK>
-0x8AA3 # <CJK>
-0x8AA4 # <CJK>
-0x8AA5 # <CJK>
-0x8AA6 # <CJK>
-0x8AA8 # <CJK>
-0x8AAC # <CJK>
-0x8AAD # <CJK>
-0x8AB0 # <CJK>
-0x8AB2 # <CJK>
-0x8AB9 # <CJK>
-0x8ABC # <CJK>
-0x8ABF # <CJK>
-0x8AC2 # <CJK>
-0x8AC4 # <CJK>
-0x8AC7 # <CJK>
-0x8ACB # <CJK>
-0x8ACC # <CJK>
-0x8ACD # <CJK>
-0x8ACF # <CJK>
-0x8AD2 # <CJK>
-0x8AD6 # <CJK>
-0x8ADA # <CJK>
-0x8ADB # <CJK>
-0x8ADC # <CJK>
-0x8ADE # <CJK>
-0x8AE0 # <CJK>
-0x8AE1 # <CJK>
-0x8AE2 # <CJK>
-0x8AE4 # <CJK>
-0x8AE6 # <CJK>
-0x8AE7 # <CJK>
-0x8AEB # <CJK>
-0x8AED # <CJK>
-0x8AEE # <CJK>
-0x8AF1 # <CJK>
-0x8AF3 # <CJK>
-0x8AF7 # <CJK>
-0x8AF8 # <CJK>
-0x8AFA # <CJK>
-0x8AFE # <CJK>
-0x8B00 # <CJK>
-0x8B01 # <CJK>
-0x8B02 # <CJK>
-0x8B04 # <CJK>
-0x8B07 # <CJK>
-0x8B0C # <CJK>
-0x8B0E # <CJK>
-0x8B10 # <CJK>
-0x8B14 # <CJK>
-0x8B16 # <CJK>
-0x8B17 # <CJK>
-0x8B19 # <CJK>
-0x8B1A # <CJK>
-0x8B1B # <CJK>
-0x8B1D # <CJK>
-0x8B20 # <CJK>
-0x8B21 # <CJK>
-0x8B26 # <CJK>
-0x8B28 # <CJK>
-0x8B2B # <CJK>
-0x8B2C # <CJK>
-0x8B33 # <CJK>
-0x8B39 # <CJK>
-0x8B3E # <CJK>
-0x8B41 # <CJK>
-0x8B49 # <CJK>
-0x8B4C # <CJK>
-0x8B4E # <CJK>
-0x8B4F # <CJK>
-0x8B56 # <CJK>
-0x8B58 # <CJK>
-0x8B5A # <CJK>
-0x8B5B # <CJK>
-0x8B5C # <CJK>
-0x8B5F # <CJK>
-0x8B66 # <CJK>
-0x8B6B # <CJK>
-0x8B6C # <CJK>
-0x8B6F # <CJK>
-0x8B70 # <CJK>
-0x8B71 # <CJK>
-0x8B72 # <CJK>
-0x8B74 # <CJK>
-0x8B77 # <CJK>
-0x8B7D # <CJK>
-0x8B80 # <CJK>
-0x8B83 # <CJK>
-0x8B8A # <CJK>
-0x8B8C # <CJK>
-0x8B8E # <CJK>
-0x8B90 # <CJK>
-0x8B92 # <CJK>
-0x8B93 # <CJK>
-0x8B96 # <CJK>
-0x8B99 # <CJK>
-0x8B9A # <CJK>
-0x8C37 # <CJK>
-0x8C3A # <CJK>
-0x8C3F # <CJK>
-0x8C41 # <CJK>
-0x8C46 # <CJK>
-0x8C48 # <CJK>
-0x8C4A # <CJK>
-0x8C4C # <CJK>
-0x8C4E # <CJK>
-0x8C50 # <CJK>
-0x8C55 # <CJK>
-0x8C5A # <CJK>
-0x8C61 # <CJK>
-0x8C62 # <CJK>
-0x8C6A # <CJK>
-0x8C6B # <CJK>
-0x8C6C # <CJK>
-0x8C78 # <CJK>
-0x8C79 # <CJK>
-0x8C7A # <CJK>
-0x8C7C # <CJK>
-0x8C82 # <CJK>
-0x8C85 # <CJK>
-0x8C89 # <CJK>
-0x8C8A # <CJK>
-0x8C8C # <CJK>
-0x8C8D # <CJK>
-0x8C8E # <CJK>
-0x8C94 # <CJK>
-0x8C98 # <CJK>
-0x8C9D # <CJK>
-0x8C9E # <CJK>
-0x8CA0 # <CJK>
-0x8CA1 # <CJK>
-0x8CA2 # <CJK>
-0x8CA7 # <CJK>
-0x8CA8 # <CJK>
-0x8CA9 # <CJK>
-0x8CAA # <CJK>
-0x8CAB # <CJK>
-0x8CAC # <CJK>
-0x8CAD # <CJK>
-0x8CAE # <CJK>
-0x8CAF # <CJK>
-0x8CB0 # <CJK>
-0x8CB2 # <CJK>
-0x8CB3 # <CJK>
-0x8CB4 # <CJK>
-0x8CB6 # <CJK>
-0x8CB7 # <CJK>
-0x8CB8 # <CJK>
-0x8CBB # <CJK>
-0x8CBC # <CJK>
-0x8CBD # <CJK>
-0x8CBF # <CJK>
-0x8CC0 # <CJK>
-0x8CC1 # <CJK>
-0x8CC2 # <CJK>
-0x8CC3 # <CJK>
-0x8CC4 # <CJK>
-0x8CC7 # <CJK>
-0x8CC8 # <CJK>
-0x8CCA # <CJK>
-0x8CCD # <CJK>
-0x8CCE # <CJK>
-0x8CD1 # <CJK>
-0x8CD3 # <CJK>
-0x8CDA # <CJK>
-0x8CDB # <CJK>
-0x8CDC # <CJK>
-0x8CDE # <CJK>
-0x8CE0 # <CJK>
-0x8CE2 # <CJK>
-0x8CE3 # <CJK>
-0x8CE4 # <CJK>
-0x8CE6 # <CJK>
-0x8CEA # <CJK>
-0x8CED # <CJK>
-0x8CFA # <CJK>
-0x8CFB # <CJK>
-0x8CFC # <CJK>
-0x8CFD # <CJK>
-0x8D04 # <CJK>
-0x8D05 # <CJK>
-0x8D07 # <CJK>
-0x8D08 # <CJK>
-0x8D0A # <CJK>
-0x8D0B # <CJK>
-0x8D0D # <CJK>
-0x8D0F # <CJK>
-0x8D10 # <CJK>
-0x8D13 # <CJK>
-0x8D14 # <CJK>
-0x8D16 # <CJK>
-0x8D64 # <CJK>
-0x8D66 # <CJK>
-0x8D67 # <CJK>
-0x8D6B # <CJK>
-0x8D6D # <CJK>
-0x8D70 # <CJK>
-0x8D71 # <CJK>
-0x8D73 # <CJK>
-0x8D74 # <CJK>
-0x8D77 # <CJK>
-0x8D81 # <CJK>
-0x8D85 # <CJK>
-0x8D8A # <CJK>
-0x8D99 # <CJK>
-0x8DA3 # <CJK>
-0x8DA8 # <CJK>
-0x8DB3 # <CJK>
-0x8DBA # <CJK>
-0x8DBE # <CJK>
-0x8DC2 # <CJK>
-0x8DCB # <CJK>
-0x8DCC # <CJK>
-0x8DCF # <CJK>
-0x8DD6 # <CJK>
-0x8DDA # <CJK>
-0x8DDB # <CJK>
-0x8DDD # <CJK>
-0x8DDF # <CJK>
-0x8DE1 # <CJK>
-0x8DE3 # <CJK>
-0x8DE8 # <CJK>
-0x8DEA # <CJK>
-0x8DEB # <CJK>
-0x8DEF # <CJK>
-0x8DF3 # <CJK>
-0x8DF5 # <CJK>
-0x8DFC # <CJK>
-0x8DFF # <CJK>
-0x8E08 # <CJK>
-0x8E09 # <CJK>
-0x8E0A # <CJK>
-0x8E0F # <CJK>
-0x8E10 # <CJK>
-0x8E1D # <CJK>
-0x8E1E # <CJK>
-0x8E1F # <CJK>
-0x8E2A # <CJK>
-0x8E30 # <CJK>
-0x8E34 # <CJK>
-0x8E35 # <CJK>
-0x8E42 # <CJK>
-0x8E44 # <CJK>
-0x8E47 # <CJK>
-0x8E48 # <CJK>
-0x8E49 # <CJK>
-0x8E4A # <CJK>
-0x8E4C # <CJK>
-0x8E50 # <CJK>
-0x8E55 # <CJK>
-0x8E59 # <CJK>
-0x8E5F # <CJK>
-0x8E60 # <CJK>
-0x8E63 # <CJK>
-0x8E64 # <CJK>
-0x8E72 # <CJK>
-0x8E74 # <CJK>
-0x8E76 # <CJK>
-0x8E7C # <CJK>
-0x8E81 # <CJK>
-0x8E84 # <CJK>
-0x8E85 # <CJK>
-0x8E87 # <CJK>
-0x8E8A # <CJK>
-0x8E8B # <CJK>
-0x8E8D # <CJK>
-0x8E91 # <CJK>
-0x8E93 # <CJK>
-0x8E94 # <CJK>
-0x8E99 # <CJK>
-0x8EA1 # <CJK>
-0x8EAA # <CJK>
-0x8EAB # <CJK>
-0x8EAC # <CJK>
-0x8EAF # <CJK>
-0x8EB0 # <CJK>
-0x8EB1 # <CJK>
-0x8EBE # <CJK>
-0x8EC5 # <CJK>
-0x8EC6 # <CJK>
-0x8EC8 # <CJK>
-0x8ECA # <CJK>
-0x8ECB # <CJK>
-0x8ECC # <CJK>
-0x8ECD # <CJK>
-0x8ED2 # <CJK>
-0x8EDB # <CJK>
-0x8EDF # <CJK>
-0x8EE2 # <CJK>
-0x8EE3 # <CJK>
-0x8EEB # <CJK>
-0x8EF8 # <CJK>
-0x8EFB # <CJK>
-0x8EFC # <CJK>
-0x8EFD # <CJK>
-0x8EFE # <CJK>
-0x8F03 # <CJK>
-0x8F05 # <CJK>
-0x8F09 # <CJK>
-0x8F0A # <CJK>
-0x8F0C # <CJK>
-0x8F12 # <CJK>
-0x8F13 # <CJK>
-0x8F14 # <CJK>
-0x8F15 # <CJK>
-0x8F19 # <CJK>
-0x8F1B # <CJK>
-0x8F1C # <CJK>
-0x8F1D # <CJK>
-0x8F1F # <CJK>
-0x8F26 # <CJK>
-0x8F29 # <CJK>
-0x8F2A # <CJK>
-0x8F2F # <CJK>
-0x8F33 # <CJK>
-0x8F38 # <CJK>
-0x8F39 # <CJK>
-0x8F3B # <CJK>
-0x8F3E # <CJK>
-0x8F3F # <CJK>
-0x8F42 # <CJK>
-0x8F44 # <CJK>
-0x8F45 # <CJK>
-0x8F46 # <CJK>
-0x8F49 # <CJK>
-0x8F4C # <CJK>
-0x8F4D # <CJK>
-0x8F4E # <CJK>
-0x8F57 # <CJK>
-0x8F5C # <CJK>
-0x8F5F # <CJK>
-0x8F61 # <CJK>
-0x8F62 # <CJK>
-0x8F63 # <CJK>
-0x8F64 # <CJK>
-0x8F9B # <CJK>
-0x8F9C # <CJK>
-0x8F9E # <CJK>
-0x8F9F # <CJK>
-0x8FA3 # <CJK>
-0x8FA7 # <CJK>
-0x8FA8 # <CJK>
-0x8FAD # <CJK>
-0x8FAE # <CJK>
-0x8FAF # <CJK>
-0x8FB0 # <CJK>
-0x8FB1 # <CJK>
-0x8FB2 # <CJK>
-0x8FB7 # <CJK>
-0x8FBA # <CJK>
-0x8FBB # <CJK>
-0x8FBC # <CJK>
-0x8FBF # <CJK>
-0x8FC2 # <CJK>
-0x8FC4 # <CJK>
-0x8FC5 # <CJK>
-0x8FCE # <CJK>
-0x8FD1 # <CJK>
-0x8FD4 # <CJK>
-0x8FDA # <CJK>
-0x8FE2 # <CJK>
-0x8FE5 # <CJK>
-0x8FE6 # <CJK>
-0x8FE9 # <CJK>
-0x8FEA # <CJK>
-0x8FEB # <CJK>
-0x8FED # <CJK>
-0x8FEF # <CJK>
-0x8FF0 # <CJK>
-0x8FF4 # <CJK>
-0x8FF7 # <CJK>
-0x8FF8 # <CJK>
-0x8FF9 # <CJK>
-0x8FFA # <CJK>
-0x8FFD # <CJK>
-0x9000 # <CJK>
-0x9001 # <CJK>
-0x9003 # <CJK>
-0x9005 # <CJK>
-0x9006 # <CJK>
-0x900B # <CJK>
-0x900D # <CJK>
-0x900E # <CJK>
-0x900F # <CJK>
-0x9010 # <CJK>
-0x9011 # <CJK>
-0x9013 # <CJK>
-0x9014 # <CJK>
-0x9015 # <CJK>
-0x9016 # <CJK>
-0x9017 # <CJK>
-0x9019 # <CJK>
-0x901A # <CJK>
-0x901D # <CJK>
-0x901E # <CJK>
-0x901F # <CJK>
-0x9020 # <CJK>
-0x9021 # <CJK>
-0x9022 # <CJK>
-0x9023 # <CJK>
-0x9027 # <CJK>
-0x902E # <CJK>
-0x9031 # <CJK>
-0x9032 # <CJK>
-0x9035 # <CJK>
-0x9036 # <CJK>
-0x9038 # <CJK>
-0x9039 # <CJK>
-0x903C # <CJK>
-0x903E # <CJK>
-0x9041 # <CJK>
-0x9042 # <CJK>
-0x9045 # <CJK>
-0x9047 # <CJK>
-0x9049 # <CJK>
-0x904A # <CJK>
-0x904B # <CJK>
-0x904D # <CJK>
-0x904E # <CJK>
-0x904F # <CJK>
-0x9050 # <CJK>
-0x9051 # <CJK>
-0x9052 # <CJK>
-0x9053 # <CJK>
-0x9054 # <CJK>
-0x9055 # <CJK>
-0x9056 # <CJK>
-0x9058 # <CJK>
-0x9059 # <CJK>
-0x905C # <CJK>
-0x905E # <CJK>
-0x9060 # <CJK>
-0x9061 # <CJK>
-0x9063 # <CJK>
-0x9065 # <CJK>
-0x9068 # <CJK>
-0x9069 # <CJK>
-0x906D # <CJK>
-0x906E # <CJK>
-0x906F # <CJK>
-0x9072 # <CJK>
-0x9075 # <CJK>
-0x9076 # <CJK>
-0x9077 # <CJK>
-0x9078 # <CJK>
-0x907A # <CJK>
-0x907C # <CJK>
-0x907D # <CJK>
-0x907F # <CJK>
-0x9080 # <CJK>
-0x9081 # <CJK>
-0x9082 # <CJK>
-0x9083 # <CJK>
-0x9084 # <CJK>
-0x9087 # <CJK>
-0x9089 # <CJK>
-0x908A # <CJK>
-0x908F # <CJK>
-0x9091 # <CJK>
-0x90A3 # <CJK>
-0x90A6 # <CJK>
-0x90A8 # <CJK>
-0x90AA # <CJK>
-0x90AF # <CJK>
-0x90B1 # <CJK>
-0x90B5 # <CJK>
-0x90B8 # <CJK>
-0x90C1 # <CJK>
-0x90CA # <CJK>
-0x90CE # <CJK>
-0x90DB # <CJK>
-0x90E1 # <CJK>
-0x90E2 # <CJK>
-0x90E4 # <CJK>
-0x90E8 # <CJK>
-0x90ED # <CJK>
-0x90F5 # <CJK>
-0x90F7 # <CJK>
-0x90FD # <CJK>
-0x9102 # <CJK>
-0x9112 # <CJK>
-0x9119 # <CJK>
-0x912D # <CJK>
-0x9130 # <CJK>
-0x9132 # <CJK>
-0x9149 # <CJK>
-0x914A # <CJK>
-0x914B # <CJK>
-0x914C # <CJK>
-0x914D # <CJK>
-0x914E # <CJK>
-0x9152 # <CJK>
-0x9154 # <CJK>
-0x9156 # <CJK>
-0x9158 # <CJK>
-0x9162 # <CJK>
-0x9163 # <CJK>
-0x9165 # <CJK>
-0x9169 # <CJK>
-0x916A # <CJK>
-0x916C # <CJK>
-0x9172 # <CJK>
-0x9173 # <CJK>
-0x9175 # <CJK>
-0x9177 # <CJK>
-0x9178 # <CJK>
-0x9182 # <CJK>
-0x9187 # <CJK>
-0x9189 # <CJK>
-0x918B # <CJK>
-0x918D # <CJK>
-0x9190 # <CJK>
-0x9192 # <CJK>
-0x9197 # <CJK>
-0x919C # <CJK>
-0x91A2 # <CJK>
-0x91A4 # <CJK>
-0x91AA # <CJK>
-0x91AB # <CJK>
-0x91AF # <CJK>
-0x91B4 # <CJK>
-0x91B5 # <CJK>
-0x91B8 # <CJK>
-0x91BA # <CJK>
-0x91C0 # <CJK>
-0x91C1 # <CJK>
-0x91C6 # <CJK>
-0x91C7 # <CJK>
-0x91C8 # <CJK>
-0x91C9 # <CJK>
-0x91CB # <CJK>
-0x91CC # <CJK>
-0x91CD # <CJK>
-0x91CE # <CJK>
-0x91CF # <CJK>
-0x91D0 # <CJK>
-0x91D1 # <CJK>
-0x91D6 # <CJK>
-0x91D8 # <CJK>
-0x91DB # <CJK>
-0x91DC # <CJK>
-0x91DD # <CJK>
-0x91DF # <CJK>
-0x91E1 # <CJK>
-0x91E3 # <CJK>
-0x91E6 # <CJK>
-0x91E7 # <CJK>
-0x91F5 # <CJK>
-0x91F6 # <CJK>
-0x91FC # <CJK>
-0x91FF # <CJK>
-0x920D # <CJK>
-0x920E # <CJK>
-0x9211 # <CJK>
-0x9214 # <CJK>
-0x9215 # <CJK>
-0x921E # <CJK>
-0x9229 # <CJK>
-0x922C # <CJK>
-0x9234 # <CJK>
-0x9237 # <CJK>
-0x923F # <CJK>
-0x9244 # <CJK>
-0x9245 # <CJK>
-0x9248 # <CJK>
-0x9249 # <CJK>
-0x924B # <CJK>
-0x9250 # <CJK>
-0x9257 # <CJK>
-0x925A # <CJK>
-0x925B # <CJK>
-0x925E # <CJK>
-0x9262 # <CJK>
-0x9264 # <CJK>
-0x9266 # <CJK>
-0x9271 # <CJK>
-0x927E # <CJK>
-0x9280 # <CJK>
-0x9283 # <CJK>
-0x9285 # <CJK>
-0x9291 # <CJK>
-0x9293 # <CJK>
-0x9295 # <CJK>
-0x9296 # <CJK>
-0x9298 # <CJK>
-0x929A # <CJK>
-0x929B # <CJK>
-0x929C # <CJK>
-0x92AD # <CJK>
-0x92B7 # <CJK>
-0x92B9 # <CJK>
-0x92CF # <CJK>
-0x92D2 # <CJK>
-0x92E4 # <CJK>
-0x92E9 # <CJK>
-0x92EA # <CJK>
-0x92ED # <CJK>
-0x92F2 # <CJK>
-0x92F3 # <CJK>
-0x92F8 # <CJK>
-0x92FA # <CJK>
-0x92FC # <CJK>
-0x9306 # <CJK>
-0x930F # <CJK>
-0x9310 # <CJK>
-0x9318 # <CJK>
-0x9319 # <CJK>
-0x931A # <CJK>
-0x9320 # <CJK>
-0x9322 # <CJK>
-0x9323 # <CJK>
-0x9326 # <CJK>
-0x9328 # <CJK>
-0x932B # <CJK>
-0x932C # <CJK>
-0x932E # <CJK>
-0x932F # <CJK>
-0x9332 # <CJK>
-0x9335 # <CJK>
-0x933A # <CJK>
-0x933B # <CJK>
-0x9344 # <CJK>
-0x934B # <CJK>
-0x934D # <CJK>
-0x9354 # <CJK>
-0x9356 # <CJK>
-0x935B # <CJK>
-0x935C # <CJK>
-0x9360 # <CJK>
-0x936C # <CJK>
-0x936E # <CJK>
-0x9375 # <CJK>
-0x937C # <CJK>
-0x937E # <CJK>
-0x938C # <CJK>
-0x9394 # <CJK>
-0x9396 # <CJK>
-0x9397 # <CJK>
-0x939A # <CJK>
-0x93A7 # <CJK>
-0x93AC # <CJK>
-0x93AD # <CJK>
-0x93AE # <CJK>
-0x93B0 # <CJK>
-0x93B9 # <CJK>
-0x93C3 # <CJK>
-0x93C8 # <CJK>
-0x93D0 # <CJK>
-0x93D1 # <CJK>
-0x93D6 # <CJK>
-0x93D7 # <CJK>
-0x93D8 # <CJK>
-0x93DD # <CJK>
-0x93E1 # <CJK>
-0x93E4 # <CJK>
-0x93E5 # <CJK>
-0x93E8 # <CJK>
-0x9403 # <CJK>
-0x9407 # <CJK>
-0x9410 # <CJK>
-0x9413 # <CJK>
-0x9414 # <CJK>
-0x9418 # <CJK>
-0x9419 # <CJK>
-0x941A # <CJK>
-0x9421 # <CJK>
-0x942B # <CJK>
-0x9435 # <CJK>
-0x9436 # <CJK>
-0x9438 # <CJK>
-0x943A # <CJK>
-0x9441 # <CJK>
-0x9444 # <CJK>
-0x9451 # <CJK>
-0x9452 # <CJK>
-0x9453 # <CJK>
-0x945A # <CJK>
-0x945B # <CJK>
-0x945E # <CJK>
-0x9460 # <CJK>
-0x9462 # <CJK>
-0x946A # <CJK>
-0x9470 # <CJK>
-0x9475 # <CJK>
-0x9477 # <CJK>
-0x947C # <CJK>
-0x947D # <CJK>
-0x947E # <CJK>
-0x947F # <CJK>
-0x9481 # <CJK>
-0x9577 # <CJK>
-0x9580 # <CJK>
-0x9582 # <CJK>
-0x9583 # <CJK>
-0x9587 # <CJK>
-0x9589 # <CJK>
-0x958A # <CJK>
-0x958B # <CJK>
-0x958F # <CJK>
-0x9591 # <CJK>
-0x9593 # <CJK>
-0x9594 # <CJK>
-0x9596 # <CJK>
-0x9598 # <CJK>
-0x9599 # <CJK>
-0x95A0 # <CJK>
-0x95A2 # <CJK>
-0x95A3 # <CJK>
-0x95A4 # <CJK>
-0x95A5 # <CJK>
-0x95A7 # <CJK>
-0x95A8 # <CJK>
-0x95AD # <CJK>
-0x95B2 # <CJK>
-0x95B9 # <CJK>
-0x95BB # <CJK>
-0x95BC # <CJK>
-0x95BE # <CJK>
-0x95C3 # <CJK>
-0x95C7 # <CJK>
-0x95CA # <CJK>
-0x95CC # <CJK>
-0x95CD # <CJK>
-0x95D4 # <CJK>
-0x95D5 # <CJK>
-0x95D6 # <CJK>
-0x95D8 # <CJK>
-0x95DC # <CJK>
-0x95E1 # <CJK>
-0x95E2 # <CJK>
-0x95E5 # <CJK>
-0x961C # <CJK>
-0x9621 # <CJK>
-0x9628 # <CJK>
-0x962A # <CJK>
-0x962E # <CJK>
-0x962F # <CJK>
-0x9632 # <CJK>
-0x963B # <CJK>
-0x963F # <CJK>
-0x9640 # <CJK>
-0x9642 # <CJK>
-0x9644 # <CJK>
-0x964B # <CJK>
-0x964C # <CJK>
-0x964D # <CJK>
-0x964F # <CJK>
-0x9650 # <CJK>
-0x965B # <CJK>
-0x965C # <CJK>
-0x965D # <CJK>
-0x965E # <CJK>
-0x965F # <CJK>
-0x9662 # <CJK>
-0x9663 # <CJK>
-0x9664 # <CJK>
-0x9665 # <CJK>
-0x9666 # <CJK>
-0x966A # <CJK>
-0x966C # <CJK>
-0x9670 # <CJK>
-0x9672 # <CJK>
-0x9673 # <CJK>
-0x9675 # <CJK>
-0x9676 # <CJK>
-0x9677 # <CJK>
-0x9678 # <CJK>
-0x967A # <CJK>
-0x967D # <CJK>
-0x9685 # <CJK>
-0x9686 # <CJK>
-0x9688 # <CJK>
-0x968A # <CJK>
-0x968B # <CJK>
-0x968D # <CJK>
-0x968E # <CJK>
-0x968F # <CJK>
-0x9694 # <CJK>
-0x9695 # <CJK>
-0x9697 # <CJK>
-0x9698 # <CJK>
-0x9699 # <CJK>
-0x969B # <CJK>
-0x969C # <CJK>
-0x96A0 # <CJK>
-0x96A3 # <CJK>
-0x96A7 # <CJK>
-0x96A8 # <CJK>
-0x96AA # <CJK>
-0x96B0 # <CJK>
-0x96B1 # <CJK>
-0x96B2 # <CJK>
-0x96B4 # <CJK>
-0x96B6 # <CJK>
-0x96B7 # <CJK>
-0x96B8 # <CJK>
-0x96B9 # <CJK>
-0x96BB # <CJK>
-0x96BC # <CJK>
-0x96C0 # <CJK>
-0x96C1 # <CJK>
-0x96C4 # <CJK>
-0x96C5 # <CJK>
-0x96C6 # <CJK>
-0x96C7 # <CJK>
-0x96C9 # <CJK>
-0x96CB # <CJK>
-0x96CC # <CJK>
-0x96CD # <CJK>
-0x96CE # <CJK>
-0x96D1 # <CJK>
-0x96D5 # <CJK>
-0x96D6 # <CJK>
-0x96D9 # <CJK>
-0x96DB # <CJK>
-0x96DC # <CJK>
-0x96E2 # <CJK>
-0x96E3 # <CJK>
-0x96E8 # <CJK>
-0x96EA # <CJK>
-0x96EB # <CJK>
-0x96F0 # <CJK>
-0x96F2 # <CJK>
-0x96F6 # <CJK>
-0x96F7 # <CJK>
-0x96F9 # <CJK>
-0x96FB # <CJK>
-0x9700 # <CJK>
-0x9704 # <CJK>
-0x9706 # <CJK>
-0x9707 # <CJK>
-0x9708 # <CJK>
-0x970A # <CJK>
-0x970D # <CJK>
-0x970E # <CJK>
-0x970F # <CJK>
-0x9711 # <CJK>
-0x9713 # <CJK>
-0x9716 # <CJK>
-0x9719 # <CJK>
-0x971C # <CJK>
-0x971E # <CJK>
-0x9724 # <CJK>
-0x9727 # <CJK>
-0x972A # <CJK>
-0x9730 # <CJK>
-0x9732 # <CJK>
-0x9738 # <CJK>
-0x9739 # <CJK>
-0x973D # <CJK>
-0x973E # <CJK>
-0x9742 # <CJK>
-0x9744 # <CJK>
-0x9746 # <CJK>
-0x9748 # <CJK>
-0x9749 # <CJK>
-0x9752 # <CJK>
-0x9756 # <CJK>
-0x9759 # <CJK>
-0x975C # <CJK>
-0x975E # <CJK>
-0x9760 # <CJK>
-0x9761 # <CJK>
-0x9762 # <CJK>
-0x9764 # <CJK>
-0x9766 # <CJK>
-0x9768 # <CJK>
-0x9769 # <CJK>
-0x976B # <CJK>
-0x976D # <CJK>
-0x9771 # <CJK>
-0x9774 # <CJK>
-0x9779 # <CJK>
-0x977A # <CJK>
-0x977C # <CJK>
-0x9781 # <CJK>
-0x9784 # <CJK>
-0x9785 # <CJK>
-0x9786 # <CJK>
-0x978B # <CJK>
-0x978D # <CJK>
-0x978F # <CJK>
-0x9790 # <CJK>
-0x9798 # <CJK>
-0x979C # <CJK>
-0x97A0 # <CJK>
-0x97A3 # <CJK>
-0x97A6 # <CJK>
-0x97A8 # <CJK>
-0x97AB # <CJK>
-0x97AD # <CJK>
-0x97B3 # <CJK>
-0x97B4 # <CJK>
-0x97C3 # <CJK>
-0x97C6 # <CJK>
-0x97C8 # <CJK>
-0x97CB # <CJK>
-0x97D3 # <CJK>
-0x97DC # <CJK>
-0x97ED # <CJK>
-0x97EE # <CJK>
-0x97F2 # <CJK>
-0x97F3 # <CJK>
-0x97F5 # <CJK>
-0x97F6 # <CJK>
-0x97FB # <CJK>
-0x97FF # <CJK>
-0x9801 # <CJK>
-0x9802 # <CJK>
-0x9803 # <CJK>
-0x9805 # <CJK>
-0x9806 # <CJK>
-0x9808 # <CJK>
-0x980C # <CJK>
-0x980F # <CJK>
-0x9810 # <CJK>
-0x9811 # <CJK>
-0x9812 # <CJK>
-0x9813 # <CJK>
-0x9817 # <CJK>
-0x9818 # <CJK>
-0x981A # <CJK>
-0x9821 # <CJK>
-0x9824 # <CJK>
-0x982C # <CJK>
-0x982D # <CJK>
-0x9834 # <CJK>
-0x9837 # <CJK>
-0x9838 # <CJK>
-0x983B # <CJK>
-0x983C # <CJK>
-0x983D # <CJK>
-0x9846 # <CJK>
-0x984B # <CJK>
-0x984C # <CJK>
-0x984D # <CJK>
-0x984E # <CJK>
-0x984F # <CJK>
-0x9854 # <CJK>
-0x9855 # <CJK>
-0x9858 # <CJK>
-0x985B # <CJK>
-0x985E # <CJK>
-0x9867 # <CJK>
-0x986B # <CJK>
-0x986F # <CJK>
-0x9870 # <CJK>
-0x9871 # <CJK>
-0x9873 # <CJK>
-0x9874 # <CJK>
-0x98A8 # <CJK>
-0x98AA # <CJK>
-0x98AF # <CJK>
-0x98B1 # <CJK>
-0x98B6 # <CJK>
-0x98C3 # <CJK>
-0x98C4 # <CJK>
-0x98C6 # <CJK>
-0x98DB # <CJK>
-0x98DC # <CJK>
-0x98DF # <CJK>
-0x98E2 # <CJK>
-0x98E9 # <CJK>
-0x98EB # <CJK>
-0x98ED # <CJK>
-0x98EE # <CJK>
-0x98EF # <CJK>
-0x98F2 # <CJK>
-0x98F4 # <CJK>
-0x98FC # <CJK>
-0x98FD # <CJK>
-0x98FE # <CJK>
-0x9903 # <CJK>
-0x9905 # <CJK>
-0x9909 # <CJK>
-0x990A # <CJK>
-0x990C # <CJK>
-0x9910 # <CJK>
-0x9912 # <CJK>
-0x9913 # <CJK>
-0x9914 # <CJK>
-0x9918 # <CJK>
-0x991D # <CJK>
-0x991E # <CJK>
-0x9920 # <CJK>
-0x9921 # <CJK>
-0x9924 # <CJK>
-0x9928 # <CJK>
-0x992C # <CJK>
-0x992E # <CJK>
-0x993D # <CJK>
-0x993E # <CJK>
-0x9942 # <CJK>
-0x9945 # <CJK>
-0x9949 # <CJK>
-0x994B # <CJK>
-0x994C # <CJK>
-0x9950 # <CJK>
-0x9951 # <CJK>
-0x9952 # <CJK>
-0x9955 # <CJK>
-0x9957 # <CJK>
-0x9996 # <CJK>
-0x9997 # <CJK>
-0x9998 # <CJK>
-0x9999 # <CJK>
-0x99A5 # <CJK>
-0x99A8 # <CJK>
-0x99AC # <CJK>
-0x99AD # <CJK>
-0x99AE # <CJK>
-0x99B3 # <CJK>
-0x99B4 # <CJK>
-0x99BC # <CJK>
-0x99C1 # <CJK>
-0x99C4 # <CJK>
-0x99C5 # <CJK>
-0x99C6 # <CJK>
-0x99C8 # <CJK>
-0x99D0 # <CJK>
-0x99D1 # <CJK>
-0x99D2 # <CJK>
-0x99D5 # <CJK>
-0x99D8 # <CJK>
-0x99DB # <CJK>
-0x99DD # <CJK>
-0x99DF # <CJK>
-0x99E2 # <CJK>
-0x99ED # <CJK>
-0x99EE # <CJK>
-0x99F1 # <CJK>
-0x99F2 # <CJK>
-0x99F8 # <CJK>
-0x99FB # <CJK>
-0x99FF # <CJK>
-0x9A01 # <CJK>
-0x9A05 # <CJK>
-0x9A0E # <CJK>
-0x9A0F # <CJK>
-0x9A12 # <CJK>
-0x9A13 # <CJK>
-0x9A19 # <CJK>
-0x9A28 # <CJK>
-0x9A2B # <CJK>
-0x9A30 # <CJK>
-0x9A37 # <CJK>
-0x9A3E # <CJK>
-0x9A40 # <CJK>
-0x9A42 # <CJK>
-0x9A43 # <CJK>
-0x9A45 # <CJK>
-0x9A4D # <CJK>
-0x9A55 # <CJK>
-0x9A57 # <CJK>
-0x9A5A # <CJK>
-0x9A5B # <CJK>
-0x9A5F # <CJK>
-0x9A62 # <CJK>
-0x9A64 # <CJK>
-0x9A65 # <CJK>
-0x9A69 # <CJK>
-0x9A6A # <CJK>
-0x9A6B # <CJK>
-0x9AA8 # <CJK>
-0x9AAD # <CJK>
-0x9AB0 # <CJK>
-0x9AB8 # <CJK>
-0x9ABC # <CJK>
-0x9AC0 # <CJK>
-0x9AC4 # <CJK>
-0x9ACF # <CJK>
-0x9AD1 # <CJK>
-0x9AD3 # <CJK>
-0x9AD4 # <CJK>
-0x9AD8 # <CJK>
-0x9ADE # <CJK>
-0x9ADF # <CJK>
-0x9AE2 # <CJK>
-0x9AE3 # <CJK>
-0x9AE6 # <CJK>
-0x9AEA # <CJK>
-0x9AEB # <CJK>
-0x9AED # <CJK>
-0x9AEE # <CJK>
-0x9AEF # <CJK>
-0x9AF1 # <CJK>
-0x9AF4 # <CJK>
-0x9AF7 # <CJK>
-0x9AFB # <CJK>
-0x9B06 # <CJK>
-0x9B18 # <CJK>
-0x9B1A # <CJK>
-0x9B1F # <CJK>
-0x9B22 # <CJK>
-0x9B23 # <CJK>
-0x9B25 # <CJK>
-0x9B27 # <CJK>
-0x9B28 # <CJK>
-0x9B29 # <CJK>
-0x9B2A # <CJK>
-0x9B2E # <CJK>
-0x9B2F # <CJK>
-0x9B31 # <CJK>
-0x9B32 # <CJK>
-0x9B3B # <CJK>
-0x9B3C # <CJK>
-0x9B41 # <CJK>
-0x9B42 # <CJK>
-0x9B43 # <CJK>
-0x9B44 # <CJK>
-0x9B45 # <CJK>
-0x9B4D # <CJK>
-0x9B4E # <CJK>
-0x9B4F # <CJK>
-0x9B51 # <CJK>
-0x9B54 # <CJK>
-0x9B58 # <CJK>
-0x9B5A # <CJK>
-0x9B6F # <CJK>
-0x9B74 # <CJK>
-0x9B83 # <CJK>
-0x9B8E # <CJK>
-0x9B91 # <CJK>
-0x9B92 # <CJK>
-0x9B93 # <CJK>
-0x9B96 # <CJK>
-0x9B97 # <CJK>
-0x9B9F # <CJK>
-0x9BA0 # <CJK>
-0x9BA8 # <CJK>
-0x9BAA # <CJK>
-0x9BAB # <CJK>
-0x9BAD # <CJK>
-0x9BAE # <CJK>
-0x9BB4 # <CJK>
-0x9BB9 # <CJK>
-0x9BC0 # <CJK>
-0x9BC6 # <CJK>
-0x9BC9 # <CJK>
-0x9BCA # <CJK>
-0x9BCF # <CJK>
-0x9BD1 # <CJK>
-0x9BD2 # <CJK>
-0x9BD4 # <CJK>
-0x9BD6 # <CJK>
-0x9BDB # <CJK>
-0x9BE1 # <CJK>
-0x9BE2 # <CJK>
-0x9BE3 # <CJK>
-0x9BE4 # <CJK>
-0x9BE8 # <CJK>
-0x9BF0 # <CJK>
-0x9BF1 # <CJK>
-0x9BF2 # <CJK>
-0x9BF5 # <CJK>
-0x9C04 # <CJK>
-0x9C06 # <CJK>
-0x9C08 # <CJK>
-0x9C09 # <CJK>
-0x9C0A # <CJK>
-0x9C0C # <CJK>
-0x9C0D # <CJK>
-0x9C10 # <CJK>
-0x9C12 # <CJK>
-0x9C13 # <CJK>
-0x9C14 # <CJK>
-0x9C15 # <CJK>
-0x9C1B # <CJK>
-0x9C21 # <CJK>
-0x9C24 # <CJK>
-0x9C25 # <CJK>
-0x9C2D # <CJK>
-0x9C2E # <CJK>
-0x9C2F # <CJK>
-0x9C30 # <CJK>
-0x9C32 # <CJK>
-0x9C39 # <CJK>
-0x9C3A # <CJK>
-0x9C3B # <CJK>
-0x9C3E # <CJK>
-0x9C46 # <CJK>
-0x9C47 # <CJK>
-0x9C48 # <CJK>
-0x9C52 # <CJK>
-0x9C57 # <CJK>
-0x9C5A # <CJK>
-0x9C60 # <CJK>
-0x9C67 # <CJK>
-0x9C76 # <CJK>
-0x9C78 # <CJK>
-0x9CE5 # <CJK>
-0x9CE7 # <CJK>
-0x9CE9 # <CJK>
-0x9CEB # <CJK>
-0x9CEC # <CJK>
-0x9CF0 # <CJK>
-0x9CF3 # <CJK>
-0x9CF4 # <CJK>
-0x9CF6 # <CJK>
-0x9D03 # <CJK>
-0x9D06 # <CJK>
-0x9D07 # <CJK>
-0x9D08 # <CJK>
-0x9D09 # <CJK>
-0x9D0E # <CJK>
-0x9D12 # <CJK>
-0x9D15 # <CJK>
-0x9D1B # <CJK>
-0x9D1F # <CJK>
-0x9D23 # <CJK>
-0x9D26 # <CJK>
-0x9D28 # <CJK>
-0x9D2A # <CJK>
-0x9D2B # <CJK>
-0x9D2C # <CJK>
-0x9D3B # <CJK>
-0x9D3E # <CJK>
-0x9D3F # <CJK>
-0x9D41 # <CJK>
-0x9D44 # <CJK>
-0x9D46 # <CJK>
-0x9D48 # <CJK>
-0x9D50 # <CJK>
-0x9D51 # <CJK>
-0x9D59 # <CJK>
-0x9D5C # <CJK>
-0x9D5D # <CJK>
-0x9D5E # <CJK>
-0x9D60 # <CJK>
-0x9D61 # <CJK>
-0x9D64 # <CJK>
-0x9D6C # <CJK>
-0x9D6F # <CJK>
-0x9D72 # <CJK>
-0x9D7A # <CJK>
-0x9D87 # <CJK>
-0x9D89 # <CJK>
-0x9D8F # <CJK>
-0x9D9A # <CJK>
-0x9DA4 # <CJK>
-0x9DA9 # <CJK>
-0x9DAB # <CJK>
-0x9DAF # <CJK>
-0x9DB2 # <CJK>
-0x9DB4 # <CJK>
-0x9DB8 # <CJK>
-0x9DBA # <CJK>
-0x9DBB # <CJK>
-0x9DC1 # <CJK>
-0x9DC2 # <CJK>
-0x9DC4 # <CJK>
-0x9DC6 # <CJK>
-0x9DCF # <CJK>
-0x9DD3 # <CJK>
-0x9DD9 # <CJK>
-0x9DE6 # <CJK>
-0x9DED # <CJK>
-0x9DEF # <CJK>
-0x9DF2 # <CJK>
-0x9DF8 # <CJK>
-0x9DF9 # <CJK>
-0x9DFA # <CJK>
-0x9DFD # <CJK>
-0x9E1A # <CJK>
-0x9E1B # <CJK>
-0x9E1E # <CJK>
-0x9E75 # <CJK>
-0x9E78 # <CJK>
-0x9E79 # <CJK>
-0x9E7D # <CJK>
-0x9E7F # <CJK>
-0x9E81 # <CJK>
-0x9E88 # <CJK>
-0x9E8B # <CJK>
-0x9E8C # <CJK>
-0x9E91 # <CJK>
-0x9E92 # <CJK>
-0x9E93 # <CJK>
-0x9E95 # <CJK>
-0x9E97 # <CJK>
-0x9E9D # <CJK>
-0x9E9F # <CJK>
-0x9EA5 # <CJK>
-0x9EA6 # <CJK>
-0x9EA9 # <CJK>
-0x9EAA # <CJK>
-0x9EAD # <CJK>
-0x9EB8 # <CJK>
-0x9EB9 # <CJK>
-0x9EBA # <CJK>
-0x9EBB # <CJK>
-0x9EBC # <CJK>
-0x9EBE # <CJK>
-0x9EBF # <CJK>
-0x9EC4 # <CJK>
-0x9ECC # <CJK>
-0x9ECD # <CJK>
-0x9ECE # <CJK>
-0x9ECF # <CJK>
-0x9ED0 # <CJK>
-0x9ED2 # <CJK>
-0x9ED4 # <CJK>
-0x9ED8 # <CJK>
-0x9ED9 # <CJK>
-0x9EDB # <CJK>
-0x9EDC # <CJK>
-0x9EDD # <CJK>
-0x9EDE # <CJK>
-0x9EE0 # <CJK>
-0x9EE5 # <CJK>
-0x9EE8 # <CJK>
-0x9EEF # <CJK>
-0x9EF4 # <CJK>
-0x9EF6 # <CJK>
-0x9EF7 # <CJK>
-0x9EF9 # <CJK>
-0x9EFB # <CJK>
-0x9EFC # <CJK>
-0x9EFD # <CJK>
-0x9F07 # <CJK>
-0x9F08 # <CJK>
-0x9F0E # <CJK>
-0x9F13 # <CJK>
-0x9F15 # <CJK>
-0x9F20 # <CJK>
-0x9F21 # <CJK>
-0x9F2C # <CJK>
-0x9F3B # <CJK>
-0x9F3E # <CJK>
-0x9F4A # <CJK>
-0x9F4B # <CJK>
-0x9F4E # <CJK>
-0x9F4F # <CJK>
-0x9F52 # <CJK>
-0x9F54 # <CJK>
-0x9F5F # <CJK>
-0x9F60 # <CJK>
-0x9F61 # <CJK>
-0x9F62 # <CJK>
-0x9F63 # <CJK>
-0x9F66 # <CJK>
-0x9F67 # <CJK>
-0x9F6A # <CJK>
-0x9F6C # <CJK>
-0x9F72 # <CJK>
-0x9F76 # <CJK>
-0x9F77 # <CJK>
-0x9F8D # <CJK>
-0x9F95 # <CJK>
-0x9F9C # <CJK>
-0x9F9D # <CJK>
-0x9FA0 # <CJK>
-#0xFFE5 # FULLWIDTH YEN SIGN
+#
+# fontconfig/fc-lang/ja.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage from JIS X 0208 (1990)
+#
+0x3000 # IDEOGRAPHIC SPACE
+0x3001 # IDEOGRAPHIC COMMA
+0x3002 # IDEOGRAPHIC FULL STOP
+0x3005 # IDEOGRAPHIC ITERATION MARK
+0x3006 # IDEOGRAPHIC CLOSING MARK
+0x3007 # IDEOGRAPHIC NUMBER ZERO
+0x3041 # HIRAGANA LETTER SMALL A
+0x3042 # HIRAGANA LETTER A
+0x3043 # HIRAGANA LETTER SMALL I
+0x3044 # HIRAGANA LETTER I
+0x3045 # HIRAGANA LETTER SMALL U
+0x3046 # HIRAGANA LETTER U
+0x3047 # HIRAGANA LETTER SMALL E
+0x3048 # HIRAGANA LETTER E
+0x3049 # HIRAGANA LETTER SMALL O
+0x304A # HIRAGANA LETTER O
+0x304B # HIRAGANA LETTER KA
+0x304C # HIRAGANA LETTER GA
+0x304D # HIRAGANA LETTER KI
+0x304E # HIRAGANA LETTER GI
+0x304F # HIRAGANA LETTER KU
+0x3050 # HIRAGANA LETTER GU
+0x3051 # HIRAGANA LETTER KE
+0x3052 # HIRAGANA LETTER GE
+0x3053 # HIRAGANA LETTER KO
+0x3054 # HIRAGANA LETTER GO
+0x3055 # HIRAGANA LETTER SA
+0x3056 # HIRAGANA LETTER ZA
+0x3057 # HIRAGANA LETTER SI
+0x3058 # HIRAGANA LETTER ZI
+0x3059 # HIRAGANA LETTER SU
+0x305A # HIRAGANA LETTER ZU
+0x305B # HIRAGANA LETTER SE
+0x305C # HIRAGANA LETTER ZE
+0x305D # HIRAGANA LETTER SO
+0x305E # HIRAGANA LETTER ZO
+0x305F # HIRAGANA LETTER TA
+0x3060 # HIRAGANA LETTER DA
+0x3061 # HIRAGANA LETTER TI
+0x3062 # HIRAGANA LETTER DI
+0x3063 # HIRAGANA LETTER SMALL TU
+0x3064 # HIRAGANA LETTER TU
+0x3065 # HIRAGANA LETTER DU
+0x3066 # HIRAGANA LETTER TE
+0x3067 # HIRAGANA LETTER DE
+0x3068 # HIRAGANA LETTER TO
+0x3069 # HIRAGANA LETTER DO
+0x306A # HIRAGANA LETTER NA
+0x306B # HIRAGANA LETTER NI
+0x306C # HIRAGANA LETTER NU
+0x306D # HIRAGANA LETTER NE
+0x306E # HIRAGANA LETTER NO
+0x306F # HIRAGANA LETTER HA
+0x3070 # HIRAGANA LETTER BA
+0x3071 # HIRAGANA LETTER PA
+0x3072 # HIRAGANA LETTER HI
+0x3073 # HIRAGANA LETTER BI
+0x3074 # HIRAGANA LETTER PI
+0x3075 # HIRAGANA LETTER HU
+0x3076 # HIRAGANA LETTER BU
+0x3077 # HIRAGANA LETTER PU
+0x3078 # HIRAGANA LETTER HE
+0x3079 # HIRAGANA LETTER BE
+0x307A # HIRAGANA LETTER PE
+0x307B # HIRAGANA LETTER HO
+0x307C # HIRAGANA LETTER BO
+0x307D # HIRAGANA LETTER PO
+0x307E # HIRAGANA LETTER MA
+0x307F # HIRAGANA LETTER MI
+0x3080 # HIRAGANA LETTER MU
+0x3081 # HIRAGANA LETTER ME
+0x3082 # HIRAGANA LETTER MO
+0x3083 # HIRAGANA LETTER SMALL YA
+0x3084 # HIRAGANA LETTER YA
+0x3085 # HIRAGANA LETTER SMALL YU
+0x3086 # HIRAGANA LETTER YU
+0x3087 # HIRAGANA LETTER SMALL YO
+0x3088 # HIRAGANA LETTER YO
+0x3089 # HIRAGANA LETTER RA
+0x308A # HIRAGANA LETTER RI
+0x308B # HIRAGANA LETTER RU
+0x308C # HIRAGANA LETTER RE
+0x308D # HIRAGANA LETTER RO
+0x308E # HIRAGANA LETTER SMALL WA
+0x308F # HIRAGANA LETTER WA
+0x3090 # HIRAGANA LETTER WI
+0x3091 # HIRAGANA LETTER WE
+0x3092 # HIRAGANA LETTER WO
+0x3093 # HIRAGANA LETTER N
+0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK
+0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+0x309D # HIRAGANA ITERATION MARK
+0x309E # HIRAGANA VOICED ITERATION MARK
+0x30A1 # KATAKANA LETTER SMALL A
+0x30A2 # KATAKANA LETTER A
+0x30A3 # KATAKANA LETTER SMALL I
+0x30A4 # KATAKANA LETTER I
+0x30A5 # KATAKANA LETTER SMALL U
+0x30A6 # KATAKANA LETTER U
+0x30A7 # KATAKANA LETTER SMALL E
+0x30A8 # KATAKANA LETTER E
+0x30A9 # KATAKANA LETTER SMALL O
+0x30AA # KATAKANA LETTER O
+0x30AB # KATAKANA LETTER KA
+0x30AC # KATAKANA LETTER GA
+0x30AD # KATAKANA LETTER KI
+0x30AE # KATAKANA LETTER GI
+0x30AF # KATAKANA LETTER KU
+0x30B0 # KATAKANA LETTER GU
+0x30B1 # KATAKANA LETTER KE
+0x30B2 # KATAKANA LETTER GE
+0x30B3 # KATAKANA LETTER KO
+0x30B4 # KATAKANA LETTER GO
+0x30B5 # KATAKANA LETTER SA
+0x30B6 # KATAKANA LETTER ZA
+0x30B7 # KATAKANA LETTER SI
+0x30B8 # KATAKANA LETTER ZI
+0x30B9 # KATAKANA LETTER SU
+0x30BA # KATAKANA LETTER ZU
+0x30BB # KATAKANA LETTER SE
+0x30BC # KATAKANA LETTER ZE
+0x30BD # KATAKANA LETTER SO
+0x30BE # KATAKANA LETTER ZO
+0x30BF # KATAKANA LETTER TA
+0x30C0 # KATAKANA LETTER DA
+0x30C1 # KATAKANA LETTER TI
+0x30C2 # KATAKANA LETTER DI
+0x30C3 # KATAKANA LETTER SMALL TU
+0x30C4 # KATAKANA LETTER TU
+0x30C5 # KATAKANA LETTER DU
+0x30C6 # KATAKANA LETTER TE
+0x30C7 # KATAKANA LETTER DE
+0x30C8 # KATAKANA LETTER TO
+0x30C9 # KATAKANA LETTER DO
+0x30CA # KATAKANA LETTER NA
+0x30CB # KATAKANA LETTER NI
+0x30CC # KATAKANA LETTER NU
+0x30CD # KATAKANA LETTER NE
+0x30CE # KATAKANA LETTER NO
+0x30CF # KATAKANA LETTER HA
+0x30D0 # KATAKANA LETTER BA
+0x30D1 # KATAKANA LETTER PA
+0x30D2 # KATAKANA LETTER HI
+0x30D3 # KATAKANA LETTER BI
+0x30D4 # KATAKANA LETTER PI
+0x30D5 # KATAKANA LETTER HU
+0x30D6 # KATAKANA LETTER BU
+0x30D7 # KATAKANA LETTER PU
+0x30D8 # KATAKANA LETTER HE
+0x30D9 # KATAKANA LETTER BE
+0x30DA # KATAKANA LETTER PE
+0x30DB # KATAKANA LETTER HO
+0x30DC # KATAKANA LETTER BO
+0x30DD # KATAKANA LETTER PO
+0x30DE # KATAKANA LETTER MA
+0x30DF # KATAKANA LETTER MI
+0x30E0 # KATAKANA LETTER MU
+0x30E1 # KATAKANA LETTER ME
+0x30E2 # KATAKANA LETTER MO
+0x30E3 # KATAKANA LETTER SMALL YA
+0x30E4 # KATAKANA LETTER YA
+0x30E5 # KATAKANA LETTER SMALL YU
+0x30E6 # KATAKANA LETTER YU
+0x30E7 # KATAKANA LETTER SMALL YO
+0x30E8 # KATAKANA LETTER YO
+0x30E9 # KATAKANA LETTER RA
+0x30EA # KATAKANA LETTER RI
+0x30EB # KATAKANA LETTER RU
+0x30EC # KATAKANA LETTER RE
+0x30ED # KATAKANA LETTER RO
+0x30EE # KATAKANA LETTER SMALL WA
+0x30EF # KATAKANA LETTER WA
+0x30F0 # KATAKANA LETTER WI
+0x30F1 # KATAKANA LETTER WE
+0x30F2 # KATAKANA LETTER WO
+0x30F3 # KATAKANA LETTER N
+0x30F4 # KATAKANA LETTER VU
+0x30F5 # KATAKANA LETTER SMALL KA
+0x30F6 # KATAKANA LETTER SMALL KE
+0x30FB # KATAKANA MIDDLE DOT
+0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+0x30FD # KATAKANA ITERATION MARK
+0x30FE # KATAKANA VOICED ITERATION MARK
+0x4E00 # <CJK>
+0x4E01 # <CJK>
+0x4E03 # <CJK>
+0x4E07 # <CJK>
+0x4E08 # <CJK>
+0x4E09 # <CJK>
+0x4E0A # <CJK>
+0x4E0B # <CJK>
+0x4E0D # <CJK>
+0x4E0E # <CJK>
+0x4E10 # <CJK>
+0x4E11 # <CJK>
+0x4E14 # <CJK>
+0x4E15 # <CJK>
+0x4E16 # <CJK>
+0x4E17 # <CJK>
+0x4E18 # <CJK>
+0x4E19 # <CJK>
+0x4E1E # <CJK>
+0x4E21 # <CJK>
+0x4E26 # <CJK>
+0x4E2A # <CJK>
+0x4E2D # <CJK>
+0x4E31 # <CJK>
+0x4E32 # <CJK>
+0x4E36 # <CJK>
+0x4E38 # <CJK>
+0x4E39 # <CJK>
+0x4E3B # <CJK>
+0x4E3C # <CJK>
+0x4E3F # <CJK>
+0x4E42 # <CJK>
+0x4E43 # <CJK>
+0x4E45 # <CJK>
+0x4E4B # <CJK>
+0x4E4D # <CJK>
+0x4E4E # <CJK>
+0x4E4F # <CJK>
+0x4E55 # <CJK>
+0x4E56 # <CJK>
+0x4E57 # <CJK>
+0x4E58 # <CJK>
+0x4E59 # <CJK>
+0x4E5D # <CJK>
+0x4E5E # <CJK>
+0x4E5F # <CJK>
+0x4E62 # <CJK>
+0x4E71 # <CJK>
+0x4E73 # <CJK>
+0x4E7E # <CJK>
+0x4E80 # <CJK>
+0x4E82 # <CJK>
+0x4E85 # <CJK>
+0x4E86 # <CJK>
+0x4E88 # <CJK>
+0x4E89 # <CJK>
+0x4E8A # <CJK>
+0x4E8B # <CJK>
+0x4E8C # <CJK>
+0x4E8E # <CJK>
+0x4E91 # <CJK>
+0x4E92 # <CJK>
+0x4E94 # <CJK>
+0x4E95 # <CJK>
+0x4E98 # <CJK>
+0x4E99 # <CJK>
+0x4E9B # <CJK>
+0x4E9C # <CJK>
+0x4E9E # <CJK>
+0x4E9F # <CJK>
+0x4EA0 # <CJK>
+0x4EA1 # <CJK>
+0x4EA2 # <CJK>
+0x4EA4 # <CJK>
+0x4EA5 # <CJK>
+0x4EA6 # <CJK>
+0x4EA8 # <CJK>
+0x4EAB # <CJK>
+0x4EAC # <CJK>
+0x4EAD # <CJK>
+0x4EAE # <CJK>
+0x4EB0 # <CJK>
+0x4EB3 # <CJK>
+0x4EB6 # <CJK>
+0x4EBA # <CJK>
+0x4EC0 # <CJK>
+0x4EC1 # <CJK>
+0x4EC2 # <CJK>
+0x4EC4 # <CJK>
+0x4EC6 # <CJK>
+0x4EC7 # <CJK>
+0x4ECA # <CJK>
+0x4ECB # <CJK>
+0x4ECD # <CJK>
+0x4ECE # <CJK>
+0x4ECF # <CJK>
+0x4ED4 # <CJK>
+0x4ED5 # <CJK>
+0x4ED6 # <CJK>
+0x4ED7 # <CJK>
+0x4ED8 # <CJK>
+0x4ED9 # <CJK>
+0x4EDD # <CJK>
+0x4EDE # <CJK>
+0x4EDF # <CJK>
+0x4EE3 # <CJK>
+0x4EE4 # <CJK>
+0x4EE5 # <CJK>
+0x4EED # <CJK>
+0x4EEE # <CJK>
+0x4EF0 # <CJK>
+0x4EF2 # <CJK>
+0x4EF6 # <CJK>
+0x4EF7 # <CJK>
+0x4EFB # <CJK>
+0x4F01 # <CJK>
+0x4F09 # <CJK>
+0x4F0A # <CJK>
+0x4F0D # <CJK>
+0x4F0E # <CJK>
+0x4F0F # <CJK>
+0x4F10 # <CJK>
+0x4F11 # <CJK>
+0x4F1A # <CJK>
+0x4F1C # <CJK>
+0x4F1D # <CJK>
+0x4F2F # <CJK>
+0x4F30 # <CJK>
+0x4F34 # <CJK>
+0x4F36 # <CJK>
+0x4F38 # <CJK>
+0x4F3A # <CJK>
+0x4F3C # <CJK>
+0x4F3D # <CJK>
+0x4F43 # <CJK>
+0x4F46 # <CJK>
+0x4F47 # <CJK>
+0x4F4D # <CJK>
+0x4F4E # <CJK>
+0x4F4F # <CJK>
+0x4F50 # <CJK>
+0x4F51 # <CJK>
+0x4F53 # <CJK>
+0x4F55 # <CJK>
+0x4F57 # <CJK>
+0x4F59 # <CJK>
+0x4F5A # <CJK>
+0x4F5B # <CJK>
+0x4F5C # <CJK>
+0x4F5D # <CJK>
+0x4F5E # <CJK>
+0x4F69 # <CJK>
+0x4F6F # <CJK>
+0x4F70 # <CJK>
+0x4F73 # <CJK>
+0x4F75 # <CJK>
+0x4F76 # <CJK>
+0x4F7B # <CJK>
+0x4F7C # <CJK>
+0x4F7F # <CJK>
+0x4F83 # <CJK>
+0x4F86 # <CJK>
+0x4F88 # <CJK>
+0x4F8B # <CJK>
+0x4F8D # <CJK>
+0x4F8F # <CJK>
+0x4F91 # <CJK>
+0x4F96 # <CJK>
+0x4F98 # <CJK>
+0x4F9B # <CJK>
+0x4F9D # <CJK>
+0x4FA0 # <CJK>
+0x4FA1 # <CJK>
+0x4FAB # <CJK>
+0x4FAD # <CJK>
+0x4FAE # <CJK>
+0x4FAF # <CJK>
+0x4FB5 # <CJK>
+0x4FB6 # <CJK>
+0x4FBF # <CJK>
+0x4FC2 # <CJK>
+0x4FC3 # <CJK>
+0x4FC4 # <CJK>
+0x4FCA # <CJK>
+0x4FCE # <CJK>
+0x4FD0 # <CJK>
+0x4FD1 # <CJK>
+0x4FD4 # <CJK>
+0x4FD7 # <CJK>
+0x4FD8 # <CJK>
+0x4FDA # <CJK>
+0x4FDB # <CJK>
+0x4FDD # <CJK>
+0x4FDF # <CJK>
+0x4FE1 # <CJK>
+0x4FE3 # <CJK>
+0x4FE4 # <CJK>
+0x4FE5 # <CJK>
+0x4FEE # <CJK>
+0x4FEF # <CJK>
+0x4FF3 # <CJK>
+0x4FF5 # <CJK>
+0x4FF6 # <CJK>
+0x4FF8 # <CJK>
+0x4FFA # <CJK>
+0x4FFE # <CJK>
+0x5005 # <CJK>
+0x5006 # <CJK>
+0x5009 # <CJK>
+0x500B # <CJK>
+0x500D # <CJK>
+0x500F # <CJK>
+0x5011 # <CJK>
+0x5012 # <CJK>
+0x5014 # <CJK>
+0x5016 # <CJK>
+0x5019 # <CJK>
+0x501A # <CJK>
+0x501F # <CJK>
+0x5021 # <CJK>
+0x5023 # <CJK>
+0x5024 # <CJK>
+0x5025 # <CJK>
+0x5026 # <CJK>
+0x5028 # <CJK>
+0x5029 # <CJK>
+0x502A # <CJK>
+0x502B # <CJK>
+0x502C # <CJK>
+0x502D # <CJK>
+0x5036 # <CJK>
+0x5039 # <CJK>
+0x5043 # <CJK>
+0x5047 # <CJK>
+0x5048 # <CJK>
+0x5049 # <CJK>
+0x504F # <CJK>
+0x5050 # <CJK>
+0x5055 # <CJK>
+0x5056 # <CJK>
+0x505A # <CJK>
+0x505C # <CJK>
+0x5065 # <CJK>
+0x506C # <CJK>
+0x5072 # <CJK>
+0x5074 # <CJK>
+0x5075 # <CJK>
+0x5076 # <CJK>
+0x5078 # <CJK>
+0x507D # <CJK>
+0x5080 # <CJK>
+0x5085 # <CJK>
+0x508D # <CJK>
+0x5091 # <CJK>
+0x5098 # <CJK>
+0x5099 # <CJK>
+0x509A # <CJK>
+0x50AC # <CJK>
+0x50AD # <CJK>
+0x50B2 # <CJK>
+0x50B3 # <CJK>
+0x50B4 # <CJK>
+0x50B5 # <CJK>
+0x50B7 # <CJK>
+0x50BE # <CJK>
+0x50C2 # <CJK>
+0x50C5 # <CJK>
+0x50C9 # <CJK>
+0x50CA # <CJK>
+0x50CD # <CJK>
+0x50CF # <CJK>
+0x50D1 # <CJK>
+0x50D5 # <CJK>
+0x50D6 # <CJK>
+0x50DA # <CJK>
+0x50DE # <CJK>
+0x50E3 # <CJK>
+0x50E5 # <CJK>
+0x50E7 # <CJK>
+0x50ED # <CJK>
+0x50EE # <CJK>
+0x50F5 # <CJK>
+0x50F9 # <CJK>
+0x50FB # <CJK>
+0x5100 # <CJK>
+0x5101 # <CJK>
+0x5102 # <CJK>
+0x5104 # <CJK>
+0x5109 # <CJK>
+0x5112 # <CJK>
+0x5114 # <CJK>
+0x5115 # <CJK>
+0x5116 # <CJK>
+0x5118 # <CJK>
+0x511A # <CJK>
+0x511F # <CJK>
+0x5121 # <CJK>
+0x512A # <CJK>
+0x5132 # <CJK>
+0x5137 # <CJK>
+0x513A # <CJK>
+0x513B # <CJK>
+0x513C # <CJK>
+0x513F # <CJK>
+0x5140 # <CJK>
+0x5141 # <CJK>
+0x5143 # <CJK>
+0x5144 # <CJK>
+0x5145 # <CJK>
+0x5146 # <CJK>
+0x5147 # <CJK>
+0x5148 # <CJK>
+0x5149 # <CJK>
+0x514B # <CJK>
+0x514C # <CJK>
+0x514D # <CJK>
+0x514E # <CJK>
+0x5150 # <CJK>
+0x5152 # <CJK>
+0x5154 # <CJK>
+0x515A # <CJK>
+0x515C # <CJK>
+0x5162 # <CJK>
+0x5165 # <CJK>
+0x5168 # <CJK>
+0x5169 # <CJK>
+0x516A # <CJK>
+0x516B # <CJK>
+0x516C # <CJK>
+0x516D # <CJK>
+0x516E # <CJK>
+0x5171 # <CJK>
+0x5175 # <CJK>
+0x5176 # <CJK>
+0x5177 # <CJK>
+0x5178 # <CJK>
+0x517C # <CJK>
+0x5180 # <CJK>
+0x5182 # <CJK>
+0x5185 # <CJK>
+0x5186 # <CJK>
+0x5189 # <CJK>
+0x518A # <CJK>
+0x518C # <CJK>
+0x518D # <CJK>
+0x518F # <CJK>
+0x5190 # <CJK>
+0x5191 # <CJK>
+0x5192 # <CJK>
+0x5193 # <CJK>
+0x5195 # <CJK>
+0x5196 # <CJK>
+0x5197 # <CJK>
+0x5199 # <CJK>
+0x51A0 # <CJK>
+0x51A2 # <CJK>
+0x51A4 # <CJK>
+0x51A5 # <CJK>
+0x51A6 # <CJK>
+0x51A8 # <CJK>
+0x51A9 # <CJK>
+0x51AA # <CJK>
+0x51AB # <CJK>
+0x51AC # <CJK>
+0x51B0 # <CJK>
+0x51B1 # <CJK>
+0x51B2 # <CJK>
+0x51B3 # <CJK>
+0x51B4 # <CJK>
+0x51B5 # <CJK>
+0x51B6 # <CJK>
+0x51B7 # <CJK>
+0x51BD # <CJK>
+0x51C4 # <CJK>
+0x51C5 # <CJK>
+0x51C6 # <CJK>
+0x51C9 # <CJK>
+0x51CB # <CJK>
+0x51CC # <CJK>
+0x51CD # <CJK>
+0x51D6 # <CJK>
+0x51DB # <CJK>
+#0x51DC # <CJK> # not in kochi fonts
+0x51DD # <CJK>
+0x51E0 # <CJK>
+0x51E1 # <CJK>
+0x51E6 # <CJK>
+0x51E7 # <CJK>
+0x51E9 # <CJK>
+0x51EA # <CJK>
+0x51ED # <CJK>
+0x51F0 # <CJK>
+0x51F1 # <CJK>
+0x51F5 # <CJK>
+0x51F6 # <CJK>
+0x51F8 # <CJK>
+0x51F9 # <CJK>
+0x51FA # <CJK>
+0x51FD # <CJK>
+0x51FE # <CJK>
+0x5200 # <CJK>
+0x5203 # <CJK>
+0x5204 # <CJK>
+0x5206 # <CJK>
+0x5207 # <CJK>
+0x5208 # <CJK>
+0x520A # <CJK>
+0x520B # <CJK>
+0x520E # <CJK>
+0x5211 # <CJK>
+0x5214 # <CJK>
+0x5217 # <CJK>
+0x521D # <CJK>
+0x5224 # <CJK>
+0x5225 # <CJK>
+0x5227 # <CJK>
+0x5229 # <CJK>
+0x522A # <CJK>
+0x522E # <CJK>
+0x5230 # <CJK>
+0x5233 # <CJK>
+0x5236 # <CJK>
+0x5237 # <CJK>
+0x5238 # <CJK>
+0x5239 # <CJK>
+0x523A # <CJK>
+0x523B # <CJK>
+0x5243 # <CJK>
+0x5244 # <CJK>
+0x5247 # <CJK>
+0x524A # <CJK>
+0x524B # <CJK>
+0x524C # <CJK>
+0x524D # <CJK>
+0x524F # <CJK>
+0x5254 # <CJK>
+0x5256 # <CJK>
+0x525B # <CJK>
+0x525E # <CJK>
+0x5263 # <CJK>
+0x5264 # <CJK>
+0x5265 # <CJK>
+0x5269 # <CJK>
+0x526A # <CJK>
+0x526F # <CJK>
+0x5270 # <CJK>
+0x5271 # <CJK>
+0x5272 # <CJK>
+0x5273 # <CJK>
+0x5274 # <CJK>
+0x5275 # <CJK>
+0x527D # <CJK>
+0x527F # <CJK>
+0x5283 # <CJK>
+0x5287 # <CJK>
+0x5288 # <CJK>
+0x5289 # <CJK>
+0x528D # <CJK>
+0x5291 # <CJK>
+0x5292 # <CJK>
+0x5294 # <CJK>
+0x529B # <CJK>
+0x529F # <CJK>
+0x52A0 # <CJK>
+0x52A3 # <CJK>
+0x52A9 # <CJK>
+0x52AA # <CJK>
+0x52AB # <CJK>
+0x52AC # <CJK>
+0x52AD # <CJK>
+0x52B1 # <CJK>
+0x52B4 # <CJK>
+0x52B5 # <CJK>
+0x52B9 # <CJK>
+0x52BC # <CJK>
+0x52BE # <CJK>
+0x52C1 # <CJK>
+0x52C3 # <CJK>
+0x52C5 # <CJK>
+0x52C7 # <CJK>
+0x52C9 # <CJK>
+0x52CD # <CJK>
+0x52D2 # <CJK>
+0x52D5 # <CJK>
+0x52D7 # <CJK>
+0x52D8 # <CJK>
+0x52D9 # <CJK>
+0x52DD # <CJK>
+0x52DE # <CJK>
+0x52DF # <CJK>
+0x52E0 # <CJK>
+0x52E2 # <CJK>
+0x52E3 # <CJK>
+0x52E4 # <CJK>
+0x52E6 # <CJK>
+0x52E7 # <CJK>
+0x52F2 # <CJK>
+0x52F3 # <CJK>
+0x52F5 # <CJK>
+0x52F8 # <CJK>
+0x52F9 # <CJK>
+0x52FA # <CJK>
+0x52FE # <CJK>
+0x52FF # <CJK>
+0x5301 # <CJK>
+0x5302 # <CJK>
+0x5305 # <CJK>
+0x5306 # <CJK>
+0x5308 # <CJK>
+0x530D # <CJK>
+0x530F # <CJK>
+0x5310 # <CJK>
+0x5315 # <CJK>
+0x5316 # <CJK>
+0x5317 # <CJK>
+0x5319 # <CJK>
+0x531A # <CJK>
+0x531D # <CJK>
+0x5320 # <CJK>
+0x5321 # <CJK>
+0x5323 # <CJK>
+0x532A # <CJK>
+0x532F # <CJK>
+0x5331 # <CJK>
+0x5333 # <CJK>
+0x5338 # <CJK>
+0x5339 # <CJK>
+0x533A # <CJK>
+0x533B # <CJK>
+0x533F # <CJK>
+0x5340 # <CJK>
+0x5341 # <CJK>
+0x5343 # <CJK>
+0x5345 # <CJK>
+0x5346 # <CJK>
+0x5347 # <CJK>
+0x5348 # <CJK>
+0x5349 # <CJK>
+0x534A # <CJK>
+0x534D # <CJK>
+0x5351 # <CJK>
+0x5352 # <CJK>
+0x5353 # <CJK>
+0x5354 # <CJK>
+0x5357 # <CJK>
+0x5358 # <CJK>
+0x535A # <CJK>
+0x535C # <CJK>
+0x535E # <CJK>
+0x5360 # <CJK>
+0x5366 # <CJK>
+0x5369 # <CJK>
+0x536E # <CJK>
+0x536F # <CJK>
+0x5370 # <CJK>
+0x5371 # <CJK>
+0x5373 # <CJK>
+0x5374 # <CJK>
+0x5375 # <CJK>
+0x5377 # <CJK>
+0x5378 # <CJK>
+0x537B # <CJK>
+0x537F # <CJK>
+0x5382 # <CJK>
+0x5384 # <CJK>
+0x5396 # <CJK>
+0x5398 # <CJK>
+0x539A # <CJK>
+0x539F # <CJK>
+0x53A0 # <CJK>
+0x53A5 # <CJK>
+0x53A6 # <CJK>
+0x53A8 # <CJK>
+0x53A9 # <CJK>
+0x53AD # <CJK>
+0x53AE # <CJK>
+0x53B0 # <CJK>
+0x53B3 # <CJK>
+0x53B6 # <CJK>
+0x53BB # <CJK>
+0x53C2 # <CJK>
+0x53C3 # <CJK>
+0x53C8 # <CJK>
+0x53C9 # <CJK>
+0x53CA # <CJK>
+0x53CB # <CJK>
+0x53CC # <CJK>
+0x53CD # <CJK>
+0x53CE # <CJK>
+0x53D4 # <CJK>
+0x53D6 # <CJK>
+0x53D7 # <CJK>
+0x53D9 # <CJK>
+0x53DB # <CJK>
+0x53DF # <CJK>
+0x53E1 # <CJK>
+0x53E2 # <CJK>
+0x53E3 # <CJK>
+0x53E4 # <CJK>
+0x53E5 # <CJK>
+0x53E8 # <CJK>
+0x53E9 # <CJK>
+0x53EA # <CJK>
+0x53EB # <CJK>
+0x53EC # <CJK>
+0x53ED # <CJK>
+0x53EE # <CJK>
+0x53EF # <CJK>
+0x53F0 # <CJK>
+0x53F1 # <CJK>
+0x53F2 # <CJK>
+0x53F3 # <CJK>
+0x53F6 # <CJK>
+0x53F7 # <CJK>
+0x53F8 # <CJK>
+0x53FA # <CJK>
+0x5401 # <CJK>
+0x5403 # <CJK>
+0x5404 # <CJK>
+0x5408 # <CJK>
+0x5409 # <CJK>
+0x540A # <CJK>
+0x540B # <CJK>
+0x540C # <CJK>
+0x540D # <CJK>
+0x540E # <CJK>
+0x540F # <CJK>
+0x5410 # <CJK>
+0x5411 # <CJK>
+0x541B # <CJK>
+0x541D # <CJK>
+0x541F # <CJK>
+0x5420 # <CJK>
+0x5426 # <CJK>
+0x5429 # <CJK>
+0x542B # <CJK>
+0x542C # <CJK>
+0x542D # <CJK>
+0x542E # <CJK>
+0x5436 # <CJK>
+0x5438 # <CJK>
+0x5439 # <CJK>
+0x543B # <CJK>
+0x543C # <CJK>
+0x543D # <CJK>
+0x543E # <CJK>
+0x5440 # <CJK>
+0x5442 # <CJK>
+0x5446 # <CJK>
+0x5448 # <CJK>
+0x5449 # <CJK>
+0x544A # <CJK>
+0x544E # <CJK>
+0x5451 # <CJK>
+0x545F # <CJK>
+0x5468 # <CJK>
+0x546A # <CJK>
+0x5470 # <CJK>
+0x5471 # <CJK>
+0x5473 # <CJK>
+0x5475 # <CJK>
+0x5476 # <CJK>
+0x5477 # <CJK>
+0x547B # <CJK>
+0x547C # <CJK>
+0x547D # <CJK>
+0x5480 # <CJK>
+0x5484 # <CJK>
+0x5486 # <CJK>
+0x548B # <CJK>
+0x548C # <CJK>
+0x548E # <CJK>
+0x548F # <CJK>
+0x5490 # <CJK>
+0x5492 # <CJK>
+0x54A2 # <CJK>
+0x54A4 # <CJK>
+0x54A5 # <CJK>
+0x54A8 # <CJK>
+0x54AB # <CJK>
+0x54AC # <CJK>
+0x54AF # <CJK>
+0x54B2 # <CJK>
+0x54B3 # <CJK>
+0x54B8 # <CJK>
+0x54BC # <CJK>
+0x54BD # <CJK>
+0x54BE # <CJK>
+0x54C0 # <CJK>
+0x54C1 # <CJK>
+0x54C2 # <CJK>
+0x54C4 # <CJK>
+0x54C7 # <CJK>
+0x54C8 # <CJK>
+0x54C9 # <CJK>
+0x54D8 # <CJK>
+0x54E1 # <CJK>
+0x54E2 # <CJK>
+0x54E5 # <CJK>
+0x54E6 # <CJK>
+0x54E8 # <CJK>
+0x54E9 # <CJK>
+0x54ED # <CJK>
+0x54EE # <CJK>
+0x54F2 # <CJK>
+0x54FA # <CJK>
+0x54FD # <CJK>
+0x5504 # <CJK>
+0x5506 # <CJK>
+0x5507 # <CJK>
+0x550F # <CJK>
+0x5510 # <CJK>
+0x5514 # <CJK>
+0x5516 # <CJK>
+0x552E # <CJK>
+0x552F # <CJK>
+0x5531 # <CJK>
+0x5533 # <CJK>
+0x5538 # <CJK>
+0x5539 # <CJK>
+0x553E # <CJK>
+0x5540 # <CJK>
+0x5544 # <CJK>
+0x5545 # <CJK>
+0x5546 # <CJK>
+0x554C # <CJK>
+0x554F # <CJK>
+0x5553 # <CJK>
+0x5556 # <CJK>
+0x5557 # <CJK>
+0x555C # <CJK>
+0x555D # <CJK>
+0x5563 # <CJK>
+0x557B # <CJK>
+0x557C # <CJK>
+0x557E # <CJK>
+0x5580 # <CJK>
+0x5583 # <CJK>
+0x5584 # <CJK>
+0x5587 # <CJK>
+0x5589 # <CJK>
+0x558A # <CJK>
+0x558B # <CJK>
+0x5598 # <CJK>
+0x5599 # <CJK>
+0x559A # <CJK>
+0x559C # <CJK>
+0x559D # <CJK>
+0x559E # <CJK>
+0x559F # <CJK>
+0x55A7 # <CJK>
+0x55A8 # <CJK>
+0x55A9 # <CJK>
+0x55AA # <CJK>
+0x55AB # <CJK>
+0x55AC # <CJK>
+0x55AE # <CJK>
+0x55B0 # <CJK>
+0x55B6 # <CJK>
+0x55C4 # <CJK>
+0x55C5 # <CJK>
+0x55C7 # <CJK>
+0x55D4 # <CJK>
+0x55DA # <CJK>
+0x55DC # <CJK>
+0x55DF # <CJK>
+0x55E3 # <CJK>
+0x55E4 # <CJK>
+0x55F7 # <CJK>
+0x55F9 # <CJK>
+0x55FD # <CJK>
+0x55FE # <CJK>
+0x5606 # <CJK>
+0x5609 # <CJK>
+0x5614 # <CJK>
+0x5616 # <CJK>
+0x5617 # <CJK>
+0x5618 # <CJK>
+0x561B # <CJK>
+0x5629 # <CJK>
+0x562F # <CJK>
+0x5631 # <CJK>
+0x5632 # <CJK>
+0x5634 # <CJK>
+0x5636 # <CJK>
+0x5638 # <CJK>
+0x5642 # <CJK>
+0x564C # <CJK>
+0x564E # <CJK>
+0x5650 # <CJK>
+0x565B # <CJK>
+0x5664 # <CJK>
+0x5668 # <CJK>
+0x566A # <CJK>
+0x566B # <CJK>
+0x566C # <CJK>
+0x5674 # <CJK>
+0x5678 # <CJK>
+0x567A # <CJK>
+0x5680 # <CJK>
+0x5686 # <CJK>
+0x5687 # <CJK>
+0x568A # <CJK>
+0x568F # <CJK>
+0x5694 # <CJK>
+0x56A0 # <CJK>
+0x56A2 # <CJK>
+0x56A5 # <CJK>
+0x56AE # <CJK>
+0x56B4 # <CJK>
+0x56B6 # <CJK>
+0x56BC # <CJK>
+0x56C0 # <CJK>
+0x56C1 # <CJK>
+0x56C2 # <CJK>
+0x56C3 # <CJK>
+0x56C8 # <CJK>
+0x56CE # <CJK>
+0x56D1 # <CJK>
+0x56D3 # <CJK>
+0x56D7 # <CJK>
+0x56D8 # <CJK>
+0x56DA # <CJK>
+0x56DB # <CJK>
+0x56DE # <CJK>
+0x56E0 # <CJK>
+0x56E3 # <CJK>
+0x56EE # <CJK>
+0x56F0 # <CJK>
+0x56F2 # <CJK>
+0x56F3 # <CJK>
+0x56F9 # <CJK>
+0x56FA # <CJK>
+0x56FD # <CJK>
+0x56FF # <CJK>
+0x5700 # <CJK>
+0x5703 # <CJK>
+0x5704 # <CJK>
+0x5708 # <CJK>
+0x5709 # <CJK>
+0x570B # <CJK>
+0x570D # <CJK>
+0x570F # <CJK>
+0x5712 # <CJK>
+0x5713 # <CJK>
+0x5716 # <CJK>
+0x5718 # <CJK>
+0x571C # <CJK>
+0x571F # <CJK>
+0x5726 # <CJK>
+0x5727 # <CJK>
+0x5728 # <CJK>
+0x572D # <CJK>
+0x5730 # <CJK>
+0x5737 # <CJK>
+0x5738 # <CJK>
+0x573B # <CJK>
+0x5740 # <CJK>
+0x5742 # <CJK>
+0x5747 # <CJK>
+0x574A # <CJK>
+0x574E # <CJK>
+0x574F # <CJK>
+0x5750 # <CJK>
+0x5751 # <CJK>
+0x5761 # <CJK>
+0x5764 # <CJK>
+0x5766 # <CJK>
+0x5769 # <CJK>
+0x576A # <CJK>
+0x577F # <CJK>
+0x5782 # <CJK>
+0x5788 # <CJK>
+0x5789 # <CJK>
+0x578B # <CJK>
+0x5793 # <CJK>
+0x57A0 # <CJK>
+0x57A2 # <CJK>
+0x57A3 # <CJK>
+0x57A4 # <CJK>
+0x57AA # <CJK>
+0x57B0 # <CJK>
+0x57B3 # <CJK>
+0x57C0 # <CJK>
+0x57C3 # <CJK>
+0x57C6 # <CJK>
+0x57CB # <CJK>
+0x57CE # <CJK>
+0x57D2 # <CJK>
+0x57D3 # <CJK>
+0x57D4 # <CJK>
+0x57D6 # <CJK>
+0x57DC # <CJK>
+0x57DF # <CJK>
+0x57E0 # <CJK>
+0x57E3 # <CJK>
+0x57F4 # <CJK>
+0x57F7 # <CJK>
+0x57F9 # <CJK>
+0x57FA # <CJK>
+0x57FC # <CJK>
+0x5800 # <CJK>
+0x5802 # <CJK>
+0x5805 # <CJK>
+0x5806 # <CJK>
+0x580A # <CJK>
+0x580B # <CJK>
+0x5815 # <CJK>
+0x5819 # <CJK>
+0x581D # <CJK>
+0x5821 # <CJK>
+0x5824 # <CJK>
+0x582A # <CJK>
+0x582F # <CJK>
+0x5830 # <CJK>
+0x5831 # <CJK>
+0x5834 # <CJK>
+0x5835 # <CJK>
+0x583A # <CJK>
+0x583D # <CJK>
+0x5840 # <CJK>
+0x5841 # <CJK>
+0x584A # <CJK>
+0x584B # <CJK>
+0x5851 # <CJK>
+0x5852 # <CJK>
+0x5854 # <CJK>
+0x5857 # <CJK>
+0x5858 # <CJK>
+0x5859 # <CJK>
+0x585A # <CJK>
+0x585E # <CJK>
+0x5862 # <CJK>
+0x5869 # <CJK>
+0x586B # <CJK>
+0x5870 # <CJK>
+0x5872 # <CJK>
+0x5875 # <CJK>
+0x5879 # <CJK>
+0x587E # <CJK>
+0x5883 # <CJK>
+0x5885 # <CJK>
+0x5893 # <CJK>
+0x5897 # <CJK>
+0x589C # <CJK>
+0x589F # <CJK>
+0x58A8 # <CJK>
+0x58AB # <CJK>
+0x58AE # <CJK>
+0x58B3 # <CJK>
+0x58B8 # <CJK>
+0x58B9 # <CJK>
+0x58BA # <CJK>
+0x58BB # <CJK>
+0x58BE # <CJK>
+0x58C1 # <CJK>
+0x58C5 # <CJK>
+0x58C7 # <CJK>
+0x58CA # <CJK>
+0x58CC # <CJK>
+0x58D1 # <CJK>
+0x58D3 # <CJK>
+0x58D5 # <CJK>
+0x58D7 # <CJK>
+0x58D8 # <CJK>
+0x58D9 # <CJK>
+0x58DC # <CJK>
+0x58DE # <CJK>
+0x58DF # <CJK>
+0x58E4 # <CJK>
+0x58E5 # <CJK>
+0x58EB # <CJK>
+0x58EC # <CJK>
+0x58EE # <CJK>
+0x58EF # <CJK>
+0x58F0 # <CJK>
+0x58F1 # <CJK>
+0x58F2 # <CJK>
+0x58F7 # <CJK>
+0x58F9 # <CJK>
+0x58FA # <CJK>
+0x58FB # <CJK>
+0x58FC # <CJK>
+0x58FD # <CJK>
+0x5902 # <CJK>
+0x5909 # <CJK>
+0x590A # <CJK>
+0x590F # <CJK>
+0x5910 # <CJK>
+0x5915 # <CJK>
+0x5916 # <CJK>
+0x5918 # <CJK>
+0x5919 # <CJK>
+0x591A # <CJK>
+0x591B # <CJK>
+0x591C # <CJK>
+0x5922 # <CJK>
+0x5925 # <CJK>
+0x5927 # <CJK>
+0x5929 # <CJK>
+0x592A # <CJK>
+0x592B # <CJK>
+0x592C # <CJK>
+0x592D # <CJK>
+0x592E # <CJK>
+0x5931 # <CJK>
+0x5932 # <CJK>
+0x5937 # <CJK>
+0x5938 # <CJK>
+0x593E # <CJK>
+0x5944 # <CJK>
+0x5947 # <CJK>
+0x5948 # <CJK>
+0x5949 # <CJK>
+0x594E # <CJK>
+0x594F # <CJK>
+0x5950 # <CJK>
+0x5951 # <CJK>
+0x5954 # <CJK>
+0x5955 # <CJK>
+0x5957 # <CJK>
+0x5958 # <CJK>
+0x595A # <CJK>
+0x5960 # <CJK>
+0x5962 # <CJK>
+0x5965 # <CJK>
+0x5967 # <CJK>
+0x5968 # <CJK>
+0x5969 # <CJK>
+0x596A # <CJK>
+0x596C # <CJK>
+0x596E # <CJK>
+0x5973 # <CJK>
+0x5974 # <CJK>
+0x5978 # <CJK>
+0x597D # <CJK>
+0x5981 # <CJK>
+0x5982 # <CJK>
+0x5983 # <CJK>
+0x5984 # <CJK>
+0x598A # <CJK>
+0x598D # <CJK>
+0x5993 # <CJK>
+0x5996 # <CJK>
+0x5999 # <CJK>
+0x599B # <CJK>
+0x599D # <CJK>
+0x59A3 # <CJK>
+0x59A5 # <CJK>
+0x59A8 # <CJK>
+0x59AC # <CJK>
+0x59B2 # <CJK>
+0x59B9 # <CJK>
+0x59BB # <CJK>
+0x59BE # <CJK>
+0x59C6 # <CJK>
+0x59C9 # <CJK>
+0x59CB # <CJK>
+0x59D0 # <CJK>
+0x59D1 # <CJK>
+0x59D3 # <CJK>
+0x59D4 # <CJK>
+0x59D9 # <CJK>
+0x59DA # <CJK>
+0x59DC # <CJK>
+0x59E5 # <CJK>
+0x59E6 # <CJK>
+0x59E8 # <CJK>
+0x59EA # <CJK>
+0x59EB # <CJK>
+0x59F6 # <CJK>
+0x59FB # <CJK>
+0x59FF # <CJK>
+0x5A01 # <CJK>
+0x5A03 # <CJK>
+0x5A09 # <CJK>
+0x5A11 # <CJK>
+0x5A18 # <CJK>
+0x5A1A # <CJK>
+0x5A1C # <CJK>
+0x5A1F # <CJK>
+0x5A20 # <CJK>
+0x5A25 # <CJK>
+0x5A29 # <CJK>
+0x5A2F # <CJK>
+0x5A35 # <CJK>
+0x5A36 # <CJK>
+0x5A3C # <CJK>
+0x5A40 # <CJK>
+0x5A41 # <CJK>
+0x5A46 # <CJK>
+0x5A49 # <CJK>
+0x5A5A # <CJK>
+0x5A62 # <CJK>
+0x5A66 # <CJK>
+0x5A6A # <CJK>
+0x5A6C # <CJK>
+0x5A7F # <CJK>
+0x5A92 # <CJK>
+0x5A9A # <CJK>
+0x5A9B # <CJK>
+0x5ABC # <CJK>
+0x5ABD # <CJK>
+0x5ABE # <CJK>
+0x5AC1 # <CJK>
+0x5AC2 # <CJK>
+0x5AC9 # <CJK>
+0x5ACB # <CJK>
+0x5ACC # <CJK>
+0x5AD0 # <CJK>
+0x5AD6 # <CJK>
+0x5AD7 # <CJK>
+0x5AE1 # <CJK>
+0x5AE3 # <CJK>
+0x5AE6 # <CJK>
+0x5AE9 # <CJK>
+0x5AFA # <CJK>
+0x5AFB # <CJK>
+0x5B09 # <CJK>
+0x5B0B # <CJK>
+0x5B0C # <CJK>
+0x5B16 # <CJK>
+0x5B22 # <CJK>
+0x5B2A # <CJK>
+0x5B2C # <CJK>
+0x5B30 # <CJK>
+0x5B32 # <CJK>
+0x5B36 # <CJK>
+0x5B3E # <CJK>
+0x5B40 # <CJK>
+0x5B43 # <CJK>
+0x5B45 # <CJK>
+0x5B50 # <CJK>
+0x5B51 # <CJK>
+0x5B54 # <CJK>
+0x5B55 # <CJK>
+0x5B57 # <CJK>
+0x5B58 # <CJK>
+0x5B5A # <CJK>
+0x5B5B # <CJK>
+0x5B5C # <CJK>
+0x5B5D # <CJK>
+0x5B5F # <CJK>
+0x5B63 # <CJK>
+0x5B64 # <CJK>
+0x5B65 # <CJK>
+0x5B66 # <CJK>
+0x5B69 # <CJK>
+0x5B6B # <CJK>
+0x5B70 # <CJK>
+0x5B71 # <CJK>
+0x5B73 # <CJK>
+0x5B75 # <CJK>
+0x5B78 # <CJK>
+0x5B7A # <CJK>
+0x5B80 # <CJK>
+0x5B83 # <CJK>
+0x5B85 # <CJK>
+0x5B87 # <CJK>
+0x5B88 # <CJK>
+0x5B89 # <CJK>
+0x5B8B # <CJK>
+0x5B8C # <CJK>
+0x5B8D # <CJK>
+0x5B8F # <CJK>
+0x5B95 # <CJK>
+0x5B97 # <CJK>
+0x5B98 # <CJK>
+0x5B99 # <CJK>
+0x5B9A # <CJK>
+0x5B9B # <CJK>
+0x5B9C # <CJK>
+0x5B9D # <CJK>
+0x5B9F # <CJK>
+0x5BA2 # <CJK>
+0x5BA3 # <CJK>
+0x5BA4 # <CJK>
+0x5BA5 # <CJK>
+0x5BA6 # <CJK>
+0x5BAE # <CJK>
+0x5BB0 # <CJK>
+0x5BB3 # <CJK>
+0x5BB4 # <CJK>
+0x5BB5 # <CJK>
+0x5BB6 # <CJK>
+0x5BB8 # <CJK>
+0x5BB9 # <CJK>
+0x5BBF # <CJK>
+0x5BC2 # <CJK>
+0x5BC3 # <CJK>
+0x5BC4 # <CJK>
+0x5BC5 # <CJK>
+0x5BC6 # <CJK>
+0x5BC7 # <CJK>
+0x5BC9 # <CJK>
+0x5BCC # <CJK>
+0x5BD0 # <CJK>
+0x5BD2 # <CJK>
+0x5BD3 # <CJK>
+0x5BD4 # <CJK>
+0x5BDB # <CJK>
+0x5BDD # <CJK>
+0x5BDE # <CJK>
+0x5BDF # <CJK>
+0x5BE1 # <CJK>
+0x5BE2 # <CJK>
+0x5BE4 # <CJK>
+0x5BE5 # <CJK>
+0x5BE6 # <CJK>
+0x5BE7 # <CJK>
+0x5BE8 # <CJK>
+0x5BE9 # <CJK>
+0x5BEB # <CJK>
+0x5BEE # <CJK>
+0x5BF0 # <CJK>
+0x5BF3 # <CJK>
+0x5BF5 # <CJK>
+0x5BF6 # <CJK>
+0x5BF8 # <CJK>
+0x5BFA # <CJK>
+0x5BFE # <CJK>
+0x5BFF # <CJK>
+0x5C01 # <CJK>
+0x5C02 # <CJK>
+0x5C04 # <CJK>
+0x5C05 # <CJK>
+0x5C06 # <CJK>
+0x5C07 # <CJK>
+0x5C08 # <CJK>
+0x5C09 # <CJK>
+0x5C0A # <CJK>
+0x5C0B # <CJK>
+0x5C0D # <CJK>
+0x5C0E # <CJK>
+0x5C0F # <CJK>
+0x5C11 # <CJK>
+0x5C13 # <CJK>
+0x5C16 # <CJK>
+0x5C1A # <CJK>
+0x5C20 # <CJK>
+0x5C22 # <CJK>
+0x5C24 # <CJK>
+0x5C28 # <CJK>
+0x5C2D # <CJK>
+0x5C31 # <CJK>
+0x5C38 # <CJK>
+0x5C39 # <CJK>
+0x5C3A # <CJK>
+0x5C3B # <CJK>
+0x5C3C # <CJK>
+0x5C3D # <CJK>
+0x5C3E # <CJK>
+0x5C3F # <CJK>
+0x5C40 # <CJK>
+0x5C41 # <CJK>
+0x5C45 # <CJK>
+0x5C46 # <CJK>
+0x5C48 # <CJK>
+0x5C4A # <CJK>
+0x5C4B # <CJK>
+0x5C4D # <CJK>
+0x5C4E # <CJK>
+0x5C4F # <CJK>
+0x5C50 # <CJK>
+0x5C51 # <CJK>
+0x5C53 # <CJK>
+0x5C55 # <CJK>
+0x5C5E # <CJK>
+0x5C60 # <CJK>
+0x5C61 # <CJK>
+0x5C64 # <CJK>
+0x5C65 # <CJK>
+0x5C6C # <CJK>
+0x5C6E # <CJK>
+0x5C6F # <CJK>
+0x5C71 # <CJK>
+0x5C76 # <CJK>
+0x5C79 # <CJK>
+0x5C8C # <CJK>
+0x5C90 # <CJK>
+0x5C91 # <CJK>
+0x5C94 # <CJK>
+0x5CA1 # <CJK>
+0x5CA8 # <CJK>
+0x5CA9 # <CJK>
+0x5CAB # <CJK>
+0x5CAC # <CJK>
+0x5CB1 # <CJK>
+0x5CB3 # <CJK>
+0x5CB6 # <CJK>
+0x5CB7 # <CJK>
+0x5CB8 # <CJK>
+0x5CBB # <CJK>
+0x5CBC # <CJK>
+0x5CBE # <CJK>
+0x5CC5 # <CJK>
+0x5CC7 # <CJK>
+0x5CD9 # <CJK>
+0x5CE0 # <CJK>
+0x5CE1 # <CJK>
+0x5CE8 # <CJK>
+0x5CE9 # <CJK>
+0x5CEA # <CJK>
+0x5CED # <CJK>
+0x5CEF # <CJK>
+0x5CF0 # <CJK>
+0x5CF6 # <CJK>
+0x5CFA # <CJK>
+0x5CFB # <CJK>
+0x5CFD # <CJK>
+0x5D07 # <CJK>
+0x5D0B # <CJK>
+0x5D0E # <CJK>
+0x5D11 # <CJK>
+0x5D14 # <CJK>
+0x5D15 # <CJK>
+0x5D16 # <CJK>
+0x5D17 # <CJK>
+0x5D18 # <CJK>
+0x5D19 # <CJK>
+0x5D1A # <CJK>
+0x5D1B # <CJK>
+0x5D1F # <CJK>
+0x5D22 # <CJK>
+0x5D29 # <CJK>
+0x5D4B # <CJK>
+0x5D4C # <CJK>
+0x5D4E # <CJK>
+0x5D50 # <CJK>
+0x5D52 # <CJK>
+0x5D5C # <CJK>
+0x5D69 # <CJK>
+0x5D6C # <CJK>
+0x5D6F # <CJK>
+0x5D73 # <CJK>
+0x5D76 # <CJK>
+0x5D82 # <CJK>
+0x5D84 # <CJK>
+0x5D87 # <CJK>
+0x5D8B # <CJK>
+0x5D8C # <CJK>
+0x5D90 # <CJK>
+0x5D9D # <CJK>
+0x5DA2 # <CJK>
+0x5DAC # <CJK>
+0x5DAE # <CJK>
+0x5DB7 # <CJK>
+0x5DBA # <CJK>
+0x5DBC # <CJK>
+0x5DBD # <CJK>
+0x5DC9 # <CJK>
+0x5DCC # <CJK>
+0x5DCD # <CJK>
+0x5DD2 # <CJK>
+0x5DD3 # <CJK>
+0x5DD6 # <CJK>
+0x5DDB # <CJK>
+0x5DDD # <CJK>
+0x5DDE # <CJK>
+0x5DE1 # <CJK>
+0x5DE3 # <CJK>
+0x5DE5 # <CJK>
+0x5DE6 # <CJK>
+0x5DE7 # <CJK>
+0x5DE8 # <CJK>
+0x5DEB # <CJK>
+0x5DEE # <CJK>
+0x5DF1 # <CJK>
+0x5DF2 # <CJK>
+0x5DF3 # <CJK>
+0x5DF4 # <CJK>
+0x5DF5 # <CJK>
+0x5DF7 # <CJK>
+0x5DFB # <CJK>
+0x5DFD # <CJK>
+0x5DFE # <CJK>
+0x5E02 # <CJK>
+0x5E03 # <CJK>
+0x5E06 # <CJK>
+0x5E0B # <CJK>
+0x5E0C # <CJK>
+0x5E11 # <CJK>
+0x5E16 # <CJK>
+0x5E19 # <CJK>
+0x5E1A # <CJK>
+0x5E1B # <CJK>
+0x5E1D # <CJK>
+0x5E25 # <CJK>
+0x5E2B # <CJK>
+0x5E2D # <CJK>
+0x5E2F # <CJK>
+0x5E30 # <CJK>
+0x5E33 # <CJK>
+0x5E36 # <CJK>
+0x5E37 # <CJK>
+0x5E38 # <CJK>
+0x5E3D # <CJK>
+0x5E40 # <CJK>
+0x5E43 # <CJK>
+0x5E44 # <CJK>
+0x5E45 # <CJK>
+0x5E47 # <CJK>
+0x5E4C # <CJK>
+0x5E4E # <CJK>
+0x5E54 # <CJK>
+0x5E55 # <CJK>
+0x5E57 # <CJK>
+0x5E5F # <CJK>
+0x5E61 # <CJK>
+0x5E62 # <CJK>
+0x5E63 # <CJK>
+0x5E64 # <CJK>
+0x5E72 # <CJK>
+0x5E73 # <CJK>
+0x5E74 # <CJK>
+0x5E75 # <CJK>
+0x5E76 # <CJK>
+0x5E78 # <CJK>
+0x5E79 # <CJK>
+0x5E7A # <CJK>
+0x5E7B # <CJK>
+0x5E7C # <CJK>
+0x5E7D # <CJK>
+0x5E7E # <CJK>
+0x5E7F # <CJK>
+0x5E81 # <CJK>
+0x5E83 # <CJK>
+0x5E84 # <CJK>
+0x5E87 # <CJK>
+0x5E8A # <CJK>
+0x5E8F # <CJK>
+0x5E95 # <CJK>
+0x5E96 # <CJK>
+0x5E97 # <CJK>
+0x5E9A # <CJK>
+0x5E9C # <CJK>
+0x5EA0 # <CJK>
+0x5EA6 # <CJK>
+0x5EA7 # <CJK>
+0x5EAB # <CJK>
+0x5EAD # <CJK>
+0x5EB5 # <CJK>
+0x5EB6 # <CJK>
+0x5EB7 # <CJK>
+0x5EB8 # <CJK>
+0x5EC1 # <CJK>
+0x5EC2 # <CJK>
+0x5EC3 # <CJK>
+0x5EC8 # <CJK>
+0x5EC9 # <CJK>
+0x5ECA # <CJK>
+0x5ECF # <CJK>
+0x5ED0 # <CJK>
+0x5ED3 # <CJK>
+0x5ED6 # <CJK>
+0x5EDA # <CJK>
+0x5EDB # <CJK>
+0x5EDD # <CJK>
+0x5EDF # <CJK>
+0x5EE0 # <CJK>
+0x5EE1 # <CJK>
+0x5EE2 # <CJK>
+0x5EE3 # <CJK>
+0x5EE8 # <CJK>
+0x5EE9 # <CJK>
+0x5EEC # <CJK>
+0x5EF0 # <CJK>
+0x5EF1 # <CJK>
+0x5EF3 # <CJK>
+0x5EF4 # <CJK>
+0x5EF6 # <CJK>
+0x5EF7 # <CJK>
+0x5EF8 # <CJK>
+0x5EFA # <CJK>
+0x5EFB # <CJK>
+0x5EFC # <CJK>
+0x5EFE # <CJK>
+0x5EFF # <CJK>
+0x5F01 # <CJK>
+0x5F03 # <CJK>
+0x5F04 # <CJK>
+0x5F09 # <CJK>
+0x5F0A # <CJK>
+0x5F0B # <CJK>
+0x5F0C # <CJK>
+0x5F0D # <CJK>
+0x5F0F # <CJK>
+0x5F10 # <CJK>
+0x5F11 # <CJK>
+0x5F13 # <CJK>
+0x5F14 # <CJK>
+0x5F15 # <CJK>
+0x5F16 # <CJK>
+0x5F17 # <CJK>
+0x5F18 # <CJK>
+0x5F1B # <CJK>
+0x5F1F # <CJK>
+0x5F25 # <CJK>
+0x5F26 # <CJK>
+0x5F27 # <CJK>
+0x5F29 # <CJK>
+0x5F2D # <CJK>
+0x5F2F # <CJK>
+0x5F31 # <CJK>
+0x5F35 # <CJK>
+0x5F37 # <CJK>
+0x5F38 # <CJK>
+0x5F3C # <CJK>
+0x5F3E # <CJK>
+0x5F41 # <CJK>
+0x5F48 # <CJK>
+0x5F4A # <CJK>
+0x5F4C # <CJK>
+0x5F4E # <CJK>
+0x5F51 # <CJK>
+0x5F53 # <CJK>
+0x5F56 # <CJK>
+0x5F57 # <CJK>
+0x5F59 # <CJK>
+0x5F5C # <CJK>
+0x5F5D # <CJK>
+0x5F61 # <CJK>
+0x5F62 # <CJK>
+0x5F66 # <CJK>
+0x5F69 # <CJK>
+0x5F6A # <CJK>
+0x5F6B # <CJK>
+0x5F6C # <CJK>
+0x5F6D # <CJK>
+0x5F70 # <CJK>
+0x5F71 # <CJK>
+0x5F73 # <CJK>
+0x5F77 # <CJK>
+0x5F79 # <CJK>
+0x5F7C # <CJK>
+0x5F7F # <CJK>
+0x5F80 # <CJK>
+0x5F81 # <CJK>
+0x5F82 # <CJK>
+0x5F83 # <CJK>
+0x5F84 # <CJK>
+0x5F85 # <CJK>
+0x5F87 # <CJK>
+0x5F88 # <CJK>
+0x5F8A # <CJK>
+0x5F8B # <CJK>
+0x5F8C # <CJK>
+0x5F90 # <CJK>
+0x5F91 # <CJK>
+0x5F92 # <CJK>
+0x5F93 # <CJK>
+0x5F97 # <CJK>
+0x5F98 # <CJK>
+0x5F99 # <CJK>
+0x5F9E # <CJK>
+0x5FA0 # <CJK>
+0x5FA1 # <CJK>
+0x5FA8 # <CJK>
+0x5FA9 # <CJK>
+0x5FAA # <CJK>
+0x5FAD # <CJK>
+0x5FAE # <CJK>
+0x5FB3 # <CJK>
+0x5FB4 # <CJK>
+0x5FB9 # <CJK>
+0x5FBC # <CJK>
+0x5FBD # <CJK>
+0x5FC3 # <CJK>
+0x5FC5 # <CJK>
+0x5FCC # <CJK>
+0x5FCD # <CJK>
+0x5FD6 # <CJK>
+0x5FD7 # <CJK>
+0x5FD8 # <CJK>
+0x5FD9 # <CJK>
+0x5FDC # <CJK>
+0x5FDD # <CJK>
+0x5FE0 # <CJK>
+0x5FE4 # <CJK>
+0x5FEB # <CJK>
+0x5FF0 # <CJK>
+0x5FF1 # <CJK>
+0x5FF5 # <CJK>
+0x5FF8 # <CJK>
+0x5FFB # <CJK>
+0x5FFD # <CJK>
+0x5FFF # <CJK>
+0x600E # <CJK>
+0x600F # <CJK>
+0x6010 # <CJK>
+0x6012 # <CJK>
+0x6015 # <CJK>
+0x6016 # <CJK>
+0x6019 # <CJK>
+0x601B # <CJK>
+0x601C # <CJK>
+0x601D # <CJK>
+0x6020 # <CJK>
+0x6021 # <CJK>
+0x6025 # <CJK>
+0x6026 # <CJK>
+0x6027 # <CJK>
+0x6028 # <CJK>
+0x6029 # <CJK>
+0x602A # <CJK>
+0x602B # <CJK>
+0x602F # <CJK>
+0x6031 # <CJK>
+0x603A # <CJK>
+0x6041 # <CJK>
+0x6042 # <CJK>
+0x6043 # <CJK>
+0x6046 # <CJK>
+0x604A # <CJK>
+0x604B # <CJK>
+0x604D # <CJK>
+0x6050 # <CJK>
+0x6052 # <CJK>
+0x6055 # <CJK>
+0x6059 # <CJK>
+0x605A # <CJK>
+0x605F # <CJK>
+0x6060 # <CJK>
+0x6062 # <CJK>
+0x6063 # <CJK>
+0x6064 # <CJK>
+0x6065 # <CJK>
+0x6068 # <CJK>
+0x6069 # <CJK>
+0x606A # <CJK>
+0x606B # <CJK>
+0x606C # <CJK>
+0x606D # <CJK>
+0x606F # <CJK>
+0x6070 # <CJK>
+0x6075 # <CJK>
+0x6077 # <CJK>
+0x6081 # <CJK>
+0x6083 # <CJK>
+0x6084 # <CJK>
+0x6089 # <CJK>
+0x608B # <CJK>
+0x608C # <CJK>
+0x608D # <CJK>
+0x6092 # <CJK>
+0x6094 # <CJK>
+0x6096 # <CJK>
+0x6097 # <CJK>
+0x609A # <CJK>
+0x609B # <CJK>
+0x609F # <CJK>
+0x60A0 # <CJK>
+0x60A3 # <CJK>
+0x60A6 # <CJK>
+0x60A7 # <CJK>
+0x60A9 # <CJK>
+0x60AA # <CJK>
+0x60B2 # <CJK>
+0x60B3 # <CJK>
+0x60B4 # <CJK>
+0x60B5 # <CJK>
+0x60B6 # <CJK>
+0x60B8 # <CJK>
+0x60BC # <CJK>
+0x60BD # <CJK>
+0x60C5 # <CJK>
+0x60C6 # <CJK>
+0x60C7 # <CJK>
+0x60D1 # <CJK>
+0x60D3 # <CJK>
+0x60D8 # <CJK>
+0x60DA # <CJK>
+0x60DC # <CJK>
+0x60DF # <CJK>
+0x60E0 # <CJK>
+0x60E1 # <CJK>
+0x60E3 # <CJK>
+0x60E7 # <CJK>
+0x60E8 # <CJK>
+0x60F0 # <CJK>
+0x60F1 # <CJK>
+0x60F3 # <CJK>
+0x60F4 # <CJK>
+0x60F6 # <CJK>
+0x60F7 # <CJK>
+0x60F9 # <CJK>
+0x60FA # <CJK>
+0x60FB # <CJK>
+0x6100 # <CJK>
+0x6101 # <CJK>
+0x6103 # <CJK>
+0x6106 # <CJK>
+0x6108 # <CJK>
+0x6109 # <CJK>
+0x610D # <CJK>
+0x610E # <CJK>
+0x610F # <CJK>
+0x6115 # <CJK>
+0x611A # <CJK>
+0x611B # <CJK>
+0x611F # <CJK>
+0x6121 # <CJK>
+0x6127 # <CJK>
+0x6128 # <CJK>
+0x612C # <CJK>
+0x6134 # <CJK>
+0x613C # <CJK>
+0x613D # <CJK>
+0x613E # <CJK>
+0x613F # <CJK>
+0x6142 # <CJK>
+0x6144 # <CJK>
+0x6147 # <CJK>
+0x6148 # <CJK>
+0x614A # <CJK>
+0x614B # <CJK>
+0x614C # <CJK>
+0x614D # <CJK>
+0x614E # <CJK>
+0x6153 # <CJK>
+0x6155 # <CJK>
+0x6158 # <CJK>
+0x6159 # <CJK>
+0x615A # <CJK>
+0x615D # <CJK>
+0x615F # <CJK>
+0x6162 # <CJK>
+0x6163 # <CJK>
+0x6165 # <CJK>
+0x6167 # <CJK>
+0x6168 # <CJK>
+0x616B # <CJK>
+0x616E # <CJK>
+0x616F # <CJK>
+0x6170 # <CJK>
+0x6171 # <CJK>
+0x6173 # <CJK>
+0x6174 # <CJK>
+0x6175 # <CJK>
+0x6176 # <CJK>
+0x6177 # <CJK>
+0x617E # <CJK>
+0x6182 # <CJK>
+0x6187 # <CJK>
+0x618A # <CJK>
+0x618E # <CJK>
+0x6190 # <CJK>
+0x6191 # <CJK>
+0x6194 # <CJK>
+0x6196 # <CJK>
+0x6199 # <CJK>
+0x619A # <CJK>
+0x61A4 # <CJK>
+0x61A7 # <CJK>
+0x61A9 # <CJK>
+0x61AB # <CJK>
+0x61AC # <CJK>
+0x61AE # <CJK>
+0x61B2 # <CJK>
+0x61B6 # <CJK>
+0x61BA # <CJK>
+0x61BE # <CJK>
+0x61C3 # <CJK>
+0x61C6 # <CJK>
+0x61C7 # <CJK>
+0x61C8 # <CJK>
+0x61C9 # <CJK>
+0x61CA # <CJK>
+0x61CB # <CJK>
+0x61CC # <CJK>
+0x61CD # <CJK>
+0x61D0 # <CJK>
+0x61E3 # <CJK>
+0x61E6 # <CJK>
+0x61F2 # <CJK>
+0x61F4 # <CJK>
+0x61F6 # <CJK>
+0x61F7 # <CJK>
+0x61F8 # <CJK>
+0x61FA # <CJK>
+0x61FC # <CJK>
+0x61FD # <CJK>
+0x61FE # <CJK>
+0x61FF # <CJK>
+0x6200 # <CJK>
+0x6208 # <CJK>
+0x6209 # <CJK>
+0x620A # <CJK>
+0x620C # <CJK>
+0x620D # <CJK>
+0x620E # <CJK>
+0x6210 # <CJK>
+0x6211 # <CJK>
+0x6212 # <CJK>
+0x6214 # <CJK>
+0x6216 # <CJK>
+0x621A # <CJK>
+0x621B # <CJK>
+0x621D # <CJK>
+0x621E # <CJK>
+0x621F # <CJK>
+0x6221 # <CJK>
+0x6226 # <CJK>
+0x622A # <CJK>
+0x622E # <CJK>
+0x622F # <CJK>
+0x6230 # <CJK>
+0x6232 # <CJK>
+0x6233 # <CJK>
+0x6234 # <CJK>
+0x6238 # <CJK>
+0x623B # <CJK>
+0x623F # <CJK>
+0x6240 # <CJK>
+0x6241 # <CJK>
+0x6247 # <CJK>
+0x6248 # <CJK>
+0x6249 # <CJK>
+0x624B # <CJK>
+0x624D # <CJK>
+0x624E # <CJK>
+0x6253 # <CJK>
+0x6255 # <CJK>
+0x6258 # <CJK>
+0x625B # <CJK>
+0x625E # <CJK>
+0x6260 # <CJK>
+0x6263 # <CJK>
+0x6268 # <CJK>
+0x626E # <CJK>
+0x6271 # <CJK>
+0x6276 # <CJK>
+0x6279 # <CJK>
+0x627C # <CJK>
+0x627E # <CJK>
+0x627F # <CJK>
+0x6280 # <CJK>
+0x6282 # <CJK>
+0x6283 # <CJK>
+0x6284 # <CJK>
+0x6289 # <CJK>
+0x628A # <CJK>
+0x6291 # <CJK>
+0x6292 # <CJK>
+0x6293 # <CJK>
+0x6294 # <CJK>
+0x6295 # <CJK>
+0x6296 # <CJK>
+0x6297 # <CJK>
+0x6298 # <CJK>
+0x629B # <CJK>
+0x629C # <CJK>
+0x629E # <CJK>
+0x62AB # <CJK>
+0x62AC # <CJK>
+0x62B1 # <CJK>
+0x62B5 # <CJK>
+0x62B9 # <CJK>
+0x62BB # <CJK>
+0x62BC # <CJK>
+0x62BD # <CJK>
+0x62C2 # <CJK>
+0x62C5 # <CJK>
+0x62C6 # <CJK>
+0x62C7 # <CJK>
+0x62C8 # <CJK>
+0x62C9 # <CJK>
+0x62CA # <CJK>
+0x62CC # <CJK>
+0x62CD # <CJK>
+0x62CF # <CJK>
+0x62D0 # <CJK>
+0x62D1 # <CJK>
+0x62D2 # <CJK>
+0x62D3 # <CJK>
+0x62D4 # <CJK>
+0x62D7 # <CJK>
+0x62D8 # <CJK>
+0x62D9 # <CJK>
+0x62DB # <CJK>
+0x62DC # <CJK>
+0x62DD # <CJK>
+0x62E0 # <CJK>
+0x62E1 # <CJK>
+0x62EC # <CJK>
+0x62ED # <CJK>
+0x62EE # <CJK>
+0x62EF # <CJK>
+0x62F1 # <CJK>
+0x62F3 # <CJK>
+0x62F5 # <CJK>
+0x62F6 # <CJK>
+0x62F7 # <CJK>
+0x62FE # <CJK>
+0x62FF # <CJK>
+0x6301 # <CJK>
+0x6302 # <CJK>
+0x6307 # <CJK>
+0x6308 # <CJK>
+0x6309 # <CJK>
+0x630C # <CJK>
+0x6311 # <CJK>
+0x6319 # <CJK>
+0x631F # <CJK>
+0x6327 # <CJK>
+0x6328 # <CJK>
+0x632B # <CJK>
+0x632F # <CJK>
+0x633A # <CJK>
+0x633D # <CJK>
+0x633E # <CJK>
+0x633F # <CJK>
+0x6349 # <CJK>
+0x634C # <CJK>
+0x634D # <CJK>
+0x634F # <CJK>
+0x6350 # <CJK>
+0x6355 # <CJK>
+0x6357 # <CJK>
+0x635C # <CJK>
+0x6367 # <CJK>
+0x6368 # <CJK>
+0x6369 # <CJK>
+0x636B # <CJK>
+0x636E # <CJK>
+0x6372 # <CJK>
+0x6376 # <CJK>
+0x6377 # <CJK>
+0x637A # <CJK>
+0x637B # <CJK>
+0x6380 # <CJK>
+0x6383 # <CJK>
+0x6388 # <CJK>
+0x6389 # <CJK>
+0x638C # <CJK>
+0x638E # <CJK>
+0x638F # <CJK>
+0x6392 # <CJK>
+0x6396 # <CJK>
+0x6398 # <CJK>
+0x639B # <CJK>
+0x639F # <CJK>
+0x63A0 # <CJK>
+0x63A1 # <CJK>
+0x63A2 # <CJK>
+0x63A3 # <CJK>
+0x63A5 # <CJK>
+0x63A7 # <CJK>
+0x63A8 # <CJK>
+0x63A9 # <CJK>
+0x63AA # <CJK>
+0x63AB # <CJK>
+0x63AC # <CJK>
+0x63B2 # <CJK>
+0x63B4 # <CJK>
+0x63B5 # <CJK>
+0x63BB # <CJK>
+0x63BE # <CJK>
+0x63C0 # <CJK>
+0x63C3 # <CJK>
+0x63C4 # <CJK>
+0x63C6 # <CJK>
+0x63C9 # <CJK>
+0x63CF # <CJK>
+0x63D0 # <CJK>
+0x63D2 # <CJK>
+0x63D6 # <CJK>
+0x63DA # <CJK>
+0x63DB # <CJK>
+0x63E1 # <CJK>
+0x63E3 # <CJK>
+0x63E9 # <CJK>
+0x63EE # <CJK>
+0x63F4 # <CJK>
+0x63F6 # <CJK>
+0x63FA # <CJK>
+0x6406 # <CJK>
+0x640D # <CJK>
+0x640F # <CJK>
+0x6413 # <CJK>
+0x6416 # <CJK>
+0x6417 # <CJK>
+0x641C # <CJK>
+0x6426 # <CJK>
+0x6428 # <CJK>
+0x642C # <CJK>
+0x642D # <CJK>
+0x6434 # <CJK>
+0x6436 # <CJK>
+0x643A # <CJK>
+0x643E # <CJK>
+0x6442 # <CJK>
+0x644E # <CJK>
+0x6458 # <CJK>
+0x6467 # <CJK>
+0x6469 # <CJK>
+0x646F # <CJK>
+0x6476 # <CJK>
+0x6478 # <CJK>
+0x647A # <CJK>
+0x6483 # <CJK>
+0x6488 # <CJK>
+0x6492 # <CJK>
+0x6493 # <CJK>
+0x6495 # <CJK>
+0x649A # <CJK>
+0x649E # <CJK>
+0x64A4 # <CJK>
+0x64A5 # <CJK>
+0x64A9 # <CJK>
+0x64AB # <CJK>
+0x64AD # <CJK>
+0x64AE # <CJK>
+0x64B0 # <CJK>
+0x64B2 # <CJK>
+0x64B9 # <CJK>
+0x64BB # <CJK>
+0x64BC # <CJK>
+0x64C1 # <CJK>
+0x64C2 # <CJK>
+0x64C5 # <CJK>
+0x64C7 # <CJK>
+0x64CD # <CJK>
+0x64D2 # <CJK>
+0x64D4 # <CJK>
+0x64D8 # <CJK>
+0x64DA # <CJK>
+0x64E0 # <CJK>
+0x64E1 # <CJK>
+0x64E2 # <CJK>
+0x64E3 # <CJK>
+0x64E6 # <CJK>
+0x64E7 # <CJK>
+0x64EC # <CJK>
+0x64EF # <CJK>
+0x64F1 # <CJK>
+0x64F2 # <CJK>
+0x64F4 # <CJK>
+0x64F6 # <CJK>
+0x64FA # <CJK>
+0x64FD # <CJK>
+0x64FE # <CJK>
+0x6500 # <CJK>
+0x6505 # <CJK>
+0x6518 # <CJK>
+0x651C # <CJK>
+0x651D # <CJK>
+0x6523 # <CJK>
+0x6524 # <CJK>
+0x652A # <CJK>
+0x652B # <CJK>
+0x652C # <CJK>
+0x652F # <CJK>
+0x6534 # <CJK>
+0x6535 # <CJK>
+0x6536 # <CJK>
+0x6537 # <CJK>
+0x6538 # <CJK>
+0x6539 # <CJK>
+0x653B # <CJK>
+0x653E # <CJK>
+0x653F # <CJK>
+0x6545 # <CJK>
+0x6548 # <CJK>
+0x654D # <CJK>
+0x654F # <CJK>
+0x6551 # <CJK>
+0x6555 # <CJK>
+0x6556 # <CJK>
+0x6557 # <CJK>
+0x6558 # <CJK>
+0x6559 # <CJK>
+0x655D # <CJK>
+0x655E # <CJK>
+0x6562 # <CJK>
+0x6563 # <CJK>
+0x6566 # <CJK>
+0x656C # <CJK>
+0x6570 # <CJK>
+0x6572 # <CJK>
+0x6574 # <CJK>
+0x6575 # <CJK>
+0x6577 # <CJK>
+0x6578 # <CJK>
+0x6582 # <CJK>
+0x6583 # <CJK>
+0x6587 # <CJK>
+0x6588 # <CJK>
+0x6589 # <CJK>
+0x658C # <CJK>
+0x658E # <CJK>
+0x6590 # <CJK>
+0x6591 # <CJK>
+0x6597 # <CJK>
+0x6599 # <CJK>
+0x659B # <CJK>
+0x659C # <CJK>
+0x659F # <CJK>
+0x65A1 # <CJK>
+0x65A4 # <CJK>
+0x65A5 # <CJK>
+0x65A7 # <CJK>
+0x65AB # <CJK>
+0x65AC # <CJK>
+0x65AD # <CJK>
+0x65AF # <CJK>
+0x65B0 # <CJK>
+0x65B7 # <CJK>
+0x65B9 # <CJK>
+0x65BC # <CJK>
+0x65BD # <CJK>
+0x65C1 # <CJK>
+0x65C3 # <CJK>
+0x65C4 # <CJK>
+0x65C5 # <CJK>
+0x65C6 # <CJK>
+0x65CB # <CJK>
+0x65CC # <CJK>
+0x65CF # <CJK>
+0x65D2 # <CJK>
+0x65D7 # <CJK>
+0x65D9 # <CJK>
+0x65DB # <CJK>
+0x65E0 # <CJK>
+0x65E1 # <CJK>
+0x65E2 # <CJK>
+0x65E5 # <CJK>
+0x65E6 # <CJK>
+0x65E7 # <CJK>
+0x65E8 # <CJK>
+0x65E9 # <CJK>
+0x65EC # <CJK>
+0x65ED # <CJK>
+0x65F1 # <CJK>
+0x65FA # <CJK>
+0x65FB # <CJK>
+0x6602 # <CJK>
+0x6603 # <CJK>
+0x6606 # <CJK>
+0x6607 # <CJK>
+0x660A # <CJK>
+0x660C # <CJK>
+0x660E # <CJK>
+0x660F # <CJK>
+0x6613 # <CJK>
+0x6614 # <CJK>
+0x661C # <CJK>
+0x661F # <CJK>
+0x6620 # <CJK>
+0x6625 # <CJK>
+0x6627 # <CJK>
+0x6628 # <CJK>
+0x662D # <CJK>
+0x662F # <CJK>
+0x6634 # <CJK>
+0x6635 # <CJK>
+0x6636 # <CJK>
+0x663C # <CJK>
+0x663F # <CJK>
+0x6641 # <CJK>
+0x6642 # <CJK>
+0x6643 # <CJK>
+0x6644 # <CJK>
+0x6649 # <CJK>
+0x664B # <CJK>
+0x664F # <CJK>
+0x6652 # <CJK>
+0x665D # <CJK>
+0x665E # <CJK>
+0x665F # <CJK>
+0x6662 # <CJK>
+0x6664 # <CJK>
+0x6666 # <CJK>
+0x6667 # <CJK>
+0x6668 # <CJK>
+0x6669 # <CJK>
+0x666E # <CJK>
+0x666F # <CJK>
+0x6670 # <CJK>
+0x6674 # <CJK>
+0x6676 # <CJK>
+0x667A # <CJK>
+0x6681 # <CJK>
+0x6683 # <CJK>
+0x6684 # <CJK>
+0x6687 # <CJK>
+0x6688 # <CJK>
+0x6689 # <CJK>
+0x668E # <CJK>
+0x6691 # <CJK>
+0x6696 # <CJK>
+0x6697 # <CJK>
+0x6698 # <CJK>
+0x669D # <CJK>
+0x66A2 # <CJK>
+0x66A6 # <CJK>
+0x66AB # <CJK>
+0x66AE # <CJK>
+0x66B4 # <CJK>
+0x66B8 # <CJK>
+0x66B9 # <CJK>
+0x66BC # <CJK>
+0x66BE # <CJK>
+0x66C1 # <CJK>
+0x66C4 # <CJK>
+0x66C7 # <CJK>
+0x66C9 # <CJK>
+0x66D6 # <CJK>
+0x66D9 # <CJK>
+0x66DA # <CJK>
+0x66DC # <CJK>
+0x66DD # <CJK>
+0x66E0 # <CJK>
+0x66E6 # <CJK>
+0x66E9 # <CJK>
+0x66F0 # <CJK>
+0x66F2 # <CJK>
+0x66F3 # <CJK>
+0x66F4 # <CJK>
+0x66F5 # <CJK>
+0x66F7 # <CJK>
+0x66F8 # <CJK>
+0x66F9 # <CJK>
+0x66FC # <CJK>
+0x66FD # <CJK>
+0x66FE # <CJK>
+0x66FF # <CJK>
+0x6700 # <CJK>
+0x6703 # <CJK>
+0x6708 # <CJK>
+0x6709 # <CJK>
+0x670B # <CJK>
+0x670D # <CJK>
+0x670F # <CJK>
+0x6714 # <CJK>
+0x6715 # <CJK>
+0x6716 # <CJK>
+0x6717 # <CJK>
+0x671B # <CJK>
+0x671D # <CJK>
+0x671E # <CJK>
+0x671F # <CJK>
+0x6726 # <CJK>
+0x6727 # <CJK>
+0x6728 # <CJK>
+0x672A # <CJK>
+0x672B # <CJK>
+0x672C # <CJK>
+0x672D # <CJK>
+0x672E # <CJK>
+0x6731 # <CJK>
+0x6734 # <CJK>
+0x6736 # <CJK>
+0x6737 # <CJK>
+0x6738 # <CJK>
+0x673A # <CJK>
+0x673D # <CJK>
+0x673F # <CJK>
+0x6741 # <CJK>
+0x6746 # <CJK>
+0x6749 # <CJK>
+0x674E # <CJK>
+0x674F # <CJK>
+0x6750 # <CJK>
+0x6751 # <CJK>
+0x6753 # <CJK>
+0x6756 # <CJK>
+0x6759 # <CJK>
+0x675C # <CJK>
+0x675E # <CJK>
+0x675F # <CJK>
+0x6760 # <CJK>
+0x6761 # <CJK>
+0x6762 # <CJK>
+0x6763 # <CJK>
+0x6764 # <CJK>
+0x6765 # <CJK>
+0x676A # <CJK>
+0x676D # <CJK>
+0x676F # <CJK>
+0x6770 # <CJK>
+0x6771 # <CJK>
+0x6772 # <CJK>
+0x6773 # <CJK>
+0x6775 # <CJK>
+0x6777 # <CJK>
+0x677C # <CJK>
+0x677E # <CJK>
+0x677F # <CJK>
+0x6785 # <CJK>
+0x6787 # <CJK>
+0x6789 # <CJK>
+0x678B # <CJK>
+0x678C # <CJK>
+0x6790 # <CJK>
+0x6795 # <CJK>
+0x6797 # <CJK>
+0x679A # <CJK>
+0x679C # <CJK>
+0x679D # <CJK>
+0x67A0 # <CJK>
+0x67A1 # <CJK>
+0x67A2 # <CJK>
+0x67A6 # <CJK>
+0x67A9 # <CJK>
+0x67AF # <CJK>
+0x67B3 # <CJK>
+0x67B4 # <CJK>
+0x67B6 # <CJK>
+0x67B7 # <CJK>
+0x67B8 # <CJK>
+0x67B9 # <CJK>
+0x67C1 # <CJK>
+0x67C4 # <CJK>
+0x67C6 # <CJK>
+0x67CA # <CJK>
+0x67CE # <CJK>
+0x67CF # <CJK>
+0x67D0 # <CJK>
+0x67D1 # <CJK>
+0x67D3 # <CJK>
+0x67D4 # <CJK>
+0x67D8 # <CJK>
+0x67DA # <CJK>
+0x67DD # <CJK>
+0x67DE # <CJK>
+0x67E2 # <CJK>
+0x67E4 # <CJK>
+0x67E7 # <CJK>
+0x67E9 # <CJK>
+0x67EC # <CJK>
+0x67EE # <CJK>
+0x67EF # <CJK>
+0x67F1 # <CJK>
+0x67F3 # <CJK>
+0x67F4 # <CJK>
+0x67F5 # <CJK>
+0x67FB # <CJK>
+0x67FE # <CJK>
+0x67FF # <CJK>
+0x6802 # <CJK>
+0x6803 # <CJK>
+0x6804 # <CJK>
+0x6813 # <CJK>
+0x6816 # <CJK>
+0x6817 # <CJK>
+0x681E # <CJK>
+0x6821 # <CJK>
+0x6822 # <CJK>
+0x6829 # <CJK>
+0x682A # <CJK>
+0x682B # <CJK>
+0x6832 # <CJK>
+0x6834 # <CJK>
+0x6838 # <CJK>
+0x6839 # <CJK>
+0x683C # <CJK>
+0x683D # <CJK>
+0x6840 # <CJK>
+0x6841 # <CJK>
+0x6842 # <CJK>
+0x6843 # <CJK>
+0x6846 # <CJK>
+0x6848 # <CJK>
+0x684D # <CJK>
+0x684E # <CJK>
+0x6850 # <CJK>
+0x6851 # <CJK>
+0x6853 # <CJK>
+0x6854 # <CJK>
+0x6859 # <CJK>
+0x685C # <CJK>
+0x685D # <CJK>
+0x685F # <CJK>
+0x6863 # <CJK>
+0x6867 # <CJK>
+0x6874 # <CJK>
+0x6876 # <CJK>
+0x6877 # <CJK>
+0x687E # <CJK>
+0x687F # <CJK>
+0x6881 # <CJK>
+0x6883 # <CJK>
+0x6885 # <CJK>
+0x688D # <CJK>
+0x688F # <CJK>
+0x6893 # <CJK>
+0x6894 # <CJK>
+0x6897 # <CJK>
+0x689B # <CJK>
+0x689D # <CJK>
+0x689F # <CJK>
+0x68A0 # <CJK>
+0x68A2 # <CJK>
+0x68A6 # <CJK>
+0x68A7 # <CJK>
+0x68A8 # <CJK>
+0x68AD # <CJK>
+0x68AF # <CJK>
+0x68B0 # <CJK>
+0x68B1 # <CJK>
+0x68B3 # <CJK>
+0x68B5 # <CJK>
+0x68B6 # <CJK>
+0x68B9 # <CJK>
+0x68BA # <CJK>
+0x68BC # <CJK>
+0x68C4 # <CJK>
+0x68C6 # <CJK>
+0x68C9 # <CJK>
+0x68CA # <CJK>
+0x68CB # <CJK>
+0x68CD # <CJK>
+0x68D2 # <CJK>
+0x68D4 # <CJK>
+0x68D5 # <CJK>
+0x68D7 # <CJK>
+0x68D8 # <CJK>
+0x68DA # <CJK>
+0x68DF # <CJK>
+0x68E0 # <CJK>
+0x68E1 # <CJK>
+0x68E3 # <CJK>
+0x68E7 # <CJK>
+0x68EE # <CJK>
+0x68EF # <CJK>
+0x68F2 # <CJK>
+0x68F9 # <CJK>
+0x68FA # <CJK>
+0x6900 # <CJK>
+0x6901 # <CJK>
+0x6904 # <CJK>
+0x6905 # <CJK>
+0x6908 # <CJK>
+0x690B # <CJK>
+0x690C # <CJK>
+0x690D # <CJK>
+0x690E # <CJK>
+0x690F # <CJK>
+0x6912 # <CJK>
+0x6919 # <CJK>
+0x691A # <CJK>
+0x691B # <CJK>
+0x691C # <CJK>
+0x6921 # <CJK>
+0x6922 # <CJK>
+0x6923 # <CJK>
+0x6925 # <CJK>
+0x6926 # <CJK>
+0x6928 # <CJK>
+0x692A # <CJK>
+0x6930 # <CJK>
+0x6934 # <CJK>
+0x6936 # <CJK>
+0x6939 # <CJK>
+0x693D # <CJK>
+0x693F # <CJK>
+0x694A # <CJK>
+0x6953 # <CJK>
+0x6954 # <CJK>
+0x6955 # <CJK>
+0x6959 # <CJK>
+0x695A # <CJK>
+0x695C # <CJK>
+0x695D # <CJK>
+0x695E # <CJK>
+0x6960 # <CJK>
+0x6961 # <CJK>
+0x6962 # <CJK>
+0x696A # <CJK>
+0x696B # <CJK>
+0x696D # <CJK>
+0x696E # <CJK>
+0x696F # <CJK>
+0x6973 # <CJK>
+0x6974 # <CJK>
+0x6975 # <CJK>
+0x6977 # <CJK>
+0x6978 # <CJK>
+0x6979 # <CJK>
+0x697C # <CJK>
+0x697D # <CJK>
+0x697E # <CJK>
+0x6981 # <CJK>
+0x6982 # <CJK>
+0x698A # <CJK>
+0x698E # <CJK>
+0x6991 # <CJK>
+0x6994 # <CJK>
+0x6995 # <CJK>
+0x699B # <CJK>
+0x699C # <CJK>
+0x69A0 # <CJK>
+0x69A7 # <CJK>
+0x69AE # <CJK>
+0x69B1 # <CJK>
+0x69B2 # <CJK>
+0x69B4 # <CJK>
+0x69BB # <CJK>
+0x69BE # <CJK>
+0x69BF # <CJK>
+0x69C1 # <CJK>
+0x69C3 # <CJK>
+0x69C7 # <CJK>
+0x69CA # <CJK>
+0x69CB # <CJK>
+0x69CC # <CJK>
+0x69CD # <CJK>
+0x69CE # <CJK>
+0x69D0 # <CJK>
+0x69D3 # <CJK>
+0x69D8 # <CJK>
+0x69D9 # <CJK>
+0x69DD # <CJK>
+0x69DE # <CJK>
+0x69E7 # <CJK>
+0x69E8 # <CJK>
+0x69EB # <CJK>
+0x69ED # <CJK>
+0x69F2 # <CJK>
+0x69F9 # <CJK>
+0x69FB # <CJK>
+0x69FD # <CJK>
+0x69FF # <CJK>
+0x6A02 # <CJK>
+0x6A05 # <CJK>
+0x6A0A # <CJK>
+0x6A0B # <CJK>
+0x6A0C # <CJK>
+0x6A12 # <CJK>
+0x6A13 # <CJK>
+0x6A14 # <CJK>
+0x6A17 # <CJK>
+0x6A19 # <CJK>
+0x6A1B # <CJK>
+0x6A1E # <CJK>
+0x6A1F # <CJK>
+0x6A21 # <CJK>
+0x6A22 # <CJK>
+0x6A23 # <CJK>
+0x6A29 # <CJK>
+0x6A2A # <CJK>
+0x6A2B # <CJK>
+0x6A2E # <CJK>
+0x6A35 # <CJK>
+0x6A36 # <CJK>
+0x6A38 # <CJK>
+0x6A39 # <CJK>
+0x6A3A # <CJK>
+0x6A3D # <CJK>
+0x6A44 # <CJK>
+0x6A47 # <CJK>
+0x6A48 # <CJK>
+0x6A4B # <CJK>
+0x6A58 # <CJK>
+0x6A59 # <CJK>
+0x6A5F # <CJK>
+0x6A61 # <CJK>
+0x6A62 # <CJK>
+0x6A66 # <CJK>
+0x6A72 # <CJK>
+0x6A78 # <CJK>
+0x6A7F # <CJK>
+0x6A80 # <CJK>
+0x6A84 # <CJK>
+0x6A8D # <CJK>
+0x6A8E # <CJK>
+0x6A90 # <CJK>
+0x6A97 # <CJK>
+0x6A9C # <CJK>
+0x6AA0 # <CJK>
+0x6AA2 # <CJK>
+0x6AA3 # <CJK>
+0x6AAA # <CJK>
+0x6AAC # <CJK>
+0x6AAE # <CJK>
+0x6AB3 # <CJK>
+0x6AB8 # <CJK>
+0x6ABB # <CJK>
+0x6AC1 # <CJK>
+0x6AC2 # <CJK>
+0x6AC3 # <CJK>
+0x6AD1 # <CJK>
+0x6AD3 # <CJK>
+0x6ADA # <CJK>
+0x6ADB # <CJK>
+0x6ADE # <CJK>
+0x6ADF # <CJK>
+0x6AE8 # <CJK>
+0x6AEA # <CJK>
+0x6AFA # <CJK>
+0x6AFB # <CJK>
+0x6B04 # <CJK>
+0x6B05 # <CJK>
+0x6B0A # <CJK>
+0x6B12 # <CJK>
+0x6B16 # <CJK>
+0x6B1D # <CJK>
+0x6B1F # <CJK>
+0x6B20 # <CJK>
+0x6B21 # <CJK>
+0x6B23 # <CJK>
+0x6B27 # <CJK>
+0x6B32 # <CJK>
+0x6B37 # <CJK>
+0x6B38 # <CJK>
+0x6B39 # <CJK>
+0x6B3A # <CJK>
+0x6B3D # <CJK>
+0x6B3E # <CJK>
+0x6B43 # <CJK>
+0x6B47 # <CJK>
+0x6B49 # <CJK>
+0x6B4C # <CJK>
+0x6B4E # <CJK>
+0x6B50 # <CJK>
+0x6B53 # <CJK>
+0x6B54 # <CJK>
+0x6B59 # <CJK>
+0x6B5B # <CJK>
+0x6B5F # <CJK>
+0x6B61 # <CJK>
+0x6B62 # <CJK>
+0x6B63 # <CJK>
+0x6B64 # <CJK>
+0x6B66 # <CJK>
+0x6B69 # <CJK>
+0x6B6A # <CJK>
+0x6B6F # <CJK>
+0x6B73 # <CJK>
+0x6B74 # <CJK>
+0x6B78 # <CJK>
+0x6B79 # <CJK>
+0x6B7B # <CJK>
+0x6B7F # <CJK>
+0x6B80 # <CJK>
+0x6B83 # <CJK>
+0x6B84 # <CJK>
+0x6B86 # <CJK>
+0x6B89 # <CJK>
+0x6B8A # <CJK>
+0x6B8B # <CJK>
+0x6B8D # <CJK>
+0x6B95 # <CJK>
+0x6B96 # <CJK>
+0x6B98 # <CJK>
+0x6B9E # <CJK>
+0x6BA4 # <CJK>
+0x6BAA # <CJK>
+0x6BAB # <CJK>
+0x6BAF # <CJK>
+0x6BB1 # <CJK>
+0x6BB2 # <CJK>
+0x6BB3 # <CJK>
+0x6BB4 # <CJK>
+0x6BB5 # <CJK>
+0x6BB7 # <CJK>
+0x6BBA # <CJK>
+0x6BBB # <CJK>
+0x6BBC # <CJK>
+0x6BBF # <CJK>
+0x6BC0 # <CJK>
+0x6BC5 # <CJK>
+0x6BC6 # <CJK>
+0x6BCB # <CJK>
+0x6BCD # <CJK>
+0x6BCE # <CJK>
+0x6BD2 # <CJK>
+0x6BD3 # <CJK>
+0x6BD4 # <CJK>
+0x6BD8 # <CJK>
+0x6BDB # <CJK>
+0x6BDF # <CJK>
+0x6BEB # <CJK>
+0x6BEC # <CJK>
+0x6BEF # <CJK>
+0x6BF3 # <CJK>
+0x6C08 # <CJK>
+0x6C0F # <CJK>
+0x6C11 # <CJK>
+0x6C13 # <CJK>
+0x6C14 # <CJK>
+0x6C17 # <CJK>
+0x6C1B # <CJK>
+0x6C23 # <CJK>
+0x6C24 # <CJK>
+0x6C34 # <CJK>
+0x6C37 # <CJK>
+0x6C38 # <CJK>
+0x6C3E # <CJK>
+0x6C40 # <CJK>
+0x6C41 # <CJK>
+0x6C42 # <CJK>
+0x6C4E # <CJK>
+0x6C50 # <CJK>
+0x6C55 # <CJK>
+0x6C57 # <CJK>
+0x6C5A # <CJK>
+0x6C5D # <CJK>
+0x6C5E # <CJK>
+0x6C5F # <CJK>
+0x6C60 # <CJK>
+0x6C62 # <CJK>
+0x6C68 # <CJK>
+0x6C6A # <CJK>
+0x6C70 # <CJK>
+0x6C72 # <CJK>
+0x6C73 # <CJK>
+0x6C7A # <CJK>
+0x6C7D # <CJK>
+0x6C7E # <CJK>
+0x6C81 # <CJK>
+0x6C82 # <CJK>
+0x6C83 # <CJK>
+0x6C88 # <CJK>
+0x6C8C # <CJK>
+0x6C8D # <CJK>
+0x6C90 # <CJK>
+0x6C92 # <CJK>
+0x6C93 # <CJK>
+0x6C96 # <CJK>
+0x6C99 # <CJK>
+0x6C9A # <CJK>
+0x6C9B # <CJK>
+0x6CA1 # <CJK>
+0x6CA2 # <CJK>
+0x6CAB # <CJK>
+0x6CAE # <CJK>
+0x6CB1 # <CJK>
+0x6CB3 # <CJK>
+0x6CB8 # <CJK>
+0x6CB9 # <CJK>
+0x6CBA # <CJK>
+0x6CBB # <CJK>
+0x6CBC # <CJK>
+0x6CBD # <CJK>
+0x6CBE # <CJK>
+0x6CBF # <CJK>
+0x6CC1 # <CJK>
+0x6CC4 # <CJK>
+0x6CC5 # <CJK>
+0x6CC9 # <CJK>
+0x6CCA # <CJK>
+0x6CCC # <CJK>
+0x6CD3 # <CJK>
+0x6CD5 # <CJK>
+0x6CD7 # <CJK>
+0x6CD9 # <CJK>
+0x6CDB # <CJK>
+0x6CDD # <CJK>
+0x6CE1 # <CJK>
+0x6CE2 # <CJK>
+0x6CE3 # <CJK>
+0x6CE5 # <CJK>
+0x6CE8 # <CJK>
+0x6CEA # <CJK>
+0x6CEF # <CJK>
+0x6CF0 # <CJK>
+0x6CF1 # <CJK>
+0x6CF3 # <CJK>
+0x6D0B # <CJK>
+0x6D0C # <CJK>
+0x6D12 # <CJK>
+0x6D17 # <CJK>
+0x6D19 # <CJK>
+0x6D1B # <CJK>
+0x6D1E # <CJK>
+0x6D1F # <CJK>
+0x6D25 # <CJK>
+0x6D29 # <CJK>
+0x6D2A # <CJK>
+0x6D2B # <CJK>
+0x6D32 # <CJK>
+0x6D33 # <CJK>
+0x6D35 # <CJK>
+0x6D36 # <CJK>
+0x6D38 # <CJK>
+0x6D3B # <CJK>
+0x6D3D # <CJK>
+0x6D3E # <CJK>
+0x6D41 # <CJK>
+0x6D44 # <CJK>
+0x6D45 # <CJK>
+0x6D59 # <CJK>
+0x6D5A # <CJK>
+0x6D5C # <CJK>
+0x6D63 # <CJK>
+0x6D64 # <CJK>
+0x6D66 # <CJK>
+0x6D69 # <CJK>
+0x6D6A # <CJK>
+0x6D6C # <CJK>
+0x6D6E # <CJK>
+0x6D74 # <CJK>
+0x6D77 # <CJK>
+0x6D78 # <CJK>
+0x6D79 # <CJK>
+0x6D85 # <CJK>
+0x6D88 # <CJK>
+0x6D8C # <CJK>
+0x6D8E # <CJK>
+0x6D93 # <CJK>
+0x6D95 # <CJK>
+0x6D99 # <CJK>
+0x6D9B # <CJK>
+0x6D9C # <CJK>
+0x6DAF # <CJK>
+0x6DB2 # <CJK>
+0x6DB5 # <CJK>
+0x6DB8 # <CJK>
+0x6DBC # <CJK>
+0x6DC0 # <CJK>
+0x6DC5 # <CJK>
+0x6DC6 # <CJK>
+0x6DC7 # <CJK>
+0x6DCB # <CJK>
+0x6DCC # <CJK>
+0x6DD1 # <CJK>
+0x6DD2 # <CJK>
+0x6DD5 # <CJK>
+0x6DD8 # <CJK>
+0x6DD9 # <CJK>
+0x6DDE # <CJK>
+0x6DE1 # <CJK>
+0x6DE4 # <CJK>
+0x6DE6 # <CJK>
+0x6DE8 # <CJK>
+0x6DEA # <CJK>
+0x6DEB # <CJK>
+0x6DEC # <CJK>
+0x6DEE # <CJK>
+0x6DF1 # <CJK>
+0x6DF3 # <CJK>
+0x6DF5 # <CJK>
+0x6DF7 # <CJK>
+0x6DF9 # <CJK>
+0x6DFA # <CJK>
+0x6DFB # <CJK>
+0x6E05 # <CJK>
+0x6E07 # <CJK>
+0x6E08 # <CJK>
+0x6E09 # <CJK>
+0x6E0A # <CJK>
+0x6E0B # <CJK>
+0x6E13 # <CJK>
+0x6E15 # <CJK>
+0x6E19 # <CJK>
+0x6E1A # <CJK>
+0x6E1B # <CJK>
+0x6E1D # <CJK>
+0x6E1F # <CJK>
+0x6E20 # <CJK>
+0x6E21 # <CJK>
+0x6E23 # <CJK>
+0x6E24 # <CJK>
+0x6E25 # <CJK>
+0x6E26 # <CJK>
+0x6E29 # <CJK>
+0x6E2B # <CJK>
+0x6E2C # <CJK>
+0x6E2D # <CJK>
+0x6E2E # <CJK>
+0x6E2F # <CJK>
+0x6E38 # <CJK>
+0x6E3A # <CJK>
+0x6E3E # <CJK>
+0x6E43 # <CJK>
+0x6E4A # <CJK>
+0x6E4D # <CJK>
+0x6E4E # <CJK>
+0x6E56 # <CJK>
+0x6E58 # <CJK>
+0x6E5B # <CJK>
+0x6E5F # <CJK>
+0x6E67 # <CJK>
+0x6E6B # <CJK>
+0x6E6E # <CJK>
+0x6E6F # <CJK>
+0x6E72 # <CJK>
+0x6E76 # <CJK>
+0x6E7E # <CJK>
+0x6E7F # <CJK>
+0x6E80 # <CJK>
+0x6E82 # <CJK>
+0x6E8C # <CJK>
+0x6E8F # <CJK>
+0x6E90 # <CJK>
+0x6E96 # <CJK>
+0x6E98 # <CJK>
+0x6E9C # <CJK>
+0x6E9D # <CJK>
+0x6E9F # <CJK>
+0x6EA2 # <CJK>
+0x6EA5 # <CJK>
+0x6EAA # <CJK>
+0x6EAF # <CJK>
+0x6EB2 # <CJK>
+0x6EB6 # <CJK>
+0x6EB7 # <CJK>
+0x6EBA # <CJK>
+0x6EBD # <CJK>
+0x6EC2 # <CJK>
+0x6EC4 # <CJK>
+0x6EC5 # <CJK>
+0x6EC9 # <CJK>
+0x6ECB # <CJK>
+0x6ECC # <CJK>
+0x6ED1 # <CJK>
+0x6ED3 # <CJK>
+0x6ED4 # <CJK>
+0x6ED5 # <CJK>
+0x6EDD # <CJK>
+0x6EDE # <CJK>
+0x6EEC # <CJK>
+0x6EEF # <CJK>
+0x6EF2 # <CJK>
+0x6EF4 # <CJK>
+0x6EF7 # <CJK>
+0x6EF8 # <CJK>
+0x6EFE # <CJK>
+0x6EFF # <CJK>
+0x6F01 # <CJK>
+0x6F02 # <CJK>
+0x6F06 # <CJK>
+0x6F09 # <CJK>
+0x6F0F # <CJK>
+0x6F11 # <CJK>
+0x6F13 # <CJK>
+0x6F14 # <CJK>
+0x6F15 # <CJK>
+0x6F20 # <CJK>
+0x6F22 # <CJK>
+0x6F23 # <CJK>
+0x6F2B # <CJK>
+0x6F2C # <CJK>
+0x6F31 # <CJK>
+0x6F32 # <CJK>
+0x6F38 # <CJK>
+0x6F3E # <CJK>
+0x6F3F # <CJK>
+0x6F41 # <CJK>
+0x6F45 # <CJK>
+0x6F54 # <CJK>
+0x6F58 # <CJK>
+0x6F5B # <CJK>
+0x6F5C # <CJK>
+0x6F5F # <CJK>
+0x6F64 # <CJK>
+0x6F66 # <CJK>
+0x6F6D # <CJK>
+0x6F6E # <CJK>
+0x6F6F # <CJK>
+0x6F70 # <CJK>
+0x6F74 # <CJK>
+0x6F78 # <CJK>
+0x6F7A # <CJK>
+0x6F7C # <CJK>
+0x6F80 # <CJK>
+0x6F81 # <CJK>
+0x6F82 # <CJK>
+0x6F84 # <CJK>
+0x6F86 # <CJK>
+0x6F8E # <CJK>
+0x6F91 # <CJK>
+0x6F97 # <CJK>
+0x6FA1 # <CJK>
+0x6FA3 # <CJK>
+0x6FA4 # <CJK>
+0x6FAA # <CJK>
+0x6FB1 # <CJK>
+0x6FB3 # <CJK>
+0x6FB9 # <CJK>
+0x6FC0 # <CJK>
+0x6FC1 # <CJK>
+0x6FC2 # <CJK>
+0x6FC3 # <CJK>
+0x6FC6 # <CJK>
+0x6FD4 # <CJK>
+0x6FD5 # <CJK>
+0x6FD8 # <CJK>
+0x6FDB # <CJK>
+0x6FDF # <CJK>
+0x6FE0 # <CJK>
+0x6FE1 # <CJK>
+0x6FE4 # <CJK>
+0x6FEB # <CJK>
+0x6FEC # <CJK>
+0x6FEE # <CJK>
+0x6FEF # <CJK>
+0x6FF1 # <CJK>
+0x6FF3 # <CJK>
+0x6FF6 # <CJK>
+0x6FFA # <CJK>
+0x6FFE # <CJK>
+0x7001 # <CJK>
+0x7009 # <CJK>
+0x700B # <CJK>
+0x700F # <CJK>
+0x7011 # <CJK>
+0x7015 # <CJK>
+0x7018 # <CJK>
+0x701A # <CJK>
+0x701B # <CJK>
+0x701D # <CJK>
+0x701E # <CJK>
+0x701F # <CJK>
+0x7026 # <CJK>
+0x7027 # <CJK>
+0x702C # <CJK>
+0x7030 # <CJK>
+0x7032 # <CJK>
+0x703E # <CJK>
+0x704C # <CJK>
+0x7051 # <CJK>
+0x7058 # <CJK>
+0x7063 # <CJK>
+0x706B # <CJK>
+0x706F # <CJK>
+0x7070 # <CJK>
+0x7078 # <CJK>
+0x707C # <CJK>
+0x707D # <CJK>
+0x7089 # <CJK>
+0x708A # <CJK>
+0x708E # <CJK>
+0x7092 # <CJK>
+0x7099 # <CJK>
+0x70AC # <CJK>
+0x70AD # <CJK>
+0x70AE # <CJK>
+0x70AF # <CJK>
+0x70B3 # <CJK>
+0x70B8 # <CJK>
+0x70B9 # <CJK>
+0x70BA # <CJK>
+0x70C8 # <CJK>
+0x70CB # <CJK>
+0x70CF # <CJK>
+0x70D9 # <CJK>
+0x70DD # <CJK>
+0x70DF # <CJK>
+0x70F1 # <CJK>
+0x70F9 # <CJK>
+0x70FD # <CJK>
+0x7109 # <CJK>
+0x7114 # <CJK>
+0x7119 # <CJK>
+0x711A # <CJK>
+0x711C # <CJK>
+0x7121 # <CJK>
+0x7126 # <CJK>
+0x7136 # <CJK>
+0x713C # <CJK>
+0x7149 # <CJK>
+0x714C # <CJK>
+0x714E # <CJK>
+0x7155 # <CJK>
+0x7156 # <CJK>
+0x7159 # <CJK>
+0x7162 # <CJK>
+0x7164 # <CJK>
+0x7165 # <CJK>
+0x7166 # <CJK>
+0x7167 # <CJK>
+0x7169 # <CJK>
+0x716C # <CJK>
+0x716E # <CJK>
+0x717D # <CJK>
+0x7184 # <CJK>
+0x7188 # <CJK>
+0x718A # <CJK>
+0x718F # <CJK>
+0x7194 # <CJK>
+0x7195 # <CJK>
+#0x7199 # <CJK> # not in kochi fonts
+0x719F # <CJK>
+0x71A8 # <CJK>
+0x71AC # <CJK>
+0x71B1 # <CJK>
+0x71B9 # <CJK>
+0x71BE # <CJK>
+0x71C3 # <CJK>
+0x71C8 # <CJK>
+0x71C9 # <CJK>
+0x71CE # <CJK>
+0x71D0 # <CJK>
+0x71D2 # <CJK>
+0x71D4 # <CJK>
+0x71D5 # <CJK>
+0x71D7 # <CJK>
+0x71DF # <CJK>
+0x71E0 # <CJK>
+0x71E5 # <CJK>
+0x71E6 # <CJK>
+0x71E7 # <CJK>
+0x71EC # <CJK>
+0x71ED # <CJK>
+0x71EE # <CJK>
+0x71F5 # <CJK>
+0x71F9 # <CJK>
+0x71FB # <CJK>
+0x71FC # <CJK>
+0x71FF # <CJK>
+0x7206 # <CJK>
+0x720D # <CJK>
+0x7210 # <CJK>
+0x721B # <CJK>
+0x7228 # <CJK>
+0x722A # <CJK>
+0x722C # <CJK>
+0x722D # <CJK>
+0x7230 # <CJK>
+0x7232 # <CJK>
+0x7235 # <CJK>
+0x7236 # <CJK>
+0x723A # <CJK>
+0x723B # <CJK>
+0x723C # <CJK>
+0x723D # <CJK>
+0x723E # <CJK>
+0x723F # <CJK>
+0x7240 # <CJK>
+0x7246 # <CJK>
+0x7247 # <CJK>
+0x7248 # <CJK>
+0x724B # <CJK>
+0x724C # <CJK>
+0x7252 # <CJK>
+0x7258 # <CJK>
+0x7259 # <CJK>
+0x725B # <CJK>
+0x725D # <CJK>
+0x725F # <CJK>
+0x7261 # <CJK>
+0x7262 # <CJK>
+0x7267 # <CJK>
+0x7269 # <CJK>
+0x7272 # <CJK>
+0x7274 # <CJK>
+0x7279 # <CJK>
+0x727D # <CJK>
+0x727E # <CJK>
+0x7280 # <CJK>
+0x7281 # <CJK>
+0x7282 # <CJK>
+0x7287 # <CJK>
+0x7292 # <CJK>
+0x7296 # <CJK>
+0x72A0 # <CJK>
+0x72A2 # <CJK>
+0x72A7 # <CJK>
+0x72AC # <CJK>
+0x72AF # <CJK>
+0x72B2 # <CJK>
+0x72B6 # <CJK>
+0x72B9 # <CJK>
+0x72C2 # <CJK>
+0x72C3 # <CJK>
+0x72C4 # <CJK>
+0x72C6 # <CJK>
+0x72CE # <CJK>
+0x72D0 # <CJK>
+0x72D2 # <CJK>
+0x72D7 # <CJK>
+0x72D9 # <CJK>
+0x72DB # <CJK>
+0x72E0 # <CJK>
+0x72E1 # <CJK>
+0x72E2 # <CJK>
+0x72E9 # <CJK>
+0x72EC # <CJK>
+0x72ED # <CJK>
+0x72F7 # <CJK>
+0x72F8 # <CJK>
+0x72F9 # <CJK>
+0x72FC # <CJK>
+0x72FD # <CJK>
+0x730A # <CJK>
+0x7316 # <CJK>
+0x7317 # <CJK>
+0x731B # <CJK>
+0x731C # <CJK>
+0x731D # <CJK>
+0x731F # <CJK>
+0x7325 # <CJK>
+0x7329 # <CJK>
+0x732A # <CJK>
+0x732B # <CJK>
+0x732E # <CJK>
+0x732F # <CJK>
+0x7334 # <CJK>
+0x7336 # <CJK>
+0x7337 # <CJK>
+0x733E # <CJK>
+0x733F # <CJK>
+0x7344 # <CJK>
+0x7345 # <CJK>
+0x734E # <CJK>
+0x734F # <CJK>
+0x7357 # <CJK>
+0x7363 # <CJK>
+0x7368 # <CJK>
+0x736A # <CJK>
+0x7370 # <CJK>
+0x7372 # <CJK>
+0x7375 # <CJK>
+0x7378 # <CJK>
+0x737A # <CJK>
+0x737B # <CJK>
+0x7384 # <CJK>
+0x7387 # <CJK>
+0x7389 # <CJK>
+0x738B # <CJK>
+0x7396 # <CJK>
+0x73A9 # <CJK>
+0x73B2 # <CJK>
+0x73B3 # <CJK>
+0x73BB # <CJK>
+0x73C0 # <CJK>
+0x73C2 # <CJK>
+0x73C8 # <CJK>
+0x73CA # <CJK>
+0x73CD # <CJK>
+0x73CE # <CJK>
+0x73DE # <CJK>
+0x73E0 # <CJK>
+0x73E5 # <CJK>
+0x73EA # <CJK>
+0x73ED # <CJK>
+0x73EE # <CJK>
+0x73F1 # <CJK>
+0x73F8 # <CJK>
+0x73FE # <CJK>
+0x7403 # <CJK>
+0x7405 # <CJK>
+0x7406 # <CJK>
+0x7409 # <CJK>
+0x7422 # <CJK>
+0x7425 # <CJK>
+0x7432 # <CJK>
+0x7433 # <CJK>
+0x7434 # <CJK>
+0x7435 # <CJK>
+0x7436 # <CJK>
+0x743A # <CJK>
+0x743F # <CJK>
+0x7441 # <CJK>
+0x7455 # <CJK>
+0x7459 # <CJK>
+0x745A # <CJK>
+0x745B # <CJK>
+0x745C # <CJK>
+0x745E # <CJK>
+0x745F # <CJK>
+0x7460 # <CJK>
+0x7463 # <CJK>
+0x7464 # <CJK>
+0x7469 # <CJK>
+0x746A # <CJK>
+0x746F # <CJK>
+0x7470 # <CJK>
+0x7473 # <CJK>
+0x7476 # <CJK>
+0x747E # <CJK>
+0x7483 # <CJK>
+0x748B # <CJK>
+0x749E # <CJK>
+0x74A2 # <CJK>
+0x74A7 # <CJK>
+0x74B0 # <CJK>
+0x74BD # <CJK>
+0x74CA # <CJK>
+0x74CF # <CJK>
+0x74D4 # <CJK>
+0x74DC # <CJK>
+0x74E0 # <CJK>
+0x74E2 # <CJK>
+0x74E3 # <CJK>
+0x74E6 # <CJK>
+0x74E7 # <CJK>
+0x74E9 # <CJK>
+0x74EE # <CJK>
+0x74F0 # <CJK>
+0x74F1 # <CJK>
+0x74F2 # <CJK>
+0x74F6 # <CJK>
+0x74F7 # <CJK>
+0x74F8 # <CJK>
+0x7503 # <CJK>
+0x7504 # <CJK>
+0x7505 # <CJK>
+0x750C # <CJK>
+0x750D # <CJK>
+0x750E # <CJK>
+0x7511 # <CJK>
+0x7513 # <CJK>
+0x7515 # <CJK>
+0x7518 # <CJK>
+0x751A # <CJK>
+0x751C # <CJK>
+0x751E # <CJK>
+0x751F # <CJK>
+0x7523 # <CJK>
+0x7525 # <CJK>
+0x7526 # <CJK>
+0x7528 # <CJK>
+0x752B # <CJK>
+0x752C # <CJK>
+0x7530 # <CJK>
+0x7531 # <CJK>
+0x7532 # <CJK>
+0x7533 # <CJK>
+0x7537 # <CJK>
+0x7538 # <CJK>
+0x753A # <CJK>
+0x753B # <CJK>
+0x753C # <CJK>
+0x7544 # <CJK>
+0x7546 # <CJK>
+0x7549 # <CJK>
+0x754A # <CJK>
+0x754B # <CJK>
+0x754C # <CJK>
+0x754D # <CJK>
+0x754F # <CJK>
+0x7551 # <CJK>
+0x7554 # <CJK>
+0x7559 # <CJK>
+0x755A # <CJK>
+0x755B # <CJK>
+0x755C # <CJK>
+0x755D # <CJK>
+0x7560 # <CJK>
+0x7562 # <CJK>
+0x7564 # <CJK>
+0x7565 # <CJK>
+0x7566 # <CJK>
+0x7567 # <CJK>
+0x7569 # <CJK>
+0x756A # <CJK>
+0x756B # <CJK>
+0x756D # <CJK>
+0x7570 # <CJK>
+0x7573 # <CJK>
+0x7574 # <CJK>
+0x7576 # <CJK>
+0x7577 # <CJK>
+0x7578 # <CJK>
+0x757F # <CJK>
+0x7582 # <CJK>
+0x7586 # <CJK>
+0x7587 # <CJK>
+0x7589 # <CJK>
+0x758A # <CJK>
+0x758B # <CJK>
+0x758E # <CJK>
+0x758F # <CJK>
+0x7591 # <CJK>
+0x7594 # <CJK>
+0x759A # <CJK>
+0x759D # <CJK>
+0x75A3 # <CJK>
+0x75A5 # <CJK>
+0x75AB # <CJK>
+0x75B1 # <CJK>
+0x75B2 # <CJK>
+0x75B3 # <CJK>
+0x75B5 # <CJK>
+0x75B8 # <CJK>
+0x75B9 # <CJK>
+0x75BC # <CJK>
+0x75BD # <CJK>
+0x75BE # <CJK>
+0x75C2 # <CJK>
+0x75C3 # <CJK>
+0x75C5 # <CJK>
+0x75C7 # <CJK>
+0x75CA # <CJK>
+0x75CD # <CJK>
+0x75D2 # <CJK>
+0x75D4 # <CJK>
+0x75D5 # <CJK>
+0x75D8 # <CJK>
+0x75D9 # <CJK>
+0x75DB # <CJK>
+0x75DE # <CJK>
+0x75E2 # <CJK>
+0x75E3 # <CJK>
+0x75E9 # <CJK>
+0x75F0 # <CJK>
+0x75F2 # <CJK>
+0x75F3 # <CJK>
+0x75F4 # <CJK>
+0x75FA # <CJK>
+0x75FC # <CJK>
+0x75FE # <CJK>
+0x75FF # <CJK>
+0x7601 # <CJK>
+0x7609 # <CJK>
+0x760B # <CJK>
+0x760D # <CJK>
+0x761F # <CJK>
+0x7620 # <CJK>
+0x7621 # <CJK>
+0x7622 # <CJK>
+0x7624 # <CJK>
+0x7627 # <CJK>
+0x7630 # <CJK>
+0x7634 # <CJK>
+0x763B # <CJK>
+0x7642 # <CJK>
+0x7646 # <CJK>
+0x7647 # <CJK>
+0x7648 # <CJK>
+0x764C # <CJK>
+0x7652 # <CJK>
+0x7656 # <CJK>
+0x7658 # <CJK>
+0x765C # <CJK>
+0x7661 # <CJK>
+0x7662 # <CJK>
+0x7667 # <CJK>
+0x7668 # <CJK>
+0x7669 # <CJK>
+0x766A # <CJK>
+0x766C # <CJK>
+0x7670 # <CJK>
+0x7672 # <CJK>
+0x7676 # <CJK>
+0x7678 # <CJK>
+0x767A # <CJK>
+0x767B # <CJK>
+0x767C # <CJK>
+0x767D # <CJK>
+0x767E # <CJK>
+0x7680 # <CJK>
+0x7683 # <CJK>
+0x7684 # <CJK>
+0x7686 # <CJK>
+0x7687 # <CJK>
+0x7688 # <CJK>
+0x768B # <CJK>
+0x768E # <CJK>
+0x7690 # <CJK>
+0x7693 # <CJK>
+0x7696 # <CJK>
+0x7699 # <CJK>
+0x769A # <CJK>
+0x76AE # <CJK>
+0x76B0 # <CJK>
+0x76B4 # <CJK>
+0x76B7 # <CJK>
+0x76B8 # <CJK>
+0x76B9 # <CJK>
+0x76BA # <CJK>
+0x76BF # <CJK>
+0x76C2 # <CJK>
+0x76C3 # <CJK>
+0x76C6 # <CJK>
+0x76C8 # <CJK>
+0x76CA # <CJK>
+0x76CD # <CJK>
+0x76D2 # <CJK>
+0x76D6 # <CJK>
+0x76D7 # <CJK>
+0x76DB # <CJK>
+0x76DC # <CJK>
+0x76DE # <CJK>
+0x76DF # <CJK>
+0x76E1 # <CJK>
+0x76E3 # <CJK>
+0x76E4 # <CJK>
+0x76E5 # <CJK>
+0x76E7 # <CJK>
+0x76EA # <CJK>
+0x76EE # <CJK>
+0x76F2 # <CJK>
+0x76F4 # <CJK>
+0x76F8 # <CJK>
+0x76FB # <CJK>
+0x76FE # <CJK>
+0x7701 # <CJK>
+0x7704 # <CJK>
+0x7707 # <CJK>
+0x7708 # <CJK>
+0x7709 # <CJK>
+0x770B # <CJK>
+0x770C # <CJK>
+0x771B # <CJK>
+0x771E # <CJK>
+0x771F # <CJK>
+0x7720 # <CJK>
+0x7724 # <CJK>
+0x7725 # <CJK>
+0x7726 # <CJK>
+0x7729 # <CJK>
+0x7737 # <CJK>
+0x7738 # <CJK>
+0x773A # <CJK>
+0x773C # <CJK>
+0x7740 # <CJK>
+0x7747 # <CJK>
+0x775A # <CJK>
+0x775B # <CJK>
+0x7761 # <CJK>
+0x7763 # <CJK>
+0x7765 # <CJK>
+0x7766 # <CJK>
+0x7768 # <CJK>
+0x776B # <CJK>
+0x7779 # <CJK>
+0x777E # <CJK>
+0x777F # <CJK>
+0x778B # <CJK>
+0x778E # <CJK>
+0x7791 # <CJK>
+0x779E # <CJK>
+0x77A0 # <CJK>
+0x77A5 # <CJK>
+0x77AC # <CJK>
+0x77AD # <CJK>
+0x77B0 # <CJK>
+0x77B3 # <CJK>
+0x77B6 # <CJK>
+0x77B9 # <CJK>
+0x77BB # <CJK>
+0x77BC # <CJK>
+0x77BD # <CJK>
+0x77BF # <CJK>
+0x77C7 # <CJK>
+0x77CD # <CJK>
+0x77D7 # <CJK>
+0x77DA # <CJK>
+0x77DB # <CJK>
+0x77DC # <CJK>
+0x77E2 # <CJK>
+0x77E3 # <CJK>
+0x77E5 # <CJK>
+0x77E7 # <CJK>
+0x77E9 # <CJK>
+0x77ED # <CJK>
+0x77EE # <CJK>
+0x77EF # <CJK>
+0x77F3 # <CJK>
+0x77FC # <CJK>
+0x7802 # <CJK>
+0x780C # <CJK>
+0x7812 # <CJK>
+0x7814 # <CJK>
+0x7815 # <CJK>
+0x7820 # <CJK>
+0x7825 # <CJK>
+0x7826 # <CJK>
+0x7827 # <CJK>
+0x7832 # <CJK>
+0x7834 # <CJK>
+0x783A # <CJK>
+0x783F # <CJK>
+0x7845 # <CJK>
+0x785D # <CJK>
+0x786B # <CJK>
+0x786C # <CJK>
+0x786F # <CJK>
+0x7872 # <CJK>
+0x7874 # <CJK>
+0x787C # <CJK>
+0x7881 # <CJK>
+0x7886 # <CJK>
+0x7887 # <CJK>
+0x788C # <CJK>
+0x788D # <CJK>
+0x788E # <CJK>
+0x7891 # <CJK>
+0x7893 # <CJK>
+0x7895 # <CJK>
+0x7897 # <CJK>
+0x789A # <CJK>
+0x78A3 # <CJK>
+0x78A7 # <CJK>
+0x78A9 # <CJK>
+0x78AA # <CJK>
+0x78AF # <CJK>
+0x78B5 # <CJK>
+0x78BA # <CJK>
+0x78BC # <CJK>
+0x78BE # <CJK>
+0x78C1 # <CJK>
+0x78C5 # <CJK>
+0x78C6 # <CJK>
+0x78CA # <CJK>
+0x78CB # <CJK>
+0x78D0 # <CJK>
+0x78D1 # <CJK>
+0x78D4 # <CJK>
+0x78DA # <CJK>
+0x78E7 # <CJK>
+0x78E8 # <CJK>
+0x78EC # <CJK>
+0x78EF # <CJK>
+0x78F4 # <CJK>
+0x78FD # <CJK>
+0x7901 # <CJK>
+0x7907 # <CJK>
+0x790E # <CJK>
+0x7911 # <CJK>
+0x7912 # <CJK>
+0x7919 # <CJK>
+0x7926 # <CJK>
+0x792A # <CJK>
+0x792B # <CJK>
+0x792C # <CJK>
+0x793A # <CJK>
+0x793C # <CJK>
+0x793E # <CJK>
+0x7940 # <CJK>
+0x7941 # <CJK>
+0x7947 # <CJK>
+0x7948 # <CJK>
+0x7949 # <CJK>
+0x7950 # <CJK>
+0x7953 # <CJK>
+0x7955 # <CJK>
+0x7956 # <CJK>
+0x7957 # <CJK>
+0x795A # <CJK>
+0x795D # <CJK>
+0x795E # <CJK>
+0x795F # <CJK>
+0x7960 # <CJK>
+0x7962 # <CJK>
+0x7965 # <CJK>
+0x7968 # <CJK>
+0x796D # <CJK>
+0x7977 # <CJK>
+0x797A # <CJK>
+0x797F # <CJK>
+0x7980 # <CJK>
+0x7981 # <CJK>
+0x7984 # <CJK>
+0x7985 # <CJK>
+0x798A # <CJK>
+0x798D # <CJK>
+0x798E # <CJK>
+0x798F # <CJK>
+0x799D # <CJK>
+0x79A6 # <CJK>
+0x79A7 # <CJK>
+0x79AA # <CJK>
+0x79AE # <CJK>
+0x79B0 # <CJK>
+0x79B3 # <CJK>
+0x79B9 # <CJK>
+0x79BA # <CJK>
+0x79BD # <CJK>
+0x79BE # <CJK>
+0x79BF # <CJK>
+0x79C0 # <CJK>
+0x79C1 # <CJK>
+0x79C9 # <CJK>
+0x79CB # <CJK>
+0x79D1 # <CJK>
+0x79D2 # <CJK>
+0x79D5 # <CJK>
+0x79D8 # <CJK>
+0x79DF # <CJK>
+0x79E1 # <CJK>
+0x79E3 # <CJK>
+0x79E4 # <CJK>
+0x79E6 # <CJK>
+0x79E7 # <CJK>
+0x79E9 # <CJK>
+0x79EC # <CJK>
+0x79F0 # <CJK>
+0x79FB # <CJK>
+0x7A00 # <CJK>
+0x7A08 # <CJK>
+0x7A0B # <CJK>
+0x7A0D # <CJK>
+0x7A0E # <CJK>
+0x7A14 # <CJK>
+0x7A17 # <CJK>
+0x7A18 # <CJK>
+0x7A19 # <CJK>
+0x7A1A # <CJK>
+0x7A1C # <CJK>
+0x7A1F # <CJK>
+0x7A20 # <CJK>
+0x7A2E # <CJK>
+0x7A31 # <CJK>
+0x7A32 # <CJK>
+0x7A37 # <CJK>
+0x7A3B # <CJK>
+0x7A3C # <CJK>
+0x7A3D # <CJK>
+0x7A3E # <CJK>
+0x7A3F # <CJK>
+0x7A40 # <CJK>
+0x7A42 # <CJK>
+0x7A43 # <CJK>
+0x7A46 # <CJK>
+0x7A49 # <CJK>
+0x7A4D # <CJK>
+0x7A4E # <CJK>
+0x7A4F # <CJK>
+0x7A50 # <CJK>
+0x7A57 # <CJK>
+0x7A61 # <CJK>
+0x7A62 # <CJK>
+0x7A63 # <CJK>
+0x7A69 # <CJK>
+0x7A6B # <CJK>
+0x7A70 # <CJK>
+0x7A74 # <CJK>
+0x7A76 # <CJK>
+0x7A79 # <CJK>
+0x7A7A # <CJK>
+0x7A7D # <CJK>
+0x7A7F # <CJK>
+0x7A81 # <CJK>
+0x7A83 # <CJK>
+0x7A84 # <CJK>
+0x7A88 # <CJK>
+0x7A92 # <CJK>
+0x7A93 # <CJK>
+0x7A95 # <CJK>
+0x7A96 # <CJK>
+0x7A97 # <CJK>
+0x7A98 # <CJK>
+0x7A9F # <CJK>
+0x7AA9 # <CJK>
+0x7AAA # <CJK>
+0x7AAE # <CJK>
+0x7AAF # <CJK>
+0x7AB0 # <CJK>
+0x7AB6 # <CJK>
+0x7ABA # <CJK>
+0x7ABF # <CJK>
+0x7AC3 # <CJK>
+0x7AC4 # <CJK>
+0x7AC5 # <CJK>
+0x7AC7 # <CJK>
+0x7AC8 # <CJK>
+0x7ACA # <CJK>
+0x7ACB # <CJK>
+0x7ACD # <CJK>
+0x7ACF # <CJK>
+0x7AD2 # <CJK>
+0x7AD3 # <CJK>
+0x7AD5 # <CJK>
+0x7AD9 # <CJK>
+0x7ADA # <CJK>
+0x7ADC # <CJK>
+0x7ADD # <CJK>
+0x7ADF # <CJK>
+0x7AE0 # <CJK>
+0x7AE1 # <CJK>
+0x7AE2 # <CJK>
+0x7AE3 # <CJK>
+0x7AE5 # <CJK>
+0x7AE6 # <CJK>
+0x7AEA # <CJK>
+0x7AED # <CJK>
+0x7AEF # <CJK>
+0x7AF0 # <CJK>
+0x7AF6 # <CJK>
+0x7AF8 # <CJK>
+0x7AF9 # <CJK>
+0x7AFA # <CJK>
+0x7AFF # <CJK>
+0x7B02 # <CJK>
+0x7B04 # <CJK>
+0x7B06 # <CJK>
+0x7B08 # <CJK>
+0x7B0A # <CJK>
+0x7B0B # <CJK>
+0x7B0F # <CJK>
+0x7B11 # <CJK>
+0x7B18 # <CJK>
+0x7B19 # <CJK>
+0x7B1B # <CJK>
+0x7B1E # <CJK>
+0x7B20 # <CJK>
+0x7B25 # <CJK>
+0x7B26 # <CJK>
+0x7B28 # <CJK>
+0x7B2C # <CJK>
+0x7B33 # <CJK>
+0x7B35 # <CJK>
+0x7B36 # <CJK>
+0x7B39 # <CJK>
+0x7B45 # <CJK>
+0x7B46 # <CJK>
+0x7B48 # <CJK>
+0x7B49 # <CJK>
+0x7B4B # <CJK>
+0x7B4C # <CJK>
+0x7B4D # <CJK>
+0x7B4F # <CJK>
+0x7B50 # <CJK>
+0x7B51 # <CJK>
+0x7B52 # <CJK>
+0x7B54 # <CJK>
+0x7B56 # <CJK>
+0x7B5D # <CJK>
+0x7B65 # <CJK>
+0x7B67 # <CJK>
+0x7B6C # <CJK>
+0x7B6E # <CJK>
+0x7B70 # <CJK>
+0x7B71 # <CJK>
+0x7B74 # <CJK>
+0x7B75 # <CJK>
+0x7B7A # <CJK>
+0x7B86 # <CJK>
+0x7B87 # <CJK>
+0x7B8B # <CJK>
+0x7B8D # <CJK>
+0x7B8F # <CJK>
+0x7B92 # <CJK>
+0x7B94 # <CJK>
+0x7B95 # <CJK>
+0x7B97 # <CJK>
+0x7B98 # <CJK>
+0x7B99 # <CJK>
+0x7B9A # <CJK>
+0x7B9C # <CJK>
+0x7B9D # <CJK>
+0x7B9F # <CJK>
+0x7BA1 # <CJK>
+0x7BAA # <CJK>
+0x7BAD # <CJK>
+0x7BB1 # <CJK>
+0x7BB4 # <CJK>
+0x7BB8 # <CJK>
+0x7BC0 # <CJK>
+0x7BC1 # <CJK>
+0x7BC4 # <CJK>
+0x7BC6 # <CJK>
+0x7BC7 # <CJK>
+0x7BC9 # <CJK>
+0x7BCB # <CJK>
+0x7BCC # <CJK>
+0x7BCF # <CJK>
+0x7BDD # <CJK>
+0x7BE0 # <CJK>
+0x7BE4 # <CJK>
+0x7BE5 # <CJK>
+0x7BE6 # <CJK>
+0x7BE9 # <CJK>
+0x7BED # <CJK>
+0x7BF3 # <CJK>
+0x7BF6 # <CJK>
+0x7BF7 # <CJK>
+0x7C00 # <CJK>
+0x7C07 # <CJK>
+0x7C0D # <CJK>
+0x7C11 # <CJK>
+0x7C12 # <CJK>
+0x7C13 # <CJK>
+0x7C14 # <CJK>
+0x7C17 # <CJK>
+0x7C1F # <CJK>
+0x7C21 # <CJK>
+0x7C23 # <CJK>
+0x7C27 # <CJK>
+0x7C2A # <CJK>
+0x7C2B # <CJK>
+0x7C37 # <CJK>
+0x7C38 # <CJK>
+0x7C3D # <CJK>
+0x7C3E # <CJK>
+0x7C3F # <CJK>
+0x7C40 # <CJK>
+0x7C43 # <CJK>
+0x7C4C # <CJK>
+0x7C4D # <CJK>
+0x7C4F # <CJK>
+0x7C50 # <CJK>
+0x7C54 # <CJK>
+0x7C56 # <CJK>
+0x7C58 # <CJK>
+0x7C5F # <CJK>
+0x7C60 # <CJK>
+0x7C64 # <CJK>
+0x7C65 # <CJK>
+0x7C6C # <CJK>
+0x7C73 # <CJK>
+0x7C75 # <CJK>
+0x7C7E # <CJK>
+0x7C81 # <CJK>
+0x7C82 # <CJK>
+0x7C83 # <CJK>
+0x7C89 # <CJK>
+0x7C8B # <CJK>
+0x7C8D # <CJK>
+0x7C90 # <CJK>
+0x7C92 # <CJK>
+0x7C95 # <CJK>
+0x7C97 # <CJK>
+0x7C98 # <CJK>
+0x7C9B # <CJK>
+0x7C9F # <CJK>
+0x7CA1 # <CJK>
+0x7CA2 # <CJK>
+0x7CA4 # <CJK>
+0x7CA5 # <CJK>
+0x7CA7 # <CJK>
+0x7CA8 # <CJK>
+0x7CAB # <CJK>
+0x7CAD # <CJK>
+0x7CAE # <CJK>
+0x7CB1 # <CJK>
+0x7CB2 # <CJK>
+0x7CB3 # <CJK>
+0x7CB9 # <CJK>
+0x7CBD # <CJK>
+0x7CBE # <CJK>
+0x7CC0 # <CJK>
+0x7CC2 # <CJK>
+0x7CC5 # <CJK>
+0x7CCA # <CJK>
+0x7CCE # <CJK>
+0x7CD2 # <CJK>
+0x7CD6 # <CJK>
+0x7CD8 # <CJK>
+0x7CDC # <CJK>
+0x7CDE # <CJK>
+0x7CDF # <CJK>
+0x7CE0 # <CJK>
+0x7CE2 # <CJK>
+0x7CE7 # <CJK>
+0x7CEF # <CJK>
+0x7CF2 # <CJK>
+0x7CF4 # <CJK>
+0x7CF6 # <CJK>
+0x7CF8 # <CJK>
+0x7CFA # <CJK>
+0x7CFB # <CJK>
+0x7CFE # <CJK>
+0x7D00 # <CJK>
+0x7D02 # <CJK>
+0x7D04 # <CJK>
+0x7D05 # <CJK>
+0x7D06 # <CJK>
+0x7D0A # <CJK>
+0x7D0B # <CJK>
+0x7D0D # <CJK>
+0x7D10 # <CJK>
+0x7D14 # <CJK>
+0x7D15 # <CJK>
+0x7D17 # <CJK>
+0x7D18 # <CJK>
+0x7D19 # <CJK>
+0x7D1A # <CJK>
+0x7D1B # <CJK>
+0x7D1C # <CJK>
+0x7D20 # <CJK>
+0x7D21 # <CJK>
+0x7D22 # <CJK>
+0x7D2B # <CJK>
+0x7D2C # <CJK>
+0x7D2E # <CJK>
+0x7D2F # <CJK>
+0x7D30 # <CJK>
+0x7D32 # <CJK>
+0x7D33 # <CJK>
+0x7D35 # <CJK>
+0x7D39 # <CJK>
+0x7D3A # <CJK>
+0x7D3F # <CJK>
+0x7D42 # <CJK>
+0x7D43 # <CJK>
+0x7D44 # <CJK>
+0x7D45 # <CJK>
+0x7D46 # <CJK>
+0x7D4B # <CJK>
+0x7D4C # <CJK>
+0x7D4E # <CJK>
+0x7D4F # <CJK>
+0x7D50 # <CJK>
+0x7D56 # <CJK>
+0x7D5B # <CJK>
+0x7D5E # <CJK>
+0x7D61 # <CJK>
+0x7D62 # <CJK>
+0x7D63 # <CJK>
+0x7D66 # <CJK>
+0x7D68 # <CJK>
+0x7D6E # <CJK>
+0x7D71 # <CJK>
+0x7D72 # <CJK>
+0x7D73 # <CJK>
+0x7D75 # <CJK>
+0x7D76 # <CJK>
+0x7D79 # <CJK>
+0x7D7D # <CJK>
+0x7D89 # <CJK>
+0x7D8F # <CJK>
+0x7D93 # <CJK>
+0x7D99 # <CJK>
+0x7D9A # <CJK>
+0x7D9B # <CJK>
+0x7D9C # <CJK>
+0x7D9F # <CJK>
+0x7DA2 # <CJK>
+0x7DA3 # <CJK>
+0x7DAB # <CJK>
+0x7DAC # <CJK>
+0x7DAD # <CJK>
+0x7DAE # <CJK>
+0x7DAF # <CJK>
+0x7DB0 # <CJK>
+0x7DB1 # <CJK>
+0x7DB2 # <CJK>
+0x7DB4 # <CJK>
+0x7DB5 # <CJK>
+0x7DB8 # <CJK>
+0x7DBA # <CJK>
+0x7DBB # <CJK>
+0x7DBD # <CJK>
+0x7DBE # <CJK>
+0x7DBF # <CJK>
+0x7DC7 # <CJK>
+0x7DCA # <CJK>
+0x7DCB # <CJK>
+0x7DCF # <CJK>
+0x7DD1 # <CJK>
+0x7DD2 # <CJK>
+0x7DD5 # <CJK>
+0x7DD8 # <CJK>
+0x7DDA # <CJK>
+0x7DDC # <CJK>
+0x7DDD # <CJK>
+0x7DDE # <CJK>
+0x7DE0 # <CJK>
+0x7DE1 # <CJK>
+0x7DE4 # <CJK>
+0x7DE8 # <CJK>
+0x7DE9 # <CJK>
+0x7DEC # <CJK>
+0x7DEF # <CJK>
+0x7DF2 # <CJK>
+0x7DF4 # <CJK>
+0x7DFB # <CJK>
+0x7E01 # <CJK>
+0x7E04 # <CJK>
+0x7E05 # <CJK>
+0x7E09 # <CJK>
+0x7E0A # <CJK>
+0x7E0B # <CJK>
+0x7E12 # <CJK>
+0x7E1B # <CJK>
+0x7E1E # <CJK>
+0x7E1F # <CJK>
+0x7E21 # <CJK>
+0x7E22 # <CJK>
+0x7E23 # <CJK>
+0x7E26 # <CJK>
+0x7E2B # <CJK>
+0x7E2E # <CJK>
+0x7E31 # <CJK>
+0x7E32 # <CJK>
+0x7E35 # <CJK>
+0x7E37 # <CJK>
+0x7E39 # <CJK>
+0x7E3A # <CJK>
+0x7E3B # <CJK>
+0x7E3D # <CJK>
+0x7E3E # <CJK>
+0x7E41 # <CJK>
+0x7E43 # <CJK>
+0x7E46 # <CJK>
+0x7E4A # <CJK>
+0x7E4B # <CJK>
+0x7E4D # <CJK>
+0x7E54 # <CJK>
+0x7E55 # <CJK>
+0x7E56 # <CJK>
+0x7E59 # <CJK>
+0x7E5A # <CJK>
+0x7E5D # <CJK>
+0x7E5E # <CJK>
+0x7E66 # <CJK>
+0x7E67 # <CJK>
+0x7E69 # <CJK>
+0x7E6A # <CJK>
+0x7E6D # <CJK>
+0x7E70 # <CJK>
+0x7E79 # <CJK>
+0x7E7B # <CJK>
+0x7E7C # <CJK>
+0x7E7D # <CJK>
+0x7E7F # <CJK>
+0x7E82 # <CJK>
+0x7E83 # <CJK>
+0x7E88 # <CJK>
+0x7E89 # <CJK>
+0x7E8C # <CJK>
+0x7E8E # <CJK>
+0x7E8F # <CJK>
+0x7E90 # <CJK>
+0x7E92 # <CJK>
+0x7E93 # <CJK>
+0x7E94 # <CJK>
+0x7E96 # <CJK>
+0x7E9B # <CJK>
+0x7E9C # <CJK>
+0x7F36 # <CJK>
+0x7F38 # <CJK>
+0x7F3A # <CJK>
+0x7F45 # <CJK>
+0x7F4C # <CJK>
+0x7F4D # <CJK>
+0x7F4E # <CJK>
+0x7F50 # <CJK>
+0x7F51 # <CJK>
+0x7F54 # <CJK>
+0x7F55 # <CJK>
+0x7F58 # <CJK>
+0x7F5F # <CJK>
+0x7F60 # <CJK>
+0x7F67 # <CJK>
+0x7F68 # <CJK>
+0x7F69 # <CJK>
+0x7F6A # <CJK>
+0x7F6B # <CJK>
+0x7F6E # <CJK>
+0x7F70 # <CJK>
+0x7F72 # <CJK>
+0x7F75 # <CJK>
+0x7F77 # <CJK>
+0x7F78 # <CJK>
+0x7F79 # <CJK>
+0x7F82 # <CJK>
+0x7F83 # <CJK>
+0x7F85 # <CJK>
+0x7F86 # <CJK>
+0x7F87 # <CJK>
+0x7F88 # <CJK>
+0x7F8A # <CJK>
+0x7F8C # <CJK>
+0x7F8E # <CJK>
+0x7F94 # <CJK>
+0x7F9A # <CJK>
+0x7F9D # <CJK>
+0x7F9E # <CJK>
+0x7FA3 # <CJK>
+0x7FA4 # <CJK>
+0x7FA8 # <CJK>
+0x7FA9 # <CJK>
+0x7FAE # <CJK>
+0x7FAF # <CJK>
+0x7FB2 # <CJK>
+0x7FB6 # <CJK>
+0x7FB8 # <CJK>
+0x7FB9 # <CJK>
+0x7FBD # <CJK>
+0x7FC1 # <CJK>
+0x7FC5 # <CJK>
+0x7FC6 # <CJK>
+0x7FCA # <CJK>
+0x7FCC # <CJK>
+0x7FD2 # <CJK>
+0x7FD4 # <CJK>
+0x7FD5 # <CJK>
+0x7FE0 # <CJK>
+0x7FE1 # <CJK>
+0x7FE6 # <CJK>
+0x7FE9 # <CJK>
+0x7FEB # <CJK>
+0x7FF0 # <CJK>
+0x7FF3 # <CJK>
+0x7FF9 # <CJK>
+0x7FFB # <CJK>
+0x7FFC # <CJK>
+0x8000 # <CJK>
+0x8001 # <CJK>
+0x8003 # <CJK>
+0x8004 # <CJK>
+0x8005 # <CJK>
+0x8006 # <CJK>
+0x800B # <CJK>
+0x800C # <CJK>
+0x8010 # <CJK>
+0x8012 # <CJK>
+0x8015 # <CJK>
+0x8017 # <CJK>
+0x8018 # <CJK>
+0x8019 # <CJK>
+0x801C # <CJK>
+0x8021 # <CJK>
+0x8028 # <CJK>
+0x8033 # <CJK>
+0x8036 # <CJK>
+0x803B # <CJK>
+0x803D # <CJK>
+0x803F # <CJK>
+0x8046 # <CJK>
+0x804A # <CJK>
+0x8052 # <CJK>
+0x8056 # <CJK>
+0x8058 # <CJK>
+0x805A # <CJK>
+0x805E # <CJK>
+0x805F # <CJK>
+0x8061 # <CJK>
+0x8062 # <CJK>
+0x8068 # <CJK>
+0x806F # <CJK>
+0x8070 # <CJK>
+0x8072 # <CJK>
+0x8073 # <CJK>
+0x8074 # <CJK>
+0x8076 # <CJK>
+0x8077 # <CJK>
+0x8079 # <CJK>
+0x807D # <CJK>
+0x807E # <CJK>
+0x807F # <CJK>
+0x8084 # <CJK>
+0x8085 # <CJK>
+0x8086 # <CJK>
+0x8087 # <CJK>
+0x8089 # <CJK>
+0x808B # <CJK>
+0x808C # <CJK>
+0x8093 # <CJK>
+0x8096 # <CJK>
+0x8098 # <CJK>
+0x809A # <CJK>
+0x809B # <CJK>
+0x809D # <CJK>
+0x80A1 # <CJK>
+0x80A2 # <CJK>
+0x80A5 # <CJK>
+0x80A9 # <CJK>
+0x80AA # <CJK>
+0x80AC # <CJK>
+0x80AD # <CJK>
+0x80AF # <CJK>
+0x80B1 # <CJK>
+0x80B2 # <CJK>
+0x80B4 # <CJK>
+0x80BA # <CJK>
+0x80C3 # <CJK>
+0x80C4 # <CJK>
+0x80C6 # <CJK>
+0x80CC # <CJK>
+0x80CE # <CJK>
+0x80D6 # <CJK>
+0x80D9 # <CJK>
+0x80DA # <CJK>
+0x80DB # <CJK>
+0x80DD # <CJK>
+0x80DE # <CJK>
+0x80E1 # <CJK>
+0x80E4 # <CJK>
+0x80E5 # <CJK>
+0x80EF # <CJK>
+0x80F1 # <CJK>
+0x80F4 # <CJK>
+0x80F8 # <CJK>
+0x80FC # <CJK>
+0x80FD # <CJK>
+0x8102 # <CJK>
+0x8105 # <CJK>
+0x8106 # <CJK>
+0x8107 # <CJK>
+0x8108 # <CJK>
+0x8109 # <CJK>
+0x810A # <CJK>
+0x811A # <CJK>
+0x811B # <CJK>
+0x8123 # <CJK>
+0x8129 # <CJK>
+0x812F # <CJK>
+0x8131 # <CJK>
+0x8133 # <CJK>
+0x8139 # <CJK>
+0x813E # <CJK>
+0x8146 # <CJK>
+0x814B # <CJK>
+0x814E # <CJK>
+0x8150 # <CJK>
+0x8151 # <CJK>
+0x8153 # <CJK>
+0x8154 # <CJK>
+0x8155 # <CJK>
+0x815F # <CJK>
+0x8165 # <CJK>
+0x8166 # <CJK>
+0x816B # <CJK>
+0x816E # <CJK>
+0x8170 # <CJK>
+0x8171 # <CJK>
+0x8174 # <CJK>
+0x8178 # <CJK>
+0x8179 # <CJK>
+0x817A # <CJK>
+0x817F # <CJK>
+0x8180 # <CJK>
+0x8182 # <CJK>
+0x8183 # <CJK>
+0x8188 # <CJK>
+0x818A # <CJK>
+0x818F # <CJK>
+0x8193 # <CJK>
+0x8195 # <CJK>
+0x819A # <CJK>
+0x819C # <CJK>
+0x819D # <CJK>
+0x81A0 # <CJK>
+0x81A3 # <CJK>
+0x81A4 # <CJK>
+0x81A8 # <CJK>
+0x81A9 # <CJK>
+0x81B0 # <CJK>
+0x81B3 # <CJK>
+0x81B5 # <CJK>
+0x81B8 # <CJK>
+0x81BA # <CJK>
+0x81BD # <CJK>
+0x81BE # <CJK>
+0x81BF # <CJK>
+0x81C0 # <CJK>
+0x81C2 # <CJK>
+0x81C6 # <CJK>
+0x81C8 # <CJK>
+0x81C9 # <CJK>
+0x81CD # <CJK>
+0x81D1 # <CJK>
+0x81D3 # <CJK>
+0x81D8 # <CJK>
+0x81D9 # <CJK>
+0x81DA # <CJK>
+0x81DF # <CJK>
+0x81E0 # <CJK>
+0x81E3 # <CJK>
+0x81E5 # <CJK>
+0x81E7 # <CJK>
+0x81E8 # <CJK>
+0x81EA # <CJK>
+0x81ED # <CJK>
+0x81F3 # <CJK>
+0x81F4 # <CJK>
+0x81FA # <CJK>
+0x81FB # <CJK>
+0x81FC # <CJK>
+0x81FE # <CJK>
+0x8201 # <CJK>
+0x8202 # <CJK>
+0x8205 # <CJK>
+0x8207 # <CJK>
+0x8208 # <CJK>
+0x8209 # <CJK>
+0x820A # <CJK>
+0x820C # <CJK>
+0x820D # <CJK>
+0x820E # <CJK>
+0x8210 # <CJK>
+0x8212 # <CJK>
+0x8216 # <CJK>
+0x8217 # <CJK>
+0x8218 # <CJK>
+0x821B # <CJK>
+0x821C # <CJK>
+0x821E # <CJK>
+0x821F # <CJK>
+0x8229 # <CJK>
+0x822A # <CJK>
+0x822B # <CJK>
+0x822C # <CJK>
+0x822E # <CJK>
+0x8233 # <CJK>
+0x8235 # <CJK>
+0x8236 # <CJK>
+0x8237 # <CJK>
+0x8238 # <CJK>
+0x8239 # <CJK>
+0x8240 # <CJK>
+0x8247 # <CJK>
+0x8258 # <CJK>
+0x8259 # <CJK>
+0x825A # <CJK>
+0x825D # <CJK>
+0x825F # <CJK>
+0x8262 # <CJK>
+0x8264 # <CJK>
+0x8266 # <CJK>
+0x8268 # <CJK>
+0x826A # <CJK>
+0x826B # <CJK>
+0x826E # <CJK>
+0x826F # <CJK>
+0x8271 # <CJK>
+0x8272 # <CJK>
+0x8276 # <CJK>
+0x8277 # <CJK>
+0x8278 # <CJK>
+0x827E # <CJK>
+0x828B # <CJK>
+0x828D # <CJK>
+0x8292 # <CJK>
+0x8299 # <CJK>
+0x829D # <CJK>
+0x829F # <CJK>
+0x82A5 # <CJK>
+0x82A6 # <CJK>
+0x82AB # <CJK>
+0x82AC # <CJK>
+0x82AD # <CJK>
+0x82AF # <CJK>
+0x82B1 # <CJK>
+0x82B3 # <CJK>
+0x82B8 # <CJK>
+0x82B9 # <CJK>
+0x82BB # <CJK>
+0x82BD # <CJK>
+0x82C5 # <CJK>
+0x82D1 # <CJK>
+0x82D2 # <CJK>
+0x82D3 # <CJK>
+0x82D4 # <CJK>
+0x82D7 # <CJK>
+0x82D9 # <CJK>
+0x82DB # <CJK>
+0x82DC # <CJK>
+0x82DE # <CJK>
+0x82DF # <CJK>
+0x82E1 # <CJK>
+0x82E3 # <CJK>
+0x82E5 # <CJK>
+0x82E6 # <CJK>
+0x82E7 # <CJK>
+0x82EB # <CJK>
+0x82F1 # <CJK>
+0x82F3 # <CJK>
+0x82F4 # <CJK>
+0x82F9 # <CJK>
+0x82FA # <CJK>
+0x82FB # <CJK>
+0x8302 # <CJK>
+0x8303 # <CJK>
+0x8304 # <CJK>
+0x8305 # <CJK>
+0x8306 # <CJK>
+0x8309 # <CJK>
+0x830E # <CJK>
+0x8316 # <CJK>
+0x8317 # <CJK>
+0x8318 # <CJK>
+0x831C # <CJK>
+0x8323 # <CJK>
+0x8328 # <CJK>
+0x832B # <CJK>
+0x832F # <CJK>
+0x8331 # <CJK>
+0x8332 # <CJK>
+0x8334 # <CJK>
+0x8335 # <CJK>
+0x8336 # <CJK>
+0x8338 # <CJK>
+0x8339 # <CJK>
+0x8340 # <CJK>
+0x8345 # <CJK>
+0x8349 # <CJK>
+0x834A # <CJK>
+0x834F # <CJK>
+0x8350 # <CJK>
+0x8352 # <CJK>
+0x8358 # <CJK>
+0x8373 # <CJK>
+0x8375 # <CJK>
+0x8377 # <CJK>
+0x837B # <CJK>
+0x837C # <CJK>
+0x8385 # <CJK>
+0x8387 # <CJK>
+0x8389 # <CJK>
+0x838A # <CJK>
+0x838E # <CJK>
+0x8393 # <CJK>
+0x8396 # <CJK>
+0x839A # <CJK>
+0x839E # <CJK>
+0x839F # <CJK>
+0x83A0 # <CJK>
+0x83A2 # <CJK>
+0x83A8 # <CJK>
+0x83AA # <CJK>
+0x83AB # <CJK>
+0x83B1 # <CJK>
+0x83B5 # <CJK>
+0x83BD # <CJK>
+0x83C1 # <CJK>
+0x83C5 # <CJK>
+0x83CA # <CJK>
+0x83CC # <CJK>
+0x83CE # <CJK>
+0x83D3 # <CJK>
+0x83D6 # <CJK>
+0x83D8 # <CJK>
+0x83DC # <CJK>
+0x83DF # <CJK>
+0x83E0 # <CJK>
+0x83E9 # <CJK>
+0x83EB # <CJK>
+0x83EF # <CJK>
+0x83F0 # <CJK>
+0x83F1 # <CJK>
+0x83F2 # <CJK>
+0x83F4 # <CJK>
+0x83F7 # <CJK>
+0x83FB # <CJK>
+0x83FD # <CJK>
+0x8403 # <CJK>
+0x8404 # <CJK>
+0x8407 # <CJK>
+0x840B # <CJK>
+0x840C # <CJK>
+0x840D # <CJK>
+0x840E # <CJK>
+0x8413 # <CJK>
+0x8420 # <CJK>
+0x8422 # <CJK>
+0x8429 # <CJK>
+0x842A # <CJK>
+0x842C # <CJK>
+0x8431 # <CJK>
+0x8435 # <CJK>
+0x8438 # <CJK>
+0x843C # <CJK>
+0x843D # <CJK>
+0x8446 # <CJK>
+0x8449 # <CJK>
+0x844E # <CJK>
+0x8457 # <CJK>
+0x845B # <CJK>
+0x8461 # <CJK>
+0x8462 # <CJK>
+0x8463 # <CJK>
+0x8466 # <CJK>
+0x8469 # <CJK>
+0x846B # <CJK>
+0x846C # <CJK>
+0x846D # <CJK>
+0x846E # <CJK>
+0x846F # <CJK>
+0x8471 # <CJK>
+0x8475 # <CJK>
+0x8477 # <CJK>
+0x8479 # <CJK>
+0x847A # <CJK>
+0x8482 # <CJK>
+0x8484 # <CJK>
+0x848B # <CJK>
+0x8490 # <CJK>
+0x8494 # <CJK>
+0x8499 # <CJK>
+0x849C # <CJK>
+0x849F # <CJK>
+0x84A1 # <CJK>
+0x84AD # <CJK>
+0x84B2 # <CJK>
+0x84B8 # <CJK>
+0x84B9 # <CJK>
+0x84BB # <CJK>
+0x84BC # <CJK>
+0x84BF # <CJK>
+0x84C1 # <CJK>
+0x84C4 # <CJK>
+0x84C6 # <CJK>
+0x84C9 # <CJK>
+0x84CA # <CJK>
+0x84CB # <CJK>
+0x84CD # <CJK>
+0x84D0 # <CJK>
+0x84D1 # <CJK>
+0x84D6 # <CJK>
+0x84D9 # <CJK>
+0x84DA # <CJK>
+0x84EC # <CJK>
+0x84EE # <CJK>
+0x84F4 # <CJK>
+0x84FC # <CJK>
+0x84FF # <CJK>
+0x8500 # <CJK>
+0x8506 # <CJK>
+0x8511 # <CJK>
+0x8513 # <CJK>
+0x8514 # <CJK>
+0x8515 # <CJK>
+0x8517 # <CJK>
+0x8518 # <CJK>
+0x851A # <CJK>
+0x851F # <CJK>
+0x8521 # <CJK>
+0x8526 # <CJK>
+0x852C # <CJK>
+0x852D # <CJK>
+0x8535 # <CJK>
+0x853D # <CJK>
+0x8540 # <CJK>
+0x8541 # <CJK>
+0x8543 # <CJK>
+0x8548 # <CJK>
+0x8549 # <CJK>
+0x854A # <CJK>
+0x854B # <CJK>
+0x854E # <CJK>
+0x8555 # <CJK>
+0x8557 # <CJK>
+0x8558 # <CJK>
+0x855A # <CJK>
+0x8563 # <CJK>
+0x8568 # <CJK>
+0x8569 # <CJK>
+0x856A # <CJK>
+0x856D # <CJK>
+0x8577 # <CJK>
+0x857E # <CJK>
+0x8580 # <CJK>
+0x8584 # <CJK>
+0x8587 # <CJK>
+0x8588 # <CJK>
+0x858A # <CJK>
+0x8590 # <CJK>
+0x8591 # <CJK>
+0x8594 # <CJK>
+0x8597 # <CJK>
+0x8599 # <CJK>
+0x859B # <CJK>
+0x859C # <CJK>
+0x85A4 # <CJK>
+0x85A6 # <CJK>
+0x85A8 # <CJK>
+0x85A9 # <CJK>
+0x85AA # <CJK>
+0x85AB # <CJK>
+0x85AC # <CJK>
+0x85AE # <CJK>
+0x85AF # <CJK>
+0x85B9 # <CJK>
+0x85BA # <CJK>
+0x85C1 # <CJK>
+0x85C9 # <CJK>
+0x85CD # <CJK>
+0x85CF # <CJK>
+0x85D0 # <CJK>
+0x85D5 # <CJK>
+0x85DC # <CJK>
+0x85DD # <CJK>
+0x85E4 # <CJK>
+0x85E5 # <CJK>
+0x85E9 # <CJK>
+0x85EA # <CJK>
+0x85F7 # <CJK>
+0x85F9 # <CJK>
+0x85FA # <CJK>
+0x85FB # <CJK>
+0x85FE # <CJK>
+0x8602 # <CJK>
+0x8606 # <CJK>
+0x8607 # <CJK>
+0x860A # <CJK>
+0x860B # <CJK>
+0x8613 # <CJK>
+0x8616 # <CJK>
+0x8617 # <CJK>
+0x861A # <CJK>
+0x8622 # <CJK>
+0x862D # <CJK>
+0x862F # <CJK>
+0x8630 # <CJK>
+0x863F # <CJK>
+0x864D # <CJK>
+0x864E # <CJK>
+0x8650 # <CJK>
+0x8654 # <CJK>
+0x8655 # <CJK>
+0x865A # <CJK>
+0x865C # <CJK>
+0x865E # <CJK>
+0x865F # <CJK>
+0x8667 # <CJK>
+0x866B # <CJK>
+0x8671 # <CJK>
+0x8679 # <CJK>
+0x867B # <CJK>
+0x868A # <CJK>
+0x868B # <CJK>
+0x868C # <CJK>
+0x8693 # <CJK>
+0x8695 # <CJK>
+0x86A3 # <CJK>
+0x86A4 # <CJK>
+0x86A9 # <CJK>
+0x86AA # <CJK>
+0x86AB # <CJK>
+0x86AF # <CJK>
+0x86B0 # <CJK>
+0x86B6 # <CJK>
+0x86C4 # <CJK>
+0x86C6 # <CJK>
+0x86C7 # <CJK>
+0x86C9 # <CJK>
+0x86CB # <CJK>
+0x86CD # <CJK>
+0x86CE # <CJK>
+0x86D4 # <CJK>
+0x86D9 # <CJK>
+0x86DB # <CJK>
+0x86DE # <CJK>
+0x86DF # <CJK>
+0x86E4 # <CJK>
+0x86E9 # <CJK>
+0x86EC # <CJK>
+0x86ED # <CJK>
+0x86EE # <CJK>
+0x86EF # <CJK>
+0x86F8 # <CJK>
+0x86F9 # <CJK>
+0x86FB # <CJK>
+0x86FE # <CJK>
+0x8700 # <CJK>
+0x8702 # <CJK>
+0x8703 # <CJK>
+0x8706 # <CJK>
+0x8708 # <CJK>
+0x8709 # <CJK>
+0x870A # <CJK>
+0x870D # <CJK>
+0x8711 # <CJK>
+0x8712 # <CJK>
+0x8718 # <CJK>
+0x871A # <CJK>
+0x871C # <CJK>
+0x8725 # <CJK>
+0x8729 # <CJK>
+0x8734 # <CJK>
+0x8737 # <CJK>
+0x873B # <CJK>
+0x873F # <CJK>
+0x8749 # <CJK>
+0x874B # <CJK>
+0x874C # <CJK>
+0x874E # <CJK>
+0x8753 # <CJK>
+0x8755 # <CJK>
+0x8757 # <CJK>
+0x8759 # <CJK>
+0x875F # <CJK>
+0x8760 # <CJK>
+0x8763 # <CJK>
+0x8766 # <CJK>
+0x8768 # <CJK>
+0x876A # <CJK>
+0x876E # <CJK>
+0x8774 # <CJK>
+0x8776 # <CJK>
+0x8778 # <CJK>
+0x877F # <CJK>
+0x8782 # <CJK>
+0x878D # <CJK>
+0x879F # <CJK>
+0x87A2 # <CJK>
+0x87AB # <CJK>
+0x87AF # <CJK>
+0x87B3 # <CJK>
+0x87BA # <CJK>
+0x87BB # <CJK>
+0x87BD # <CJK>
+0x87C0 # <CJK>
+0x87C4 # <CJK>
+0x87C6 # <CJK>
+0x87C7 # <CJK>
+0x87CB # <CJK>
+0x87D0 # <CJK>
+0x87D2 # <CJK>
+0x87E0 # <CJK>
+0x87EF # <CJK>
+0x87F2 # <CJK>
+0x87F6 # <CJK>
+0x87F7 # <CJK>
+0x87F9 # <CJK>
+0x87FB # <CJK>
+0x87FE # <CJK>
+0x8805 # <CJK>
+0x880D # <CJK>
+0x880E # <CJK>
+0x880F # <CJK>
+0x8811 # <CJK>
+0x8815 # <CJK>
+0x8816 # <CJK>
+0x8821 # <CJK>
+0x8822 # <CJK>
+0x8823 # <CJK>
+0x8827 # <CJK>
+0x8831 # <CJK>
+0x8836 # <CJK>
+0x8839 # <CJK>
+0x883B # <CJK>
+0x8840 # <CJK>
+0x8842 # <CJK>
+0x8844 # <CJK>
+0x8846 # <CJK>
+0x884C # <CJK>
+0x884D # <CJK>
+0x8852 # <CJK>
+0x8853 # <CJK>
+0x8857 # <CJK>
+0x8859 # <CJK>
+0x885B # <CJK>
+0x885D # <CJK>
+0x885E # <CJK>
+0x8861 # <CJK>
+0x8862 # <CJK>
+0x8863 # <CJK>
+0x8868 # <CJK>
+0x886B # <CJK>
+0x8870 # <CJK>
+0x8872 # <CJK>
+0x8875 # <CJK>
+0x8877 # <CJK>
+0x887D # <CJK>
+0x887E # <CJK>
+0x887F # <CJK>
+0x8881 # <CJK>
+0x8882 # <CJK>
+0x8888 # <CJK>
+0x888B # <CJK>
+0x888D # <CJK>
+0x8892 # <CJK>
+0x8896 # <CJK>
+0x8897 # <CJK>
+0x8899 # <CJK>
+0x889E # <CJK>
+0x88A2 # <CJK>
+0x88A4 # <CJK>
+0x88AB # <CJK>
+0x88AE # <CJK>
+0x88B0 # <CJK>
+0x88B1 # <CJK>
+0x88B4 # <CJK>
+0x88B5 # <CJK>
+0x88B7 # <CJK>
+0x88BF # <CJK>
+0x88C1 # <CJK>
+0x88C2 # <CJK>
+0x88C3 # <CJK>
+0x88C4 # <CJK>
+0x88C5 # <CJK>
+0x88CF # <CJK>
+0x88D4 # <CJK>
+0x88D5 # <CJK>
+0x88D8 # <CJK>
+0x88D9 # <CJK>
+0x88DC # <CJK>
+0x88DD # <CJK>
+0x88DF # <CJK>
+0x88E1 # <CJK>
+0x88E8 # <CJK>
+0x88F2 # <CJK>
+0x88F3 # <CJK>
+0x88F4 # <CJK>
+0x88F8 # <CJK>
+0x88F9 # <CJK>
+0x88FC # <CJK>
+0x88FD # <CJK>
+0x88FE # <CJK>
+0x8902 # <CJK>
+0x8904 # <CJK>
+0x8907 # <CJK>
+0x890A # <CJK>
+0x890C # <CJK>
+0x8910 # <CJK>
+0x8912 # <CJK>
+0x8913 # <CJK>
+0x891D # <CJK>
+0x891E # <CJK>
+0x8925 # <CJK>
+0x892A # <CJK>
+0x892B # <CJK>
+0x8936 # <CJK>
+0x8938 # <CJK>
+0x893B # <CJK>
+0x8941 # <CJK>
+0x8943 # <CJK>
+0x8944 # <CJK>
+0x894C # <CJK>
+0x894D # <CJK>
+0x8956 # <CJK>
+0x895E # <CJK>
+0x895F # <CJK>
+0x8960 # <CJK>
+0x8964 # <CJK>
+0x8966 # <CJK>
+0x896A # <CJK>
+0x896D # <CJK>
+0x896F # <CJK>
+0x8972 # <CJK>
+0x8974 # <CJK>
+0x8977 # <CJK>
+0x897E # <CJK>
+0x897F # <CJK>
+0x8981 # <CJK>
+0x8983 # <CJK>
+0x8986 # <CJK>
+0x8987 # <CJK>
+0x8988 # <CJK>
+0x898A # <CJK>
+0x898B # <CJK>
+0x898F # <CJK>
+0x8993 # <CJK>
+0x8996 # <CJK>
+0x8997 # <CJK>
+0x8998 # <CJK>
+0x899A # <CJK>
+0x89A1 # <CJK>
+0x89A6 # <CJK>
+0x89A7 # <CJK>
+0x89A9 # <CJK>
+0x89AA # <CJK>
+0x89AC # <CJK>
+0x89AF # <CJK>
+0x89B2 # <CJK>
+0x89B3 # <CJK>
+0x89BA # <CJK>
+0x89BD # <CJK>
+0x89BF # <CJK>
+0x89C0 # <CJK>
+0x89D2 # <CJK>
+0x89DA # <CJK>
+0x89DC # <CJK>
+0x89DD # <CJK>
+0x89E3 # <CJK>
+0x89E6 # <CJK>
+0x89E7 # <CJK>
+0x89F4 # <CJK>
+0x89F8 # <CJK>
+0x8A00 # <CJK>
+0x8A02 # <CJK>
+0x8A03 # <CJK>
+0x8A08 # <CJK>
+0x8A0A # <CJK>
+0x8A0C # <CJK>
+0x8A0E # <CJK>
+0x8A10 # <CJK>
+0x8A13 # <CJK>
+0x8A16 # <CJK>
+0x8A17 # <CJK>
+0x8A18 # <CJK>
+0x8A1B # <CJK>
+0x8A1D # <CJK>
+0x8A1F # <CJK>
+0x8A23 # <CJK>
+0x8A25 # <CJK>
+0x8A2A # <CJK>
+0x8A2D # <CJK>
+0x8A31 # <CJK>
+0x8A33 # <CJK>
+0x8A34 # <CJK>
+0x8A36 # <CJK>
+0x8A3A # <CJK>
+0x8A3B # <CJK>
+0x8A3C # <CJK>
+0x8A41 # <CJK>
+0x8A46 # <CJK>
+0x8A48 # <CJK>
+0x8A50 # <CJK>
+0x8A51 # <CJK>
+0x8A52 # <CJK>
+0x8A54 # <CJK>
+0x8A55 # <CJK>
+0x8A5B # <CJK>
+0x8A5E # <CJK>
+0x8A60 # <CJK>
+0x8A62 # <CJK>
+0x8A63 # <CJK>
+0x8A66 # <CJK>
+0x8A69 # <CJK>
+0x8A6B # <CJK>
+0x8A6C # <CJK>
+0x8A6D # <CJK>
+0x8A6E # <CJK>
+0x8A70 # <CJK>
+0x8A71 # <CJK>
+0x8A72 # <CJK>
+0x8A73 # <CJK>
+0x8A7C # <CJK>
+0x8A82 # <CJK>
+0x8A84 # <CJK>
+0x8A85 # <CJK>
+0x8A87 # <CJK>
+0x8A89 # <CJK>
+0x8A8C # <CJK>
+0x8A8D # <CJK>
+0x8A91 # <CJK>
+0x8A93 # <CJK>
+0x8A95 # <CJK>
+0x8A98 # <CJK>
+0x8A9A # <CJK>
+0x8A9E # <CJK>
+0x8AA0 # <CJK>
+0x8AA1 # <CJK>
+0x8AA3 # <CJK>
+0x8AA4 # <CJK>
+0x8AA5 # <CJK>
+0x8AA6 # <CJK>
+0x8AA8 # <CJK>
+0x8AAC # <CJK>
+0x8AAD # <CJK>
+0x8AB0 # <CJK>
+0x8AB2 # <CJK>
+0x8AB9 # <CJK>
+0x8ABC # <CJK>
+0x8ABF # <CJK>
+0x8AC2 # <CJK>
+0x8AC4 # <CJK>
+0x8AC7 # <CJK>
+0x8ACB # <CJK>
+0x8ACC # <CJK>
+0x8ACD # <CJK>
+0x8ACF # <CJK>
+0x8AD2 # <CJK>
+0x8AD6 # <CJK>
+0x8ADA # <CJK>
+0x8ADB # <CJK>
+0x8ADC # <CJK>
+0x8ADE # <CJK>
+0x8AE0 # <CJK>
+0x8AE1 # <CJK>
+0x8AE2 # <CJK>
+0x8AE4 # <CJK>
+0x8AE6 # <CJK>
+0x8AE7 # <CJK>
+0x8AEB # <CJK>
+0x8AED # <CJK>
+0x8AEE # <CJK>
+0x8AF1 # <CJK>
+0x8AF3 # <CJK>
+0x8AF7 # <CJK>
+0x8AF8 # <CJK>
+0x8AFA # <CJK>
+0x8AFE # <CJK>
+0x8B00 # <CJK>
+0x8B01 # <CJK>
+0x8B02 # <CJK>
+0x8B04 # <CJK>
+0x8B07 # <CJK>
+0x8B0C # <CJK>
+0x8B0E # <CJK>
+0x8B10 # <CJK>
+0x8B14 # <CJK>
+0x8B16 # <CJK>
+0x8B17 # <CJK>
+0x8B19 # <CJK>
+0x8B1A # <CJK>
+0x8B1B # <CJK>
+0x8B1D # <CJK>
+0x8B20 # <CJK>
+0x8B21 # <CJK>
+0x8B26 # <CJK>
+0x8B28 # <CJK>
+0x8B2B # <CJK>
+0x8B2C # <CJK>
+0x8B33 # <CJK>
+0x8B39 # <CJK>
+0x8B3E # <CJK>
+0x8B41 # <CJK>
+0x8B49 # <CJK>
+0x8B4C # <CJK>
+0x8B4E # <CJK>
+0x8B4F # <CJK>
+0x8B56 # <CJK>
+0x8B58 # <CJK>
+0x8B5A # <CJK>
+0x8B5B # <CJK>
+0x8B5C # <CJK>
+0x8B5F # <CJK>
+0x8B66 # <CJK>
+0x8B6B # <CJK>
+0x8B6C # <CJK>
+0x8B6F # <CJK>
+0x8B70 # <CJK>
+0x8B71 # <CJK>
+0x8B72 # <CJK>
+0x8B74 # <CJK>
+0x8B77 # <CJK>
+0x8B7D # <CJK>
+0x8B80 # <CJK>
+0x8B83 # <CJK>
+0x8B8A # <CJK>
+0x8B8C # <CJK>
+0x8B8E # <CJK>
+0x8B90 # <CJK>
+0x8B92 # <CJK>
+0x8B93 # <CJK>
+0x8B96 # <CJK>
+0x8B99 # <CJK>
+0x8B9A # <CJK>
+0x8C37 # <CJK>
+0x8C3A # <CJK>
+0x8C3F # <CJK>
+0x8C41 # <CJK>
+0x8C46 # <CJK>
+0x8C48 # <CJK>
+0x8C4A # <CJK>
+0x8C4C # <CJK>
+0x8C4E # <CJK>
+0x8C50 # <CJK>
+0x8C55 # <CJK>
+0x8C5A # <CJK>
+0x8C61 # <CJK>
+0x8C62 # <CJK>
+0x8C6A # <CJK>
+0x8C6B # <CJK>
+0x8C6C # <CJK>
+0x8C78 # <CJK>
+0x8C79 # <CJK>
+0x8C7A # <CJK>
+0x8C7C # <CJK>
+0x8C82 # <CJK>
+0x8C85 # <CJK>
+0x8C89 # <CJK>
+0x8C8A # <CJK>
+0x8C8C # <CJK>
+0x8C8D # <CJK>
+0x8C8E # <CJK>
+0x8C94 # <CJK>
+0x8C98 # <CJK>
+0x8C9D # <CJK>
+0x8C9E # <CJK>
+0x8CA0 # <CJK>
+0x8CA1 # <CJK>
+0x8CA2 # <CJK>
+0x8CA7 # <CJK>
+0x8CA8 # <CJK>
+0x8CA9 # <CJK>
+0x8CAA # <CJK>
+0x8CAB # <CJK>
+0x8CAC # <CJK>
+0x8CAD # <CJK>
+0x8CAE # <CJK>
+0x8CAF # <CJK>
+0x8CB0 # <CJK>
+0x8CB2 # <CJK>
+0x8CB3 # <CJK>
+0x8CB4 # <CJK>
+0x8CB6 # <CJK>
+0x8CB7 # <CJK>
+0x8CB8 # <CJK>
+0x8CBB # <CJK>
+0x8CBC # <CJK>
+0x8CBD # <CJK>
+0x8CBF # <CJK>
+0x8CC0 # <CJK>
+0x8CC1 # <CJK>
+0x8CC2 # <CJK>
+0x8CC3 # <CJK>
+0x8CC4 # <CJK>
+0x8CC7 # <CJK>
+0x8CC8 # <CJK>
+0x8CCA # <CJK>
+0x8CCD # <CJK>
+0x8CCE # <CJK>
+0x8CD1 # <CJK>
+0x8CD3 # <CJK>
+0x8CDA # <CJK>
+0x8CDB # <CJK>
+0x8CDC # <CJK>
+0x8CDE # <CJK>
+0x8CE0 # <CJK>
+0x8CE2 # <CJK>
+0x8CE3 # <CJK>
+0x8CE4 # <CJK>
+0x8CE6 # <CJK>
+0x8CEA # <CJK>
+0x8CED # <CJK>
+0x8CFA # <CJK>
+0x8CFB # <CJK>
+0x8CFC # <CJK>
+0x8CFD # <CJK>
+0x8D04 # <CJK>
+0x8D05 # <CJK>
+0x8D07 # <CJK>
+0x8D08 # <CJK>
+0x8D0A # <CJK>
+0x8D0B # <CJK>
+0x8D0D # <CJK>
+0x8D0F # <CJK>
+0x8D10 # <CJK>
+0x8D13 # <CJK>
+0x8D14 # <CJK>
+0x8D16 # <CJK>
+0x8D64 # <CJK>
+0x8D66 # <CJK>
+0x8D67 # <CJK>
+0x8D6B # <CJK>
+0x8D6D # <CJK>
+0x8D70 # <CJK>
+0x8D71 # <CJK>
+0x8D73 # <CJK>
+0x8D74 # <CJK>
+0x8D77 # <CJK>
+0x8D81 # <CJK>
+0x8D85 # <CJK>
+0x8D8A # <CJK>
+0x8D99 # <CJK>
+0x8DA3 # <CJK>
+0x8DA8 # <CJK>
+0x8DB3 # <CJK>
+0x8DBA # <CJK>
+0x8DBE # <CJK>
+0x8DC2 # <CJK>
+0x8DCB # <CJK>
+0x8DCC # <CJK>
+0x8DCF # <CJK>
+0x8DD6 # <CJK>
+0x8DDA # <CJK>
+0x8DDB # <CJK>
+0x8DDD # <CJK>
+0x8DDF # <CJK>
+0x8DE1 # <CJK>
+0x8DE3 # <CJK>
+0x8DE8 # <CJK>
+0x8DEA # <CJK>
+0x8DEB # <CJK>
+0x8DEF # <CJK>
+0x8DF3 # <CJK>
+0x8DF5 # <CJK>
+0x8DFC # <CJK>
+0x8DFF # <CJK>
+0x8E08 # <CJK>
+0x8E09 # <CJK>
+0x8E0A # <CJK>
+0x8E0F # <CJK>
+0x8E10 # <CJK>
+0x8E1D # <CJK>
+0x8E1E # <CJK>
+0x8E1F # <CJK>
+0x8E2A # <CJK>
+0x8E30 # <CJK>
+0x8E34 # <CJK>
+0x8E35 # <CJK>
+0x8E42 # <CJK>
+0x8E44 # <CJK>
+0x8E47 # <CJK>
+0x8E48 # <CJK>
+0x8E49 # <CJK>
+0x8E4A # <CJK>
+0x8E4C # <CJK>
+0x8E50 # <CJK>
+0x8E55 # <CJK>
+0x8E59 # <CJK>
+0x8E5F # <CJK>
+0x8E60 # <CJK>
+0x8E63 # <CJK>
+0x8E64 # <CJK>
+0x8E72 # <CJK>
+0x8E74 # <CJK>
+0x8E76 # <CJK>
+0x8E7C # <CJK>
+0x8E81 # <CJK>
+0x8E84 # <CJK>
+0x8E85 # <CJK>
+0x8E87 # <CJK>
+0x8E8A # <CJK>
+0x8E8B # <CJK>
+0x8E8D # <CJK>
+0x8E91 # <CJK>
+0x8E93 # <CJK>
+0x8E94 # <CJK>
+0x8E99 # <CJK>
+0x8EA1 # <CJK>
+0x8EAA # <CJK>
+0x8EAB # <CJK>
+0x8EAC # <CJK>
+0x8EAF # <CJK>
+0x8EB0 # <CJK>
+0x8EB1 # <CJK>
+0x8EBE # <CJK>
+0x8EC5 # <CJK>
+0x8EC6 # <CJK>
+0x8EC8 # <CJK>
+0x8ECA # <CJK>
+0x8ECB # <CJK>
+0x8ECC # <CJK>
+0x8ECD # <CJK>
+0x8ED2 # <CJK>
+0x8EDB # <CJK>
+0x8EDF # <CJK>
+0x8EE2 # <CJK>
+0x8EE3 # <CJK>
+0x8EEB # <CJK>
+0x8EF8 # <CJK>
+0x8EFB # <CJK>
+0x8EFC # <CJK>
+0x8EFD # <CJK>
+0x8EFE # <CJK>
+0x8F03 # <CJK>
+0x8F05 # <CJK>
+0x8F09 # <CJK>
+0x8F0A # <CJK>
+0x8F0C # <CJK>
+0x8F12 # <CJK>
+0x8F13 # <CJK>
+0x8F14 # <CJK>
+0x8F15 # <CJK>
+0x8F19 # <CJK>
+0x8F1B # <CJK>
+0x8F1C # <CJK>
+0x8F1D # <CJK>
+0x8F1F # <CJK>
+0x8F26 # <CJK>
+0x8F29 # <CJK>
+0x8F2A # <CJK>
+0x8F2F # <CJK>
+0x8F33 # <CJK>
+0x8F38 # <CJK>
+0x8F39 # <CJK>
+0x8F3B # <CJK>
+0x8F3E # <CJK>
+0x8F3F # <CJK>
+0x8F42 # <CJK>
+0x8F44 # <CJK>
+0x8F45 # <CJK>
+0x8F46 # <CJK>
+0x8F49 # <CJK>
+0x8F4C # <CJK>
+0x8F4D # <CJK>
+0x8F4E # <CJK>
+0x8F57 # <CJK>
+0x8F5C # <CJK>
+0x8F5F # <CJK>
+0x8F61 # <CJK>
+0x8F62 # <CJK>
+0x8F63 # <CJK>
+0x8F64 # <CJK>
+0x8F9B # <CJK>
+0x8F9C # <CJK>
+0x8F9E # <CJK>
+0x8F9F # <CJK>
+0x8FA3 # <CJK>
+0x8FA7 # <CJK>
+0x8FA8 # <CJK>
+0x8FAD # <CJK>
+0x8FAE # <CJK>
+0x8FAF # <CJK>
+0x8FB0 # <CJK>
+0x8FB1 # <CJK>
+0x8FB2 # <CJK>
+0x8FB7 # <CJK>
+0x8FBA # <CJK>
+0x8FBB # <CJK>
+0x8FBC # <CJK>
+0x8FBF # <CJK>
+0x8FC2 # <CJK>
+0x8FC4 # <CJK>
+0x8FC5 # <CJK>
+0x8FCE # <CJK>
+0x8FD1 # <CJK>
+0x8FD4 # <CJK>
+0x8FDA # <CJK>
+0x8FE2 # <CJK>
+0x8FE5 # <CJK>
+0x8FE6 # <CJK>
+0x8FE9 # <CJK>
+0x8FEA # <CJK>
+0x8FEB # <CJK>
+0x8FED # <CJK>
+0x8FEF # <CJK>
+0x8FF0 # <CJK>
+0x8FF4 # <CJK>
+0x8FF7 # <CJK>
+0x8FF8 # <CJK>
+0x8FF9 # <CJK>
+0x8FFA # <CJK>
+0x8FFD # <CJK>
+0x9000 # <CJK>
+0x9001 # <CJK>
+0x9003 # <CJK>
+0x9005 # <CJK>
+0x9006 # <CJK>
+0x900B # <CJK>
+0x900D # <CJK>
+0x900E # <CJK>
+0x900F # <CJK>
+0x9010 # <CJK>
+0x9011 # <CJK>
+0x9013 # <CJK>
+0x9014 # <CJK>
+0x9015 # <CJK>
+0x9016 # <CJK>
+0x9017 # <CJK>
+0x9019 # <CJK>
+0x901A # <CJK>
+0x901D # <CJK>
+0x901E # <CJK>
+0x901F # <CJK>
+0x9020 # <CJK>
+0x9021 # <CJK>
+0x9022 # <CJK>
+0x9023 # <CJK>
+0x9027 # <CJK>
+0x902E # <CJK>
+0x9031 # <CJK>
+0x9032 # <CJK>
+0x9035 # <CJK>
+0x9036 # <CJK>
+0x9038 # <CJK>
+0x9039 # <CJK>
+0x903C # <CJK>
+0x903E # <CJK>
+0x9041 # <CJK>
+0x9042 # <CJK>
+0x9045 # <CJK>
+0x9047 # <CJK>
+0x9049 # <CJK>
+0x904A # <CJK>
+0x904B # <CJK>
+0x904D # <CJK>
+0x904E # <CJK>
+0x904F # <CJK>
+0x9050 # <CJK>
+0x9051 # <CJK>
+0x9052 # <CJK>
+0x9053 # <CJK>
+0x9054 # <CJK>
+0x9055 # <CJK>
+0x9056 # <CJK>
+0x9058 # <CJK>
+0x9059 # <CJK>
+0x905C # <CJK>
+0x905E # <CJK>
+0x9060 # <CJK>
+0x9061 # <CJK>
+0x9063 # <CJK>
+0x9065 # <CJK>
+0x9068 # <CJK>
+0x9069 # <CJK>
+0x906D # <CJK>
+0x906E # <CJK>
+0x906F # <CJK>
+0x9072 # <CJK>
+0x9075 # <CJK>
+0x9076 # <CJK>
+0x9077 # <CJK>
+0x9078 # <CJK>
+0x907A # <CJK>
+0x907C # <CJK>
+0x907D # <CJK>
+0x907F # <CJK>
+0x9080 # <CJK>
+0x9081 # <CJK>
+0x9082 # <CJK>
+0x9083 # <CJK>
+0x9084 # <CJK>
+0x9087 # <CJK>
+0x9089 # <CJK>
+0x908A # <CJK>
+0x908F # <CJK>
+0x9091 # <CJK>
+0x90A3 # <CJK>
+0x90A6 # <CJK>
+0x90A8 # <CJK>
+0x90AA # <CJK>
+0x90AF # <CJK>
+0x90B1 # <CJK>
+0x90B5 # <CJK>
+0x90B8 # <CJK>
+0x90C1 # <CJK>
+0x90CA # <CJK>
+0x90CE # <CJK>
+0x90DB # <CJK>
+0x90E1 # <CJK>
+0x90E2 # <CJK>
+0x90E4 # <CJK>
+0x90E8 # <CJK>
+0x90ED # <CJK>
+0x90F5 # <CJK>
+0x90F7 # <CJK>
+0x90FD # <CJK>
+0x9102 # <CJK>
+0x9112 # <CJK>
+0x9119 # <CJK>
+0x912D # <CJK>
+0x9130 # <CJK>
+0x9132 # <CJK>
+0x9149 # <CJK>
+0x914A # <CJK>
+0x914B # <CJK>
+0x914C # <CJK>
+0x914D # <CJK>
+0x914E # <CJK>
+0x9152 # <CJK>
+0x9154 # <CJK>
+0x9156 # <CJK>
+0x9158 # <CJK>
+0x9162 # <CJK>
+0x9163 # <CJK>
+0x9165 # <CJK>
+0x9169 # <CJK>
+0x916A # <CJK>
+0x916C # <CJK>
+0x9172 # <CJK>
+0x9173 # <CJK>
+0x9175 # <CJK>
+0x9177 # <CJK>
+0x9178 # <CJK>
+0x9182 # <CJK>
+0x9187 # <CJK>
+0x9189 # <CJK>
+0x918B # <CJK>
+0x918D # <CJK>
+0x9190 # <CJK>
+0x9192 # <CJK>
+0x9197 # <CJK>
+0x919C # <CJK>
+0x91A2 # <CJK>
+0x91A4 # <CJK>
+0x91AA # <CJK>
+0x91AB # <CJK>
+0x91AF # <CJK>
+0x91B4 # <CJK>
+0x91B5 # <CJK>
+0x91B8 # <CJK>
+0x91BA # <CJK>
+0x91C0 # <CJK>
+0x91C1 # <CJK>
+0x91C6 # <CJK>
+0x91C7 # <CJK>
+0x91C8 # <CJK>
+0x91C9 # <CJK>
+0x91CB # <CJK>
+0x91CC # <CJK>
+0x91CD # <CJK>
+0x91CE # <CJK>
+0x91CF # <CJK>
+0x91D0 # <CJK>
+0x91D1 # <CJK>
+0x91D6 # <CJK>
+0x91D8 # <CJK>
+0x91DB # <CJK>
+0x91DC # <CJK>
+0x91DD # <CJK>
+0x91DF # <CJK>
+0x91E1 # <CJK>
+0x91E3 # <CJK>
+0x91E6 # <CJK>
+0x91E7 # <CJK>
+0x91F5 # <CJK>
+0x91F6 # <CJK>
+0x91FC # <CJK>
+0x91FF # <CJK>
+0x920D # <CJK>
+0x920E # <CJK>
+0x9211 # <CJK>
+0x9214 # <CJK>
+0x9215 # <CJK>
+0x921E # <CJK>
+0x9229 # <CJK>
+0x922C # <CJK>
+0x9234 # <CJK>
+0x9237 # <CJK>
+0x923F # <CJK>
+0x9244 # <CJK>
+0x9245 # <CJK>
+0x9248 # <CJK>
+0x9249 # <CJK>
+0x924B # <CJK>
+0x9250 # <CJK>
+0x9257 # <CJK>
+0x925A # <CJK>
+0x925B # <CJK>
+0x925E # <CJK>
+0x9262 # <CJK>
+0x9264 # <CJK>
+0x9266 # <CJK>
+0x9271 # <CJK>
+0x927E # <CJK>
+0x9280 # <CJK>
+0x9283 # <CJK>
+0x9285 # <CJK>
+0x9291 # <CJK>
+0x9293 # <CJK>
+0x9295 # <CJK>
+0x9296 # <CJK>
+0x9298 # <CJK>
+0x929A # <CJK>
+0x929B # <CJK>
+0x929C # <CJK>
+0x92AD # <CJK>
+0x92B7 # <CJK>
+0x92B9 # <CJK>
+0x92CF # <CJK>
+0x92D2 # <CJK>
+0x92E4 # <CJK>
+0x92E9 # <CJK>
+0x92EA # <CJK>
+0x92ED # <CJK>
+0x92F2 # <CJK>
+0x92F3 # <CJK>
+0x92F8 # <CJK>
+0x92FA # <CJK>
+0x92FC # <CJK>
+0x9306 # <CJK>
+0x930F # <CJK>
+0x9310 # <CJK>
+0x9318 # <CJK>
+0x9319 # <CJK>
+0x931A # <CJK>
+0x9320 # <CJK>
+0x9322 # <CJK>
+0x9323 # <CJK>
+0x9326 # <CJK>
+0x9328 # <CJK>
+0x932B # <CJK>
+0x932C # <CJK>
+0x932E # <CJK>
+0x932F # <CJK>
+0x9332 # <CJK>
+0x9335 # <CJK>
+0x933A # <CJK>
+0x933B # <CJK>
+0x9344 # <CJK>
+0x934B # <CJK>
+0x934D # <CJK>
+0x9354 # <CJK>
+0x9356 # <CJK>
+0x935B # <CJK>
+0x935C # <CJK>
+0x9360 # <CJK>
+0x936C # <CJK>
+0x936E # <CJK>
+0x9375 # <CJK>
+0x937C # <CJK>
+0x937E # <CJK>
+0x938C # <CJK>
+0x9394 # <CJK>
+0x9396 # <CJK>
+0x9397 # <CJK>
+0x939A # <CJK>
+0x93A7 # <CJK>
+0x93AC # <CJK>
+0x93AD # <CJK>
+0x93AE # <CJK>
+0x93B0 # <CJK>
+0x93B9 # <CJK>
+0x93C3 # <CJK>
+0x93C8 # <CJK>
+0x93D0 # <CJK>
+0x93D1 # <CJK>
+0x93D6 # <CJK>
+0x93D7 # <CJK>
+0x93D8 # <CJK>
+0x93DD # <CJK>
+0x93E1 # <CJK>
+0x93E4 # <CJK>
+0x93E5 # <CJK>
+0x93E8 # <CJK>
+0x9403 # <CJK>
+0x9407 # <CJK>
+0x9410 # <CJK>
+0x9413 # <CJK>
+0x9414 # <CJK>
+0x9418 # <CJK>
+0x9419 # <CJK>
+0x941A # <CJK>
+0x9421 # <CJK>
+0x942B # <CJK>
+0x9435 # <CJK>
+0x9436 # <CJK>
+0x9438 # <CJK>
+0x943A # <CJK>
+0x9441 # <CJK>
+0x9444 # <CJK>
+0x9451 # <CJK>
+0x9452 # <CJK>
+0x9453 # <CJK>
+0x945A # <CJK>
+0x945B # <CJK>
+0x945E # <CJK>
+0x9460 # <CJK>
+0x9462 # <CJK>
+0x946A # <CJK>
+0x9470 # <CJK>
+0x9475 # <CJK>
+0x9477 # <CJK>
+0x947C # <CJK>
+0x947D # <CJK>
+0x947E # <CJK>
+0x947F # <CJK>
+0x9481 # <CJK>
+0x9577 # <CJK>
+0x9580 # <CJK>
+0x9582 # <CJK>
+0x9583 # <CJK>
+0x9587 # <CJK>
+0x9589 # <CJK>
+0x958A # <CJK>
+0x958B # <CJK>
+0x958F # <CJK>
+0x9591 # <CJK>
+0x9593 # <CJK>
+0x9594 # <CJK>
+0x9596 # <CJK>
+0x9598 # <CJK>
+0x9599 # <CJK>
+0x95A0 # <CJK>
+0x95A2 # <CJK>
+0x95A3 # <CJK>
+0x95A4 # <CJK>
+0x95A5 # <CJK>
+0x95A7 # <CJK>
+0x95A8 # <CJK>
+0x95AD # <CJK>
+0x95B2 # <CJK>
+0x95B9 # <CJK>
+0x95BB # <CJK>
+0x95BC # <CJK>
+0x95BE # <CJK>
+0x95C3 # <CJK>
+0x95C7 # <CJK>
+0x95CA # <CJK>
+0x95CC # <CJK>
+0x95CD # <CJK>
+0x95D4 # <CJK>
+0x95D5 # <CJK>
+0x95D6 # <CJK>
+0x95D8 # <CJK>
+0x95DC # <CJK>
+0x95E1 # <CJK>
+0x95E2 # <CJK>
+0x95E5 # <CJK>
+0x961C # <CJK>
+0x9621 # <CJK>
+0x9628 # <CJK>
+0x962A # <CJK>
+0x962E # <CJK>
+0x962F # <CJK>
+0x9632 # <CJK>
+0x963B # <CJK>
+0x963F # <CJK>
+0x9640 # <CJK>
+0x9642 # <CJK>
+0x9644 # <CJK>
+0x964B # <CJK>
+0x964C # <CJK>
+0x964D # <CJK>
+0x964F # <CJK>
+0x9650 # <CJK>
+0x965B # <CJK>
+0x965C # <CJK>
+0x965D # <CJK>
+0x965E # <CJK>
+0x965F # <CJK>
+0x9662 # <CJK>
+0x9663 # <CJK>
+0x9664 # <CJK>
+0x9665 # <CJK>
+0x9666 # <CJK>
+0x966A # <CJK>
+0x966C # <CJK>
+0x9670 # <CJK>
+0x9672 # <CJK>
+0x9673 # <CJK>
+0x9675 # <CJK>
+0x9676 # <CJK>
+0x9677 # <CJK>
+0x9678 # <CJK>
+0x967A # <CJK>
+0x967D # <CJK>
+0x9685 # <CJK>
+0x9686 # <CJK>
+0x9688 # <CJK>
+0x968A # <CJK>
+0x968B # <CJK>
+0x968D # <CJK>
+0x968E # <CJK>
+0x968F # <CJK>
+0x9694 # <CJK>
+0x9695 # <CJK>
+0x9697 # <CJK>
+0x9698 # <CJK>
+0x9699 # <CJK>
+0x969B # <CJK>
+0x969C # <CJK>
+0x96A0 # <CJK>
+0x96A3 # <CJK>
+0x96A7 # <CJK>
+0x96A8 # <CJK>
+0x96AA # <CJK>
+0x96B0 # <CJK>
+0x96B1 # <CJK>
+0x96B2 # <CJK>
+0x96B4 # <CJK>
+0x96B6 # <CJK>
+0x96B7 # <CJK>
+0x96B8 # <CJK>
+0x96B9 # <CJK>
+0x96BB # <CJK>
+0x96BC # <CJK>
+0x96C0 # <CJK>
+0x96C1 # <CJK>
+0x96C4 # <CJK>
+0x96C5 # <CJK>
+0x96C6 # <CJK>
+0x96C7 # <CJK>
+0x96C9 # <CJK>
+0x96CB # <CJK>
+0x96CC # <CJK>
+0x96CD # <CJK>
+0x96CE # <CJK>
+0x96D1 # <CJK>
+0x96D5 # <CJK>
+0x96D6 # <CJK>
+0x96D9 # <CJK>
+0x96DB # <CJK>
+0x96DC # <CJK>
+0x96E2 # <CJK>
+0x96E3 # <CJK>
+0x96E8 # <CJK>
+0x96EA # <CJK>
+0x96EB # <CJK>
+0x96F0 # <CJK>
+0x96F2 # <CJK>
+0x96F6 # <CJK>
+0x96F7 # <CJK>
+0x96F9 # <CJK>
+0x96FB # <CJK>
+0x9700 # <CJK>
+0x9704 # <CJK>
+0x9706 # <CJK>
+0x9707 # <CJK>
+0x9708 # <CJK>
+0x970A # <CJK>
+0x970D # <CJK>
+0x970E # <CJK>
+0x970F # <CJK>
+0x9711 # <CJK>
+0x9713 # <CJK>
+0x9716 # <CJK>
+0x9719 # <CJK>
+0x971C # <CJK>
+0x971E # <CJK>
+0x9724 # <CJK>
+0x9727 # <CJK>
+0x972A # <CJK>
+0x9730 # <CJK>
+0x9732 # <CJK>
+0x9738 # <CJK>
+0x9739 # <CJK>
+0x973D # <CJK>
+0x973E # <CJK>
+0x9742 # <CJK>
+0x9744 # <CJK>
+0x9746 # <CJK>
+0x9748 # <CJK>
+0x9749 # <CJK>
+0x9752 # <CJK>
+0x9756 # <CJK>
+0x9759 # <CJK>
+0x975C # <CJK>
+0x975E # <CJK>
+0x9760 # <CJK>
+0x9761 # <CJK>
+0x9762 # <CJK>
+0x9764 # <CJK>
+0x9766 # <CJK>
+0x9768 # <CJK>
+0x9769 # <CJK>
+0x976B # <CJK>
+0x976D # <CJK>
+0x9771 # <CJK>
+0x9774 # <CJK>
+0x9779 # <CJK>
+0x977A # <CJK>
+0x977C # <CJK>
+0x9781 # <CJK>
+0x9784 # <CJK>
+0x9785 # <CJK>
+0x9786 # <CJK>
+0x978B # <CJK>
+0x978D # <CJK>
+0x978F # <CJK>
+0x9790 # <CJK>
+0x9798 # <CJK>
+0x979C # <CJK>
+0x97A0 # <CJK>
+0x97A3 # <CJK>
+0x97A6 # <CJK>
+0x97A8 # <CJK>
+0x97AB # <CJK>
+0x97AD # <CJK>
+0x97B3 # <CJK>
+0x97B4 # <CJK>
+0x97C3 # <CJK>
+0x97C6 # <CJK>
+0x97C8 # <CJK>
+0x97CB # <CJK>
+0x97D3 # <CJK>
+0x97DC # <CJK>
+0x97ED # <CJK>
+0x97EE # <CJK>
+0x97F2 # <CJK>
+0x97F3 # <CJK>
+0x97F5 # <CJK>
+0x97F6 # <CJK>
+0x97FB # <CJK>
+0x97FF # <CJK>
+0x9801 # <CJK>
+0x9802 # <CJK>
+0x9803 # <CJK>
+0x9805 # <CJK>
+0x9806 # <CJK>
+0x9808 # <CJK>
+0x980C # <CJK>
+0x980F # <CJK>
+0x9810 # <CJK>
+0x9811 # <CJK>
+0x9812 # <CJK>
+0x9813 # <CJK>
+0x9817 # <CJK>
+0x9818 # <CJK>
+0x981A # <CJK>
+0x9821 # <CJK>
+0x9824 # <CJK>
+0x982C # <CJK>
+0x982D # <CJK>
+0x9834 # <CJK>
+0x9837 # <CJK>
+0x9838 # <CJK>
+0x983B # <CJK>
+0x983C # <CJK>
+0x983D # <CJK>
+0x9846 # <CJK>
+0x984B # <CJK>
+0x984C # <CJK>
+0x984D # <CJK>
+0x984E # <CJK>
+0x984F # <CJK>
+0x9854 # <CJK>
+0x9855 # <CJK>
+0x9858 # <CJK>
+0x985B # <CJK>
+0x985E # <CJK>
+0x9867 # <CJK>
+0x986B # <CJK>
+0x986F # <CJK>
+0x9870 # <CJK>
+0x9871 # <CJK>
+0x9873 # <CJK>
+0x9874 # <CJK>
+0x98A8 # <CJK>
+0x98AA # <CJK>
+0x98AF # <CJK>
+0x98B1 # <CJK>
+0x98B6 # <CJK>
+0x98C3 # <CJK>
+0x98C4 # <CJK>
+0x98C6 # <CJK>
+0x98DB # <CJK>
+0x98DC # <CJK>
+0x98DF # <CJK>
+0x98E2 # <CJK>
+0x98E9 # <CJK>
+0x98EB # <CJK>
+0x98ED # <CJK>
+0x98EE # <CJK>
+0x98EF # <CJK>
+0x98F2 # <CJK>
+0x98F4 # <CJK>
+0x98FC # <CJK>
+0x98FD # <CJK>
+0x98FE # <CJK>
+0x9903 # <CJK>
+0x9905 # <CJK>
+0x9909 # <CJK>
+0x990A # <CJK>
+0x990C # <CJK>
+0x9910 # <CJK>
+0x9912 # <CJK>
+0x9913 # <CJK>
+0x9914 # <CJK>
+0x9918 # <CJK>
+0x991D # <CJK>
+0x991E # <CJK>
+0x9920 # <CJK>
+0x9921 # <CJK>
+0x9924 # <CJK>
+0x9928 # <CJK>
+0x992C # <CJK>
+0x992E # <CJK>
+0x993D # <CJK>
+0x993E # <CJK>
+0x9942 # <CJK>
+0x9945 # <CJK>
+0x9949 # <CJK>
+0x994B # <CJK>
+0x994C # <CJK>
+0x9950 # <CJK>
+0x9951 # <CJK>
+0x9952 # <CJK>
+0x9955 # <CJK>
+0x9957 # <CJK>
+0x9996 # <CJK>
+0x9997 # <CJK>
+0x9998 # <CJK>
+0x9999 # <CJK>
+0x99A5 # <CJK>
+0x99A8 # <CJK>
+0x99AC # <CJK>
+0x99AD # <CJK>
+0x99AE # <CJK>
+0x99B3 # <CJK>
+0x99B4 # <CJK>
+0x99BC # <CJK>
+0x99C1 # <CJK>
+0x99C4 # <CJK>
+0x99C5 # <CJK>
+0x99C6 # <CJK>
+0x99C8 # <CJK>
+0x99D0 # <CJK>
+0x99D1 # <CJK>
+0x99D2 # <CJK>
+0x99D5 # <CJK>
+0x99D8 # <CJK>
+0x99DB # <CJK>
+0x99DD # <CJK>
+0x99DF # <CJK>
+0x99E2 # <CJK>
+0x99ED # <CJK>
+0x99EE # <CJK>
+0x99F1 # <CJK>
+0x99F2 # <CJK>
+0x99F8 # <CJK>
+0x99FB # <CJK>
+0x99FF # <CJK>
+0x9A01 # <CJK>
+0x9A05 # <CJK>
+0x9A0E # <CJK>
+0x9A0F # <CJK>
+0x9A12 # <CJK>
+0x9A13 # <CJK>
+0x9A19 # <CJK>
+0x9A28 # <CJK>
+0x9A2B # <CJK>
+0x9A30 # <CJK>
+0x9A37 # <CJK>
+0x9A3E # <CJK>
+0x9A40 # <CJK>
+0x9A42 # <CJK>
+0x9A43 # <CJK>
+0x9A45 # <CJK>
+0x9A4D # <CJK>
+0x9A55 # <CJK>
+0x9A57 # <CJK>
+0x9A5A # <CJK>
+0x9A5B # <CJK>
+0x9A5F # <CJK>
+0x9A62 # <CJK>
+0x9A64 # <CJK>
+0x9A65 # <CJK>
+0x9A69 # <CJK>
+0x9A6A # <CJK>
+0x9A6B # <CJK>
+0x9AA8 # <CJK>
+0x9AAD # <CJK>
+0x9AB0 # <CJK>
+0x9AB8 # <CJK>
+0x9ABC # <CJK>
+0x9AC0 # <CJK>
+0x9AC4 # <CJK>
+0x9ACF # <CJK>
+0x9AD1 # <CJK>
+0x9AD3 # <CJK>
+0x9AD4 # <CJK>
+0x9AD8 # <CJK>
+0x9ADE # <CJK>
+0x9ADF # <CJK>
+0x9AE2 # <CJK>
+0x9AE3 # <CJK>
+0x9AE6 # <CJK>
+0x9AEA # <CJK>
+0x9AEB # <CJK>
+0x9AED # <CJK>
+0x9AEE # <CJK>
+0x9AEF # <CJK>
+0x9AF1 # <CJK>
+0x9AF4 # <CJK>
+0x9AF7 # <CJK>
+0x9AFB # <CJK>
+0x9B06 # <CJK>
+0x9B18 # <CJK>
+0x9B1A # <CJK>
+0x9B1F # <CJK>
+0x9B22 # <CJK>
+0x9B23 # <CJK>
+0x9B25 # <CJK>
+0x9B27 # <CJK>
+0x9B28 # <CJK>
+0x9B29 # <CJK>
+0x9B2A # <CJK>
+0x9B2E # <CJK>
+0x9B2F # <CJK>
+0x9B31 # <CJK>
+0x9B32 # <CJK>
+0x9B3B # <CJK>
+0x9B3C # <CJK>
+0x9B41 # <CJK>
+0x9B42 # <CJK>
+0x9B43 # <CJK>
+0x9B44 # <CJK>
+0x9B45 # <CJK>
+0x9B4D # <CJK>
+0x9B4E # <CJK>
+0x9B4F # <CJK>
+0x9B51 # <CJK>
+0x9B54 # <CJK>
+0x9B58 # <CJK>
+0x9B5A # <CJK>
+0x9B6F # <CJK>
+0x9B74 # <CJK>
+0x9B83 # <CJK>
+0x9B8E # <CJK>
+0x9B91 # <CJK>
+0x9B92 # <CJK>
+0x9B93 # <CJK>
+0x9B96 # <CJK>
+0x9B97 # <CJK>
+0x9B9F # <CJK>
+0x9BA0 # <CJK>
+0x9BA8 # <CJK>
+0x9BAA # <CJK>
+0x9BAB # <CJK>
+0x9BAD # <CJK>
+0x9BAE # <CJK>
+0x9BB4 # <CJK>
+0x9BB9 # <CJK>
+0x9BC0 # <CJK>
+0x9BC6 # <CJK>
+0x9BC9 # <CJK>
+0x9BCA # <CJK>
+0x9BCF # <CJK>
+0x9BD1 # <CJK>
+0x9BD2 # <CJK>
+0x9BD4 # <CJK>
+0x9BD6 # <CJK>
+0x9BDB # <CJK>
+0x9BE1 # <CJK>
+0x9BE2 # <CJK>
+0x9BE3 # <CJK>
+0x9BE4 # <CJK>
+0x9BE8 # <CJK>
+0x9BF0 # <CJK>
+0x9BF1 # <CJK>
+0x9BF2 # <CJK>
+0x9BF5 # <CJK>
+0x9C04 # <CJK>
+0x9C06 # <CJK>
+0x9C08 # <CJK>
+0x9C09 # <CJK>
+0x9C0A # <CJK>
+0x9C0C # <CJK>
+0x9C0D # <CJK>
+0x9C10 # <CJK>
+0x9C12 # <CJK>
+0x9C13 # <CJK>
+0x9C14 # <CJK>
+0x9C15 # <CJK>
+0x9C1B # <CJK>
+0x9C21 # <CJK>
+0x9C24 # <CJK>
+0x9C25 # <CJK>
+0x9C2D # <CJK>
+0x9C2E # <CJK>
+0x9C2F # <CJK>
+0x9C30 # <CJK>
+0x9C32 # <CJK>
+0x9C39 # <CJK>
+0x9C3A # <CJK>
+0x9C3B # <CJK>
+0x9C3E # <CJK>
+0x9C46 # <CJK>
+0x9C47 # <CJK>
+0x9C48 # <CJK>
+0x9C52 # <CJK>
+0x9C57 # <CJK>
+0x9C5A # <CJK>
+0x9C60 # <CJK>
+0x9C67 # <CJK>
+0x9C76 # <CJK>
+0x9C78 # <CJK>
+0x9CE5 # <CJK>
+0x9CE7 # <CJK>
+0x9CE9 # <CJK>
+0x9CEB # <CJK>
+0x9CEC # <CJK>
+0x9CF0 # <CJK>
+0x9CF3 # <CJK>
+0x9CF4 # <CJK>
+0x9CF6 # <CJK>
+0x9D03 # <CJK>
+0x9D06 # <CJK>
+0x9D07 # <CJK>
+0x9D08 # <CJK>
+0x9D09 # <CJK>
+0x9D0E # <CJK>
+0x9D12 # <CJK>
+0x9D15 # <CJK>
+0x9D1B # <CJK>
+0x9D1F # <CJK>
+0x9D23 # <CJK>
+0x9D26 # <CJK>
+0x9D28 # <CJK>
+0x9D2A # <CJK>
+0x9D2B # <CJK>
+0x9D2C # <CJK>
+0x9D3B # <CJK>
+0x9D3E # <CJK>
+0x9D3F # <CJK>
+0x9D41 # <CJK>
+0x9D44 # <CJK>
+0x9D46 # <CJK>
+0x9D48 # <CJK>
+0x9D50 # <CJK>
+0x9D51 # <CJK>
+0x9D59 # <CJK>
+0x9D5C # <CJK>
+0x9D5D # <CJK>
+0x9D5E # <CJK>
+0x9D60 # <CJK>
+0x9D61 # <CJK>
+0x9D64 # <CJK>
+0x9D6C # <CJK>
+0x9D6F # <CJK>
+0x9D72 # <CJK>
+0x9D7A # <CJK>
+0x9D87 # <CJK>
+0x9D89 # <CJK>
+0x9D8F # <CJK>
+0x9D9A # <CJK>
+0x9DA4 # <CJK>
+0x9DA9 # <CJK>
+0x9DAB # <CJK>
+0x9DAF # <CJK>
+0x9DB2 # <CJK>
+0x9DB4 # <CJK>
+0x9DB8 # <CJK>
+0x9DBA # <CJK>
+0x9DBB # <CJK>
+0x9DC1 # <CJK>
+0x9DC2 # <CJK>
+0x9DC4 # <CJK>
+0x9DC6 # <CJK>
+0x9DCF # <CJK>
+0x9DD3 # <CJK>
+0x9DD9 # <CJK>
+0x9DE6 # <CJK>
+0x9DED # <CJK>
+0x9DEF # <CJK>
+0x9DF2 # <CJK>
+0x9DF8 # <CJK>
+0x9DF9 # <CJK>
+0x9DFA # <CJK>
+0x9DFD # <CJK>
+0x9E1A # <CJK>
+0x9E1B # <CJK>
+0x9E1E # <CJK>
+0x9E75 # <CJK>
+0x9E78 # <CJK>
+0x9E79 # <CJK>
+0x9E7D # <CJK>
+0x9E7F # <CJK>
+0x9E81 # <CJK>
+0x9E88 # <CJK>
+0x9E8B # <CJK>
+0x9E8C # <CJK>
+0x9E91 # <CJK>
+0x9E92 # <CJK>
+0x9E93 # <CJK>
+0x9E95 # <CJK>
+0x9E97 # <CJK>
+0x9E9D # <CJK>
+0x9E9F # <CJK>
+0x9EA5 # <CJK>
+0x9EA6 # <CJK>
+0x9EA9 # <CJK>
+0x9EAA # <CJK>
+0x9EAD # <CJK>
+0x9EB8 # <CJK>
+0x9EB9 # <CJK>
+0x9EBA # <CJK>
+0x9EBB # <CJK>
+0x9EBC # <CJK>
+0x9EBE # <CJK>
+0x9EBF # <CJK>
+0x9EC4 # <CJK>
+0x9ECC # <CJK>
+0x9ECD # <CJK>
+0x9ECE # <CJK>
+0x9ECF # <CJK>
+0x9ED0 # <CJK>
+0x9ED2 # <CJK>
+0x9ED4 # <CJK>
+0x9ED8 # <CJK>
+0x9ED9 # <CJK>
+0x9EDB # <CJK>
+0x9EDC # <CJK>
+0x9EDD # <CJK>
+0x9EDE # <CJK>
+0x9EE0 # <CJK>
+0x9EE5 # <CJK>
+0x9EE8 # <CJK>
+0x9EEF # <CJK>
+0x9EF4 # <CJK>
+0x9EF6 # <CJK>
+0x9EF7 # <CJK>
+0x9EF9 # <CJK>
+0x9EFB # <CJK>
+0x9EFC # <CJK>
+0x9EFD # <CJK>
+0x9F07 # <CJK>
+0x9F08 # <CJK>
+0x9F0E # <CJK>
+0x9F13 # <CJK>
+0x9F15 # <CJK>
+0x9F20 # <CJK>
+0x9F21 # <CJK>
+0x9F2C # <CJK>
+0x9F3B # <CJK>
+0x9F3E # <CJK>
+0x9F4A # <CJK>
+0x9F4B # <CJK>
+0x9F4E # <CJK>
+0x9F4F # <CJK>
+0x9F52 # <CJK>
+0x9F54 # <CJK>
+0x9F5F # <CJK>
+0x9F60 # <CJK>
+0x9F61 # <CJK>
+0x9F62 # <CJK>
+0x9F63 # <CJK>
+0x9F66 # <CJK>
+0x9F67 # <CJK>
+0x9F6A # <CJK>
+0x9F6C # <CJK>
+0x9F72 # <CJK>
+0x9F76 # <CJK>
+0x9F77 # <CJK>
+0x9F8D # <CJK>
+0x9F95 # <CJK>
+0x9F9C # <CJK>
+0x9F9D # <CJK>
+0x9FA0 # <CJK>
+#0xFFE5 # FULLWIDTH YEN SIGN
diff --git a/fontconfig/fc-lang/ka.orth b/fontconfig/fc-lang/ka.orth
index dda35ade5..3f5e17747 100644
--- a/fontconfig/fc-lang/ka.orth
+++ b/fontconfig/fc-lang/ka.orth
@@ -1,34 +1,34 @@
-#
-# fontconfig/fc-lang/ka.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Georgian (KA)
-# 0589 # Armenian full stop (vertsaket)
-#10a0-10c5 # capital letters, not used in normal writing
-10d0-10f0
-#10f1-10f6 # Archaic letters not included in modern fonts
-#10f7-10f8 # additional letters for Mingrelian and Svan
-#10fb # Ancient Georgian paragraph separator
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+#
+# fontconfig/fc-lang/ka.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Georgian (KA)
+# 0589 # Armenian full stop (vertsaket)
+#10a0-10c5 # capital letters, not used in normal writing
+10d0-10f0
+#10f1-10f6 # Archaic letters not included in modern fonts
+#10f7-10f8 # additional letters for Mingrelian and Svan
+#10fb # Ancient Georgian paragraph separator
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/fontconfig/fc-lang/kaa.orth b/fontconfig/fc-lang/kaa.orth
index fe641a567..4c2253434 100644
--- a/fontconfig/fc-lang/kaa.orth
+++ b/fontconfig/fc-lang/kaa.orth
@@ -1,110 +1,110 @@
-#
-# fontconfig/fc-lang/kaa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kara-Kalpak (Karakalpak) (KAA)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-0492
-0493
-049a
-049b
-04a2
-04a3
-04ae
-04af
-04b2
-04b3
-04d8
-04d9
+#
+# fontconfig/fc-lang/kaa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kara-Kalpak (Karakalpak) (KAA)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+0492
+0493
+049a
+049b
+04a2
+04a3
+04ae
+04af
+04b2
+04b3
+04d8
+04d9
diff --git a/fontconfig/fc-lang/ki.orth b/fontconfig/fc-lang/ki.orth
index 147ce8584..0d3e054ad 100644
--- a/fontconfig/fc-lang/ki.orth
+++ b/fontconfig/fc-lang/ki.orth
@@ -1,33 +1,33 @@
-#
-# fontconfig/fc-lang/ki.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kikuyu (KI)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-0128 # LATIN CAPITAL LETTER I WITH TILDE
-0129 # LATIN SMALL LETTER I WITH TILDE
-0168 # LATIN CAPITAL LETTER U WITH TILDE
-0169 # LATIN SMALL LETTER U WITH TILDE
+#
+# fontconfig/fc-lang/ki.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kikuyu (KI)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+0128 # LATIN CAPITAL LETTER I WITH TILDE
+0129 # LATIN SMALL LETTER I WITH TILDE
+0168 # LATIN CAPITAL LETTER U WITH TILDE
+0169 # LATIN SMALL LETTER U WITH TILDE
diff --git a/fontconfig/fc-lang/kk.orth b/fontconfig/fc-lang/kk.orth
index 009a97ec8..9b59e2c39 100644
--- a/fontconfig/fc-lang/kk.orth
+++ b/fontconfig/fc-lang/kk.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/kk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kazakh (KK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#0401
-#0406
-0410-044f
-#0451
-0456
-0492-0493
-049a-049b
-04a2-04a3
-#04ae-04af
-#04b0-04b1
-04ba-04bb
-04d8-04d9
-04e8-04e9
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/kk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kazakh (KK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#0401
+#0406
+0410-044f
+#0451
+0456
+0492-0493
+049a-049b
+04a2-04a3
+#04ae-04af
+#04b0-04b1
+04ba-04bb
+04d8-04d9
+04e8-04e9
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/kl.orth b/fontconfig/fc-lang/kl.orth
index 2763de26d..a6b818a6d 100644
--- a/fontconfig/fc-lang/kl.orth
+++ b/fontconfig/fc-lang/kl.orth
@@ -1,63 +1,63 @@
-#
-# fontconfig/fc-lang/kl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Greenlandic (KL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-00c1
-00c2
-00c3
-00c5
-00c6
-#00c9
-00ca
-00cd
-00ce
-00d4
-00d8
-00da
-00db
-00e1
-00e2
-00e3
-00e5
-00e6
-#00e9
-00ea
-00ed
-00ee
-00f4
-00f8
-00fa
-00fb
-0128-0129
-0138
-0168-0169
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/kl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Greenlandic (KL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+00c1
+00c2
+00c3
+00c5
+00c6
+#00c9
+00ca
+00cd
+00ce
+00d4
+00d8
+00da
+00db
+00e1
+00e2
+00e3
+00e5
+00e6
+#00e9
+00ea
+00ed
+00ee
+00f4
+00f8
+00fa
+00fb
+0128-0129
+0138
+0168-0169
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/kn.orth b/fontconfig/fc-lang/kn.orth
index 7b525304a..8366a44bf 100644
--- a/fontconfig/fc-lang/kn.orth
+++ b/fontconfig/fc-lang/kn.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/kn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kannada (kn)
-#
-# Taken from the Unicode coverage of this language
-#
-0c82-0c83
-0c85-0c8c
-0c8e-0c90
-0c92-0ca8
-0caa-0cb3
-0cb5-0cb9
-0cbe-0cc4
-0cc6-0cc8
-0cca-0ccd
-0cd5-0cd6
-0cde
-0ce0-0ce1
-#0ce6-0cef # Digits
+#
+# fontconfig/fc-lang/kn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kannada (kn)
+#
+# Taken from the Unicode coverage of this language
+#
+0c82-0c83
+0c85-0c8c
+0c8e-0c90
+0c92-0ca8
+0caa-0cb3
+0cb5-0cb9
+0cbe-0cc4
+0cc6-0cc8
+0cca-0ccd
+0cd5-0cd6
+0cde
+0ce0-0ce1
+#0ce6-0cef # Digits
diff --git a/fontconfig/fc-lang/ko.orth b/fontconfig/fc-lang/ko.orth
index 1b02d9a8c..e2af7651a 100644
--- a/fontconfig/fc-lang/ko.orth
+++ b/fontconfig/fc-lang/ko.orth
@@ -1,2538 +1,2538 @@
-#
-# fontconfig/fc-lang/ko.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Korean (KO)
-#
-# Coverage from KS X 1001
-#
-# Does not include any Han characters as many Korean fonts
-# don't cover them, and modern Korean usage is moving away from them
-#
-# Tor Andersson <tor.andersson@gmail.com>
-#
-#0x3000 # IDEOGRAPHIC SPACE
-#0x3001 # IDEOGRAPHIC COMMA
-#0x3002 # IDEOGRAPHIC FULL STOP
-#0x327F # KOREAN STANDARD SYMBOL
-#0xFFE6 # FULLWIDTH WON SIGN
-0x3131 # HANGUL LETTER KIYEOK
-0x3132 # HANGUL LETTER SSANGKIYEOK
-0x3133 # HANGUL LETTER KIYEOK-SIOS
-0x3134 # HANGUL LETTER NIEUN
-0x3135 # HANGUL LETTER NIEUN-CIEUC
-0x3136 # HANGUL LETTER NIEUN-HIEUH
-0x3137 # HANGUL LETTER TIKEUT
-0x3138 # HANGUL LETTER SSANGTIKEUT
-0x3139 # HANGUL LETTER RIEUL
-0x313A # HANGUL LETTER RIEUL-KIYEOK
-0x313B # HANGUL LETTER RIEUL-MIEUM
-0x313C # HANGUL LETTER RIEUL-PIEUP
-0x313D # HANGUL LETTER RIEUL-SIOS
-0x313E # HANGUL LETTER RIEUL-THIEUTH
-0x313F # HANGUL LETTER RIEUL-PHIEUPH
-0x3140 # HANGUL LETTER RIEUL-HIEUH
-0x3141 # HANGUL LETTER MIEUM
-0x3142 # HANGUL LETTER PIEUP
-0x3143 # HANGUL LETTER SSANGPIEUP
-0x3144 # HANGUL LETTER PIEUP-SIOS
-0x3145 # HANGUL LETTER SIOS
-0x3146 # HANGUL LETTER SSANGSIOS
-0x3147 # HANGUL LETTER IEUNG
-0x3148 # HANGUL LETTER CIEUC
-0x3149 # HANGUL LETTER SSANGCIEUC
-0x314A # HANGUL LETTER CHIEUCH
-0x314B # HANGUL LETTER KHIEUKH
-0x314C # HANGUL LETTER THIEUTH
-0x314D # HANGUL LETTER PHIEUPH
-0x314E # HANGUL LETTER HIEUH
-0x314F # HANGUL LETTER A
-0x3150 # HANGUL LETTER AE
-0x3151 # HANGUL LETTER YA
-0x3152 # HANGUL LETTER YAE
-0x3153 # HANGUL LETTER EO
-0x3154 # HANGUL LETTER E
-0x3155 # HANGUL LETTER YEO
-0x3156 # HANGUL LETTER YE
-0x3157 # HANGUL LETTER O
-0x3158 # HANGUL LETTER WA
-0x3159 # HANGUL LETTER WAE
-0x315A # HANGUL LETTER OE
-0x315B # HANGUL LETTER YO
-0x315C # HANGUL LETTER U
-0x315D # HANGUL LETTER WEO
-0x315E # HANGUL LETTER WE
-0x315F # HANGUL LETTER WI
-0x3160 # HANGUL LETTER YU
-0x3161 # HANGUL LETTER EU
-0x3162 # HANGUL LETTER YI
-0x3163 # HANGUL LETTER I
-0x3164 # HANGUL FILLER
-0x3165 # HANGUL LETTER SSANGNIEUN
-0x3166 # HANGUL LETTER NIEUN-TIKEUT
-0x3167 # HANGUL LETTER NIEUN-SIOS
-0x3168 # HANGUL LETTER NIEUN-PANSIOS
-0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS
-0x316A # HANGUL LETTER RIEUL-TIKEUT
-0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS
-0x316C # HANGUL LETTER RIEUL-PANSIOS
-0x316D # HANGUL LETTER RIEUL-YEORINHIEUH
-0x316E # HANGUL LETTER MIEUM-PIEUP
-0x316F # HANGUL LETTER MIEUM-SIOS
-0x3170 # HANGUL LETTER MIEUM-PANSIOS
-0x3171 # HANGUL LETTER KAPYEOUNMIEUM
-0x3172 # HANGUL LETTER PIEUP-KIYEOK
-0x3173 # HANGUL LETTER PIEUP-TIKEUT
-0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK
-0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT
-0x3176 # HANGUL LETTER PIEUP-CIEUC
-0x3177 # HANGUL LETTER PIEUP-THIEUTH
-0x3178 # HANGUL LETTER KAPYEOUNPIEUP
-0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP
-0x317A # HANGUL LETTER SIOS-KIYEOK
-0x317B # HANGUL LETTER SIOS-NIEUN
-0x317C # HANGUL LETTER SIOS-TIKEUT
-0x317D # HANGUL LETTER SIOS-PIEUP
-0x317E # HANGUL LETTER SIOS-CIEUC
-0x317F # HANGUL LETTER PANSIOS
-0x3180 # HANGUL LETTER SSANGIEUNG
-0x3181 # HANGUL LETTER YESIEUNG
-0x3182 # HANGUL LETTER YESIEUNG-SIOS
-0x3183 # HANGUL LETTER YESIEUNG-PANSIOS
-0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH
-0x3185 # HANGUL LETTER SSANGHIEUH
-0x3186 # HANGUL LETTER YEORINHIEUH
-0x3187 # HANGUL LETTER YO-YA
-0x3188 # HANGUL LETTER YO-YAE
-0x3189 # HANGUL LETTER YO-I
-0x318A # HANGUL LETTER YU-YEO
-0x318B # HANGUL LETTER YU-YE
-0x318C # HANGUL LETTER YU-I
-0x318D # HANGUL LETTER ARAEA
-0x318E # HANGUL LETTER ARAEAE
-#0x3260 # CIRCLED HANGUL KIYEOK
-#0x3261 # CIRCLED HANGUL NIEUN
-#0x3262 # CIRCLED HANGUL TIKEUT
-#0x3263 # CIRCLED HANGUL RIEUL
-#0x3264 # CIRCLED HANGUL MIEUM
-#0x3265 # CIRCLED HANGUL PIEUP
-#0x3266 # CIRCLED HANGUL SIOS
-#0x3267 # CIRCLED HANGUL IEUNG
-#0x3268 # CIRCLED HANGUL CIEUC
-#0x3269 # CIRCLED HANGUL CHIEUCH
-#0x326A # CIRCLED HANGUL KHIEUKH
-#0x326B # CIRCLED HANGUL THIEUTH
-#0x326C # CIRCLED HANGUL PHIEUPH
-#0x326D # CIRCLED HANGUL HIEUH
-#0x326E # CIRCLED HANGUL KIYEOK A
-#0x326F # CIRCLED HANGUL NIEUN A
-#0x3270 # CIRCLED HANGUL TIKEUT A
-#0x3271 # CIRCLED HANGUL RIEUL A
-#0x3272 # CIRCLED HANGUL MIEUM A
-#0x3273 # CIRCLED HANGUL PIEUP A
-#0x3274 # CIRCLED HANGUL SIOS A
-#0x3275 # CIRCLED HANGUL IEUNG A
-#0x3276 # CIRCLED HANGUL CIEUC A
-#0x3277 # CIRCLED HANGUL CHIEUCH A
-#0x3278 # CIRCLED HANGUL KHIEUKH A
-#0x3279 # CIRCLED HANGUL THIEUTH A
-#0x327A # CIRCLED HANGUL PHIEUPH A
-#0x327B # CIRCLED HANGUL HIEUH A
-#0x3200 # PARENTHESIZED HANGUL KIYEOK
-#0x3201 # PARENTHESIZED HANGUL NIEUN
-#0x3202 # PARENTHESIZED HANGUL TIKEUT
-#0x3203 # PARENTHESIZED HANGUL RIEUL
-#0x3204 # PARENTHESIZED HANGUL MIEUM
-#0x3205 # PARENTHESIZED HANGUL PIEUP
-#0x3206 # PARENTHESIZED HANGUL SIOS
-#0x3207 # PARENTHESIZED HANGUL IEUNG
-#0x3208 # PARENTHESIZED HANGUL CIEUC
-#0x3209 # PARENTHESIZED HANGUL CHIEUCH
-#0x320A # PARENTHESIZED HANGUL KHIEUKH
-#0x320B # PARENTHESIZED HANGUL THIEUTH
-#0x320C # PARENTHESIZED HANGUL PHIEUPH
-#0x320D # PARENTHESIZED HANGUL HIEUH
-#0x320E # PARENTHESIZED HANGUL KIYEOK A
-#0x320F # PARENTHESIZED HANGUL NIEUN A
-#0x3210 # PARENTHESIZED HANGUL TIKEUT A
-#0x3211 # PARENTHESIZED HANGUL RIEUL A
-#0x3212 # PARENTHESIZED HANGUL MIEUM A
-#0x3213 # PARENTHESIZED HANGUL PIEUP A
-#0x3214 # PARENTHESIZED HANGUL SIOS A
-#0x3215 # PARENTHESIZED HANGUL IEUNG A
-#0x3216 # PARENTHESIZED HANGUL CIEUC A
-#0x3217 # PARENTHESIZED HANGUL CHIEUCH A
-#0x3218 # PARENTHESIZED HANGUL KHIEUKH A
-#0x3219 # PARENTHESIZED HANGUL THIEUTH A
-#0x321A # PARENTHESIZED HANGUL PHIEUPH A
-#0x321B # PARENTHESIZED HANGUL HIEUH A
-#0x321C # PARENTHESIZED HANGUL CIEUC U
-0xAC00 # HANGUL SYLLABLE KIYEOK-A
-0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK
-0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN
-0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT
-0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL
-0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK
-0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM
-0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM
-0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP
-0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS
-0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS
-0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS
-0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG
-0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC
-0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH
-0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH
-0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH
-0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH
-0xAC1C # HANGUL SYLLABLE KIYEOK-AE
-0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK
-0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN
-0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL
-0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM
-0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP
-0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS
-0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS
-0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG
-0xAC38 # HANGUL SYLLABLE KIYEOK-YA
-0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK
-0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN
-0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL
-0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS
-0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG
-0xAC54 # HANGUL SYLLABLE KIYEOK-YAE
-0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN
-0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL
-0xAC70 # HANGUL SYLLABLE KIYEOK-EO
-0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK
-0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN
-0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT
-0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL
-0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM
-0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM
-0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP
-0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS
-0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS
-0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG
-0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC
-0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH
-0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH
-0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH
-0xAC8C # HANGUL SYLLABLE KIYEOK-E
-0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN
-0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL
-0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM
-0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP
-0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS
-0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS
-0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG
-0xACA8 # HANGUL SYLLABLE KIYEOK-YEO
-0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK
-0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK
-0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN
-0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT
-0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL
-0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM
-0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP
-0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS
-0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS
-0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG
-0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH
-0xACC4 # HANGUL SYLLABLE KIYEOK-YE
-0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN
-0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL
-0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP
-0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS
-0xACE0 # HANGUL SYLLABLE KIYEOK-O
-0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK
-0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN
-0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT
-0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL
-0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM
-0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS
-0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH
-0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM
-0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP
-0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS
-0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG
-0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC
-0xACFC # HANGUL SYLLABLE KIYEOK-WA
-0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK
-0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN
-0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL
-0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM
-0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM
-0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP
-0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS
-0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG
-0xAD18 # HANGUL SYLLABLE KIYEOK-WAE
-0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN
-0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL
-0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP
-0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS
-0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG
-0xAD34 # HANGUL SYLLABLE KIYEOK-OE
-0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK
-0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN
-0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL
-0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM
-0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP
-0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS
-0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG
-0xAD50 # HANGUL SYLLABLE KIYEOK-YO
-0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN
-0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL
-0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP
-0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS
-0xAD6C # HANGUL SYLLABLE KIYEOK-U
-0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK
-0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN
-0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT
-0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL
-0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK
-0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM
-0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH
-0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM
-0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP
-0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS
-0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG
-0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC
-0xAD88 # HANGUL SYLLABLE KIYEOK-WEO
-0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK
-0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN
-0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL
-0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS
-0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG
-0xADA4 # HANGUL SYLLABLE KIYEOK-WE
-0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS
-0xADC0 # HANGUL SYLLABLE KIYEOK-WI
-0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK
-0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN
-0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL
-0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM
-0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP
-0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS
-0xADDC # HANGUL SYLLABLE KIYEOK-YU
-0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN
-0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL
-0xADF8 # HANGUL SYLLABLE KIYEOK-EU
-0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK
-0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN
-0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT
-0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL
-0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK
-0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM
-0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP
-0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS
-0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG
-0xAE14 # HANGUL SYLLABLE KIYEOK-YI
-0xAE30 # HANGUL SYLLABLE KIYEOK-I
-0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK
-0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN
-0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT
-0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL
-0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM
-0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM
-0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP
-0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS
-0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG
-0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC
-0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH
-0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A
-0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK
-0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK
-0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN
-0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL
-0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM
-0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM
-0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP
-0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS
-0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS
-0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG
-0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH
-0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE
-0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK
-0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN
-0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL
-0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM
-0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP
-0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS
-0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS
-0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG
-0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA
-0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK
-0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL
-0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO
-0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK
-0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK
-0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN
-0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL
-0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM
-0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP
-0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS
-0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS
-0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG
-0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E
-0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK
-0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN
-0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM
-0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS
-0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG
-0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO
-0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN
-0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL
-0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS
-0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS
-0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH
-0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE
-0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O
-0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK
-0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN
-0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH
-0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL
-0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM
-0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP
-0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS
-0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG
-0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC
-0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH
-0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA
-0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK
-0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL
-0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS
-0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG
-0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE
-0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK
-0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG
-0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE
-0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN
-0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL
-0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM
-0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP
-0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG
-0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO
-0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U
-0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK
-0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN
-0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL
-0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH
-0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM
-0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP
-0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS
-0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG
-0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC
-0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO
-0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL
-0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS
-0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG
-0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE
-0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK
-0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN
-0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL
-0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM
-0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP
-0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS
-0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI
-0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN
-0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL
-0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM
-0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP
-0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU
-0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU
-0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK
-0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN
-0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH
-0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL
-0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM
-0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH
-0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM
-0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP
-0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS
-0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG
-0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH
-0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I
-0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK
-0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN
-0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL
-0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM
-0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP
-0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS
-0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG
-0xB098 # HANGUL SYLLABLE NIEUN-A
-0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK
-0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK
-0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN
-0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT
-0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL
-0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK
-0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM
-0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM
-0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP
-0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS
-0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS
-0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG
-0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC
-0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH
-0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH
-0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH
-0xB0B4 # HANGUL SYLLABLE NIEUN-AE
-0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK
-0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN
-0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL
-0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM
-0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP
-0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS
-0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS
-0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG
-0xB0D0 # HANGUL SYLLABLE NIEUN-YA
-0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK
-0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN
-0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL
-0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM
-0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG
-0xB108 # HANGUL SYLLABLE NIEUN-EO
-0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK
-0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS
-0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN
-0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL
-0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM
-0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP
-0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM
-0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP
-0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS
-0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS
-0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG
-0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH
-0xB124 # HANGUL SYLLABLE NIEUN-E
-0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK
-0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN
-0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL
-0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM
-0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP
-0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS
-0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS
-0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG
-0xB140 # HANGUL SYLLABLE NIEUN-YEO
-0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK
-0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN
-0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL
-0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM
-0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP
-0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS
-0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG
-0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH
-0xB15C # HANGUL SYLLABLE NIEUN-YE
-0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN
-0xB178 # HANGUL SYLLABLE NIEUN-O
-0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK
-0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN
-0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL
-0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM
-0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM
-0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP
-0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS
-0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG
-0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH
-0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH
-0xB194 # HANGUL SYLLABLE NIEUN-WA
-0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN
-0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL
-0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS
-0xB1CC # HANGUL SYLLABLE NIEUN-OE
-0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN
-0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL
-0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM
-0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP
-0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS
-0xB1E8 # HANGUL SYLLABLE NIEUN-YO
-0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK
-0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN
-0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL
-0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP
-0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS
-0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG
-0xB204 # HANGUL SYLLABLE NIEUN-U
-0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK
-0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN
-0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT
-0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL
-0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM
-0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP
-0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS
-0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG
-0xB220 # HANGUL SYLLABLE NIEUN-WEO
-0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS
-0xB23C # HANGUL SYLLABLE NIEUN-WE
-0xB258 # HANGUL SYLLABLE NIEUN-WI
-0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN
-0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL
-0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM
-0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP
-0xB274 # HANGUL SYLLABLE NIEUN-YU
-0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK
-0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL
-0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM
-0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP
-0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG
-0xB290 # HANGUL SYLLABLE NIEUN-EU
-0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK
-0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN
-0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL
-0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK
-0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM
-0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM
-0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP
-0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS
-0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG
-0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC
-0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH
-0xB2AC # HANGUL SYLLABLE NIEUN-YI
-0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN
-0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL
-0xB2C8 # HANGUL SYLLABLE NIEUN-I
-0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK
-0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN
-0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL
-0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95>
-0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM
-0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP
-0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS
-0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG
-0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH
-0xB2E4 # HANGUL SYLLABLE TIKEUT-A
-0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK
-0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK
-0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN
-0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT
-0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL
-0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK
-0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM
-0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP
-0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH
-0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM
-0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP
-0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS
-0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS
-0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG
-0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC
-0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH
-0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH
-0xB300 # HANGUL SYLLABLE TIKEUT-AE
-0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK
-0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN
-0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL
-0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM
-0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP
-0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS
-0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS
-0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG
-0xB31C # HANGUL SYLLABLE TIKEUT-YA
-0xB354 # HANGUL SYLLABLE TIKEUT-EO
-0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK
-0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK
-0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN
-0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT
-0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL
-0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM
-0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP
-0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM
-0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP
-0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS
-0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG
-0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH
-0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH
-0xB370 # HANGUL SYLLABLE TIKEUT-E
-0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK
-0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN
-0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL
-0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM
-0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP
-0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS
-0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS
-0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG
-0xB38C # HANGUL SYLLABLE TIKEUT-YEO
-0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN
-0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL
-0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS
-0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG
-0xB3A8 # HANGUL SYLLABLE TIKEUT-YE
-0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN
-0xB3C4 # HANGUL SYLLABLE TIKEUT-O
-0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK
-0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN
-0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT
-0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL
-0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM
-0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS
-0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM
-0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP
-0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS
-0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG
-0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH
-0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH
-0xB3E0 # HANGUL SYLLABLE TIKEUT-WA
-0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN
-0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL
-0xB3FC # HANGUL SYLLABLE TIKEUT-WAE
-0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS
-0xB418 # HANGUL SYLLABLE TIKEUT-OE
-0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN
-0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL
-0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM
-0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP
-0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS
-0xB434 # HANGUL SYLLABLE TIKEUT-YO
-0xB450 # HANGUL SYLLABLE TIKEUT-U
-0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK
-0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN
-0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL
-0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM
-0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP
-0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS
-0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG
-0xB46C # HANGUL SYLLABLE TIKEUT-WEO
-0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS
-0xB488 # HANGUL SYLLABLE TIKEUT-WE
-0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG
-0xB4A4 # HANGUL SYLLABLE TIKEUT-WI
-0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN
-0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL
-0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP
-0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS
-0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG
-0xB4C0 # HANGUL SYLLABLE TIKEUT-YU
-0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN
-0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL
-0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM
-0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG
-0xB4DC # HANGUL SYLLABLE TIKEUT-EU
-0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK
-0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN
-0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT
-0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL
-0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM
-0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM
-0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP
-0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS
-0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG
-0xB4F8 # HANGUL SYLLABLE TIKEUT-YI
-0xB514 # HANGUL SYLLABLE TIKEUT-I
-0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK
-0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN
-0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT
-0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL
-0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM
-0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP
-0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS
-0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS
-0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG
-0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC
-0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A
-0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK
-0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN
-0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL
-0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM
-0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP
-0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS
-0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS
-0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG
-0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH
-0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE
-0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK
-0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN
-0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL
-0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM
-0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP
-0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS
-0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS
-0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG
-0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO
-0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK
-0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN
-0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL
-0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM
-0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP
-0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM
-0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP
-0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS
-0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS
-0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG
-0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH
-0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E
-0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK
-0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN
-0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL
-0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM
-0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP
-0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS
-0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS
-0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG
-0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO
-0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS
-0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O
-0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK
-0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN
-0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL
-0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG
-0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA
-0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL
-0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE
-0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE
-0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN
-0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U
-0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK
-0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN
-0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL
-0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH
-0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM
-0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG
-0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE
-0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI
-0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN
-0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL
-0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM
-0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP
-0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG
-0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU
-0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK
-0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN
-0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT
-0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL
-0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM
-0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP
-0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS
-0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI
-0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN
-0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL
-0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM
-0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP
-0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I
-0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN
-0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL
-0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM
-0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP
-0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS
-0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG
-0xB77C # HANGUL SYLLABLE RIEUL-A
-0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK
-0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN
-0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL
-0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM
-0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP
-0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS
-0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS
-0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG
-0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC
-0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH
-0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH
-0xB798 # HANGUL SYLLABLE RIEUL-AE
-0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK
-0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN
-0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL
-0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM
-0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP
-0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS
-0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS
-0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG
-0xB7B4 # HANGUL SYLLABLE RIEUL-YA
-0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK
-0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN
-0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS
-0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG
-0xB7EC # HANGUL SYLLABLE RIEUL-EO
-0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK
-0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN
-0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL
-0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM
-0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP
-0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS
-0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS
-0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG
-0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH
-0xB808 # HANGUL SYLLABLE RIEUL-E
-0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK
-0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN
-0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL
-0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM
-0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP
-0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS
-0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG
-0xB824 # HANGUL SYLLABLE RIEUL-YEO
-0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK
-0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN
-0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL
-0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM
-0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP
-0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS
-0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS
-0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG
-0xB840 # HANGUL SYLLABLE RIEUL-YE
-0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN
-0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP
-0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS
-0xB85C # HANGUL SYLLABLE RIEUL-O
-0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK
-0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN
-0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL
-0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM
-0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP
-0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS
-0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG
-0xB878 # HANGUL SYLLABLE RIEUL-WA
-0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN
-0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG
-0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS
-0xB8B0 # HANGUL SYLLABLE RIEUL-OE
-0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN
-0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL
-0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM
-0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP
-0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS
-0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG
-0xB8CC # HANGUL SYLLABLE RIEUL-YO
-0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN
-0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL
-0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP
-0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS
-0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG
-0xB8E8 # HANGUL SYLLABLE RIEUL-U
-0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK
-0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN
-0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL
-0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM
-0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP
-0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS
-0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG
-0xB904 # HANGUL SYLLABLE RIEUL-WEO
-0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS
-0xB920 # HANGUL SYLLABLE RIEUL-WE
-0xB93C # HANGUL SYLLABLE RIEUL-WI
-0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK
-0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN
-0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL
-0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM
-0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS
-0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG
-0xB958 # HANGUL SYLLABLE RIEUL-YU
-0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK
-0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN
-0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL
-0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM
-0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP
-0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS
-0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG
-0xB974 # HANGUL SYLLABLE RIEUL-EU
-0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK
-0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN
-0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL
-0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM
-0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP
-0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS
-0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG
-0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC
-0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH
-0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH
-0xB9AC # HANGUL SYLLABLE RIEUL-I
-0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK
-0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN
-0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL
-0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM
-0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP
-0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS
-0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG
-0xB9C8 # HANGUL SYLLABLE MIEUM-A
-0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK
-0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN
-0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH
-0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT
-0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL
-0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK
-0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM
-0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM
-0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP
-0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS
-0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG
-0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC
-0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH
-0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH
-0xB9E4 # HANGUL SYLLABLE MIEUM-AE
-0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK
-0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN
-0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL
-0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM
-0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP
-0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS
-0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS
-0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG
-0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC
-0xBA00 # HANGUL SYLLABLE MIEUM-YA
-0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK
-0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL
-0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG
-0xBA38 # HANGUL SYLLABLE MIEUM-EO
-0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK
-0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN
-0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL
-0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM
-0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM
-0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP
-0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS
-0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG
-0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC
-0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH
-0xBA54 # HANGUL SYLLABLE MIEUM-E
-0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK
-0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN
-0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL
-0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM
-0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP
-0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS
-0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS
-0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG
-0xBA70 # HANGUL SYLLABLE MIEUM-YEO
-0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK
-0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN
-0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL
-0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS
-0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS
-0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG
-0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH
-0xBA8C # HANGUL SYLLABLE MIEUM-YE
-0xBAA8 # HANGUL SYLLABLE MIEUM-O
-0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK
-0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS
-0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN
-0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL
-0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM
-0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM
-0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP
-0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS
-0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG
-0xBAC4 # HANGUL SYLLABLE MIEUM-WA
-0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN
-0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS
-0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG
-0xBAFC # HANGUL SYLLABLE MIEUM-OE
-0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN
-0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL
-0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP
-0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS
-0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG
-0xBB18 # HANGUL SYLLABLE MIEUM-YO
-0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN
-0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL
-0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP
-0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS
-0xBB34 # HANGUL SYLLABLE MIEUM-U
-0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK
-0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK
-0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN
-0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT
-0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL
-0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK
-0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM
-0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM
-0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP
-0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS
-0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG
-0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH
-0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH
-0xBB50 # HANGUL SYLLABLE MIEUM-WEO
-0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN
-0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL
-0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP
-0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS
-0xBB6C # HANGUL SYLLABLE MIEUM-WE
-0xBB88 # HANGUL SYLLABLE MIEUM-WI
-0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN
-0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL
-0xBBA4 # HANGUL SYLLABLE MIEUM-YU
-0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN
-0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL
-0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM
-0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS
-0xBBC0 # HANGUL SYLLABLE MIEUM-EU
-0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN
-0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL
-0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM
-0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS
-0xBBF8 # HANGUL SYLLABLE MIEUM-I
-0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK
-0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN
-0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT
-0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL
-0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM
-0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM
-0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP
-0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS
-0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS
-0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG
-0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH
-0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH
-0xBC14 # HANGUL SYLLABLE PIEUP-A
-0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK
-0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK
-0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS
-0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN
-0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT
-0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL
-0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK
-0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM
-0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP
-0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM
-0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP
-0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS
-0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG
-0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH
-0xBC30 # HANGUL SYLLABLE PIEUP-AE
-0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK
-0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN
-0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL
-0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM
-0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP
-0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS
-0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS
-0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG
-0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH
-0xBC4C # HANGUL SYLLABLE PIEUP-YA
-0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK
-0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN
-0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP
-0xBC84 # HANGUL SYLLABLE PIEUP-EO
-0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK
-0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN
-0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT
-0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL
-0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM
-0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM
-0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP
-0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS
-0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG
-0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC
-0xBCA0 # HANGUL SYLLABLE PIEUP-E
-0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK
-0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN
-0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT
-0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL
-0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM
-0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP
-0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS
-0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS
-0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG
-0xBCBC # HANGUL SYLLABLE PIEUP-YEO
-0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK
-0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN
-0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL
-0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP
-0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS
-0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS
-0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG
-0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH
-0xBCD8 # HANGUL SYLLABLE PIEUP-YE
-0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN
-0xBCF4 # HANGUL SYLLABLE PIEUP-O
-0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK
-0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK
-0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN
-0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL
-0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM
-0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP
-0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS
-0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG
-0xBD10 # HANGUL SYLLABLE PIEUP-WA
-0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN
-0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS
-0xBD2C # HANGUL SYLLABLE PIEUP-WAE
-0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS
-0xBD48 # HANGUL SYLLABLE PIEUP-OE
-0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK
-0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN
-0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL
-0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM
-0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP
-0xBD64 # HANGUL SYLLABLE PIEUP-YO
-0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN
-0xBD80 # HANGUL SYLLABLE PIEUP-U
-0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK
-0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN
-0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT
-0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL
-0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK
-0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM
-0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM
-0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP
-0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS
-0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG
-0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH
-0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH
-0xBD9C # HANGUL SYLLABLE PIEUP-WEO
-0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL
-0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS
-0xBDB8 # HANGUL SYLLABLE PIEUP-WE
-0xBDD4 # HANGUL SYLLABLE PIEUP-WI
-0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK
-0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN
-0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL
-0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG
-0xBDF0 # HANGUL SYLLABLE PIEUP-YU
-0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN
-0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL
-0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM
-0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS
-0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG
-0xBE0C # HANGUL SYLLABLE PIEUP-EU
-0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK
-0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN
-0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL
-0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM
-0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP
-0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS
-0xBE44 # HANGUL SYLLABLE PIEUP-I
-0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK
-0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN
-0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL
-0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM
-0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM
-0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP
-0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS
-0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG
-0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC
-0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH
-0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A
-0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK
-0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN
-0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL
-0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM
-0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM
-0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP
-0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS
-0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS
-0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG
-0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH
-0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE
-0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK
-0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN
-0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL
-0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM
-0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP
-0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS
-0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS
-0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG
-0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA
-0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK
-0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM
-0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO
-0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK
-0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN
-0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT
-0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL
-0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM
-0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS
-0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS
-0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG
-0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E
-0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG
-0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO
-0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK
-0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM
-0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP
-0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS
-0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS
-0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG
-0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O
-0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK
-0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN
-0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL
-0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM
-0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP
-0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG
-0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE
-0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO
-0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG
-0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U
-0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK
-0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN
-0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL
-0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM
-0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS
-0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG
-0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU
-0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG
-0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU
-0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN
-0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL
-0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM
-0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP
-0xC090 # HANGUL SYLLABLE SSANGPIEUP-I
-0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK
-0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN
-0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL
-0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM
-0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP
-0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS
-0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG
-0xC0AC # HANGUL SYLLABLE SIOS-A
-0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK
-0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS
-0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN
-0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT
-0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL
-0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK
-0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM
-0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM
-0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP
-0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS
-0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS
-0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG
-0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH
-0xC0C8 # HANGUL SYLLABLE SIOS-AE
-0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK
-0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN
-0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL
-0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM
-0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP
-0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS
-0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS
-0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG
-0xC0E4 # HANGUL SYLLABLE SIOS-YA
-0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK
-0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN
-0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL
-0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM
-0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP
-0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS
-0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG
-0xC100 # HANGUL SYLLABLE SIOS-YAE
-0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN
-0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL
-0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM
-0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG
-0xC11C # HANGUL SYLLABLE SIOS-EO
-0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK
-0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK
-0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS
-0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN
-0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT
-0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL
-0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM
-0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP
-0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM
-0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP
-0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS
-0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS
-0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG
-0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH
-0xC138 # HANGUL SYLLABLE SIOS-E
-0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK
-0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN
-0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL
-0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM
-0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP
-0xC14B # HANGUL SYLLABLE SIOS-E-SIOS
-0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS
-0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG
-0xC154 # HANGUL SYLLABLE SIOS-YEO
-0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK
-0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN
-0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL
-0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM
-0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP
-0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS
-0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS
-0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG
-0xC170 # HANGUL SYLLABLE SIOS-YE
-0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN
-0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL
-0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG
-0xC18C # HANGUL SYLLABLE SIOS-O
-0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK
-0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK
-0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN
-0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL
-0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM
-0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM
-0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP
-0xC19F # HANGUL SYLLABLE SIOS-O-SIOS
-0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG
-0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH
-0xC1A8 # HANGUL SYLLABLE SIOS-WA
-0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK
-0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN
-0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL
-0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG
-0xC1C4 # HANGUL SYLLABLE SIOS-WAE
-0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN
-0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL
-0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM
-0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS
-0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS
-0xC1E0 # HANGUL SYLLABLE SIOS-OE
-0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN
-0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL
-0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM
-0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP
-0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS
-0xC1FC # HANGUL SYLLABLE SIOS-YO
-0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK
-0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN
-0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL
-0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM
-0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP
-0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS
-0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG
-0xC218 # HANGUL SYLLABLE SIOS-U
-0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK
-0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN
-0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT
-0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL
-0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM
-0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP
-0xC22B # HANGUL SYLLABLE SIOS-U-SIOS
-0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG
-0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH
-0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH
-0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH
-0xC234 # HANGUL SYLLABLE SIOS-WEO
-0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS
-0xC250 # HANGUL SYLLABLE SIOS-WE
-0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK
-0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN
-0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL
-0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM
-0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG
-0xC26C # HANGUL SYLLABLE SIOS-WI
-0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK
-0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN
-0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL
-0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM
-0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP
-0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS
-0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG
-0xC288 # HANGUL SYLLABLE SIOS-YU
-0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK
-0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL
-0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM
-0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS
-0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG
-0xC2A4 # HANGUL SYLLABLE SIOS-EU
-0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK
-0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN
-0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL
-0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK
-0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM
-0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP
-0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS
-0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG
-0xC2DC # HANGUL SYLLABLE SIOS-I
-0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK
-0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN
-0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT
-0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL
-0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH
-0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM
-0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP
-0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS
-0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG
-0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH
-0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A
-0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK
-0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS
-0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN
-0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL
-0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM
-0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP
-0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS
-0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG
-0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH
-0xC314 # HANGUL SYLLABLE SSANGSIOS-AE
-0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK
-0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN
-0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL
-0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM
-0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP
-0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS
-0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG
-0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG
-0xC368 # HANGUL SYLLABLE SSANGSIOS-EO
-0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK
-0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN
-0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL
-0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM
-0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM
-0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP
-0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS
-0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG
-0xC384 # HANGUL SYLLABLE SSANGSIOS-E
-0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN
-0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL
-# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf)
-0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O
-0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK
-0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN
-0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT
-0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL
-0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM
-0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM
-0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP
-0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG
-0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA
-0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK
-0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN
-0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS
-0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE
-0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS
-0xC42C # HANGUL SYLLABLE SSANGSIOS-OE
-0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN
-0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL
-0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM
-0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP
-0xC448 # HANGUL SYLLABLE SSANGSIOS-YO
-0xC464 # HANGUL SYLLABLE SSANGSIOS-U
-0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK
-0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN
-0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL
-0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM
-0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP
-0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG
-0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO
-0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS
-0xC49C # HANGUL SYLLABLE SSANGSIOS-WE
-0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI
-0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN
-0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG
-0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU
-0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK
-0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN
-0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL
-0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM
-0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH
-0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM
-0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP
-0xC50C # HANGUL SYLLABLE SSANGSIOS-YI
-0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN
-0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL
-0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM
-0xC528 # HANGUL SYLLABLE SSANGSIOS-I
-0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK
-0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN
-0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL
-0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM
-0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP
-0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS
-0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG
-0xC544 # HANGUL SYLLABLE IEUNG-A
-0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK
-0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN
-0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC
-0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH
-0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL
-0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK
-0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM
-0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH
-0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM
-0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP
-0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS
-0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS
-0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG
-0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH
-0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH
-0xC560 # HANGUL SYLLABLE IEUNG-AE
-0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK
-0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN
-0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL
-0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM
-0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP
-0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS
-0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS
-0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG
-0xC57C # HANGUL SYLLABLE IEUNG-YA
-0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK
-0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN
-0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL
-0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP
-0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM
-0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP
-0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS
-0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG
-0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH
-0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH
-0xC598 # HANGUL SYLLABLE IEUNG-YAE
-0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN
-0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL
-0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP
-0xC5B4 # HANGUL SYLLABLE IEUNG-EO
-0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK
-0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN
-0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC
-0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT
-0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL
-0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK
-0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM
-0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM
-0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP
-0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS
-0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS
-0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS
-0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG
-0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC
-0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH
-0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH
-0xC5D0 # HANGUL SYLLABLE IEUNG-E
-0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK
-0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN
-0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL
-0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM
-0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP
-0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS
-0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG
-0xC5EC # HANGUL SYLLABLE IEUNG-YEO
-0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK
-0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK
-0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN
-0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL
-0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM
-0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP
-0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM
-0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP
-0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS
-0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS
-0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS
-0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG
-0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH
-0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH
-0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH
-0xC608 # HANGUL SYLLABLE IEUNG-YE
-0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN
-0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL
-0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM
-0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP
-0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS
-0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS
-0xC624 # HANGUL SYLLABLE IEUNG-O
-0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK
-0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN
-0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL
-0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK
-0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM
-0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS
-0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH
-0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM
-0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP
-0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS
-0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG
-0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH
-0xC640 # HANGUL SYLLABLE IEUNG-WA
-0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK
-0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN
-0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL
-0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM
-0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP
-0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS
-0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS
-0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG
-0xC65C # HANGUL SYLLABLE IEUNG-WAE
-0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK
-0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN
-0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM
-0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS
-0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG
-0xC678 # HANGUL SYLLABLE IEUNG-OE
-0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK
-0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN
-0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL
-0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM
-0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP
-0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS
-0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG
-0xC694 # HANGUL SYLLABLE IEUNG-YO
-0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK
-0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN
-0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL
-0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM
-0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP
-0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS
-0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG
-0xC6B0 # HANGUL SYLLABLE IEUNG-U
-0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK
-0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN
-0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL
-0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK
-0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM
-0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM
-0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP
-0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS
-0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG
-0xC6CC # HANGUL SYLLABLE IEUNG-WEO
-0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK
-0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN
-0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL
-0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM
-0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP
-0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS
-0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG
-0xC6E8 # HANGUL SYLLABLE IEUNG-WE
-0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK
-0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN
-0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL
-0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM
-0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP
-0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG
-0xC704 # HANGUL SYLLABLE IEUNG-WI
-0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK
-0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN
-0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL
-0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM
-0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP
-0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS
-0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG
-0xC720 # HANGUL SYLLABLE IEUNG-YU
-0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK
-0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN
-0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL
-0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM
-0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP
-0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS
-0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG
-0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH
-0xC73C # HANGUL SYLLABLE IEUNG-EU
-0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK
-0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN
-0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL
-0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH
-0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM
-0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP
-0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS
-0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG
-0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC
-0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH
-0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH
-0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH
-0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH
-0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH
-0xC758 # HANGUL SYLLABLE IEUNG-YI
-0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN
-0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL
-0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM
-0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS
-0xC774 # HANGUL SYLLABLE IEUNG-I
-0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK
-0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN
-0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL
-0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK
-0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM
-0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH
-0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM
-0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP
-0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS
-0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS
-0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG
-0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC
-0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH
-0xC790 # HANGUL SYLLABLE CIEUC-A
-0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK
-0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN
-0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH
-0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT
-0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL
-0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM
-0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM
-0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP
-0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS
-0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS
-0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG
-0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC
-0xC7AC # HANGUL SYLLABLE CIEUC-AE
-0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK
-0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN
-0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL
-0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM
-0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP
-0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS
-0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS
-0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG
-0xC7C8 # HANGUL SYLLABLE CIEUC-YA
-0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK
-0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN
-0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH
-0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL
-0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM
-0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG
-0xC7E4 # HANGUL SYLLABLE CIEUC-YAE
-0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN
-0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL
-0xC800 # HANGUL SYLLABLE CIEUC-EO
-0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK
-0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN
-0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL
-0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM
-0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM
-0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP
-0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS
-0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG
-0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC
-0xC81C # HANGUL SYLLABLE CIEUC-E
-0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK
-0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN
-0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL
-0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM
-0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP
-0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS
-0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG
-0xC838 # HANGUL SYLLABLE CIEUC-YEO
-0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN
-0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL
-0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM
-0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP
-0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS
-0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG
-0xC854 # HANGUL SYLLABLE CIEUC-YE
-0xC870 # HANGUL SYLLABLE CIEUC-O
-0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK
-0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN
-0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL
-0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM
-0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM
-0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP
-0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS
-0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG
-0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC
-0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH
-0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH
-0xC88C # HANGUL SYLLABLE CIEUC-WA
-0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK
-0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL
-0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP
-0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS
-0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG
-0xC8A8 # HANGUL SYLLABLE CIEUC-WAE
-0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS
-0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG
-0xC8C4 # HANGUL SYLLABLE CIEUC-OE
-0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN
-0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL
-0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM
-0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP
-0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS
-0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG
-0xC8E0 # HANGUL SYLLABLE CIEUC-YO
-0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK
-0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN
-0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG
-0xC8FC # HANGUL SYLLABLE CIEUC-U
-0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK
-0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN
-0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL
-0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK
-0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM
-0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM
-0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP
-0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS
-0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG
-0xC918 # HANGUL SYLLABLE CIEUC-WEO
-0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS
-0xC934 # HANGUL SYLLABLE CIEUC-WE
-0xC950 # HANGUL SYLLABLE CIEUC-WI
-0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK
-0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN
-0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL
-0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM
-0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP
-0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS
-0xC96C # HANGUL SYLLABLE CIEUC-YU
-0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN
-0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL
-0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM
-0xC988 # HANGUL SYLLABLE CIEUC-EU
-0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK
-0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN
-0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL
-0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM
-0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP
-0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS
-0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG
-0xC9C0 # HANGUL SYLLABLE CIEUC-I
-0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK
-0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN
-0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT
-0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL
-0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM
-0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM
-0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP
-0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS
-0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG
-0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC
-0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH
-0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH
-0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A
-0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK
-0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN
-0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH
-0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL
-0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP
-0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM
-0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP
-0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS
-0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS
-0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG
-0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE
-0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK
-0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN
-0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL
-0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM
-0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP
-0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS
-0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS
-0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG
-0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA
-0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN
-0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG
-0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO
-0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK
-0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN
-0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL
-0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM
-0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP
-0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS
-0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS
-0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG
-0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E
-0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG
-0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO
-0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS
-0xCABC # HANGUL SYLLABLE SSANGCIEUC-O
-0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK
-0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN
-0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL
-0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM
-0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP
-0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS
-0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG
-0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH
-0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA
-0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK
-0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL
-0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS
-0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE
-0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS
-0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE
-0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN
-0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL
-0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM
-0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP
-0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG
-0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U
-0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK
-0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN
-0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL
-0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM
-0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP
-0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG
-0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO
-0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS
-0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG
-0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI
-0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU
-0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU
-0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM
-0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS
-0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG
-0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I
-0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK
-0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN
-0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL
-0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM
-0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP
-0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG
-0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC
-0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH
-0xCC28 # HANGUL SYLLABLE CHIEUCH-A
-0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK
-0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN
-0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH
-0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL
-0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM
-0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP
-0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS
-0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS
-0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG
-0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC
-0xCC44 # HANGUL SYLLABLE CHIEUCH-AE
-0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK
-0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN
-0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL
-0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM
-0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP
-0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS
-0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS
-0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG
-0xCC60 # HANGUL SYLLABLE CHIEUCH-YA
-0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN
-0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH
-0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL
-0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM
-0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG
-0xCC98 # HANGUL SYLLABLE CHIEUCH-EO
-0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK
-0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN
-0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL
-0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM
-0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP
-0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS
-0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS
-0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG
-0xCCB4 # HANGUL SYLLABLE CHIEUCH-E
-0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK
-0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN
-0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL
-0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM
-0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP
-0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS
-0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG
-0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO
-0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN
-0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS
-0xCCEC # HANGUL SYLLABLE CHIEUCH-YE
-0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN
-0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG
-0xCD08 # HANGUL SYLLABLE CHIEUCH-O
-0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK
-0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN
-0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL
-0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM
-0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP
-0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS
-0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG
-0xCD24 # HANGUL SYLLABLE CHIEUCH-WA
-0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN
-0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL
-0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG
-0xCD5C # HANGUL SYLLABLE CHIEUCH-OE
-0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN
-0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL
-0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM
-0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP
-0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS
-0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG
-0xCD78 # HANGUL SYLLABLE CHIEUCH-YO
-0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM
-0xCD94 # HANGUL SYLLABLE CHIEUCH-U
-0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK
-0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN
-0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL
-0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM
-0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP
-0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS
-0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG
-0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO
-0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS
-0xCDCC # HANGUL SYLLABLE CHIEUCH-WE
-0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN
-0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI
-0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN
-0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL
-0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM
-0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP
-0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS
-0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG
-0xCE04 # HANGUL SYLLABLE CHIEUCH-YU
-0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN
-0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL
-0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM
-0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG
-0xCE20 # HANGUL SYLLABLE CHIEUCH-EU
-0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK
-0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN
-0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL
-0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM
-0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP
-0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS
-0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG
-0xCE58 # HANGUL SYLLABLE CHIEUCH-I
-0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK
-0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN
-0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT
-0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL
-0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK
-0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM
-0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP
-0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS
-0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG
-0xCE74 # HANGUL SYLLABLE KHIEUKH-A
-0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK
-0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN
-0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL
-0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM
-0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP
-0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS
-0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG
-0xCE90 # HANGUL SYLLABLE KHIEUKH-AE
-0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK
-0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN
-0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL
-0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM
-0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP
-0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS
-0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS
-0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG
-0xCEAC # HANGUL SYLLABLE KHIEUKH-YA
-0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK
-0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG
-0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO
-0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK
-0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN
-0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT
-0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL
-0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM
-0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP
-0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS
-0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS
-0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG
-0xCF00 # HANGUL SYLLABLE KHIEUKH-E
-0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK
-0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN
-0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL
-0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM
-0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP
-0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS
-0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG
-0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO
-0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN
-0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL
-0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM
-0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP
-0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS
-0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS
-0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG
-0xCF38 # HANGUL SYLLABLE KHIEUKH-YE
-0xCF54 # HANGUL SYLLABLE KHIEUKH-O
-0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK
-0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN
-0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL
-0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM
-0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP
-0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS
-0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG
-0xCF70 # HANGUL SYLLABLE KHIEUKH-WA
-0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK
-0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN
-0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL
-0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM
-0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG
-0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE
-0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG
-0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE
-0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL
-0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO
-0xCFE0 # HANGUL SYLLABLE KHIEUKH-U
-0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK
-0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN
-0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL
-0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM
-0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP
-0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS
-0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG
-0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO
-0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN
-0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL
-0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG
-0xD018 # HANGUL SYLLABLE KHIEUKH-WE
-0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG
-0xD034 # HANGUL SYLLABLE KHIEUKH-WI
-0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK
-0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN
-0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL
-0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM
-0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP
-0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS
-0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG
-0xD050 # HANGUL SYLLABLE KHIEUKH-YU
-0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN
-0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL
-0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM
-0xD06C # HANGUL SYLLABLE KHIEUKH-EU
-0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK
-0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN
-0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL
-0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM
-0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP
-0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG
-0xD0A4 # HANGUL SYLLABLE KHIEUKH-I
-0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK
-0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN
-0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL
-0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM
-0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP
-0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS
-0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG
-0xD0C0 # HANGUL SYLLABLE THIEUTH-A
-0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK
-0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN
-0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL
-0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK
-0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM
-0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP
-0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS
-0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS
-0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG
-0xD0DC # HANGUL SYLLABLE THIEUTH-AE
-0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK
-0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN
-0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL
-0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM
-0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP
-0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS
-0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS
-0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG
-0xD0F8 # HANGUL SYLLABLE THIEUTH-YA
-0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG
-0xD130 # HANGUL SYLLABLE THIEUTH-EO
-0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK
-0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN
-0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL
-0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM
-0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM
-0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP
-0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS
-0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS
-0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG
-0xD14C # HANGUL SYLLABLE THIEUTH-E
-0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK
-0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN
-0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL
-0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM
-0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP
-0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS
-0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG
-0xD168 # HANGUL SYLLABLE THIEUTH-YEO
-0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN
-0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS
-0xD184 # HANGUL SYLLABLE THIEUTH-YE
-0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN
-0xD1A0 # HANGUL SYLLABLE THIEUTH-O
-0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK
-0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN
-0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL
-0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM
-0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP
-0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS
-0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG
-0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH
-0xD1BC # HANGUL SYLLABLE THIEUTH-WA
-0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN
-0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE
-0xD1F4 # HANGUL SYLLABLE THIEUTH-OE
-0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN
-0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS
-0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG
-0xD210 # HANGUL SYLLABLE THIEUTH-YO
-0xD22C # HANGUL SYLLABLE THIEUTH-U
-0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK
-0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN
-0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL
-0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM
-0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP
-0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS
-0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG
-0xD248 # HANGUL SYLLABLE THIEUTH-WEO
-0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS
-0xD264 # HANGUL SYLLABLE THIEUTH-WE
-0xD280 # HANGUL SYLLABLE THIEUTH-WI
-0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK
-0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN
-0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL
-0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM
-0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP
-0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG
-0xD29C # HANGUL SYLLABLE THIEUTH-YU
-0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN
-0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL
-0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM
-0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG
-0xD2B8 # HANGUL SYLLABLE THIEUTH-EU
-0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK
-0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN
-0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT
-0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL
-0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM
-0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM
-0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP
-0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS
-0xD2D4 # HANGUL SYLLABLE THIEUTH-YI
-0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN
-0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL
-0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM
-0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP
-0xD2F0 # HANGUL SYLLABLE THIEUTH-I
-0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK
-0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN
-0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL
-0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM
-0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP
-0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS
-0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG
-0xD30C # HANGUL SYLLABLE PHIEUPH-A
-0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK
-0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK
-0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN
-0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL
-0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM
-0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM
-0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP
-0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS
-0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS
-0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG
-0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH
-0xD328 # HANGUL SYLLABLE PHIEUPH-AE
-0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK
-0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN
-0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL
-0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM
-0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP
-0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS
-0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS
-0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG
-0xD344 # HANGUL SYLLABLE PHIEUPH-YA
-0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK
-0xD37C # HANGUL SYLLABLE PHIEUPH-EO
-0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK
-0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN
-0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL
-0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM
-0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP
-0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS
-0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS
-0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG
-0xD398 # HANGUL SYLLABLE PHIEUPH-E
-0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK
-0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN
-0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL
-0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM
-0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP
-0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS
-0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG
-0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO
-0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN
-0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL
-0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM
-0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP
-0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS
-0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG
-0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE
-0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL
-0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP
-0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS
-0xD3EC # HANGUL SYLLABLE PHIEUPH-O
-0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK
-0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN
-0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL
-0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM
-0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP
-0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS
-0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG
-0xD408 # HANGUL SYLLABLE PHIEUPH-WA
-0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG
-0xD440 # HANGUL SYLLABLE PHIEUPH-OE
-0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN
-0xD45C # HANGUL SYLLABLE PHIEUPH-YO
-0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN
-0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL
-0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP
-0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS
-0xD478 # HANGUL SYLLABLE PHIEUPH-U
-0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK
-0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN
-0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT
-0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL
-0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM
-0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM
-0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP
-0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS
-0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG
-0xD494 # HANGUL SYLLABLE PHIEUPH-WEO
-0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG
-0xD4CC # HANGUL SYLLABLE PHIEUPH-WI
-0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN
-0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL
-0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM
-0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS
-0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU
-0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN
-0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL
-0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM
-0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS
-0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG
-0xD504 # HANGUL SYLLABLE PHIEUPH-EU
-0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN
-0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL
-0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM
-0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP
-0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS
-0xD53C # HANGUL SYLLABLE PHIEUPH-I
-0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK
-0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN
-0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL
-0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM
-0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP
-0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS
-0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG
-0xD558 # HANGUL SYLLABLE HIEUH-A
-0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK
-0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN
-0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL
-0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH
-0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM
-0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP
-0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS
-0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG
-0xD574 # HANGUL SYLLABLE HIEUH-AE
-0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK
-0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN
-0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL
-0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM
-0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP
-0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS
-0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS
-0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG
-0xD590 # HANGUL SYLLABLE HIEUH-YA
-0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG
-0xD5C8 # HANGUL SYLLABLE HIEUH-EO
-0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK
-0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN
-0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL
-0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM
-0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM
-0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP
-0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS
-0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG
-0xD5E4 # HANGUL SYLLABLE HIEUH-E
-0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK
-0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN
-0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL
-0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM
-0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP
-0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS
-0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG
-0xD600 # HANGUL SYLLABLE HIEUH-YEO
-0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK
-0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN
-0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL
-0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM
-0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP
-0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS
-0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS
-0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG
-0xD61C # HANGUL SYLLABLE HIEUH-YE
-0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN
-0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL
-0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP
-0xD638 # HANGUL SYLLABLE HIEUH-O
-0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK
-0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN
-0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL
-0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH
-0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM
-0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP
-0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS
-0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG
-0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH
-0xD654 # HANGUL SYLLABLE HIEUH-WA
-0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK
-0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN
-0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL
-0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS
-0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG
-0xD670 # HANGUL SYLLABLE HIEUH-WAE
-0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK
-0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN
-0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS
-0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG
-0xD68C # HANGUL SYLLABLE HIEUH-OE
-0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK
-0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN
-0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL
-0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP
-0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS
-0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG
-0xD6A8 # HANGUL SYLLABLE HIEUH-YO
-0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN
-0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL
-0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP
-0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS
-0xD6C4 # HANGUL SYLLABLE HIEUH-U
-0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK
-0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN
-0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL
-0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH
-0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM
-0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS
-0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG
-0xD6E0 # HANGUL SYLLABLE HIEUH-WEO
-0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN
-0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL
-0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM
-0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG
-0xD6FC # HANGUL SYLLABLE HIEUH-WE
-0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK
-0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN
-0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL
-0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG
-0xD718 # HANGUL SYLLABLE HIEUH-WI
-0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK
-0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN
-0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL
-0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM
-0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP
-0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS
-0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG
-0xD734 # HANGUL SYLLABLE HIEUH-YU
-0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK
-0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN
-0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL
-0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM
-0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS
-0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG
-0xD750 # HANGUL SYLLABLE HIEUH-EU
-0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK
-0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN
-0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH
-0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT
-0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL
-0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK
-0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM
-0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP
-0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS
-0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG
-0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH
-0xD76C # HANGUL SYLLABLE HIEUH-YI
-0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN
-0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL
-0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM
-0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP
-0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG
-0xD788 # HANGUL SYLLABLE HIEUH-I
-0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK
-0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN
-0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL
-0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM
-0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP
-0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS
-0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG
+#
+# fontconfig/fc-lang/ko.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Korean (KO)
+#
+# Coverage from KS X 1001
+#
+# Does not include any Han characters as many Korean fonts
+# don't cover them, and modern Korean usage is moving away from them
+#
+# Tor Andersson <tor.andersson@gmail.com>
+#
+#0x3000 # IDEOGRAPHIC SPACE
+#0x3001 # IDEOGRAPHIC COMMA
+#0x3002 # IDEOGRAPHIC FULL STOP
+#0x327F # KOREAN STANDARD SYMBOL
+#0xFFE6 # FULLWIDTH WON SIGN
+0x3131 # HANGUL LETTER KIYEOK
+0x3132 # HANGUL LETTER SSANGKIYEOK
+0x3133 # HANGUL LETTER KIYEOK-SIOS
+0x3134 # HANGUL LETTER NIEUN
+0x3135 # HANGUL LETTER NIEUN-CIEUC
+0x3136 # HANGUL LETTER NIEUN-HIEUH
+0x3137 # HANGUL LETTER TIKEUT
+0x3138 # HANGUL LETTER SSANGTIKEUT
+0x3139 # HANGUL LETTER RIEUL
+0x313A # HANGUL LETTER RIEUL-KIYEOK
+0x313B # HANGUL LETTER RIEUL-MIEUM
+0x313C # HANGUL LETTER RIEUL-PIEUP
+0x313D # HANGUL LETTER RIEUL-SIOS
+0x313E # HANGUL LETTER RIEUL-THIEUTH
+0x313F # HANGUL LETTER RIEUL-PHIEUPH
+0x3140 # HANGUL LETTER RIEUL-HIEUH
+0x3141 # HANGUL LETTER MIEUM
+0x3142 # HANGUL LETTER PIEUP
+0x3143 # HANGUL LETTER SSANGPIEUP
+0x3144 # HANGUL LETTER PIEUP-SIOS
+0x3145 # HANGUL LETTER SIOS
+0x3146 # HANGUL LETTER SSANGSIOS
+0x3147 # HANGUL LETTER IEUNG
+0x3148 # HANGUL LETTER CIEUC
+0x3149 # HANGUL LETTER SSANGCIEUC
+0x314A # HANGUL LETTER CHIEUCH
+0x314B # HANGUL LETTER KHIEUKH
+0x314C # HANGUL LETTER THIEUTH
+0x314D # HANGUL LETTER PHIEUPH
+0x314E # HANGUL LETTER HIEUH
+0x314F # HANGUL LETTER A
+0x3150 # HANGUL LETTER AE
+0x3151 # HANGUL LETTER YA
+0x3152 # HANGUL LETTER YAE
+0x3153 # HANGUL LETTER EO
+0x3154 # HANGUL LETTER E
+0x3155 # HANGUL LETTER YEO
+0x3156 # HANGUL LETTER YE
+0x3157 # HANGUL LETTER O
+0x3158 # HANGUL LETTER WA
+0x3159 # HANGUL LETTER WAE
+0x315A # HANGUL LETTER OE
+0x315B # HANGUL LETTER YO
+0x315C # HANGUL LETTER U
+0x315D # HANGUL LETTER WEO
+0x315E # HANGUL LETTER WE
+0x315F # HANGUL LETTER WI
+0x3160 # HANGUL LETTER YU
+0x3161 # HANGUL LETTER EU
+0x3162 # HANGUL LETTER YI
+0x3163 # HANGUL LETTER I
+0x3164 # HANGUL FILLER
+0x3165 # HANGUL LETTER SSANGNIEUN
+0x3166 # HANGUL LETTER NIEUN-TIKEUT
+0x3167 # HANGUL LETTER NIEUN-SIOS
+0x3168 # HANGUL LETTER NIEUN-PANSIOS
+0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS
+0x316A # HANGUL LETTER RIEUL-TIKEUT
+0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS
+0x316C # HANGUL LETTER RIEUL-PANSIOS
+0x316D # HANGUL LETTER RIEUL-YEORINHIEUH
+0x316E # HANGUL LETTER MIEUM-PIEUP
+0x316F # HANGUL LETTER MIEUM-SIOS
+0x3170 # HANGUL LETTER MIEUM-PANSIOS
+0x3171 # HANGUL LETTER KAPYEOUNMIEUM
+0x3172 # HANGUL LETTER PIEUP-KIYEOK
+0x3173 # HANGUL LETTER PIEUP-TIKEUT
+0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK
+0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT
+0x3176 # HANGUL LETTER PIEUP-CIEUC
+0x3177 # HANGUL LETTER PIEUP-THIEUTH
+0x3178 # HANGUL LETTER KAPYEOUNPIEUP
+0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP
+0x317A # HANGUL LETTER SIOS-KIYEOK
+0x317B # HANGUL LETTER SIOS-NIEUN
+0x317C # HANGUL LETTER SIOS-TIKEUT
+0x317D # HANGUL LETTER SIOS-PIEUP
+0x317E # HANGUL LETTER SIOS-CIEUC
+0x317F # HANGUL LETTER PANSIOS
+0x3180 # HANGUL LETTER SSANGIEUNG
+0x3181 # HANGUL LETTER YESIEUNG
+0x3182 # HANGUL LETTER YESIEUNG-SIOS
+0x3183 # HANGUL LETTER YESIEUNG-PANSIOS
+0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH
+0x3185 # HANGUL LETTER SSANGHIEUH
+0x3186 # HANGUL LETTER YEORINHIEUH
+0x3187 # HANGUL LETTER YO-YA
+0x3188 # HANGUL LETTER YO-YAE
+0x3189 # HANGUL LETTER YO-I
+0x318A # HANGUL LETTER YU-YEO
+0x318B # HANGUL LETTER YU-YE
+0x318C # HANGUL LETTER YU-I
+0x318D # HANGUL LETTER ARAEA
+0x318E # HANGUL LETTER ARAEAE
+#0x3260 # CIRCLED HANGUL KIYEOK
+#0x3261 # CIRCLED HANGUL NIEUN
+#0x3262 # CIRCLED HANGUL TIKEUT
+#0x3263 # CIRCLED HANGUL RIEUL
+#0x3264 # CIRCLED HANGUL MIEUM
+#0x3265 # CIRCLED HANGUL PIEUP
+#0x3266 # CIRCLED HANGUL SIOS
+#0x3267 # CIRCLED HANGUL IEUNG
+#0x3268 # CIRCLED HANGUL CIEUC
+#0x3269 # CIRCLED HANGUL CHIEUCH
+#0x326A # CIRCLED HANGUL KHIEUKH
+#0x326B # CIRCLED HANGUL THIEUTH
+#0x326C # CIRCLED HANGUL PHIEUPH
+#0x326D # CIRCLED HANGUL HIEUH
+#0x326E # CIRCLED HANGUL KIYEOK A
+#0x326F # CIRCLED HANGUL NIEUN A
+#0x3270 # CIRCLED HANGUL TIKEUT A
+#0x3271 # CIRCLED HANGUL RIEUL A
+#0x3272 # CIRCLED HANGUL MIEUM A
+#0x3273 # CIRCLED HANGUL PIEUP A
+#0x3274 # CIRCLED HANGUL SIOS A
+#0x3275 # CIRCLED HANGUL IEUNG A
+#0x3276 # CIRCLED HANGUL CIEUC A
+#0x3277 # CIRCLED HANGUL CHIEUCH A
+#0x3278 # CIRCLED HANGUL KHIEUKH A
+#0x3279 # CIRCLED HANGUL THIEUTH A
+#0x327A # CIRCLED HANGUL PHIEUPH A
+#0x327B # CIRCLED HANGUL HIEUH A
+#0x3200 # PARENTHESIZED HANGUL KIYEOK
+#0x3201 # PARENTHESIZED HANGUL NIEUN
+#0x3202 # PARENTHESIZED HANGUL TIKEUT
+#0x3203 # PARENTHESIZED HANGUL RIEUL
+#0x3204 # PARENTHESIZED HANGUL MIEUM
+#0x3205 # PARENTHESIZED HANGUL PIEUP
+#0x3206 # PARENTHESIZED HANGUL SIOS
+#0x3207 # PARENTHESIZED HANGUL IEUNG
+#0x3208 # PARENTHESIZED HANGUL CIEUC
+#0x3209 # PARENTHESIZED HANGUL CHIEUCH
+#0x320A # PARENTHESIZED HANGUL KHIEUKH
+#0x320B # PARENTHESIZED HANGUL THIEUTH
+#0x320C # PARENTHESIZED HANGUL PHIEUPH
+#0x320D # PARENTHESIZED HANGUL HIEUH
+#0x320E # PARENTHESIZED HANGUL KIYEOK A
+#0x320F # PARENTHESIZED HANGUL NIEUN A
+#0x3210 # PARENTHESIZED HANGUL TIKEUT A
+#0x3211 # PARENTHESIZED HANGUL RIEUL A
+#0x3212 # PARENTHESIZED HANGUL MIEUM A
+#0x3213 # PARENTHESIZED HANGUL PIEUP A
+#0x3214 # PARENTHESIZED HANGUL SIOS A
+#0x3215 # PARENTHESIZED HANGUL IEUNG A
+#0x3216 # PARENTHESIZED HANGUL CIEUC A
+#0x3217 # PARENTHESIZED HANGUL CHIEUCH A
+#0x3218 # PARENTHESIZED HANGUL KHIEUKH A
+#0x3219 # PARENTHESIZED HANGUL THIEUTH A
+#0x321A # PARENTHESIZED HANGUL PHIEUPH A
+#0x321B # PARENTHESIZED HANGUL HIEUH A
+#0x321C # PARENTHESIZED HANGUL CIEUC U
+0xAC00 # HANGUL SYLLABLE KIYEOK-A
+0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK
+0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN
+0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT
+0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL
+0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK
+0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM
+0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM
+0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP
+0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS
+0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS
+0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS
+0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG
+0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC
+0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH
+0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH
+0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH
+0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH
+0xAC1C # HANGUL SYLLABLE KIYEOK-AE
+0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK
+0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN
+0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL
+0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM
+0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP
+0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS
+0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS
+0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG
+0xAC38 # HANGUL SYLLABLE KIYEOK-YA
+0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK
+0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN
+0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL
+0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS
+0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG
+0xAC54 # HANGUL SYLLABLE KIYEOK-YAE
+0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN
+0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL
+0xAC70 # HANGUL SYLLABLE KIYEOK-EO
+0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK
+0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN
+0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT
+0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL
+0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM
+0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM
+0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP
+0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS
+0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS
+0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG
+0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC
+0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH
+0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH
+0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH
+0xAC8C # HANGUL SYLLABLE KIYEOK-E
+0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN
+0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL
+0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM
+0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP
+0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS
+0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS
+0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG
+0xACA8 # HANGUL SYLLABLE KIYEOK-YEO
+0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK
+0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK
+0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN
+0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT
+0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL
+0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM
+0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP
+0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS
+0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS
+0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG
+0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH
+0xACC4 # HANGUL SYLLABLE KIYEOK-YE
+0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN
+0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL
+0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP
+0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS
+0xACE0 # HANGUL SYLLABLE KIYEOK-O
+0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK
+0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN
+0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT
+0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL
+0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM
+0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS
+0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH
+0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM
+0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP
+0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS
+0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG
+0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC
+0xACFC # HANGUL SYLLABLE KIYEOK-WA
+0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK
+0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN
+0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL
+0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM
+0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM
+0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP
+0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS
+0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG
+0xAD18 # HANGUL SYLLABLE KIYEOK-WAE
+0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN
+0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL
+0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP
+0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS
+0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG
+0xAD34 # HANGUL SYLLABLE KIYEOK-OE
+0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK
+0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN
+0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL
+0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM
+0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP
+0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS
+0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG
+0xAD50 # HANGUL SYLLABLE KIYEOK-YO
+0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN
+0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL
+0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP
+0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS
+0xAD6C # HANGUL SYLLABLE KIYEOK-U
+0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK
+0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN
+0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT
+0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL
+0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK
+0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM
+0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH
+0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM
+0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP
+0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS
+0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG
+0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC
+0xAD88 # HANGUL SYLLABLE KIYEOK-WEO
+0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK
+0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN
+0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL
+0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS
+0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG
+0xADA4 # HANGUL SYLLABLE KIYEOK-WE
+0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS
+0xADC0 # HANGUL SYLLABLE KIYEOK-WI
+0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK
+0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN
+0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL
+0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM
+0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP
+0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS
+0xADDC # HANGUL SYLLABLE KIYEOK-YU
+0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN
+0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL
+0xADF8 # HANGUL SYLLABLE KIYEOK-EU
+0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK
+0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN
+0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT
+0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL
+0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK
+0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM
+0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP
+0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS
+0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG
+0xAE14 # HANGUL SYLLABLE KIYEOK-YI
+0xAE30 # HANGUL SYLLABLE KIYEOK-I
+0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK
+0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN
+0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT
+0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL
+0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM
+0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM
+0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP
+0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS
+0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG
+0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC
+0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH
+0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A
+0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK
+0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK
+0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN
+0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL
+0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM
+0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM
+0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP
+0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS
+0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS
+0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG
+0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH
+0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE
+0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK
+0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN
+0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL
+0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM
+0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP
+0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS
+0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS
+0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG
+0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA
+0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK
+0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL
+0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO
+0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK
+0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK
+0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN
+0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL
+0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM
+0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP
+0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS
+0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS
+0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG
+0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E
+0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK
+0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN
+0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM
+0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS
+0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG
+0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO
+0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN
+0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL
+0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS
+0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS
+0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH
+0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE
+0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O
+0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK
+0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN
+0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH
+0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL
+0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM
+0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP
+0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS
+0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG
+0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC
+0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH
+0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA
+0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK
+0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL
+0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS
+0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG
+0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE
+0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK
+0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG
+0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE
+0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN
+0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL
+0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM
+0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP
+0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG
+0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO
+0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U
+0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK
+0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN
+0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL
+0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH
+0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM
+0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP
+0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS
+0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG
+0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC
+0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO
+0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL
+0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS
+0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG
+0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE
+0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK
+0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN
+0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL
+0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM
+0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP
+0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS
+0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI
+0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN
+0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL
+0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM
+0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP
+0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU
+0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU
+0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK
+0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN
+0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH
+0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL
+0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM
+0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH
+0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM
+0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP
+0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS
+0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG
+0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH
+0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I
+0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK
+0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN
+0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL
+0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM
+0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP
+0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS
+0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG
+0xB098 # HANGUL SYLLABLE NIEUN-A
+0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK
+0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK
+0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN
+0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT
+0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL
+0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK
+0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM
+0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM
+0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP
+0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS
+0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS
+0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG
+0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC
+0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH
+0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH
+0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH
+0xB0B4 # HANGUL SYLLABLE NIEUN-AE
+0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK
+0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN
+0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL
+0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM
+0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP
+0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS
+0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS
+0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG
+0xB0D0 # HANGUL SYLLABLE NIEUN-YA
+0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK
+0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN
+0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL
+0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM
+0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG
+0xB108 # HANGUL SYLLABLE NIEUN-EO
+0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK
+0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS
+0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN
+0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL
+0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM
+0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP
+0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM
+0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP
+0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS
+0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS
+0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG
+0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH
+0xB124 # HANGUL SYLLABLE NIEUN-E
+0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK
+0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN
+0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL
+0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM
+0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP
+0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS
+0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS
+0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG
+0xB140 # HANGUL SYLLABLE NIEUN-YEO
+0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK
+0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN
+0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL
+0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM
+0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP
+0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS
+0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG
+0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH
+0xB15C # HANGUL SYLLABLE NIEUN-YE
+0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN
+0xB178 # HANGUL SYLLABLE NIEUN-O
+0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK
+0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN
+0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL
+0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM
+0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM
+0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP
+0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS
+0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG
+0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH
+0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH
+0xB194 # HANGUL SYLLABLE NIEUN-WA
+0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN
+0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL
+0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS
+0xB1CC # HANGUL SYLLABLE NIEUN-OE
+0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN
+0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL
+0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM
+0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP
+0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS
+0xB1E8 # HANGUL SYLLABLE NIEUN-YO
+0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK
+0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN
+0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL
+0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP
+0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS
+0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG
+0xB204 # HANGUL SYLLABLE NIEUN-U
+0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK
+0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN
+0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT
+0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL
+0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM
+0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP
+0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS
+0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG
+0xB220 # HANGUL SYLLABLE NIEUN-WEO
+0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS
+0xB23C # HANGUL SYLLABLE NIEUN-WE
+0xB258 # HANGUL SYLLABLE NIEUN-WI
+0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN
+0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL
+0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM
+0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP
+0xB274 # HANGUL SYLLABLE NIEUN-YU
+0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK
+0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL
+0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM
+0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP
+0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG
+0xB290 # HANGUL SYLLABLE NIEUN-EU
+0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK
+0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN
+0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL
+0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK
+0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM
+0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM
+0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP
+0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS
+0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG
+0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC
+0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH
+0xB2AC # HANGUL SYLLABLE NIEUN-YI
+0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN
+0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL
+0xB2C8 # HANGUL SYLLABLE NIEUN-I
+0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK
+0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN
+0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL
+0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95>
+0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM
+0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP
+0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS
+0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG
+0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH
+0xB2E4 # HANGUL SYLLABLE TIKEUT-A
+0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK
+0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK
+0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN
+0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT
+0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL
+0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK
+0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM
+0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP
+0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH
+0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM
+0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP
+0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS
+0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS
+0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG
+0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC
+0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH
+0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH
+0xB300 # HANGUL SYLLABLE TIKEUT-AE
+0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK
+0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN
+0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL
+0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM
+0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP
+0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS
+0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS
+0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG
+0xB31C # HANGUL SYLLABLE TIKEUT-YA
+0xB354 # HANGUL SYLLABLE TIKEUT-EO
+0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK
+0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK
+0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN
+0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT
+0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL
+0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM
+0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP
+0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM
+0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP
+0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS
+0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG
+0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH
+0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH
+0xB370 # HANGUL SYLLABLE TIKEUT-E
+0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK
+0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN
+0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL
+0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM
+0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP
+0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS
+0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS
+0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG
+0xB38C # HANGUL SYLLABLE TIKEUT-YEO
+0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN
+0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL
+0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS
+0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG
+0xB3A8 # HANGUL SYLLABLE TIKEUT-YE
+0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN
+0xB3C4 # HANGUL SYLLABLE TIKEUT-O
+0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK
+0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN
+0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT
+0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL
+0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM
+0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS
+0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM
+0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP
+0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS
+0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG
+0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH
+0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH
+0xB3E0 # HANGUL SYLLABLE TIKEUT-WA
+0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN
+0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL
+0xB3FC # HANGUL SYLLABLE TIKEUT-WAE
+0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS
+0xB418 # HANGUL SYLLABLE TIKEUT-OE
+0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN
+0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL
+0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM
+0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP
+0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS
+0xB434 # HANGUL SYLLABLE TIKEUT-YO
+0xB450 # HANGUL SYLLABLE TIKEUT-U
+0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK
+0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN
+0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL
+0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM
+0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP
+0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS
+0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG
+0xB46C # HANGUL SYLLABLE TIKEUT-WEO
+0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS
+0xB488 # HANGUL SYLLABLE TIKEUT-WE
+0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG
+0xB4A4 # HANGUL SYLLABLE TIKEUT-WI
+0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN
+0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL
+0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP
+0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS
+0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG
+0xB4C0 # HANGUL SYLLABLE TIKEUT-YU
+0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN
+0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL
+0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM
+0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG
+0xB4DC # HANGUL SYLLABLE TIKEUT-EU
+0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK
+0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN
+0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT
+0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL
+0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM
+0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM
+0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP
+0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS
+0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG
+0xB4F8 # HANGUL SYLLABLE TIKEUT-YI
+0xB514 # HANGUL SYLLABLE TIKEUT-I
+0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK
+0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN
+0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT
+0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL
+0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM
+0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP
+0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS
+0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS
+0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG
+0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC
+0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A
+0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK
+0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN
+0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL
+0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM
+0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP
+0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS
+0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS
+0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG
+0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH
+0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE
+0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK
+0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN
+0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL
+0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM
+0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP
+0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS
+0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS
+0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG
+0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO
+0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK
+0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN
+0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL
+0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM
+0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP
+0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM
+0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP
+0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS
+0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS
+0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG
+0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH
+0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E
+0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK
+0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN
+0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL
+0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM
+0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP
+0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS
+0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS
+0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG
+0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO
+0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS
+0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O
+0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK
+0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN
+0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL
+0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG
+0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA
+0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL
+0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE
+0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE
+0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN
+0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U
+0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK
+0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN
+0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL
+0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH
+0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM
+0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG
+0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE
+0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI
+0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN
+0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL
+0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM
+0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP
+0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG
+0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU
+0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK
+0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN
+0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT
+0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL
+0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM
+0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP
+0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS
+0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI
+0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN
+0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL
+0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM
+0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP
+0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I
+0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN
+0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL
+0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM
+0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP
+0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS
+0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG
+0xB77C # HANGUL SYLLABLE RIEUL-A
+0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK
+0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN
+0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL
+0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM
+0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP
+0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS
+0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS
+0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG
+0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC
+0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH
+0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH
+0xB798 # HANGUL SYLLABLE RIEUL-AE
+0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK
+0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN
+0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL
+0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM
+0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP
+0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS
+0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS
+0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG
+0xB7B4 # HANGUL SYLLABLE RIEUL-YA
+0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK
+0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN
+0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS
+0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG
+0xB7EC # HANGUL SYLLABLE RIEUL-EO
+0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK
+0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN
+0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL
+0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM
+0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP
+0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS
+0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS
+0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG
+0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH
+0xB808 # HANGUL SYLLABLE RIEUL-E
+0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK
+0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN
+0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL
+0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM
+0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP
+0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS
+0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG
+0xB824 # HANGUL SYLLABLE RIEUL-YEO
+0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK
+0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN
+0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL
+0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM
+0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP
+0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS
+0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS
+0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG
+0xB840 # HANGUL SYLLABLE RIEUL-YE
+0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN
+0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP
+0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS
+0xB85C # HANGUL SYLLABLE RIEUL-O
+0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK
+0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN
+0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL
+0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM
+0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP
+0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS
+0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG
+0xB878 # HANGUL SYLLABLE RIEUL-WA
+0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN
+0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG
+0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS
+0xB8B0 # HANGUL SYLLABLE RIEUL-OE
+0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN
+0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL
+0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM
+0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP
+0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS
+0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG
+0xB8CC # HANGUL SYLLABLE RIEUL-YO
+0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN
+0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL
+0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP
+0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS
+0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG
+0xB8E8 # HANGUL SYLLABLE RIEUL-U
+0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK
+0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN
+0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL
+0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM
+0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP
+0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS
+0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG
+0xB904 # HANGUL SYLLABLE RIEUL-WEO
+0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS
+0xB920 # HANGUL SYLLABLE RIEUL-WE
+0xB93C # HANGUL SYLLABLE RIEUL-WI
+0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK
+0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN
+0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL
+0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM
+0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS
+0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG
+0xB958 # HANGUL SYLLABLE RIEUL-YU
+0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK
+0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN
+0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL
+0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM
+0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP
+0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS
+0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG
+0xB974 # HANGUL SYLLABLE RIEUL-EU
+0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK
+0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN
+0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL
+0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM
+0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP
+0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS
+0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG
+0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC
+0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH
+0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH
+0xB9AC # HANGUL SYLLABLE RIEUL-I
+0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK
+0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN
+0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL
+0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM
+0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP
+0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS
+0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG
+0xB9C8 # HANGUL SYLLABLE MIEUM-A
+0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK
+0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN
+0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH
+0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT
+0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL
+0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK
+0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM
+0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM
+0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP
+0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS
+0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG
+0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC
+0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH
+0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH
+0xB9E4 # HANGUL SYLLABLE MIEUM-AE
+0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK
+0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN
+0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL
+0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM
+0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP
+0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS
+0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS
+0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG
+0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC
+0xBA00 # HANGUL SYLLABLE MIEUM-YA
+0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK
+0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL
+0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG
+0xBA38 # HANGUL SYLLABLE MIEUM-EO
+0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK
+0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN
+0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL
+0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM
+0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM
+0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP
+0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS
+0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG
+0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC
+0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH
+0xBA54 # HANGUL SYLLABLE MIEUM-E
+0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK
+0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN
+0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL
+0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM
+0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP
+0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS
+0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS
+0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG
+0xBA70 # HANGUL SYLLABLE MIEUM-YEO
+0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK
+0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN
+0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL
+0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS
+0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS
+0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG
+0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH
+0xBA8C # HANGUL SYLLABLE MIEUM-YE
+0xBAA8 # HANGUL SYLLABLE MIEUM-O
+0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK
+0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS
+0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN
+0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL
+0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM
+0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM
+0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP
+0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS
+0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG
+0xBAC4 # HANGUL SYLLABLE MIEUM-WA
+0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN
+0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS
+0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG
+0xBAFC # HANGUL SYLLABLE MIEUM-OE
+0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN
+0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL
+0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP
+0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS
+0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG
+0xBB18 # HANGUL SYLLABLE MIEUM-YO
+0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN
+0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL
+0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP
+0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS
+0xBB34 # HANGUL SYLLABLE MIEUM-U
+0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK
+0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK
+0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN
+0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT
+0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL
+0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK
+0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM
+0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM
+0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP
+0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS
+0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG
+0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH
+0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH
+0xBB50 # HANGUL SYLLABLE MIEUM-WEO
+0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN
+0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL
+0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP
+0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS
+0xBB6C # HANGUL SYLLABLE MIEUM-WE
+0xBB88 # HANGUL SYLLABLE MIEUM-WI
+0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN
+0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL
+0xBBA4 # HANGUL SYLLABLE MIEUM-YU
+0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN
+0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL
+0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM
+0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS
+0xBBC0 # HANGUL SYLLABLE MIEUM-EU
+0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN
+0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL
+0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM
+0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS
+0xBBF8 # HANGUL SYLLABLE MIEUM-I
+0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK
+0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN
+0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT
+0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL
+0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM
+0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM
+0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP
+0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS
+0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS
+0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG
+0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH
+0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH
+0xBC14 # HANGUL SYLLABLE PIEUP-A
+0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK
+0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK
+0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS
+0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN
+0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT
+0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL
+0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK
+0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM
+0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP
+0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM
+0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP
+0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS
+0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG
+0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH
+0xBC30 # HANGUL SYLLABLE PIEUP-AE
+0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK
+0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN
+0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL
+0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM
+0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP
+0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS
+0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS
+0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG
+0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH
+0xBC4C # HANGUL SYLLABLE PIEUP-YA
+0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK
+0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN
+0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP
+0xBC84 # HANGUL SYLLABLE PIEUP-EO
+0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK
+0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN
+0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT
+0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL
+0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM
+0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM
+0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP
+0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS
+0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG
+0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC
+0xBCA0 # HANGUL SYLLABLE PIEUP-E
+0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK
+0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN
+0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT
+0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL
+0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM
+0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP
+0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS
+0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS
+0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG
+0xBCBC # HANGUL SYLLABLE PIEUP-YEO
+0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK
+0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN
+0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL
+0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP
+0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS
+0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS
+0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG
+0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH
+0xBCD8 # HANGUL SYLLABLE PIEUP-YE
+0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN
+0xBCF4 # HANGUL SYLLABLE PIEUP-O
+0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK
+0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK
+0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN
+0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL
+0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM
+0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP
+0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS
+0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG
+0xBD10 # HANGUL SYLLABLE PIEUP-WA
+0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN
+0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS
+0xBD2C # HANGUL SYLLABLE PIEUP-WAE
+0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS
+0xBD48 # HANGUL SYLLABLE PIEUP-OE
+0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK
+0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN
+0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL
+0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM
+0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP
+0xBD64 # HANGUL SYLLABLE PIEUP-YO
+0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN
+0xBD80 # HANGUL SYLLABLE PIEUP-U
+0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK
+0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN
+0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT
+0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL
+0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK
+0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM
+0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM
+0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP
+0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS
+0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG
+0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH
+0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH
+0xBD9C # HANGUL SYLLABLE PIEUP-WEO
+0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL
+0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS
+0xBDB8 # HANGUL SYLLABLE PIEUP-WE
+0xBDD4 # HANGUL SYLLABLE PIEUP-WI
+0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK
+0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN
+0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL
+0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG
+0xBDF0 # HANGUL SYLLABLE PIEUP-YU
+0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN
+0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL
+0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM
+0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS
+0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG
+0xBE0C # HANGUL SYLLABLE PIEUP-EU
+0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK
+0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN
+0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL
+0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM
+0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP
+0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS
+0xBE44 # HANGUL SYLLABLE PIEUP-I
+0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK
+0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN
+0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL
+0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM
+0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM
+0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP
+0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS
+0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG
+0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC
+0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH
+0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A
+0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK
+0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN
+0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL
+0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM
+0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM
+0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP
+0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS
+0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS
+0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG
+0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH
+0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE
+0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK
+0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN
+0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL
+0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM
+0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP
+0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS
+0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS
+0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG
+0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA
+0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK
+0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM
+0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO
+0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK
+0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN
+0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT
+0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL
+0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM
+0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS
+0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS
+0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG
+0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E
+0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG
+0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO
+0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK
+0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM
+0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP
+0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS
+0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS
+0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG
+0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O
+0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK
+0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN
+0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL
+0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM
+0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP
+0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG
+0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE
+0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO
+0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG
+0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U
+0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK
+0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN
+0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL
+0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM
+0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS
+0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG
+0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU
+0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG
+0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU
+0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN
+0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL
+0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM
+0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP
+0xC090 # HANGUL SYLLABLE SSANGPIEUP-I
+0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK
+0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN
+0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL
+0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM
+0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP
+0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS
+0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG
+0xC0AC # HANGUL SYLLABLE SIOS-A
+0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK
+0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS
+0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN
+0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT
+0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL
+0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK
+0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM
+0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM
+0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP
+0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS
+0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS
+0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG
+0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH
+0xC0C8 # HANGUL SYLLABLE SIOS-AE
+0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK
+0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN
+0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL
+0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM
+0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP
+0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS
+0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS
+0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG
+0xC0E4 # HANGUL SYLLABLE SIOS-YA
+0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK
+0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN
+0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL
+0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM
+0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP
+0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS
+0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG
+0xC100 # HANGUL SYLLABLE SIOS-YAE
+0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN
+0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL
+0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM
+0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG
+0xC11C # HANGUL SYLLABLE SIOS-EO
+0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK
+0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK
+0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS
+0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN
+0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT
+0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL
+0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM
+0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP
+0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM
+0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP
+0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS
+0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS
+0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG
+0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH
+0xC138 # HANGUL SYLLABLE SIOS-E
+0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK
+0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN
+0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL
+0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM
+0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP
+0xC14B # HANGUL SYLLABLE SIOS-E-SIOS
+0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS
+0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG
+0xC154 # HANGUL SYLLABLE SIOS-YEO
+0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK
+0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN
+0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL
+0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM
+0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP
+0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS
+0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS
+0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG
+0xC170 # HANGUL SYLLABLE SIOS-YE
+0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN
+0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL
+0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG
+0xC18C # HANGUL SYLLABLE SIOS-O
+0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK
+0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK
+0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN
+0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL
+0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM
+0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM
+0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP
+0xC19F # HANGUL SYLLABLE SIOS-O-SIOS
+0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG
+0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH
+0xC1A8 # HANGUL SYLLABLE SIOS-WA
+0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK
+0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN
+0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL
+0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG
+0xC1C4 # HANGUL SYLLABLE SIOS-WAE
+0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN
+0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL
+0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM
+0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS
+0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS
+0xC1E0 # HANGUL SYLLABLE SIOS-OE
+0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN
+0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL
+0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM
+0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP
+0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS
+0xC1FC # HANGUL SYLLABLE SIOS-YO
+0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK
+0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN
+0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL
+0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM
+0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP
+0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS
+0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG
+0xC218 # HANGUL SYLLABLE SIOS-U
+0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK
+0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN
+0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT
+0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL
+0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM
+0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP
+0xC22B # HANGUL SYLLABLE SIOS-U-SIOS
+0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG
+0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH
+0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH
+0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH
+0xC234 # HANGUL SYLLABLE SIOS-WEO
+0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS
+0xC250 # HANGUL SYLLABLE SIOS-WE
+0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK
+0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN
+0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL
+0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM
+0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG
+0xC26C # HANGUL SYLLABLE SIOS-WI
+0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK
+0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN
+0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL
+0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM
+0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP
+0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS
+0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG
+0xC288 # HANGUL SYLLABLE SIOS-YU
+0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK
+0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL
+0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM
+0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS
+0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG
+0xC2A4 # HANGUL SYLLABLE SIOS-EU
+0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK
+0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN
+0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL
+0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK
+0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM
+0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP
+0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS
+0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG
+0xC2DC # HANGUL SYLLABLE SIOS-I
+0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK
+0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN
+0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT
+0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL
+0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH
+0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM
+0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP
+0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS
+0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG
+0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH
+0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A
+0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK
+0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS
+0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN
+0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL
+0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM
+0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP
+0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS
+0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG
+0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH
+0xC314 # HANGUL SYLLABLE SSANGSIOS-AE
+0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK
+0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN
+0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL
+0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM
+0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP
+0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS
+0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG
+0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG
+0xC368 # HANGUL SYLLABLE SSANGSIOS-EO
+0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK
+0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN
+0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL
+0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM
+0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM
+0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP
+0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS
+0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG
+0xC384 # HANGUL SYLLABLE SSANGSIOS-E
+0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN
+0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL
+# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf)
+0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O
+0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK
+0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN
+0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT
+0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL
+0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM
+0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM
+0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP
+0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG
+0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA
+0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK
+0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN
+0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS
+0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE
+0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS
+0xC42C # HANGUL SYLLABLE SSANGSIOS-OE
+0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN
+0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL
+0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM
+0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP
+0xC448 # HANGUL SYLLABLE SSANGSIOS-YO
+0xC464 # HANGUL SYLLABLE SSANGSIOS-U
+0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK
+0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN
+0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL
+0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM
+0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP
+0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG
+0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO
+0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS
+0xC49C # HANGUL SYLLABLE SSANGSIOS-WE
+0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI
+0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN
+0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG
+0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU
+0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK
+0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN
+0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL
+0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM
+0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH
+0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM
+0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP
+0xC50C # HANGUL SYLLABLE SSANGSIOS-YI
+0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN
+0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL
+0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM
+0xC528 # HANGUL SYLLABLE SSANGSIOS-I
+0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK
+0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN
+0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL
+0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM
+0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP
+0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS
+0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG
+0xC544 # HANGUL SYLLABLE IEUNG-A
+0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK
+0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN
+0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC
+0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH
+0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL
+0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK
+0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM
+0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH
+0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM
+0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP
+0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS
+0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS
+0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG
+0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH
+0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH
+0xC560 # HANGUL SYLLABLE IEUNG-AE
+0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK
+0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN
+0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL
+0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM
+0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP
+0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS
+0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS
+0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG
+0xC57C # HANGUL SYLLABLE IEUNG-YA
+0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK
+0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN
+0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL
+0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP
+0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM
+0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP
+0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS
+0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG
+0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH
+0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH
+0xC598 # HANGUL SYLLABLE IEUNG-YAE
+0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN
+0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL
+0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP
+0xC5B4 # HANGUL SYLLABLE IEUNG-EO
+0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK
+0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN
+0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC
+0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT
+0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL
+0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK
+0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM
+0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM
+0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP
+0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS
+0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS
+0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS
+0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG
+0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC
+0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH
+0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH
+0xC5D0 # HANGUL SYLLABLE IEUNG-E
+0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK
+0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN
+0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL
+0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM
+0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP
+0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS
+0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG
+0xC5EC # HANGUL SYLLABLE IEUNG-YEO
+0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK
+0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK
+0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN
+0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL
+0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM
+0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP
+0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM
+0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP
+0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS
+0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS
+0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS
+0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG
+0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH
+0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH
+0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH
+0xC608 # HANGUL SYLLABLE IEUNG-YE
+0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN
+0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL
+0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM
+0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP
+0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS
+0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS
+0xC624 # HANGUL SYLLABLE IEUNG-O
+0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK
+0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN
+0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL
+0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK
+0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM
+0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS
+0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH
+0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM
+0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP
+0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS
+0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG
+0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH
+0xC640 # HANGUL SYLLABLE IEUNG-WA
+0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK
+0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN
+0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL
+0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM
+0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP
+0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS
+0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS
+0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG
+0xC65C # HANGUL SYLLABLE IEUNG-WAE
+0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK
+0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN
+0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM
+0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS
+0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG
+0xC678 # HANGUL SYLLABLE IEUNG-OE
+0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK
+0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN
+0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL
+0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM
+0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP
+0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS
+0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG
+0xC694 # HANGUL SYLLABLE IEUNG-YO
+0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK
+0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN
+0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL
+0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM
+0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP
+0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS
+0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG
+0xC6B0 # HANGUL SYLLABLE IEUNG-U
+0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK
+0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN
+0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL
+0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK
+0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM
+0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM
+0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP
+0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS
+0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG
+0xC6CC # HANGUL SYLLABLE IEUNG-WEO
+0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK
+0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN
+0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL
+0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM
+0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP
+0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS
+0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG
+0xC6E8 # HANGUL SYLLABLE IEUNG-WE
+0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK
+0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN
+0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL
+0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM
+0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP
+0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG
+0xC704 # HANGUL SYLLABLE IEUNG-WI
+0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK
+0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN
+0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL
+0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM
+0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP
+0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS
+0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG
+0xC720 # HANGUL SYLLABLE IEUNG-YU
+0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK
+0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN
+0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL
+0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM
+0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP
+0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS
+0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG
+0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH
+0xC73C # HANGUL SYLLABLE IEUNG-EU
+0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK
+0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN
+0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL
+0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH
+0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM
+0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP
+0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS
+0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG
+0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC
+0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH
+0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH
+0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH
+0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH
+0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH
+0xC758 # HANGUL SYLLABLE IEUNG-YI
+0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN
+0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL
+0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM
+0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS
+0xC774 # HANGUL SYLLABLE IEUNG-I
+0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK
+0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN
+0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL
+0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK
+0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM
+0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH
+0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM
+0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP
+0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS
+0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS
+0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG
+0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC
+0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH
+0xC790 # HANGUL SYLLABLE CIEUC-A
+0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK
+0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN
+0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH
+0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT
+0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL
+0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM
+0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM
+0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP
+0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS
+0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS
+0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG
+0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC
+0xC7AC # HANGUL SYLLABLE CIEUC-AE
+0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK
+0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN
+0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL
+0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM
+0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP
+0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS
+0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS
+0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG
+0xC7C8 # HANGUL SYLLABLE CIEUC-YA
+0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK
+0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN
+0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH
+0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL
+0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM
+0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG
+0xC7E4 # HANGUL SYLLABLE CIEUC-YAE
+0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN
+0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL
+0xC800 # HANGUL SYLLABLE CIEUC-EO
+0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK
+0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN
+0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL
+0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM
+0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM
+0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP
+0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS
+0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG
+0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC
+0xC81C # HANGUL SYLLABLE CIEUC-E
+0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK
+0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN
+0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL
+0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM
+0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP
+0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS
+0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG
+0xC838 # HANGUL SYLLABLE CIEUC-YEO
+0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN
+0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL
+0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM
+0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP
+0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS
+0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG
+0xC854 # HANGUL SYLLABLE CIEUC-YE
+0xC870 # HANGUL SYLLABLE CIEUC-O
+0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK
+0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN
+0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL
+0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM
+0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM
+0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP
+0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS
+0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG
+0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC
+0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH
+0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH
+0xC88C # HANGUL SYLLABLE CIEUC-WA
+0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK
+0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL
+0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP
+0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS
+0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG
+0xC8A8 # HANGUL SYLLABLE CIEUC-WAE
+0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS
+0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG
+0xC8C4 # HANGUL SYLLABLE CIEUC-OE
+0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN
+0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL
+0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM
+0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP
+0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS
+0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG
+0xC8E0 # HANGUL SYLLABLE CIEUC-YO
+0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK
+0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN
+0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG
+0xC8FC # HANGUL SYLLABLE CIEUC-U
+0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK
+0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN
+0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL
+0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK
+0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM
+0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM
+0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP
+0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS
+0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG
+0xC918 # HANGUL SYLLABLE CIEUC-WEO
+0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS
+0xC934 # HANGUL SYLLABLE CIEUC-WE
+0xC950 # HANGUL SYLLABLE CIEUC-WI
+0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK
+0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN
+0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL
+0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM
+0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP
+0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS
+0xC96C # HANGUL SYLLABLE CIEUC-YU
+0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN
+0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL
+0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM
+0xC988 # HANGUL SYLLABLE CIEUC-EU
+0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK
+0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN
+0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL
+0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM
+0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP
+0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS
+0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG
+0xC9C0 # HANGUL SYLLABLE CIEUC-I
+0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK
+0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN
+0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT
+0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL
+0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM
+0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM
+0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP
+0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS
+0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG
+0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC
+0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH
+0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH
+0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A
+0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK
+0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN
+0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH
+0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL
+0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP
+0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM
+0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP
+0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS
+0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS
+0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG
+0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE
+0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK
+0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN
+0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL
+0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM
+0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP
+0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS
+0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS
+0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG
+0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA
+0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN
+0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG
+0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO
+0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK
+0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN
+0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL
+0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM
+0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP
+0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS
+0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS
+0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG
+0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E
+0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG
+0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO
+0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS
+0xCABC # HANGUL SYLLABLE SSANGCIEUC-O
+0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK
+0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN
+0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL
+0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM
+0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP
+0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS
+0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG
+0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH
+0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA
+0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK
+0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL
+0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS
+0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE
+0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS
+0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE
+0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN
+0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL
+0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM
+0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP
+0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG
+0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U
+0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK
+0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN
+0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL
+0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM
+0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP
+0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG
+0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO
+0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS
+0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG
+0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI
+0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU
+0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU
+0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM
+0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS
+0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG
+0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I
+0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK
+0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN
+0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL
+0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM
+0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP
+0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG
+0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC
+0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH
+0xCC28 # HANGUL SYLLABLE CHIEUCH-A
+0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK
+0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN
+0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH
+0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL
+0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM
+0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP
+0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS
+0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS
+0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG
+0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC
+0xCC44 # HANGUL SYLLABLE CHIEUCH-AE
+0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK
+0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN
+0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL
+0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM
+0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP
+0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS
+0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS
+0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG
+0xCC60 # HANGUL SYLLABLE CHIEUCH-YA
+0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN
+0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH
+0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL
+0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM
+0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG
+0xCC98 # HANGUL SYLLABLE CHIEUCH-EO
+0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK
+0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN
+0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL
+0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM
+0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP
+0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS
+0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS
+0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG
+0xCCB4 # HANGUL SYLLABLE CHIEUCH-E
+0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK
+0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN
+0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL
+0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM
+0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP
+0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS
+0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG
+0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO
+0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN
+0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS
+0xCCEC # HANGUL SYLLABLE CHIEUCH-YE
+0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN
+0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG
+0xCD08 # HANGUL SYLLABLE CHIEUCH-O
+0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK
+0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN
+0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL
+0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM
+0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP
+0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS
+0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG
+0xCD24 # HANGUL SYLLABLE CHIEUCH-WA
+0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN
+0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL
+0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG
+0xCD5C # HANGUL SYLLABLE CHIEUCH-OE
+0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN
+0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL
+0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM
+0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP
+0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS
+0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG
+0xCD78 # HANGUL SYLLABLE CHIEUCH-YO
+0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM
+0xCD94 # HANGUL SYLLABLE CHIEUCH-U
+0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK
+0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN
+0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL
+0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM
+0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP
+0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS
+0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG
+0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO
+0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS
+0xCDCC # HANGUL SYLLABLE CHIEUCH-WE
+0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN
+0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI
+0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN
+0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL
+0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM
+0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP
+0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS
+0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG
+0xCE04 # HANGUL SYLLABLE CHIEUCH-YU
+0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN
+0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL
+0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM
+0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG
+0xCE20 # HANGUL SYLLABLE CHIEUCH-EU
+0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK
+0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN
+0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL
+0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM
+0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP
+0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS
+0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG
+0xCE58 # HANGUL SYLLABLE CHIEUCH-I
+0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK
+0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN
+0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT
+0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL
+0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK
+0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM
+0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP
+0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS
+0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG
+0xCE74 # HANGUL SYLLABLE KHIEUKH-A
+0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK
+0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN
+0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL
+0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM
+0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP
+0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS
+0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG
+0xCE90 # HANGUL SYLLABLE KHIEUKH-AE
+0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK
+0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN
+0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL
+0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM
+0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP
+0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS
+0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS
+0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG
+0xCEAC # HANGUL SYLLABLE KHIEUKH-YA
+0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK
+0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG
+0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO
+0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK
+0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN
+0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT
+0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL
+0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM
+0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP
+0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS
+0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS
+0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG
+0xCF00 # HANGUL SYLLABLE KHIEUKH-E
+0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK
+0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN
+0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL
+0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM
+0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP
+0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS
+0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG
+0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO
+0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN
+0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL
+0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM
+0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP
+0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS
+0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS
+0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG
+0xCF38 # HANGUL SYLLABLE KHIEUKH-YE
+0xCF54 # HANGUL SYLLABLE KHIEUKH-O
+0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK
+0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN
+0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL
+0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM
+0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP
+0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS
+0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG
+0xCF70 # HANGUL SYLLABLE KHIEUKH-WA
+0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK
+0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN
+0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL
+0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM
+0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG
+0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE
+0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG
+0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE
+0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL
+0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO
+0xCFE0 # HANGUL SYLLABLE KHIEUKH-U
+0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK
+0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN
+0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL
+0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM
+0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP
+0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS
+0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG
+0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO
+0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN
+0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL
+0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG
+0xD018 # HANGUL SYLLABLE KHIEUKH-WE
+0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG
+0xD034 # HANGUL SYLLABLE KHIEUKH-WI
+0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK
+0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN
+0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL
+0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM
+0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP
+0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS
+0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG
+0xD050 # HANGUL SYLLABLE KHIEUKH-YU
+0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN
+0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL
+0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM
+0xD06C # HANGUL SYLLABLE KHIEUKH-EU
+0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK
+0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN
+0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL
+0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM
+0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP
+0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG
+0xD0A4 # HANGUL SYLLABLE KHIEUKH-I
+0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK
+0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN
+0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL
+0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM
+0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP
+0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS
+0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG
+0xD0C0 # HANGUL SYLLABLE THIEUTH-A
+0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK
+0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN
+0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL
+0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK
+0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM
+0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP
+0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS
+0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS
+0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG
+0xD0DC # HANGUL SYLLABLE THIEUTH-AE
+0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK
+0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN
+0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL
+0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM
+0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP
+0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS
+0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS
+0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG
+0xD0F8 # HANGUL SYLLABLE THIEUTH-YA
+0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG
+0xD130 # HANGUL SYLLABLE THIEUTH-EO
+0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK
+0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN
+0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL
+0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM
+0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM
+0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP
+0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS
+0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS
+0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG
+0xD14C # HANGUL SYLLABLE THIEUTH-E
+0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK
+0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN
+0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL
+0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM
+0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP
+0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS
+0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG
+0xD168 # HANGUL SYLLABLE THIEUTH-YEO
+0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN
+0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS
+0xD184 # HANGUL SYLLABLE THIEUTH-YE
+0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN
+0xD1A0 # HANGUL SYLLABLE THIEUTH-O
+0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK
+0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN
+0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL
+0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM
+0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP
+0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS
+0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG
+0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH
+0xD1BC # HANGUL SYLLABLE THIEUTH-WA
+0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN
+0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE
+0xD1F4 # HANGUL SYLLABLE THIEUTH-OE
+0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN
+0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS
+0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG
+0xD210 # HANGUL SYLLABLE THIEUTH-YO
+0xD22C # HANGUL SYLLABLE THIEUTH-U
+0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK
+0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN
+0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL
+0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM
+0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP
+0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS
+0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG
+0xD248 # HANGUL SYLLABLE THIEUTH-WEO
+0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS
+0xD264 # HANGUL SYLLABLE THIEUTH-WE
+0xD280 # HANGUL SYLLABLE THIEUTH-WI
+0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK
+0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN
+0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL
+0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM
+0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP
+0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG
+0xD29C # HANGUL SYLLABLE THIEUTH-YU
+0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN
+0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL
+0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM
+0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG
+0xD2B8 # HANGUL SYLLABLE THIEUTH-EU
+0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK
+0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN
+0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT
+0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL
+0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM
+0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM
+0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP
+0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS
+0xD2D4 # HANGUL SYLLABLE THIEUTH-YI
+0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN
+0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL
+0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM
+0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP
+0xD2F0 # HANGUL SYLLABLE THIEUTH-I
+0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK
+0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN
+0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL
+0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM
+0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP
+0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS
+0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG
+0xD30C # HANGUL SYLLABLE PHIEUPH-A
+0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK
+0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK
+0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN
+0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL
+0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM
+0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM
+0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP
+0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS
+0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS
+0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG
+0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH
+0xD328 # HANGUL SYLLABLE PHIEUPH-AE
+0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK
+0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN
+0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL
+0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM
+0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP
+0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS
+0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS
+0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG
+0xD344 # HANGUL SYLLABLE PHIEUPH-YA
+0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK
+0xD37C # HANGUL SYLLABLE PHIEUPH-EO
+0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK
+0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN
+0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL
+0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM
+0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP
+0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS
+0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS
+0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG
+0xD398 # HANGUL SYLLABLE PHIEUPH-E
+0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK
+0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN
+0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL
+0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM
+0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP
+0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS
+0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG
+0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO
+0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN
+0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL
+0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM
+0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP
+0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS
+0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG
+0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE
+0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL
+0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP
+0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS
+0xD3EC # HANGUL SYLLABLE PHIEUPH-O
+0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK
+0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN
+0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL
+0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM
+0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP
+0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS
+0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG
+0xD408 # HANGUL SYLLABLE PHIEUPH-WA
+0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG
+0xD440 # HANGUL SYLLABLE PHIEUPH-OE
+0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN
+0xD45C # HANGUL SYLLABLE PHIEUPH-YO
+0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN
+0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL
+0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP
+0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS
+0xD478 # HANGUL SYLLABLE PHIEUPH-U
+0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK
+0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN
+0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT
+0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL
+0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM
+0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM
+0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP
+0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS
+0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG
+0xD494 # HANGUL SYLLABLE PHIEUPH-WEO
+0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG
+0xD4CC # HANGUL SYLLABLE PHIEUPH-WI
+0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN
+0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL
+0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM
+0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS
+0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU
+0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN
+0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL
+0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM
+0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS
+0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG
+0xD504 # HANGUL SYLLABLE PHIEUPH-EU
+0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN
+0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL
+0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM
+0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP
+0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS
+0xD53C # HANGUL SYLLABLE PHIEUPH-I
+0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK
+0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN
+0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL
+0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM
+0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP
+0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS
+0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG
+0xD558 # HANGUL SYLLABLE HIEUH-A
+0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK
+0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN
+0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL
+0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH
+0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM
+0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP
+0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS
+0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG
+0xD574 # HANGUL SYLLABLE HIEUH-AE
+0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK
+0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN
+0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL
+0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM
+0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP
+0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS
+0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS
+0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG
+0xD590 # HANGUL SYLLABLE HIEUH-YA
+0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG
+0xD5C8 # HANGUL SYLLABLE HIEUH-EO
+0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK
+0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN
+0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL
+0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM
+0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM
+0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP
+0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS
+0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG
+0xD5E4 # HANGUL SYLLABLE HIEUH-E
+0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK
+0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN
+0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL
+0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM
+0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP
+0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS
+0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG
+0xD600 # HANGUL SYLLABLE HIEUH-YEO
+0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK
+0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN
+0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL
+0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM
+0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP
+0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS
+0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS
+0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG
+0xD61C # HANGUL SYLLABLE HIEUH-YE
+0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN
+0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL
+0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP
+0xD638 # HANGUL SYLLABLE HIEUH-O
+0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK
+0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN
+0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL
+0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH
+0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM
+0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP
+0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS
+0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG
+0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH
+0xD654 # HANGUL SYLLABLE HIEUH-WA
+0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK
+0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN
+0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL
+0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS
+0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG
+0xD670 # HANGUL SYLLABLE HIEUH-WAE
+0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK
+0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN
+0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS
+0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG
+0xD68C # HANGUL SYLLABLE HIEUH-OE
+0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK
+0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN
+0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL
+0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP
+0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS
+0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG
+0xD6A8 # HANGUL SYLLABLE HIEUH-YO
+0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN
+0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL
+0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP
+0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS
+0xD6C4 # HANGUL SYLLABLE HIEUH-U
+0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK
+0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN
+0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL
+0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH
+0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM
+0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS
+0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG
+0xD6E0 # HANGUL SYLLABLE HIEUH-WEO
+0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN
+0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL
+0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM
+0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG
+0xD6FC # HANGUL SYLLABLE HIEUH-WE
+0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK
+0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN
+0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL
+0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG
+0xD718 # HANGUL SYLLABLE HIEUH-WI
+0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK
+0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN
+0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL
+0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM
+0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP
+0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS
+0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG
+0xD734 # HANGUL SYLLABLE HIEUH-YU
+0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK
+0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN
+0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL
+0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM
+0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS
+0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG
+0xD750 # HANGUL SYLLABLE HIEUH-EU
+0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK
+0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN
+0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH
+0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT
+0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL
+0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK
+0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM
+0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP
+0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS
+0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG
+0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH
+0xD76C # HANGUL SYLLABLE HIEUH-YI
+0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN
+0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL
+0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM
+0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP
+0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG
+0xD788 # HANGUL SYLLABLE HIEUH-I
+0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK
+0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN
+0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL
+0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM
+0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP
+0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS
+0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG
diff --git a/fontconfig/fc-lang/kok.orth b/fontconfig/fc-lang/kok.orth
index e77de6627..e5cbe8703 100644
--- a/fontconfig/fc-lang/kok.orth
+++ b/fontconfig/fc-lang/kok.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/kok.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kokani (Devanagari script) (KOK)
-include hi.orth
+#
+# fontconfig/fc-lang/kok.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kokani (Devanagari script) (KOK)
+include hi.orth
diff --git a/fontconfig/fc-lang/ku_am.orth b/fontconfig/fc-lang/ku_am.orth
index 80e434079..15a565966 100644
--- a/fontconfig/fc-lang/ku_am.orth
+++ b/fontconfig/fc-lang/ku_am.orth
@@ -1,91 +1,91 @@
-#
-# fontconfig/fc-lang/ku_am.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kurdish in Armenia (ku-AM)
-#
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0427
-0428
-0429
-042a
-042d
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0447
-0448
-0449
-044a
-044d
-04ba
-04bb
-04d8
-04d9
-04e6
-04e7
-051a-051d
+#
+# fontconfig/fc-lang/ku_am.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kurdish in Armenia (ku-AM)
+#
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0427
+0428
+0429
+042a
+042d
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0447
+0448
+0449
+044a
+044d
+04ba
+04bb
+04d8
+04d9
+04e6
+04e7
+051a-051d
diff --git a/fontconfig/fc-lang/ku_ir.orth b/fontconfig/fc-lang/ku_ir.orth
index 6ca2e70f2..407502f5a 100644
--- a/fontconfig/fc-lang/ku_ir.orth
+++ b/fontconfig/fc-lang/ku_ir.orth
@@ -1,49 +1,49 @@
-#
-# fontconfig/fc-lang/ku_ir.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kurdish in Iran (KU-IR)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain some of the Kurdish
-# letters, we are going with the general forms instead of the Presentation
-# forms, unlike Arabic, Persian, or Urdu.
-#
-0626-0628
-062a
-062c-062f
-0631-0634
-0639-063a
-0641-0642
-0644-0648
-067e
-0686
-0692
-0698
-06a4
-06a9
-06af
-06b5
-06c6
-06cc
-06ce
+#
+# fontconfig/fc-lang/ku_ir.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kurdish in Iran (KU-IR)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain some of the Kurdish
+# letters, we are going with the general forms instead of the Presentation
+# forms, unlike Arabic, Persian, or Urdu.
+#
+0626-0628
+062a
+062c-062f
+0631-0634
+0639-063a
+0641-0642
+0644-0648
+067e
+0686
+0692
+0698
+06a4
+06a9
+06af
+06b5
+06c6
+06cc
+06ce
diff --git a/fontconfig/fc-lang/kum.orth b/fontconfig/fc-lang/kum.orth
index 0107bfebd..cb6b470c4 100644
--- a/fontconfig/fc-lang/kum.orth
+++ b/fontconfig/fc-lang/kum.orth
@@ -1,96 +1,96 @@
-#
-# fontconfig/fc-lang/kum.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kumyk (KUM)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/kum.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kumyk (KUM)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/kv.orth b/fontconfig/fc-lang/kv.orth
index 87d4d93c2..cb2b02614 100644
--- a/fontconfig/fc-lang/kv.orth
+++ b/fontconfig/fc-lang/kv.orth
@@ -1,101 +1,101 @@
-#
-# fontconfig/fc-lang/kv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Komi (Komi-Permyak/Komi-Siryan) (KV)
-#
-# I've taken Komi-Permyak as it contains two extra codepoints
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-0456
-04e6
-04e7
+#
+# fontconfig/fc-lang/kv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Komi (Komi-Permyak/Komi-Siryan) (KV)
+#
+# I've taken Komi-Permyak as it contains two extra codepoints
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+0456
+04e6
+04e7
diff --git a/fontconfig/fc-lang/kw.orth b/fontconfig/fc-lang/kw.orth
index 11824b799..df6eac36a 100644
--- a/fontconfig/fc-lang/kw.orth
+++ b/fontconfig/fc-lang/kw.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/kw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Cornish (KW)
-#
-# Orthography from http://www.evertype.com/alphabets/cornish.pdf
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-0232-0233
+#
+# fontconfig/fc-lang/kw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Cornish (KW)
+#
+# Orthography from http://www.evertype.com/alphabets/cornish.pdf
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+0232-0233
diff --git a/fontconfig/fc-lang/ky.orth b/fontconfig/fc-lang/ky.orth
index ba8425027..a7fd3d437 100644
--- a/fontconfig/fc-lang/ky.orth
+++ b/fontconfig/fc-lang/ky.orth
@@ -1,102 +1,102 @@
-#
-# fontconfig/fc-lang/ky.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kirgiz (KY)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-04a2
-04a3
-04ae
-04af
+#
+# fontconfig/fc-lang/ky.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kirgiz (KY)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+04a2
+04a3
+04ae
+04af
diff --git a/fontconfig/fc-lang/la.orth b/fontconfig/fc-lang/la.orth
index b28cbcce7..1c1a1291c 100644
--- a/fontconfig/fc-lang/la.orth
+++ b/fontconfig/fc-lang/la.orth
@@ -1,31 +1,31 @@
-#
-# fontconfig/fc-lang/la.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Latin (LA)
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012d
-014c-014f
-016a-016d
+#
+# fontconfig/fc-lang/la.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Latin (LA)
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012d
+014c-014f
+016a-016d
diff --git a/fontconfig/fc-lang/lb.orth b/fontconfig/fc-lang/lb.orth
index 6f7b2c299..ba299af61 100644
--- a/fontconfig/fc-lang/lb.orth
+++ b/fontconfig/fc-lang/lb.orth
@@ -1,62 +1,62 @@
-#
-# fontconfig/fc-lang/lb.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Luxembourgish (Letzeburgesch) (LB)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#
-# Required characters
-#
-00c4
-00e4
-00c9
-00e9
-00cb
-00eb
-00d6
-00f6
-00dc
-00fc
-#
-# Important characters
-#
-00c2
-00e2
-00c8
-00e8
-00ca
-00ea
-00ce
-00ee
-#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS)
-#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS)
-#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS)
-#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS)
-00d4
-00f4
-00db
-00fb
-00df
+#
+# fontconfig/fc-lang/lb.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Luxembourgish (Letzeburgesch) (LB)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#
+# Required characters
+#
+00c4
+00e4
+00c9
+00e9
+00cb
+00eb
+00d6
+00f6
+00dc
+00fc
+#
+# Important characters
+#
+00c2
+00e2
+00c8
+00e8
+00ca
+00ea
+00ce
+00ee
+#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS)
+#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS)
+#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS)
+#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS)
+00d4
+00f4
+00db
+00fb
+00df
diff --git a/fontconfig/fc-lang/lez.orth b/fontconfig/fc-lang/lez.orth
index 3fe9ac2eb..1f2ac70a3 100644
--- a/fontconfig/fc-lang/lez.orth
+++ b/fontconfig/fc-lang/lez.orth
@@ -1,97 +1,97 @@
-#
-# fontconfig/fc-lang/lez.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Lezghian (Lezgian) (LEZ)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/lez.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Lezghian (Lezgian) (LEZ)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/ln.orth b/fontconfig/fc-lang/ln.orth
index c32d66d74..49575ced4 100644
--- a/fontconfig/fc-lang/ln.orth
+++ b/fontconfig/fc-lang/ln.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/ln.orth
-#
-# Copyright © 2006 Danis Jacquerye
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lingala (LN)
-0041-005a # r used in borrowed words, x and q unused.
-0061-007a
-00c1-00c2 # tonal orthography
-00c9-00ca
-00cd-00ce
-00d3-00d4
-00da-00db
-00e1-00e2
-00e9-00ea
-00ed-00ee
-00f3-00f4
-00fa-00fb
-011a-011b
-0186
-0190
-0254
-025b
-0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b
-030c
+#
+# fontconfig/fc-lang/ln.orth
+#
+# Copyright © 2006 Danis Jacquerye
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lingala (LN)
+0041-005a # r used in borrowed words, x and q unused.
+0061-007a
+00c1-00c2 # tonal orthography
+00c9-00ca
+00cd-00ce
+00d3-00d4
+00da-00db
+00e1-00e2
+00e9-00ea
+00ed-00ee
+00f3-00f4
+00fa-00fb
+011a-011b
+0186
+0190
+0254
+025b
+0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b
+030c
diff --git a/fontconfig/fc-lang/lo.orth b/fontconfig/fc-lang/lo.orth
index 7c2dd0320..6b6333bc2 100644
--- a/fontconfig/fc-lang/lo.orth
+++ b/fontconfig/fc-lang/lo.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/lo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lao (lo)
-#
-# Taken from the Unicode coverage of this language
-#
-0e81-0e82
-0e84
-0e87-0e88
-0e8a
-0e8d
-0e94-0e97
-0e99-0e9f
-0ea1-0ea3
-0ea5
-0ea7
-0eaa-0eab
-0ead-0eb9
-0ebb-0ebd
-0ec0-0ec4
-0ec6
-0ec8-0ecd
-#0ed0-0ed9 # Digits
-0edc-0edd
+#
+# fontconfig/fc-lang/lo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lao (lo)
+#
+# Taken from the Unicode coverage of this language
+#
+0e81-0e82
+0e84
+0e87-0e88
+0e8a
+0e8d
+0e94-0e97
+0e99-0e9f
+0ea1-0ea3
+0ea5
+0ea7
+0eaa-0eab
+0ead-0eb9
+0ebb-0ebd
+0ec0-0ec4
+0ec6
+0ec8-0ecd
+#0ed0-0ed9 # Digits
+0edc-0edd
diff --git a/fontconfig/fc-lang/lt.orth b/fontconfig/fc-lang/lt.orth
index 4bdfe7633..946ba19a2 100644
--- a/fontconfig/fc-lang/lt.orth
+++ b/fontconfig/fc-lang/lt.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/lt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lithuanian (LT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0104-0105
-010c-010d
-#0106-0109
-0116-0117
-0118-0119
-012e-012f
-0160-0161
-016a-016b
-0172-0173
-017d-017e
-#2019-201a # single quotes
-#201d-201e # double quotes
+#
+# fontconfig/fc-lang/lt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lithuanian (LT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0104-0105
+010c-010d
+#0106-0109
+0116-0117
+0118-0119
+012e-012f
+0160-0161
+016a-016b
+0172-0173
+017d-017e
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/fontconfig/fc-lang/lv.orth b/fontconfig/fc-lang/lv.orth
index fad04257e..49b971055 100644
--- a/fontconfig/fc-lang/lv.orth
+++ b/fontconfig/fc-lang/lv.orth
@@ -1,44 +1,44 @@
-#
-# fontconfig/fc-lang/lv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Latvian (LV)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-010c-010d
-0112-0113
-0122-0123
-012a-012b
-0136-0137
-013b-013c
-0145-0146
-014c-014d
-0156-0157
-0160-0161
-016a-016b
-017d-017e
+#
+# fontconfig/fc-lang/lv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Latvian (LV)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+010c-010d
+0112-0113
+0122-0123
+012a-012b
+0136-0137
+013b-013c
+0145-0146
+014c-014d
+0156-0157
+0160-0161
+016a-016b
+017d-017e
diff --git a/fontconfig/fc-lang/mai.orth b/fontconfig/fc-lang/mai.orth
index fd3971c01..e66119007 100644
--- a/fontconfig/fc-lang/mai.orth
+++ b/fontconfig/fc-lang/mai.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/mai.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maithili (Devanagari script) (MAI)
-include hi.orth
+#
+# fontconfig/fc-lang/mai.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maithili (Devanagari script) (MAI)
+include hi.orth
diff --git a/fontconfig/fc-lang/mg.orth b/fontconfig/fc-lang/mg.orth
index 3482c8f52..c79c9e030 100644
--- a/fontconfig/fc-lang/mg.orth
+++ b/fontconfig/fc-lang/mg.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/mg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Malagasy (MG)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS
-#e011 # LATIN SMALL LETTER N WITH DIAERESIS
-00d4
-00f4
+#
+# fontconfig/fc-lang/mg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Malagasy (MG)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS
+#e011 # LATIN SMALL LETTER N WITH DIAERESIS
+00d4
+00f4
diff --git a/fontconfig/fc-lang/mh.orth b/fontconfig/fc-lang/mh.orth
index cdd6fb46d..5a0b1c93f 100644
--- a/fontconfig/fc-lang/mh.orth
+++ b/fontconfig/fc-lang/mh.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/mh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Marshallese (MH)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100
-0101
-013b
-013c
-#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS)
-#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS)
-#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS)
-#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS)
-0145
-0146
-014c
-014d
-#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS)
-#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS)
-016a
-016b
+#
+# fontconfig/fc-lang/mh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Marshallese (MH)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100
+0101
+013b
+013c
+#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS)
+#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS)
+#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS)
+#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS)
+0145
+0146
+014c
+014d
+#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS)
+#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS)
+016a
+016b
diff --git a/fontconfig/fc-lang/mi.orth b/fontconfig/fc-lang/mi.orth
index 1bc6832f7..81a5c02aa 100644
--- a/fontconfig/fc-lang/mi.orth
+++ b/fontconfig/fc-lang/mi.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/mi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maori (MI)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-1e34-1e35 # Ngai Tahu specific
+#
+# fontconfig/fc-lang/mi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maori (MI)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+1e34-1e35 # Ngai Tahu specific
diff --git a/fontconfig/fc-lang/mk.orth b/fontconfig/fc-lang/mk.orth
index 0dac53489..0705a9f75 100644
--- a/fontconfig/fc-lang/mk.orth
+++ b/fontconfig/fc-lang/mk.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/mk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Macedonian (MK)
-0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0403
-0405
-0408-040a
-040c
-040d # CYRILLIC CAPITAL LETTER I WITH GRAVE
-040f
-0410-0418
-041a-0428
-0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
-0453
-0455
-0458-045a
-045c
-045d # CYRILLIC SMALL LETTER I WITH GRAVE
-045f
+#
+# fontconfig/fc-lang/mk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Macedonian (MK)
+0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0403
+0405
+0408-040a
+040c
+040d # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040f
+0410-0418
+041a-0428
+0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
+0453
+0455
+0458-045a
+045c
+045d # CYRILLIC SMALL LETTER I WITH GRAVE
+045f
diff --git a/fontconfig/fc-lang/ml.orth b/fontconfig/fc-lang/ml.orth
index 744eb7ce9..46a25a750 100644
--- a/fontconfig/fc-lang/ml.orth
+++ b/fontconfig/fc-lang/ml.orth
@@ -1,38 +1,38 @@
-#
-# fontconfig/fc-lang/ml.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Malayalam (ml)
-#
-# Taken from the Unicode coverage of this language
-#
-0d02-0d03
-0d05-0d0c
-0d0e-0d10
-0d12-0d28
-0d2a-0d39
-0d3e-0d43
-0d46-0d48
-0d4a-0d4d
-0d57
-0d60-0d61
-#0d66-0d6f # Digits
+#
+# fontconfig/fc-lang/ml.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Malayalam (ml)
+#
+# Taken from the Unicode coverage of this language
+#
+0d02-0d03
+0d05-0d0c
+0d0e-0d10
+0d12-0d28
+0d2a-0d39
+0d3e-0d43
+0d46-0d48
+0d4a-0d4d
+0d57
+0d60-0d61
+#0d66-0d6f # Digits
diff --git a/fontconfig/fc-lang/mn_cn.orth b/fontconfig/fc-lang/mn_cn.orth
index c20497917..1647dceb1 100644
--- a/fontconfig/fc-lang/mn_cn.orth
+++ b/fontconfig/fc-lang/mn_cn.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/mn_cn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Mongolian in China (mn-CN)
-#
-# Taken from the Unicode coverage of this language
-#
-# Basic letters
-1820-1842
-# Todo letters
-1843-185c
-# Sibe letters
-185d-1872
-# Manchu letters
-1873-1877
-# Extensions for Sanskrit and Tibetan
-1880-18a9
+#
+# fontconfig/fc-lang/mn_cn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Mongolian in China (mn-CN)
+#
+# Taken from the Unicode coverage of this language
+#
+# Basic letters
+1820-1842
+# Todo letters
+1843-185c
+# Sibe letters
+185d-1872
+# Manchu letters
+1873-1877
+# Extensions for Sanskrit and Tibetan
+1880-18a9
diff --git a/fontconfig/fc-lang/mo.orth b/fontconfig/fc-lang/mo.orth
index 5b4263385..f76aeec5d 100644
--- a/fontconfig/fc-lang/mo.orth
+++ b/fontconfig/fc-lang/mo.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/mo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Moldavian (MO)
-0041-005a
-0061-007a
-00c2
-00ce
-00e2
-00ee
-0102-0103
-0218-021b # Comma below forms (preferred over cedilla)
-0401
-0410-044f
-0451
-#2019-201a # single quotes
-#201d-201e # double quotes
+#
+# fontconfig/fc-lang/mo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Moldavian (MO)
+0041-005a
+0061-007a
+00c2
+00ce
+00e2
+00ee
+0102-0103
+0218-021b # Comma below forms (preferred over cedilla)
+0401
+0410-044f
+0451
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/fontconfig/fc-lang/mr.orth b/fontconfig/fc-lang/mr.orth
index 029d51e4d..d8f457d33 100644
--- a/fontconfig/fc-lang/mr.orth
+++ b/fontconfig/fc-lang/mr.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/mr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Marathi (Devanagari script) (MR)
-include hi.orth
+#
+# fontconfig/fc-lang/mr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Marathi (Devanagari script) (MR)
+include hi.orth
diff --git a/fontconfig/fc-lang/mt.orth b/fontconfig/fc-lang/mt.orth
index 51edc4efb..1e8cbfed2 100644
--- a/fontconfig/fc-lang/mt.orth
+++ b/fontconfig/fc-lang/mt.orth
@@ -1,67 +1,67 @@
-#
-# fontconfig/fc-lang/mt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maltese (MT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-#00c1
-#00c2
-00c8
-#00c9
-#00ca
-00cc
-#00cd
-00ce
-00d2
-#00d3
-#00d4
-00d9
-#00da
-#00db
-00e0
-#00e1
-#00e2
-00e8
-#00e9
-#00ea
-00ec
-#00ed
-00ee
-00f2
-#00f3
-#00f4
-00f9
-#00fa
-#00fb
-010a-010b
-0120-0121
-0126-0127
-017b-017c
-#02bc
-#
+#
+# fontconfig/fc-lang/mt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maltese (MT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+#00c1
+#00c2
+00c8
+#00c9
+#00ca
+00cc
+#00cd
+00ce
+00d2
+#00d3
+#00d4
+00d9
+#00da
+#00db
+00e0
+#00e1
+#00e2
+00e8
+#00e9
+#00ea
+00ec
+#00ed
+00ee
+00f2
+#00f3
+#00f4
+00f9
+#00fa
+#00fb
+010a-010b
+0120-0121
+0126-0127
+017b-017c
+#02bc
+#
diff --git a/fontconfig/fc-lang/my.orth b/fontconfig/fc-lang/my.orth
index 9046d26e5..c660f7e22 100644
--- a/fontconfig/fc-lang/my.orth
+++ b/fontconfig/fc-lang/my.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/my.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Burmese (Myanmar) (MY)
-#
-# Orthography from Unicode range (U+1000-U+1059)
-#
-# Consonants
-1000-1020
-# Independent vowels
-1021
-1023-1027
-1029-102a
-# Dependent vowel signs
-102c-1032
-# Pali and Sanskrit extensions
-#1050-1059
+#
+# fontconfig/fc-lang/my.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Burmese (Myanmar) (MY)
+#
+# Orthography from Unicode range (U+1000-U+1059)
+#
+# Consonants
+1000-1020
+# Independent vowels
+1021
+1023-1027
+1029-102a
+# Dependent vowel signs
+102c-1032
+# Pali and Sanskrit extensions
+#1050-1059
diff --git a/fontconfig/fc-lang/nb.orth b/fontconfig/fc-lang/nb.orth
index ff8417687..b904b05e5 100644
--- a/fontconfig/fc-lang/nb.orth
+++ b/fontconfig/fc-lang/nb.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/nb.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian Bokmål (nb)
-include no.orth
+#
+# fontconfig/fc-lang/nb.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian Bokmål (nb)
+include no.orth
diff --git a/fontconfig/fc-lang/nds.orth b/fontconfig/fc-lang/nds.orth
index 3b2db30ce..73188aa21 100644
--- a/fontconfig/fc-lang/nds.orth
+++ b/fontconfig/fc-lang/nds.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/nds.orth
-#
-# Copyright © 2004 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Low Saxon (NDS)
-#
-# Sources:
-# Kenneth Rohde Christiansen <kenneth@gnu.org>
-# ANS -
-# Algemeyne Neddersassische Schryvwys' (DE)
-# Algemeyne Nedersaksische Schryvwyse (NL)
-#
-0041-005a # LATIN CAPITAL LETTER A through Z
-0061-007a # LATIN SMALL LETTER A through Z
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DF # LATIN SMALL LETTER SHARP S (German)
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#
+# fontconfig/fc-lang/nds.orth
+#
+# Copyright © 2004 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Low Saxon (NDS)
+#
+# Sources:
+# Kenneth Rohde Christiansen <kenneth@gnu.org>
+# ANS -
+# Algemeyne Neddersassische Schryvwys' (DE)
+# Algemeyne Nedersaksische Schryvwyse (NL)
+#
+0041-005a # LATIN CAPITAL LETTER A through Z
+0061-007a # LATIN SMALL LETTER A through Z
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DF # LATIN SMALL LETTER SHARP S (German)
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
diff --git a/fontconfig/fc-lang/ne.orth b/fontconfig/fc-lang/ne.orth
index 18cf01119..782e7939a 100644
--- a/fontconfig/fc-lang/ne.orth
+++ b/fontconfig/fc-lang/ne.orth
@@ -1,25 +1,26 @@
-#
-# fontconfig/fc-lang/ne.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Nepali (Devanagari script) (NE)
-include hi.orth
+#
+# fontconfig/fc-lang/ne.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Nepali (Devanagari script) (NE)
+include hi.orth
+-090C-090E # See bug 30685
diff --git a/fontconfig/fc-lang/nl.orth b/fontconfig/fc-lang/nl.orth
index 6f6315fd7..f694963c0 100644
--- a/fontconfig/fc-lang/nl.orth
+++ b/fontconfig/fc-lang/nl.orth
@@ -1,63 +1,63 @@
-#
-# fontconfig/fc-lang/nl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dutch (NL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00c2
-00c4
-00c8
-00c9
-00ca
-00cb
-00cd
-00cf
-00d3
-00d4
-00d6
-00da
-00db
-00dc
-00e1
-00e2
-00e4
-00e8
-00e9
-00ea
-00eb
-00ed
-00ef
-00f3
-00f4
-00f6
-00fa
-00fb
-00fc
-#0132-0133 # IJ and ij ligatures
-
+#
+# fontconfig/fc-lang/nl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dutch (NL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00c2
+00c4
+00c8
+00c9
+00ca
+00cb
+00cd
+00cf
+00d3
+00d4
+00d6
+00da
+00db
+00dc
+00e1
+00e2
+00e4
+00e8
+00e9
+00ea
+00eb
+00ed
+00ef
+00f3
+00f4
+00f6
+00fa
+00fb
+00fc
+#0132-0133 # IJ and ij ligatures
+
diff --git a/fontconfig/fc-lang/nn.orth b/fontconfig/fc-lang/nn.orth
index b21e90f66..01d325da9 100644
--- a/fontconfig/fc-lang/nn.orth
+++ b/fontconfig/fc-lang/nn.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/nn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian Nynorsk (NN)
-0041-005a
-0061-007a
-#00ab # double angle quotes
-#00bb # double angle quotes
-00c0
-00c4-00c6
-00c9-00ca
-00d2-00d4
-00d6
-00d8
-00dc
-00e0
-00e4-00e6
-00e9-00ea
-00f2-00f4
-00f6
-00f8
-00fc
-#2039-203a # single quotes
+#
+# fontconfig/fc-lang/nn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian Nynorsk (NN)
+0041-005a
+0061-007a
+#00ab # double angle quotes
+#00bb # double angle quotes
+00c0
+00c4-00c6
+00c9-00ca
+00d2-00d4
+00d6
+00d8
+00dc
+00e0
+00e4-00e6
+00e9-00ea
+00f2-00f4
+00f6
+00f8
+00fc
+#2039-203a # single quotes
diff --git a/fontconfig/fc-lang/no.orth b/fontconfig/fc-lang/no.orth
index 305c361cd..3b00143d8 100644
--- a/fontconfig/fc-lang/no.orth
+++ b/fontconfig/fc-lang/no.orth
@@ -1,68 +1,68 @@
-#
-# fontconfig/fc-lang/no.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian (Bokmål) (NO)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-00c0
-#00c1
-#00c2
-#00c4
-00c5
-00c6
-#00c7
-#00c8
-00c9
-00ca
-#00cb
-00d2
-00d3
-00d4
-#00d6
-00d8
-#00dc
-00e0
-#00e1
-#00e2
-#00e4
-00e5
-00e6
-#00e7
-#00e8
-00e9
-00ea
-#00eb
-00f2
-00f3
-00f4
-#00f6
-00f8
-#00fc
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/no.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian (Bokmål) (NO)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+00c0
+#00c1
+#00c2
+#00c4
+00c5
+00c6
+#00c7
+#00c8
+00c9
+00ca
+#00cb
+00d2
+00d3
+00d4
+#00d6
+00d8
+#00dc
+00e0
+#00e1
+#00e2
+#00e4
+00e5
+00e6
+#00e7
+#00e8
+00e9
+00ea
+#00eb
+00f2
+00f3
+00f4
+#00f6
+00f8
+#00fc
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/ny.orth b/fontconfig/fc-lang/ny.orth
index b846647e9..e168da566 100644
--- a/fontconfig/fc-lang/ny.orth
+++ b/fontconfig/fc-lang/ny.orth
@@ -1,30 +1,30 @@
-#
-# fontconfig/fc-lang/ny.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chichewa (NY)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0174-0175
+#
+# fontconfig/fc-lang/ny.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chichewa (NY)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0174-0175
diff --git a/fontconfig/fc-lang/oc.orth b/fontconfig/fc-lang/oc.orth
index 55b237e6c..eb4bb8795 100644
--- a/fontconfig/fc-lang/oc.orth
+++ b/fontconfig/fc-lang/oc.orth
@@ -1,53 +1,53 @@
-#
-# fontconfig/fc-lang/oc.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Occitan (OC)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c7
-00c8
-00c9
-#00cb
-00cd
-#00cf
-00d2
-00d3
-00da
-00e0
-00e1
-00e7
-00e8
-00e9
-#00eb
-00ed
-#00ef
-00f2
-00f3
-00fa
+#
+# fontconfig/fc-lang/oc.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Occitan (OC)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c7
+00c8
+00c9
+#00cb
+00cd
+#00cf
+00d2
+00d3
+00da
+00e0
+00e1
+00e7
+00e8
+00e9
+#00eb
+00ed
+#00ef
+00f2
+00f3
+00fa
diff --git a/fontconfig/fc-lang/om.orth b/fontconfig/fc-lang/om.orth
index 7f28d39bd..3f7eb7d93 100644
--- a/fontconfig/fc-lang/om.orth
+++ b/fontconfig/fc-lang/om.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/om.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Oromo or Galla (OM)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Oromo doesn't use v or z
-0061-007a
+#
+# fontconfig/fc-lang/om.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Oromo or Galla (OM)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Oromo doesn't use v or z
+0061-007a
diff --git a/fontconfig/fc-lang/or.orth b/fontconfig/fc-lang/or.orth
index 3c54fe397..fc4a774bb 100644
--- a/fontconfig/fc-lang/or.orth
+++ b/fontconfig/fc-lang/or.orth
@@ -1,42 +1,42 @@
-#
-# fontconfig/fc-lang/or.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Oriya (or)
-#
-# Taken from the Unicode coverage of this language
-#
-0b01-0b03
-0b05-0b0c
-0b0f-0b10
-0b13-0b28
-0b2a-0b30
-0b32-0b33
-0b36-0b39
-0b3c-0b43
-0b47-0b48
-0b4b-0b4d
-0b56-0b57
-0b5c-0b5d
-0b5f-0b61
-#0b66-0b6f # Digits
-#0b70 # Symbol
+#
+# fontconfig/fc-lang/or.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Oriya (or)
+#
+# Taken from the Unicode coverage of this language
+#
+0b01-0b03
+0b05-0b0c
+0b0f-0b10
+0b13-0b28
+0b2a-0b30
+0b32-0b33
+0b36-0b39
+0b3c-0b43
+0b47-0b48
+0b4b-0b4d
+0b56-0b57
+0b5c-0b5d
+0b5f-0b61
+#0b66-0b6f # Digits
+#0b70 # Symbol
diff --git a/fontconfig/fc-lang/os.orth b/fontconfig/fc-lang/os.orth
index a5929df3e..7f771cc92 100644
--- a/fontconfig/fc-lang/os.orth
+++ b/fontconfig/fc-lang/os.orth
@@ -1,96 +1,96 @@
-#
-# fontconfig/fc-lang/os.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Ossetic (OS)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/os.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Ossetic (OS)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/pes.orth b/fontconfig/fc-lang/pes.orth
index 81b39107f..9700cc52a 100644
--- a/fontconfig/fc-lang/pes.orth
+++ b/fontconfig/fc-lang/pes.orth
@@ -1,26 +1,26 @@
-#
-# fontconfig/fc-lang/pes.orth
-#
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Western Farsi (pes)
-#
-include fa.orth
+#
+# fontconfig/fc-lang/pes.orth
+#
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Western Farsi (pes)
+#
+include fa.orth
diff --git a/fontconfig/fc-lang/pl.orth b/fontconfig/fc-lang/pl.orth
index e2d494e3f..1858395b2 100644
--- a/fontconfig/fc-lang/pl.orth
+++ b/fontconfig/fc-lang/pl.orth
@@ -1,41 +1,41 @@
-#
-# fontconfig/fc-lang/pl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Polish (PL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00d3
-00f3
-0104-0105
-0106-0107
-0118-0119
-0141-0142
-0143-0144
-015a-015b
-0179-017a
-017b-017c
+#
+# fontconfig/fc-lang/pl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Polish (PL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00d3
+00f3
+0104-0105
+0106-0107
+0118-0119
+0141-0142
+0143-0144
+015a-015b
+0179-017a
+017b-017c
diff --git a/fontconfig/fc-lang/prs.orth b/fontconfig/fc-lang/prs.orth
index 98cf654bc..edb3bca31 100644
--- a/fontconfig/fc-lang/prs.orth
+++ b/fontconfig/fc-lang/prs.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/prs.orth
-#
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dari/Eastern Farsi (prs)
-#
-# We assume that Afghan Persian uses the same orthography as Iranian
-# Persian, although the actual orthography is probably less strict than that
-# of the Iranian Academy of Persian Language and Literature.
-include fa.orth
+#
+# fontconfig/fc-lang/prs.orth
+#
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dari/Eastern Farsi (prs)
+#
+# We assume that Afghan Persian uses the same orthography as Iranian
+# Persian, although the actual orthography is probably less strict than that
+# of the Iranian Academy of Persian Language and Literature.
+include fa.orth
diff --git a/fontconfig/fc-lang/ps_af.orth b/fontconfig/fc-lang/ps_af.orth
index 5cae9eda9..3fabdf3c1 100644
--- a/fontconfig/fc-lang/ps_af.orth
+++ b/fontconfig/fc-lang/ps_af.orth
@@ -1,52 +1,52 @@
-#
-# fontconfig/fc-lang/ps_af.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Pashto in Afghanistan (PS-AF)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain any of the
-# Pashto-specific letters (that is Pashto letters not in Persian), we are
-# going with the general forms instead of the Presentation forms, unlike
-# Arabic, Persian, or Urdu.
-#
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-064a
-067c
-067e
-0681
-0685-0686
-0689
-0693
-0696
-0698
-069a
-06a9
-06ab
-06bc
-06cc
-06cd
-06d0
+#
+# fontconfig/fc-lang/ps_af.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Pashto in Afghanistan (PS-AF)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain any of the
+# Pashto-specific letters (that is Pashto letters not in Persian), we are
+# going with the general forms instead of the Presentation forms, unlike
+# Arabic, Persian, or Urdu.
+#
+0621-0624
+0626-063a
+0641-0642
+0644-0648
+064a
+067c
+067e
+0681
+0685-0686
+0689
+0693
+0696
+0698
+069a
+06a9
+06ab
+06bc
+06cc
+06cd
+06d0
diff --git a/fontconfig/fc-lang/ps_pk.orth b/fontconfig/fc-lang/ps_pk.orth
index 1ce76d5ad..c0d982441 100644
--- a/fontconfig/fc-lang/ps_pk.orth
+++ b/fontconfig/fc-lang/ps_pk.orth
@@ -1,52 +1,52 @@
-#
-# fontconfig/fc-lang/ps_pk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Pashto in Pakistan (PS-PK)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain any of the
-# Pashto-specific letters (that is Pashto letters not in Persian), we are
-# going with the general forms instead of the Presentation forms, unlike
-# Arabic, Persian, or Urdu.
-#
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-064a
-067c
-067e
-0681
-0685-0686
-0689
-0693
-0696
-0698
-069a
-06a9
-06ab
-06bc
-06cd
-06d0
-06d2
+#
+# fontconfig/fc-lang/ps_pk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Pashto in Pakistan (PS-PK)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain any of the
+# Pashto-specific letters (that is Pashto letters not in Persian), we are
+# going with the general forms instead of the Presentation forms, unlike
+# Arabic, Persian, or Urdu.
+#
+0621-0624
+0626-063a
+0641-0642
+0644-0648
+064a
+067c
+067e
+0681
+0685-0686
+0689
+0693
+0696
+0698
+069a
+06a9
+06ab
+06bc
+06cd
+06d0
+06d2
diff --git a/fontconfig/fc-lang/pt.orth b/fontconfig/fc-lang/pt.orth
index 77e97bfdd..862d82f1d 100644
--- a/fontconfig/fc-lang/pt.orth
+++ b/fontconfig/fc-lang/pt.orth
@@ -1,64 +1,64 @@
-#
-# fontconfig/fc-lang/pt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Portuguese (PT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00bb
-00c0
-00c1
-00c2
-00c3
-00c7
-00c8
-00c9
-00ca
-00cd
-00d2
-00d3
-00d4
-00d5
-00da
-00dc
-00e0
-00e1
-00e2
-00e3
-00e7
-00e8
-00e9
-00ea
-00ed
-00f2
-00f3
-00f4
-00f5
-00fa
-00fc
-##203a # angle quote
-#
+#
+# fontconfig/fc-lang/pt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Portuguese (PT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00bb
+00c0
+00c1
+00c2
+00c3
+00c7
+00c8
+00c9
+00ca
+00cd
+00d2
+00d3
+00d4
+00d5
+00da
+00dc
+00e0
+00e1
+00e2
+00e3
+00e7
+00e8
+00e9
+00ea
+00ed
+00f2
+00f3
+00f4
+00f5
+00fa
+00fc
+##203a # angle quote
+#
diff --git a/fontconfig/fc-lang/rm.orth b/fontconfig/fc-lang/rm.orth
index 4c62810ed..20948ea7e 100644
--- a/fontconfig/fc-lang/rm.orth
+++ b/fontconfig/fc-lang/rm.orth
@@ -1,45 +1,45 @@
-#
-# fontconfig/fc-lang/rm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Rhaeto-Romance (Romansch) (RM)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c8
-00c9
-00cc
-00ce
-00d2
-00d9
-00e0
-00e8
-00e9
-00ec
-00ee
-00f2
-00f9
+#
+# fontconfig/fc-lang/rm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Rhaeto-Romance (Romansch) (RM)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c8
+00c9
+00cc
+00ce
+00d2
+00d9
+00e0
+00e8
+00e9
+00ec
+00ee
+00f2
+00f9
diff --git a/fontconfig/fc-lang/ro.orth b/fontconfig/fc-lang/ro.orth
index 8c97d4d27..a2f887b71 100644
--- a/fontconfig/fc-lang/ro.orth
+++ b/fontconfig/fc-lang/ro.orth
@@ -1,38 +1,38 @@
-#
-# fontconfig/fc-lang/ro.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Romanian (RO)
-#
-# Sources:
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00ce
-00e2
-00ee
-0102-0103
-0218-021b # comma-below forms (preferred over cedilla)
-#2019-201a # single quotes
-#201d-201e # double quotes
+#
+# fontconfig/fc-lang/ro.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Romanian (RO)
+#
+# Sources:
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00ce
+00e2
+00ee
+0102-0103
+0218-021b # comma-below forms (preferred over cedilla)
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/fontconfig/fc-lang/ru.orth b/fontconfig/fc-lang/ru.orth
index b8cb2ee99..e6eb3501b 100644
--- a/fontconfig/fc-lang/ru.orth
+++ b/fontconfig/fc-lang/ru.orth
@@ -1,38 +1,38 @@
-#
-# fontconfig/fc-lang/ru.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Russian (RU)
-#00ab
-#00bb
-0401
-#0406 # eliminated in 1918 in favor of 418
-0410-044f
-0451
-#0456 # eliminated in 1918 in favor of 438
-#0462 # CYRILLIC CAPITAL LETTER YAT
-#0463 # CYRILLIC SMALL LETTER YAT
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-#0474 # CYRILLIC CAPITAL LETTER IZHITSA
-#0475 # CYRILLIC SMALL LETTER IZHITSA
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/ru.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Russian (RU)
+#00ab
+#00bb
+0401
+#0406 # eliminated in 1918 in favor of 418
+0410-044f
+0451
+#0456 # eliminated in 1918 in favor of 438
+#0462 # CYRILLIC CAPITAL LETTER YAT
+#0463 # CYRILLIC SMALL LETTER YAT
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+#0474 # CYRILLIC CAPITAL LETTER IZHITSA
+#0475 # CYRILLIC SMALL LETTER IZHITSA
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/sa.orth b/fontconfig/fc-lang/sa.orth
index c7b08e16c..7d17bd1cf 100644
--- a/fontconfig/fc-lang/sa.orth
+++ b/fontconfig/fc-lang/sa.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/sa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Sanskrit (Devanagari script) (SA)
-include hi.orth
+#
+# fontconfig/fc-lang/sa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sanskrit (Devanagari script) (SA)
+include hi.orth
diff --git a/fontconfig/fc-lang/sah.orth b/fontconfig/fc-lang/sah.orth
index b4f25d97e..928b8070f 100644
--- a/fontconfig/fc-lang/sah.orth
+++ b/fontconfig/fc-lang/sah.orth
@@ -1,108 +1,108 @@
-#
-# fontconfig/fc-lang/sah.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Yakut (SAH)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-0494
-0495
-04a4
-04a5
-04ae
-04af
-04ba
-04bb
-04d8
-04d9
+#
+# fontconfig/fc-lang/sah.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Yakut (SAH)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+0494
+0495
+04a4
+04a5
+04ae
+04af
+04ba
+04bb
+04d8
+04d9
diff --git a/fontconfig/fc-lang/sco.orth b/fontconfig/fc-lang/sco.orth
index 26bf0d60c..e515ca27c 100644
--- a/fontconfig/fc-lang/sco.orth
+++ b/fontconfig/fc-lang/sco.orth
@@ -1,32 +1,32 @@
-#
-# fontconfig/fc-lang/sco.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Scots (CU)
-#
-# Orthography from http://www.evertype.com/alphabets/scots.pdf
-#
-0041-005a
-0061-007a
-01b7
-021c-021d
-0292
+#
+# fontconfig/fc-lang/sco.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Scots (CU)
+#
+# Orthography from http://www.evertype.com/alphabets/scots.pdf
+#
+0041-005a
+0061-007a
+01b7
+021c-021d
+0292
diff --git a/fontconfig/fc-lang/se.orth b/fontconfig/fc-lang/se.orth
index e08733b8a..d67da376c 100644
--- a/fontconfig/fc-lang/se.orth
+++ b/fontconfig/fc-lang/se.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/se.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# North Sámi (SE)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-010c-010d
-0110-0111
-014a-014b
-0160-0161
-0166-0167
-017d-017e
+#
+# fontconfig/fc-lang/se.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# North Sámi (SE)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+010c-010d
+0110-0111
+014a-014b
+0160-0161
+0166-0167
+017d-017e
diff --git a/fontconfig/fc-lang/sel.orth b/fontconfig/fc-lang/sel.orth
index d76466a80..0bc87b874 100644
--- a/fontconfig/fc-lang/sel.orth
+++ b/fontconfig/fc-lang/sel.orth
@@ -1,96 +1,96 @@
-#
-# fontconfig/fc-lang/sel.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Selkup (Ostyak-Samoyed) (SEL)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+#
+# fontconfig/fc-lang/sel.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Selkup (Ostyak-Samoyed) (SEL)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/fontconfig/fc-lang/sk.orth b/fontconfig/fc-lang/sk.orth
index c7c870d87..08b639818 100644
--- a/fontconfig/fc-lang/sk.orth
+++ b/fontconfig/fc-lang/sk.orth
@@ -1,63 +1,63 @@
-#
-# fontconfig/fc-lang/sk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Slovak (SK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00c4
-00c9
-00cd
-00d3
-00d4
-#00d6 # evertype.com
-00da
-#00dc # evertype.com
-00dd
-00e1
-00e4
-00e9
-00ed
-00f3
-00f4
-#00f6 # evertype.com
-00fa
-#00fc # evertype.com
-00fd
-010c-010d
-010e-010f
-0139-013a
-013d-013e
-0147-0148
-#0150-0151 # evertype.com
-0154-0155
-0160-0161
-0164-0165
-#0170-0171 # evertype.com
-017d-017e
-#
+#
+# fontconfig/fc-lang/sk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Slovak (SK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00c4
+00c9
+00cd
+00d3
+00d4
+#00d6 # evertype.com
+00da
+#00dc # evertype.com
+00dd
+00e1
+00e4
+00e9
+00ed
+00f3
+00f4
+#00f6 # evertype.com
+00fa
+#00fc # evertype.com
+00fd
+010c-010d
+010e-010f
+0139-013a
+013d-013e
+0147-0148
+#0150-0151 # evertype.com
+0154-0155
+0160-0161
+0164-0165
+#0170-0171 # evertype.com
+017d-017e
+#
diff --git a/fontconfig/fc-lang/sl.orth b/fontconfig/fc-lang/sl.orth
index f37147587..0a53eda90 100644
--- a/fontconfig/fc-lang/sl.orth
+++ b/fontconfig/fc-lang/sl.orth
@@ -1,88 +1,88 @@
-#
-# fontconfig/fc-lang/sl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Slovenian (SL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#
-# Included in eki.ee
-#
-#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
-#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
-#00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-#00E4 LATIN SMALL LETTER A WITH DIAERESIS
-#00F6 LATIN SMALL LETTER O WITH DIAERESIS
-#00FC LATIN SMALL LETTER U WITH DIAERESIS
-0106 LATIN CAPITAL LETTER C WITH ACUTE
-0107 LATIN SMALL LETTER C WITH ACUTE
-010C LATIN CAPITAL LETTER C WITH CARON
-010D LATIN SMALL LETTER C WITH CARON
-0110 LATIN CAPITAL LETTER D WITH STROKE
-0111 LATIN SMALL LETTER D WITH STROKE
-0160 LATIN CAPITAL LETTER S WITH CARON
-0161 LATIN SMALL LETTER S WITH CARON
-017D LATIN CAPITAL LETTER Z WITH CARON
-017E LATIN SMALL LETTER Z WITH CARON
-#
-# According to evertype.com:
-#
-# In slovenian, these letters are often used to transliterate
-# Serbian and Macedonian letters
-#
-#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-#01C6 LATIN SMALL LETTER DZ WITH CARON
-#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
-#01C9 LATIN SMALL LETTER LJ
-#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
-#01CC LATIN SMALL LETTER NJ
-#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-#01F3 LATIN SMALL LETTER DZ
-#01F4 LATIN CAPITAL LETTER G WITH ACUTE
-#01F5 LATIN SMALL LETTER G WITH ACUTE
-#1E30 LATIN CAPITAL LETTER K WITH ACUTE
-#1E31 LATIN SMALL LETTER K WITH ACUTE
-#
-# These are the transliteration target letters which are
-# not used in Slovenian at all
-#
-#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
-#0403 CYRILLIC CAPITAL LETTER GJE
-#0405 CYRILLIC CAPITAL LETTER DZE
-#0409 CYRILLIC CAPITAL LETTER LJE
-#040A CYRILLIC CAPITAL LETTER NJE
-#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
-#040C CYRILLIC CAPITAL LETTER KJE
-#040F CYRILLIC CAPITAL LETTER DZHE
-#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
-#0453 CYRILLIC SMALL LETTER GJE
-#0455 CYRILLIC SMALL LETTER DZE
-#0459 CYRILLIC SMALL LETTER LJE
-#045A CYRILLIC SMALL LETTER NJE
-#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
-#045C CYRILLIC SMALL LETTER KJE
-#045F CYRILLIC SMALL LETTER DZHE
+#
+# fontconfig/fc-lang/sl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Slovenian (SL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#
+# Included in eki.ee
+#
+#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+#00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+#00E4 LATIN SMALL LETTER A WITH DIAERESIS
+#00F6 LATIN SMALL LETTER O WITH DIAERESIS
+#00FC LATIN SMALL LETTER U WITH DIAERESIS
+0106 LATIN CAPITAL LETTER C WITH ACUTE
+0107 LATIN SMALL LETTER C WITH ACUTE
+010C LATIN CAPITAL LETTER C WITH CARON
+010D LATIN SMALL LETTER C WITH CARON
+0110 LATIN CAPITAL LETTER D WITH STROKE
+0111 LATIN SMALL LETTER D WITH STROKE
+0160 LATIN CAPITAL LETTER S WITH CARON
+0161 LATIN SMALL LETTER S WITH CARON
+017D LATIN CAPITAL LETTER Z WITH CARON
+017E LATIN SMALL LETTER Z WITH CARON
+#
+# According to evertype.com:
+#
+# In slovenian, these letters are often used to transliterate
+# Serbian and Macedonian letters
+#
+#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+#01C6 LATIN SMALL LETTER DZ WITH CARON
+#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
+#01C9 LATIN SMALL LETTER LJ
+#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
+#01CC LATIN SMALL LETTER NJ
+#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+#01F3 LATIN SMALL LETTER DZ
+#01F4 LATIN CAPITAL LETTER G WITH ACUTE
+#01F5 LATIN SMALL LETTER G WITH ACUTE
+#1E30 LATIN CAPITAL LETTER K WITH ACUTE
+#1E31 LATIN SMALL LETTER K WITH ACUTE
+#
+# These are the transliteration target letters which are
+# not used in Slovenian at all
+#
+#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+#0403 CYRILLIC CAPITAL LETTER GJE
+#0405 CYRILLIC CAPITAL LETTER DZE
+#0409 CYRILLIC CAPITAL LETTER LJE
+#040A CYRILLIC CAPITAL LETTER NJE
+#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+#040C CYRILLIC CAPITAL LETTER KJE
+#040F CYRILLIC CAPITAL LETTER DZHE
+#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
+#0453 CYRILLIC SMALL LETTER GJE
+#0455 CYRILLIC SMALL LETTER DZE
+#0459 CYRILLIC SMALL LETTER LJE
+#045A CYRILLIC SMALL LETTER NJE
+#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+#045C CYRILLIC SMALL LETTER KJE
+#045F CYRILLIC SMALL LETTER DZHE
diff --git a/fontconfig/fc-lang/sm.orth b/fontconfig/fc-lang/sm.orth
index fba7d3dfb..f2c663ed6 100644
--- a/fontconfig/fc-lang/sm.orth
+++ b/fontconfig/fc-lang/sm.orth
@@ -1,30 +1,30 @@
-#
-# fontconfig/fc-lang/sm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Samoan (AF)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-02bb
+#
+# fontconfig/fc-lang/sm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Samoan (AF)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+02bb
diff --git a/fontconfig/fc-lang/sma.orth b/fontconfig/fc-lang/sma.orth
index f6e65ecb5..6d6bc4048 100644
--- a/fontconfig/fc-lang/sma.orth
+++ b/fontconfig/fc-lang/sma.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/sma.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# South Sámi (SMA)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c4
-00e4
-00c5
-00e5
-00d6
-00f6
-00cf
-00ef
+#
+# fontconfig/fc-lang/sma.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# South Sámi (SMA)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c4
+00e4
+00c5
+00e5
+00d6
+00f6
+00cf
+00ef
diff --git a/fontconfig/fc-lang/smj.orth b/fontconfig/fc-lang/smj.orth
index e708a907b..9488bccbc 100644
--- a/fontconfig/fc-lang/smj.orth
+++ b/fontconfig/fc-lang/smj.orth
@@ -1,37 +1,37 @@
-#
-# fontconfig/fc-lang/smj.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lule Sámi (SMJ)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00c4
-00e4
-00c5
-00e5
-00d1
-00f1
+#
+# fontconfig/fc-lang/smj.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lule Sámi (SMJ)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00c4
+00e4
+00c5
+00e5
+00d1
+00f1
diff --git a/fontconfig/fc-lang/smn.orth b/fontconfig/fc-lang/smn.orth
index 4c2e2d6db..330de638b 100644
--- a/fontconfig/fc-lang/smn.orth
+++ b/fontconfig/fc-lang/smn.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/smn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Inari Sámi (SMN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00c2
-00e2
-00c4
-00e4
-010c-010d
-0110-0111
-014a-014b
-0160-0161
-017d-017e
+#
+# fontconfig/fc-lang/smn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Inari Sámi (SMN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00c2
+00e2
+00c4
+00e4
+010c-010d
+0110-0111
+014a-014b
+0160-0161
+017d-017e
diff --git a/fontconfig/fc-lang/sms.orth b/fontconfig/fc-lang/sms.orth
index 04d1de366..cf92fe0c5 100644
--- a/fontconfig/fc-lang/sms.orth
+++ b/fontconfig/fc-lang/sms.orth
@@ -1,48 +1,48 @@
-#
-# fontconfig/fc-lang/sms.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Skolt Sámi (SMJ)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00e2
-00c4
-00e4
-00c5
-00e5
-010c-010d
-0110-0111
-01b7
-0292
-01ee-01ef
-01e6-01e7
-01e4-01e5
-01e8-01e9
-014a-014b
-00d5
-00f5
-0160-0161
-017d-017e
+#
+# fontconfig/fc-lang/sms.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Skolt Sámi (SMJ)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00e2
+00c4
+00e4
+00c5
+00e5
+010c-010d
+0110-0111
+01b7
+0292
+01ee-01ef
+01e6-01e7
+01e4-01e5
+01e8-01e9
+014a-014b
+00d5
+00f5
+0160-0161
+017d-017e
diff --git a/fontconfig/fc-lang/so.orth b/fontconfig/fc-lang/so.orth
index 243657802..0df2d91c0 100644
--- a/fontconfig/fc-lang/so.orth
+++ b/fontconfig/fc-lang/so.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/so.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Somali (SO)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Somali doesn't use p, v or z
-0061-007a
+#
+# fontconfig/fc-lang/so.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Somali (SO)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Somali doesn't use p, v or z
+0061-007a
diff --git a/fontconfig/fc-lang/sq.orth b/fontconfig/fc-lang/sq.orth
index 252230202..01d7db0b6 100644
--- a/fontconfig/fc-lang/sq.orth
+++ b/fontconfig/fc-lang/sq.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/sq.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Albanian (SQ)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c7
-00cb
-00e7
-00eb
+#
+# fontconfig/fc-lang/sq.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Albanian (SQ)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c7
+00cb
+00e7
+00eb
diff --git a/fontconfig/fc-lang/sr.orth b/fontconfig/fc-lang/sr.orth
index 5439d6334..f3e65f13d 100644
--- a/fontconfig/fc-lang/sr.orth
+++ b/fontconfig/fc-lang/sr.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/sr.orth
-#
-# Copyright © 2008 Danilo Šegan
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Serbian (SR)
-#
-0402
-0408-040b
-040f
-0410-0418
-041a-0428
-0430-0438
-043a-0448
-0452
-0458-045b
-045f
+#
+# fontconfig/fc-lang/sr.orth
+#
+# Copyright © 2008 Danilo Šegan
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Serbian (SR)
+#
+0402
+0408-040b
+040f
+0410-0418
+041a-0428
+0430-0438
+043a-0448
+0452
+0458-045b
+045f
diff --git a/fontconfig/fc-lang/sv.orth b/fontconfig/fc-lang/sv.orth
index ac627c81f..35645c3de 100644
--- a/fontconfig/fc-lang/sv.orth
+++ b/fontconfig/fc-lang/sv.orth
@@ -1,100 +1,100 @@
-#
-# fontconfig/fc-lang/sv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Swedish (SV)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# evertype.com includes a large number of additional precomposed letters
-# not marked by eki.ee; I've left those commented out here
-#
-0041-005a
-0061-007a
-#00bb
-00c0
-00c1
-#00c2
-#00c3
-00c4
-00c5
-#00c6
-#00c7
-#00c8
-00c9
-#00ca
-00cb
-#00cc
-#00cd
-#00ce
-#00cf
-#00d0
-#00d1
-#00d2
-#00d3
-#00d4
-00d6
-#00d7
-#00d8
-#00d9
-#00da
-#00db
-00dc
-#00dd
-00e0
-00e1
-#00e2
-#00e3
-00e4
-00e5
-#00e6
-#00e7
-#00e8
-00e9
-#00ea
-00eb
-#00ec
-#00ed
-#00ee
-#00ef
-#00f0
-#00f1
-#00f2
-#00f3
-#00f4
-00f6
-#00f8
-#00f9
-#00fa
-#00fb
-00fc
-#00fd
-#0106-0107 # C, c with acute
-#010c-010d # C, c with caron
-#0141-0144 # L, l with stroke N, n with acute
-#0158-015b # R, r with caron S, s with acute
-#0160-0161 # S, s with caron
-#2019 # single quote
-#201d # double quote
-#203a # angle quote
+#
+# fontconfig/fc-lang/sv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Swedish (SV)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# evertype.com includes a large number of additional precomposed letters
+# not marked by eki.ee; I've left those commented out here
+#
+0041-005a
+0061-007a
+#00bb
+00c0
+00c1
+#00c2
+#00c3
+00c4
+00c5
+#00c6
+#00c7
+#00c8
+00c9
+#00ca
+00cb
+#00cc
+#00cd
+#00ce
+#00cf
+#00d0
+#00d1
+#00d2
+#00d3
+#00d4
+00d6
+#00d7
+#00d8
+#00d9
+#00da
+#00db
+00dc
+#00dd
+00e0
+00e1
+#00e2
+#00e3
+00e4
+00e5
+#00e6
+#00e7
+#00e8
+00e9
+#00ea
+00eb
+#00ec
+#00ed
+#00ee
+#00ef
+#00f0
+#00f1
+#00f2
+#00f3
+#00f4
+00f6
+#00f8
+#00f9
+#00fa
+#00fb
+00fc
+#00fd
+#0106-0107 # C, c with acute
+#010c-010d # C, c with caron
+#0141-0144 # L, l with stroke N, n with acute
+#0158-015b # R, r with caron S, s with acute
+#0160-0161 # S, s with caron
+#2019 # single quote
+#201d # double quote
+#203a # angle quote
diff --git a/fontconfig/fc-lang/sw.orth b/fontconfig/fc-lang/sw.orth
index 81975e9f3..c2988a96e 100644
--- a/fontconfig/fc-lang/sw.orth
+++ b/fontconfig/fc-lang/sw.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/sw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Swahili (SW)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Swahili doesn't use f, q or x and uses r only for loan words
-0061-007a
+#
+# fontconfig/fc-lang/sw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Swahili (SW)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Swahili doesn't use f, q or x and uses r only for loan words
+0061-007a
diff --git a/fontconfig/fc-lang/syr.orth b/fontconfig/fc-lang/syr.orth
index b1f4a8dfc..88366a459 100644
--- a/fontconfig/fc-lang/syr.orth
+++ b/fontconfig/fc-lang/syr.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/syr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Syriac (SYR)
-#
-# Coverage given by Emil Soleyman-Zomalan <emil@nishra.com>
-#
-0710-072c # Syriac letters
-0730-073f # Syriac points (vowels)
+#
+# fontconfig/fc-lang/syr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Syriac (SYR)
+#
+# Coverage given by Emil Soleyman-Zomalan <emil@nishra.com>
+#
+0710-072c # Syriac letters
+0730-073f # Syriac points (vowels)
diff --git a/fontconfig/fc-lang/ta.orth b/fontconfig/fc-lang/ta.orth
index cb6b215cd..995a3c84b 100644
--- a/fontconfig/fc-lang/ta.orth
+++ b/fontconfig/fc-lang/ta.orth
@@ -1,46 +1,46 @@
-#
-# fontconfig/fc-lang/ta.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tamil (TA)
-#
-# Taken from the Unicode coverage of this language
-#
-# updates from Jungshik Shin <jshin@mailaps.org>
-#
-#0b82 # not present in many Tamil fonts
-0b83
-0b85-0b8a
-0b8e-0b90
-0b92-0b95
-0b99-0b9a
-0b9c
-0b9e-0b9f
-0ba3-0ba4
-0ba8-0baa
-0bae-0bb5
-0bb7-0bb9
-0bbe-0bc2
-0bc6-0bc8
-0bca-0bcd
-0bd7
-#0be7-0bf2 # Tamil digits and numbers
+#
+# fontconfig/fc-lang/ta.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tamil (TA)
+#
+# Taken from the Unicode coverage of this language
+#
+# updates from Jungshik Shin <jshin@mailaps.org>
+#
+#0b82 # not present in many Tamil fonts
+0b83
+0b85-0b8a
+0b8e-0b90
+0b92-0b95
+0b99-0b9a
+0b9c
+0b9e-0b9f
+0ba3-0ba4
+0ba8-0baa
+0bae-0bb5
+0bb7-0bb9
+0bbe-0bc2
+0bc6-0bc8
+0bca-0bcd
+0bd7
+#0be7-0bf2 # Tamil digits and numbers
diff --git a/fontconfig/fc-lang/te.orth b/fontconfig/fc-lang/te.orth
index cb9989e9e..162029156 100644
--- a/fontconfig/fc-lang/te.orth
+++ b/fontconfig/fc-lang/te.orth
@@ -1,39 +1,39 @@
-#
-# fontconfig/fc-lang/te.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Telugu (te)
-#
-# Taken from the Unicode coverage of this language
-#
-0c01-0c03
-0c05-0c0c
-0c0e-0c10
-0c12-0c28
-0c2a-0c33
-0c35-0c39
-0c3e-0c44
-0c46-0c48
-0c4a-0c4d
-0c55-0c56
-0c60-0c61
-#0c66-0c6f # Digits
+#
+# fontconfig/fc-lang/te.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Telugu (te)
+#
+# Taken from the Unicode coverage of this language
+#
+0c01-0c03
+0c05-0c0c
+0c0e-0c10
+0c12-0c28
+0c2a-0c33
+0c35-0c39
+0c3e-0c44
+0c46-0c48
+0c4a-0c4d
+0c55-0c56
+0c60-0c61
+#0c66-0c6f # Digits
diff --git a/fontconfig/fc-lang/tg.orth b/fontconfig/fc-lang/tg.orth
index f11e6af47..800dd7579 100644
--- a/fontconfig/fc-lang/tg.orth
+++ b/fontconfig/fc-lang/tg.orth
@@ -1,108 +1,108 @@
-#
-# fontconfig/fc-lang/tg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tajik (TG)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-0492
-0493
-049a
-049b
-04b2
-04b3
-04b6
-04b7
-04e2
-04e3
-04ee
-04ef
+#
+# fontconfig/fc-lang/tg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tajik (TG)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+0492
+0493
+049a
+049b
+04b2
+04b3
+04b6
+04b7
+04e2
+04e3
+04ee
+04ef
diff --git a/fontconfig/fc-lang/th.orth b/fontconfig/fc-lang/th.orth
index 47396bf30..1f2f51208 100644
--- a/fontconfig/fc-lang/th.orth
+++ b/fontconfig/fc-lang/th.orth
@@ -1,30 +1,30 @@
-#
-# fontconfig/fc-lang/th.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Thai (th)
-#
-0e01-0e3a
-0e3f-0e4e
-#0e4f # Punctuation
-#0e50-0e59 # Digits
-#0e5a-0e5b # Punctuation
+#
+# fontconfig/fc-lang/th.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Thai (th)
+#
+0e01-0e3a
+0e3f-0e4e
+#0e4f # Punctuation
+#0e50-0e59 # Digits
+#0e5a-0e5b # Punctuation
diff --git a/fontconfig/fc-lang/ti_er.orth b/fontconfig/fc-lang/ti_er.orth
index b1f7dc634..9438bd07e 100644
--- a/fontconfig/fc-lang/ti_er.orth
+++ b/fontconfig/fc-lang/ti_er.orth
@@ -1,56 +1,56 @@
-#
-# fontconfig/fc-lang/ti_er.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Eritrean Tigrinya (TI-ER) Ethiopic Convention
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-121f # me-mWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1250-1256 # Qe-Qo
-1258 # QWe
-125a-125d # QWi-QW
-1260-126e # be-vo
-1270-127f # te-cWa
-1290-12a7 # ne-o
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # Ke-Ko
-12c0 # KWe
-12c2-12c5 # KWi-KW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12ee # ze-yo
-12f0-12f7 # de-dWa
-1300-130e # je-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-133f # Te-SWa
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+#
+# fontconfig/fc-lang/ti_er.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Eritrean Tigrinya (TI-ER) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-121f # me-mWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1250-1256 # Qe-Qo
+1258 # QWe
+125a-125d # QWi-QW
+1260-126e # be-vo
+1270-127f # te-cWa
+1290-12a7 # ne-o
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # Ke-Ko
+12c0 # KWe
+12c2-12c5 # KWi-KW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12ee # ze-yo
+12f0-12f7 # de-dWa
+1300-130e # je-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-133f # Te-SWa
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/fontconfig/fc-lang/ti_et.orth b/fontconfig/fc-lang/ti_et.orth
index 37ee0f7f7..a9f123521 100644
--- a/fontconfig/fc-lang/ti_et.orth
+++ b/fontconfig/fc-lang/ti_et.orth
@@ -1,33 +1,33 @@
-#
-# fontconfig/fc-lang/ti_et.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ethiopian Tigrinya (TI-ET) Ethiopic Convention
-#
-# The same as Ethiopic
-#
-include ti_er.orth
-1220-1226 # `se-`so
-1280-1286 # `he-`ho
-1288 # hWe
-128a-128d # hWi-hW
-1340-1346 # `Se-`So
+#
+# fontconfig/fc-lang/ti_et.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ethiopian Tigrinya (TI-ET) Ethiopic Convention
+#
+# The same as Ethiopic
+#
+include ti_er.orth
+1220-1226 # `se-`so
+1280-1286 # `he-`ho
+1288 # hWe
+128a-128d # hWi-hW
+1340-1346 # `Se-`So
diff --git a/fontconfig/fc-lang/tig.orth b/fontconfig/fc-lang/tig.orth
index c5b9c0633..c569e9300 100644
--- a/fontconfig/fc-lang/tig.orth
+++ b/fontconfig/fc-lang/tig.orth
@@ -1,52 +1,52 @@
-#
-# fontconfig/fc-lang/tig.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tigre (TIG) Ethiopic Convention
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-121f # me-mWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1260-126e # be-vo
-1270-127f # te-cWa
-1290-1297 # ne-nWa
-12a0-12a6 # a-o
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12df # ze-zWa
-12e8-12ee # ye-yo
-12f0-12f7 # de-dWa
-1300-130e # je-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-133f # Te-SWa
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+#
+# fontconfig/fc-lang/tig.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tigre (TIG) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-121f # me-mWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1260-126e # be-vo
+1270-127f # te-cWa
+1290-1297 # ne-nWa
+12a0-12a6 # a-o
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12df # ze-zWa
+12e8-12ee # ye-yo
+12f0-12f7 # de-dWa
+1300-130e # je-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-133f # Te-SWa
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/fontconfig/fc-lang/tn.orth b/fontconfig/fc-lang/tn.orth
index 342281e03..16f607311 100644
--- a/fontconfig/fc-lang/tn.orth
+++ b/fontconfig/fc-lang/tn.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/tn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tswana (TN)
-#
-# Orthography from http://www.eki.ee/letter
-# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml
-#
-0041-005a
-0061-007a
-00ca
-00ea
-00d4
-00f4
-0160-0161
+#
+# fontconfig/fc-lang/tn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tswana (TN)
+#
+# Orthography from http://www.eki.ee/letter
+# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml
+#
+0041-005a
+0061-007a
+00ca
+00ea
+00d4
+00f4
+0160-0161
diff --git a/fontconfig/fc-lang/to.orth b/fontconfig/fc-lang/to.orth
index 3b85a1e8d..4e1cd03aa 100644
--- a/fontconfig/fc-lang/to.orth
+++ b/fontconfig/fc-lang/to.orth
@@ -1,30 +1,30 @@
-#
-# fontconfig/fc-lang/to.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tonga (TO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-02bb
+#
+# fontconfig/fc-lang/to.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tonga (TO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+02bb
diff --git a/fontconfig/fc-lang/tr.orth b/fontconfig/fc-lang/tr.orth
index 155a69d37..f14b75a65 100644
--- a/fontconfig/fc-lang/tr.orth
+++ b/fontconfig/fc-lang/tr.orth
@@ -1,49 +1,49 @@
-#
-# fontconfig/fc-lang/tr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Turkish (TR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C7 LATIN CAPITAL LETTER C WITH CEDILLA
-00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
-00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E7 LATIN SMALL LETTER C WITH CEDILLA
-00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
-00F6 LATIN SMALL LETTER O WITH DIAERESIS
-00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
-00FC LATIN SMALL LETTER U WITH DIAERESIS
-011E LATIN CAPITAL LETTER G WITH BREVE
-011F LATIN SMALL LETTER G WITH BREVE
-0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131 LATIN SMALL LETTER DOTLESS I
-015E LATIN CAPITAL LETTER S WITH CEDILLA *
-015F LATIN SMALL LETTER S WITH CEDILLA *
+#
+# fontconfig/fc-lang/tr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Turkish (TR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E7 LATIN SMALL LETTER C WITH CEDILLA
+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+011E LATIN CAPITAL LETTER G WITH BREVE
+011F LATIN SMALL LETTER G WITH BREVE
+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131 LATIN SMALL LETTER DOTLESS I
+015E LATIN CAPITAL LETTER S WITH CEDILLA *
+015F LATIN SMALL LETTER S WITH CEDILLA *
diff --git a/fontconfig/fc-lang/ts.orth b/fontconfig/fc-lang/ts.orth
index ffc180797..1226dd842 100644
--- a/fontconfig/fc-lang/ts.orth
+++ b/fontconfig/fc-lang/ts.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/ts.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tsonga (TS)
-#
-# Orthography taken from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/ts.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tsonga (TS)
+#
+# Orthography taken from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/tt.orth b/fontconfig/fc-lang/tt.orth
index a91d7c4fc..588b2c444 100644
--- a/fontconfig/fc-lang/tt.orth
+++ b/fontconfig/fc-lang/tt.orth
@@ -1,108 +1,108 @@
-#
-# fontconfig/fc-lang/tt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tatar (TT)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-0496
-0497
-04a2
-04a3
-04ae
-04af
-04ba
-04bb
-04d8
-04d9
+#
+# fontconfig/fc-lang/tt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tatar (TT)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+0496
+0497
+04a2
+04a3
+04ae
+04af
+04ba
+04bb
+04d8
+04d9
diff --git a/fontconfig/fc-lang/tw.orth b/fontconfig/fc-lang/tw.orth
index b6e654638..f89379cc4 100644
--- a/fontconfig/fc-lang/tw.orth
+++ b/fontconfig/fc-lang/tw.orth
@@ -1,50 +1,50 @@
-#
-# fontconfig/fc-lang/tw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Twi (tw)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-00C3 # LATIN CAPITAL LETTER A WITH TILDE
-00E3 # LATIN SMALL LETTER A WITH TILDE
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D5 # LATIN CAPITAL LETTER O WITH TILDE
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F5 # LATIN SMALL LETTER O WITH TILDE
-0128 # LATIN CAPITAL LETTER I WITH TILDE
-0129 # LATIN SMALL LETTER I WITH TILDE
-0168 # LATIN CAPITAL LETTER U WITH TILDE
-0169 # LATIN SMALL LETTER U WITH TILDE
-0186 # LATIN CAPITAL LETTER OPEN O
-0254 # LATIN SMALL LETTER OPEN O
-0190 # LATIN CAPITAL LETTER OPEN E
-025B # LATIN SMALL LETTER OPEN E
-0303 # COMBINING TILDE
-0306 # COMBINING BREVE (Vrachy)
-0329 # COMBINING VERTICAL LINE BELOW
-1EBC # LATIN CAPITAL LETTER E WITH TILDE
-1EBD # LATIN SMALL LETTER E WITH TILDE
-1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
-1EF9 # LATIN SMALL LETTER Y WITH TILDE
+#
+# fontconfig/fc-lang/tw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Twi (tw)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+00C3 # LATIN CAPITAL LETTER A WITH TILDE
+00E3 # LATIN SMALL LETTER A WITH TILDE
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D5 # LATIN CAPITAL LETTER O WITH TILDE
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F5 # LATIN SMALL LETTER O WITH TILDE
+0128 # LATIN CAPITAL LETTER I WITH TILDE
+0129 # LATIN SMALL LETTER I WITH TILDE
+0168 # LATIN CAPITAL LETTER U WITH TILDE
+0169 # LATIN SMALL LETTER U WITH TILDE
+0186 # LATIN CAPITAL LETTER OPEN O
+0254 # LATIN SMALL LETTER OPEN O
+0190 # LATIN CAPITAL LETTER OPEN E
+025B # LATIN SMALL LETTER OPEN E
+0303 # COMBINING TILDE
+0306 # COMBINING BREVE (Vrachy)
+0329 # COMBINING VERTICAL LINE BELOW
+1EBC # LATIN CAPITAL LETTER E WITH TILDE
+1EBD # LATIN SMALL LETTER E WITH TILDE
+1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
+1EF9 # LATIN SMALL LETTER Y WITH TILDE
diff --git a/fontconfig/fc-lang/tyv.orth b/fontconfig/fc-lang/tyv.orth
index 9d5bd742e..7926a6768 100644
--- a/fontconfig/fc-lang/tyv.orth
+++ b/fontconfig/fc-lang/tyv.orth
@@ -1,102 +1,102 @@
-#
-# fontconfig/fc-lang/tyv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tuvinian (TYV)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-04a2
-04a3
-04ae
-04af
+#
+# fontconfig/fc-lang/tyv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tuvinian (TYV)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+04a2
+04a3
+04ae
+04af
diff --git a/fontconfig/fc-lang/ug.orth b/fontconfig/fc-lang/ug.orth
index bf8e67450..6b97b9a04 100644
--- a/fontconfig/fc-lang/ug.orth
+++ b/fontconfig/fc-lang/ug.orth
@@ -1,29 +1,50 @@
-#
-# fontconfig/fc-lang/ug.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Uighur (UG)
-#
-# Uighur is written in a varient of Perso-Arabic, but I haven't found
-# any references which define the variations. So, for now we'll use Arabic
-# fonts
-include ar.orth
+#
+# fontconfig/fc-lang/ug.orth
+#
+# Copyright © 2010
+# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/)
+# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug)
+# Kenjisoft (http://kenjisoft.homelinux.com/)
+# Bilik (http://www.bilik.cn/)
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Uyghur (UG)
+#
+# Uyghur is written in a modified Persian-Arabic script. For detailed
+# information, refer to http://en.wikipedia.org/wiki/Uyghur_language
+#
+0626-0628
+062A
+062C
+062E-062F
+0631-0634
+063A
+0641-0646
+0648-064A
+067E
+0686
+0698
+06AD
+06AF
+06BE
+06C6-06C8
+06CB
+06D0
+06D5
diff --git a/fontconfig/fc-lang/uk.orth b/fontconfig/fc-lang/uk.orth
index 593fc5c4c..639593360 100644
--- a/fontconfig/fc-lang/uk.orth
+++ b/fontconfig/fc-lang/uk.orth
@@ -1,43 +1,43 @@
-#
-# fontconfig/fc-lang/uk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ukrainian (UK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#0401 # evertype.com
-0404
-0406
-0407
-0410-044f
-#0451 # evertype.com
-0454
-0456
-0457
-0490
-0491
-#2039-203a # angle quotes
+#
+# fontconfig/fc-lang/uk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ukrainian (UK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#0401 # evertype.com
+0404
+0406
+0407
+0410-044f
+#0451 # evertype.com
+0454
+0456
+0457
+0490
+0491
+#2039-203a # angle quotes
diff --git a/fontconfig/fc-lang/ur.orth b/fontconfig/fc-lang/ur.orth
index d9b944acc..5b7b5e656 100644
--- a/fontconfig/fc-lang/ur.orth
+++ b/fontconfig/fc-lang/ur.orth
@@ -1,65 +1,65 @@
-#
-# fontconfig/fc-lang/ur.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Urdu (ur)
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-0679
-067e
-0686
-0688
-0691
-0698
-06a9
-06af
-06ba
-06be
-06cc
-06d2
-# Presentations forms:
-#fb56-fb59
-#fb66-fb69
-#fb7a-fb7d
-#fb88-fb8d
-#fb8e-fb95
-#fb9e-fb9f
-#fbfc-fbff
-#fbaa-fbaf
-#fe80-fe86
-#fe89-fed8
-#fedd-feee
-##fef5-fef8 # These four happen very rarely
-#fefb-fefc
+#
+# fontconfig/fc-lang/ur.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Urdu (ur)
+#
+# We are assuming that:
+# * Most fonts that claim to support an Arabic letter actually do so;
+# * Most modern text rendering software use OpenType tables, instead of
+# directly using presentation forms.
+# * Some good Arabic fonts do not support codepoints for Arabic presentation
+# forms.
+# Thus, we are switching to general forms of Arabic letters.
+#
+# General forms:
+0621-0624
+0626-063a
+0641-0642
+0644-0648
+0679
+067e
+0686
+0688
+0691
+0698
+06a9
+06af
+06ba
+06be
+06cc
+06d2
+# Presentations forms:
+#fb56-fb59
+#fb66-fb69
+#fb7a-fb7d
+#fb88-fb8d
+#fb8e-fb95
+#fb9e-fb9f
+#fbfc-fbff
+#fbaa-fbaf
+#fe80-fe86
+#fe89-fed8
+#fedd-feee
+##fef5-fef8 # These four happen very rarely
+#fefb-fefc
diff --git a/fontconfig/fc-lang/ve.orth b/fontconfig/fc-lang/ve.orth
index a7c91dba6..96d9af3e2 100644
--- a/fontconfig/fc-lang/ve.orth
+++ b/fontconfig/fc-lang/ve.orth
@@ -1,34 +1,34 @@
-#
-# fontconfig/fc-lang/ve.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Venda (ve)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-1e12-1e13
-1e3c-1e3d
-1e44-1e45
-1e4a-1e4b
-1e70-1e71
+#
+# fontconfig/fc-lang/ve.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Venda (ve)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+1e12-1e13
+1e3c-1e3d
+1e44-1e45
+1e4a-1e4b
+1e70-1e71
diff --git a/fontconfig/fc-lang/vi.orth b/fontconfig/fc-lang/vi.orth
index 7915cab2b..8255c3d68 100644
--- a/fontconfig/fc-lang/vi.orth
+++ b/fontconfig/fc-lang/vi.orth
@@ -1,58 +1,58 @@
-#
-# fontconfig/fc-lang/vi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Vietnamese (VI)
-#
-# Information extracted from email sent by Markus Kuhn about the
-# standard Vietnamese character set (TCVN 6909:2001)
-#
-0041-005a
-0061-007a
-00c0-00c3
-00c8-00ca
-00cc-00cd
-00d2-00d5
-00d9-00da
-00dd
-00e0-00e3
-00e8-00ea
-00ec-00ed
-00f2-00f5
-00f9-00fa
-00fd
-0102-0103
-0110-0111
-0128-0129
-0168-0169
-01a0-01a1
-01af-01b0
-# diacritical marks
-0300-0303
-0306
-0309
-031b
-0323
-# more precomposed latin
-1ea0-1ef9
-# double quote marks
-#201c-201d
+#
+# fontconfig/fc-lang/vi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Vietnamese (VI)
+#
+# Information extracted from email sent by Markus Kuhn about the
+# standard Vietnamese character set (TCVN 6909:2001)
+#
+0041-005a
+0061-007a
+00c0-00c3
+00c8-00ca
+00cc-00cd
+00d2-00d5
+00d9-00da
+00dd
+00e0-00e3
+00e8-00ea
+00ec-00ed
+00f2-00f5
+00f9-00fa
+00fd
+0102-0103
+0110-0111
+0128-0129
+0168-0169
+01a0-01a1
+01af-01b0
+# diacritical marks
+0300-0303
+0306
+0309
+031b
+0323
+# more precomposed latin
+1ea0-1ef9
+# double quote marks
+#201c-201d
diff --git a/fontconfig/fc-lang/vo.orth b/fontconfig/fc-lang/vo.orth
index 8b334698e..fe2b34946 100644
--- a/fontconfig/fc-lang/vo.orth
+++ b/fontconfig/fc-lang/vo.orth
@@ -1,36 +1,36 @@
-#
-# fontconfig/fc-lang/vo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Volapük (VO)
-0041-0050
-0052-0056
-0058-005a
-0061-0070
-0072-0076
-0078-007a
-00c4
-00d6
-00dc
-00e4
-00f6
-00fc
+#
+# fontconfig/fc-lang/vo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Volapük (VO)
+0041-0050
+0052-0056
+0058-005a
+0061-0070
+0072-0076
+0078-007a
+00c4
+00d6
+00dc
+00e4
+00f6
+00fc
diff --git a/fontconfig/fc-lang/vot.orth b/fontconfig/fc-lang/vot.orth
index 006b3e33c..2bfafdba2 100644
--- a/fontconfig/fc-lang/vot.orth
+++ b/fontconfig/fc-lang/vot.orth
@@ -1,40 +1,40 @@
-#
-# fontconfig/fc-lang/vot.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Orthography from http://www.everytype.com/alphabets/votic.pdf
-#
-# Votic (VOT)
-#
-# Sources:
-# www.evertype.com
-#
-0041-005a
-0061-007a
-00c4
-00d6
-00dc
-00e4
-00f6
-00fc
-0160-0161
-017d-017e
+#
+# fontconfig/fc-lang/vot.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Orthography from http://www.everytype.com/alphabets/votic.pdf
+#
+# Votic (VOT)
+#
+# Sources:
+# www.evertype.com
+#
+0041-005a
+0061-007a
+00c4
+00d6
+00dc
+00e4
+00f6
+00fc
+0160-0161
+017d-017e
diff --git a/fontconfig/fc-lang/wa.orth b/fontconfig/fc-lang/wa.orth
index 6b575271a..bb854343e 100644
--- a/fontconfig/fc-lang/wa.orth
+++ b/fontconfig/fc-lang/wa.orth
@@ -1,47 +1,47 @@
-#
-# fontconfig/fc-lang/wa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Walloon (WA)
-#
-# Data from private communication with Pablo Saratxaga <pablo@mandrakesoft.com>
-#
-0041-005a
-0061-007a
-00c2 # A circumflex
-00c5 # A ring
-00c7 # C cedilla
-00c8 # E grave
-00c9 # E acute
-00ca # E circumflex
-00ce # I circumflex
-00d4 # O circumflex
-00db # U circumflex
-00e2 # a circumflex
-00e5 # a ring
-00e7 # c cedilla
-00e8 # e grave
-00e9 # e acute
-00ea # e circumflex
-00ee # i circumflex
-00f4 # o circumflex
-00fb # u circumflex
+#
+# fontconfig/fc-lang/wa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Walloon (WA)
+#
+# Data from private communication with Pablo Saratxaga <pablo@mandrakesoft.com>
+#
+0041-005a
+0061-007a
+00c2 # A circumflex
+00c5 # A ring
+00c7 # C cedilla
+00c8 # E grave
+00c9 # E acute
+00ca # E circumflex
+00ce # I circumflex
+00d4 # O circumflex
+00db # U circumflex
+00e2 # a circumflex
+00e5 # a ring
+00e7 # c cedilla
+00e8 # e grave
+00e9 # e acute
+00ea # e circumflex
+00ee # i circumflex
+00f4 # o circumflex
+00fb # u circumflex
diff --git a/fontconfig/fc-lang/wen.orth b/fontconfig/fc-lang/wen.orth
index 13d1714f3..b17f6508c 100644
--- a/fontconfig/fc-lang/wen.orth
+++ b/fontconfig/fc-lang/wen.orth
@@ -1,42 +1,42 @@
-#
-# fontconfig/fc-lang/wen.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Sorbian languages (lower and upper) (WEN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0106-0107
-010c-010d
-011a-011b
-0141-0142
-0143-0144
-00d3
-00f3
-0154-0155
-0158-0159
-015a-015b
-0160-0161
-0179-017a
-017d-017e
+#
+# fontconfig/fc-lang/wen.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sorbian languages (lower and upper) (WEN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0106-0107
+010c-010d
+011a-011b
+0141-0142
+0143-0144
+00d3
+00f3
+0154-0155
+0158-0159
+015a-015b
+0160-0161
+0179-017a
+017d-017e
diff --git a/fontconfig/fc-lang/wo.orth b/fontconfig/fc-lang/wo.orth
index 3e3fc3d73..e11500452 100644
--- a/fontconfig/fc-lang/wo.orth
+++ b/fontconfig/fc-lang/wo.orth
@@ -1,42 +1,42 @@
-#
-# fontconfig/fc-lang/wo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Wolof (WO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00e0
-00c3
-00e3
-00c9
-00e9
-00cb
-00eb
-00d1
-00f1
-014a-014b
-00d3
-00f3
+#
+# fontconfig/fc-lang/wo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Wolof (WO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00e0
+00c3
+00e3
+00c9
+00e9
+00cb
+00eb
+00d1
+00f1
+014a-014b
+00d3
+00f3
diff --git a/fontconfig/fc-lang/xh.orth b/fontconfig/fc-lang/xh.orth
index a068709da..4a8aaa2c4 100644
--- a/fontconfig/fc-lang/xh.orth
+++ b/fontconfig/fc-lang/xh.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/xh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Xhosa (XH)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/xh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Xhosa (XH)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-lang/yap.orth b/fontconfig/fc-lang/yap.orth
index 6678b879f..35979cdde 100644
--- a/fontconfig/fc-lang/yap.orth
+++ b/fontconfig/fc-lang/yap.orth
@@ -1,35 +1,35 @@
-#
-# fontconfig/fc-lang/yap.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yapese (YAP)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c4
-00e4
-00cb
-00eb
-00d6
-00f6
+#
+# fontconfig/fc-lang/yap.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yapese (YAP)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c4
+00e4
+00cb
+00eb
+00d6
+00f6
diff --git a/fontconfig/fc-lang/yi.orth b/fontconfig/fc-lang/yi.orth
index 954b025d6..1f799fcbf 100644
--- a/fontconfig/fc-lang/yi.orth
+++ b/fontconfig/fc-lang/yi.orth
@@ -1,25 +1,25 @@
-#
-# fontconfig/fc-lang/yi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yiddish (YI)
-include he.orth
+#
+# fontconfig/fc-lang/yi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yiddish (YI)
+include he.orth
diff --git a/fontconfig/fc-lang/yo.orth b/fontconfig/fc-lang/yo.orth
index 7e38d8a6d..aa98b419e 100644
--- a/fontconfig/fc-lang/yo.orth
+++ b/fontconfig/fc-lang/yo.orth
@@ -1,86 +1,86 @@
-#
-# fontconfig/fc-lang/yo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yoruba (YO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c2
-00c3
-00c8
-00c9
-00ca
-00cc
-00cd
-00ce
-00d2
-00d3
-00d4
-00d5
-00d9
-00da
-00db
-00e0
-00e1
-00e2
-00e3
-00e8
-00e9
-00ea
-00ec
-00ed
-00ee
-00f2
-00f3
-00f4
-00f5
-00f9
-00fa
-00fb
-011a-011b
-0128-0129
-0143-0144
-0168-0169
-01cd-01ce
-01cf-01d0
-01d1-01d2
-01d3-01d4
-01f8-01f9 # LATIN LETTER N WITH GRAVE
-0300
-0301
-0302
-0303
-030c
-1e3e-1e3f
-1e62-1e63
-1eb8-1eb9
-1ebc-1ebd
-1ecc-1ecd
-# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code)
-# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code)
-# LATIN SMALL LETTER M WITH MACRON (no UCS code)
-# LATIN SMALL LETTER N WITH MACRON (no UCS code)
+#
+# fontconfig/fc-lang/yo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yoruba (YO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c2
+00c3
+00c8
+00c9
+00ca
+00cc
+00cd
+00ce
+00d2
+00d3
+00d4
+00d5
+00d9
+00da
+00db
+00e0
+00e1
+00e2
+00e3
+00e8
+00e9
+00ea
+00ec
+00ed
+00ee
+00f2
+00f3
+00f4
+00f5
+00f9
+00fa
+00fb
+011a-011b
+0128-0129
+0143-0144
+0168-0169
+01cd-01ce
+01cf-01d0
+01d1-01d2
+01d3-01d4
+01f8-01f9 # LATIN LETTER N WITH GRAVE
+0300
+0301
+0302
+0303
+030c
+1e3e-1e3f
+1e62-1e63
+1eb8-1eb9
+1ebc-1ebd
+1ecc-1ecd
+# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code)
+# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code)
+# LATIN SMALL LETTER M WITH MACRON (no UCS code)
+# LATIN SMALL LETTER N WITH MACRON (no UCS code)
diff --git a/fontconfig/fc-lang/zh_cn.orth b/fontconfig/fc-lang/zh_cn.orth
index 6438869ae..357af6c51 100644
--- a/fontconfig/fc-lang/zh_cn.orth
+++ b/fontconfig/fc-lang/zh_cn.orth
@@ -1,6792 +1,6792 @@
-#
-# fontconfig/fc-lang/zh_cn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese (simplified) (ZH-CN)
-#
-# Coverage computed from GB2312
-#
-0x02C7 # CARON (Mandarin Chinese third tone)
-0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
-0x4E00 # <CJK>
-0x4E01 # <CJK>
-0x4E03 # <CJK>
-0x4E07 # <CJK>
-0x4E08 # <CJK>
-0x4E09 # <CJK>
-0x4E0A # <CJK>
-0x4E0B # <CJK>
-0x4E0C # <CJK>
-0x4E0D # <CJK>
-0x4E0E # <CJK>
-0x4E10 # <CJK>
-0x4E11 # <CJK>
-0x4E13 # <CJK>
-0x4E14 # <CJK>
-0x4E15 # <CJK>
-0x4E16 # <CJK>
-0x4E18 # <CJK>
-0x4E19 # <CJK>
-0x4E1A # <CJK>
-0x4E1B # <CJK>
-0x4E1C # <CJK>
-0x4E1D # <CJK>
-0x4E1E # <CJK>
-0x4E22 # <CJK>
-0x4E24 # <CJK>
-0x4E25 # <CJK>
-0x4E27 # <CJK>
-0x4E28 # <CJK>
-0x4E2A # <CJK>
-0x4E2B # <CJK>
-0x4E2C # <CJK>
-0x4E2D # <CJK>
-0x4E30 # <CJK>
-0x4E32 # <CJK>
-0x4E34 # <CJK>
-0x4E36 # <CJK>
-0x4E38 # <CJK>
-0x4E39 # <CJK>
-0x4E3A # <CJK>
-0x4E3B # <CJK>
-0x4E3D # <CJK>
-0x4E3E # <CJK>
-0x4E3F # <CJK>
-0x4E43 # <CJK>
-0x4E45 # <CJK>
-0x4E47 # <CJK>
-0x4E48 # <CJK>
-0x4E49 # <CJK>
-0x4E4B # <CJK>
-0x4E4C # <CJK>
-0x4E4D # <CJK>
-0x4E4E # <CJK>
-0x4E4F # <CJK>
-0x4E50 # <CJK>
-0x4E52 # <CJK>
-0x4E53 # <CJK>
-0x4E54 # <CJK>
-0x4E56 # <CJK>
-0x4E58 # <CJK>
-0x4E59 # <CJK>
-0x4E5C # <CJK>
-0x4E5D # <CJK>
-0x4E5E # <CJK>
-0x4E5F # <CJK>
-0x4E60 # <CJK>
-0x4E61 # <CJK>
-0x4E66 # <CJK>
-0x4E69 # <CJK>
-0x4E70 # <CJK>
-0x4E71 # <CJK>
-0x4E73 # <CJK>
-0x4E7E # <CJK>
-0x4E86 # <CJK>
-0x4E88 # <CJK>
-0x4E89 # <CJK>
-0x4E8B # <CJK>
-0x4E8C # <CJK>
-0x4E8D # <CJK>
-0x4E8E # <CJK>
-0x4E8F # <CJK>
-0x4E91 # <CJK>
-0x4E92 # <CJK>
-0x4E93 # <CJK>
-0x4E94 # <CJK>
-0x4E95 # <CJK>
-0x4E98 # <CJK>
-0x4E9A # <CJK>
-0x4E9B # <CJK>
-0x4E9F # <CJK>
-0x4EA0 # <CJK>
-0x4EA1 # <CJK>
-0x4EA2 # <CJK>
-0x4EA4 # <CJK>
-0x4EA5 # <CJK>
-0x4EA6 # <CJK>
-0x4EA7 # <CJK>
-0x4EA8 # <CJK>
-0x4EA9 # <CJK>
-0x4EAB # <CJK>
-0x4EAC # <CJK>
-0x4EAD # <CJK>
-0x4EAE # <CJK>
-0x4EB2 # <CJK>
-0x4EB3 # <CJK>
-0x4EB5 # <CJK>
-0x4EBA # <CJK>
-0x4EBB # <CJK>
-0x4EBF # <CJK>
-0x4EC0 # <CJK>
-0x4EC1 # <CJK>
-0x4EC2 # <CJK>
-0x4EC3 # <CJK>
-0x4EC4 # <CJK>
-0x4EC5 # <CJK>
-0x4EC6 # <CJK>
-0x4EC7 # <CJK>
-0x4EC9 # <CJK>
-0x4ECA # <CJK>
-0x4ECB # <CJK>
-0x4ECD # <CJK>
-0x4ECE # <CJK>
-0x4ED1 # <CJK>
-0x4ED3 # <CJK>
-0x4ED4 # <CJK>
-0x4ED5 # <CJK>
-0x4ED6 # <CJK>
-0x4ED7 # <CJK>
-0x4ED8 # <CJK>
-0x4ED9 # <CJK>
-0x4EDD # <CJK>
-0x4EDE # <CJK>
-0x4EDF # <CJK>
-0x4EE1 # <CJK>
-0x4EE3 # <CJK>
-0x4EE4 # <CJK>
-0x4EE5 # <CJK>
-0x4EE8 # <CJK>
-0x4EEA # <CJK>
-0x4EEB # <CJK>
-0x4EEC # <CJK>
-0x4EF0 # <CJK>
-0x4EF2 # <CJK>
-0x4EF3 # <CJK>
-0x4EF5 # <CJK>
-0x4EF6 # <CJK>
-0x4EF7 # <CJK>
-0x4EFB # <CJK>
-0x4EFD # <CJK>
-0x4EFF # <CJK>
-0x4F01 # <CJK>
-0x4F09 # <CJK>
-0x4F0A # <CJK>
-0x4F0D # <CJK>
-0x4F0E # <CJK>
-0x4F0F # <CJK>
-0x4F10 # <CJK>
-0x4F11 # <CJK>
-0x4F17 # <CJK>
-0x4F18 # <CJK>
-0x4F19 # <CJK>
-0x4F1A # <CJK>
-0x4F1B # <CJK>
-0x4F1E # <CJK>
-0x4F1F # <CJK>
-0x4F20 # <CJK>
-0x4F22 # <CJK>
-0x4F24 # <CJK>
-0x4F25 # <CJK>
-0x4F26 # <CJK>
-0x4F27 # <CJK>
-0x4F2A # <CJK>
-0x4F2B # <CJK>
-0x4F2F # <CJK>
-0x4F30 # <CJK>
-0x4F32 # <CJK>
-0x4F34 # <CJK>
-0x4F36 # <CJK>
-0x4F38 # <CJK>
-0x4F3A # <CJK>
-0x4F3C # <CJK>
-0x4F3D # <CJK>
-0x4F43 # <CJK>
-0x4F46 # <CJK>
-0x4F4D # <CJK>
-0x4F4E # <CJK>
-0x4F4F # <CJK>
-0x4F50 # <CJK>
-0x4F51 # <CJK>
-0x4F53 # <CJK>
-0x4F55 # <CJK>
-0x4F57 # <CJK>
-0x4F58 # <CJK>
-0x4F59 # <CJK>
-0x4F5A # <CJK>
-0x4F5B # <CJK>
-0x4F5C # <CJK>
-0x4F5D # <CJK>
-0x4F5E # <CJK>
-0x4F5F # <CJK>
-0x4F60 # <CJK>
-0x4F63 # <CJK>
-0x4F64 # <CJK>
-0x4F65 # <CJK>
-0x4F67 # <CJK>
-0x4F69 # <CJK>
-0x4F6C # <CJK>
-0x4F6F # <CJK>
-0x4F70 # <CJK>
-0x4F73 # <CJK>
-0x4F74 # <CJK>
-0x4F76 # <CJK>
-0x4F7B # <CJK>
-0x4F7C # <CJK>
-0x4F7E # <CJK>
-0x4F7F # <CJK>
-0x4F83 # <CJK>
-0x4F84 # <CJK>
-0x4F88 # <CJK>
-0x4F89 # <CJK>
-0x4F8B # <CJK>
-0x4F8D # <CJK>
-0x4F8F # <CJK>
-0x4F91 # <CJK>
-0x4F94 # <CJK>
-0x4F97 # <CJK>
-0x4F9B # <CJK>
-0x4F9D # <CJK>
-0x4FA0 # <CJK>
-0x4FA3 # <CJK>
-0x4FA5 # <CJK>
-0x4FA6 # <CJK>
-0x4FA7 # <CJK>
-0x4FA8 # <CJK>
-0x4FA9 # <CJK>
-0x4FAA # <CJK>
-0x4FAC # <CJK>
-0x4FAE # <CJK>
-0x4FAF # <CJK>
-0x4FB5 # <CJK>
-0x4FBF # <CJK>
-0x4FC3 # <CJK>
-0x4FC4 # <CJK>
-0x4FC5 # <CJK>
-0x4FCA # <CJK>
-0x4FCE # <CJK>
-0x4FCF # <CJK>
-0x4FD0 # <CJK>
-0x4FD1 # <CJK>
-0x4FD7 # <CJK>
-0x4FD8 # <CJK>
-0x4FDA # <CJK>
-0x4FDC # <CJK>
-0x4FDD # <CJK>
-0x4FDE # <CJK>
-0x4FDF # <CJK>
-0x4FE1 # <CJK>
-0x4FE3 # <CJK>
-0x4FE6 # <CJK>
-0x4FE8 # <CJK>
-0x4FE9 # <CJK>
-0x4FEA # <CJK>
-0x4FED # <CJK>
-0x4FEE # <CJK>
-0x4FEF # <CJK>
-0x4FF1 # <CJK>
-0x4FF3 # <CJK>
-0x4FF8 # <CJK>
-0x4FFA # <CJK>
-0x4FFE # <CJK>
-0x500C # <CJK>
-0x500D # <CJK>
-0x500F # <CJK>
-0x5012 # <CJK>
-0x5014 # <CJK>
-0x5018 # <CJK>
-0x5019 # <CJK>
-0x501A # <CJK>
-0x501C # <CJK>
-0x501F # <CJK>
-0x5021 # <CJK>
-0x5025 # <CJK>
-0x5026 # <CJK>
-0x5028 # <CJK>
-0x5029 # <CJK>
-0x502A # <CJK>
-0x502C # <CJK>
-0x502D # <CJK>
-0x502E # <CJK>
-0x503A # <CJK>
-0x503C # <CJK>
-0x503E # <CJK>
-0x5043 # <CJK>
-0x5047 # <CJK>
-0x5048 # <CJK>
-0x504C # <CJK>
-0x504E # <CJK>
-0x504F # <CJK>
-0x5055 # <CJK>
-0x505A # <CJK>
-0x505C # <CJK>
-0x5065 # <CJK>
-0x506C # <CJK>
-0x5076 # <CJK>
-0x5077 # <CJK>
-0x507B # <CJK>
-0x507E # <CJK>
-0x507F # <CJK>
-0x5080 # <CJK>
-0x5085 # <CJK>
-0x5088 # <CJK>
-0x508D # <CJK>
-0x50A3 # <CJK>
-0x50A5 # <CJK>
-0x50A7 # <CJK>
-0x50A8 # <CJK>
-0x50A9 # <CJK>
-0x50AC # <CJK>
-0x50B2 # <CJK>
-0x50BA # <CJK>
-0x50BB # <CJK>
-0x50CF # <CJK>
-0x50D6 # <CJK>
-0x50DA # <CJK>
-0x50E6 # <CJK>
-0x50E7 # <CJK>
-0x50EC # <CJK>
-0x50ED # <CJK>
-0x50EE # <CJK>
-0x50F3 # <CJK>
-0x50F5 # <CJK>
-0x50FB # <CJK>
-0x5106 # <CJK>
-0x5107 # <CJK>
-0x510B # <CJK>
-0x5112 # <CJK>
-0x5121 # <CJK>
-0x513F # <CJK>
-0x5140 # <CJK>
-0x5141 # <CJK>
-0x5143 # <CJK>
-0x5144 # <CJK>
-0x5145 # <CJK>
-0x5146 # <CJK>
-0x5148 # <CJK>
-0x5149 # <CJK>
-0x514B # <CJK>
-0x514D # <CJK>
-0x5151 # <CJK>
-0x5154 # <CJK>
-0x5155 # <CJK>
-0x5156 # <CJK>
-0x515A # <CJK>
-0x515C # <CJK>
-0x5162 # <CJK>
-0x5165 # <CJK>
-0x5168 # <CJK>
-0x516B # <CJK>
-0x516C # <CJK>
-0x516D # <CJK>
-0x516E # <CJK>
-0x5170 # <CJK>
-0x5171 # <CJK>
-0x5173 # <CJK>
-0x5174 # <CJK>
-0x5175 # <CJK>
-0x5176 # <CJK>
-0x5177 # <CJK>
-0x5178 # <CJK>
-0x5179 # <CJK>
-0x517B # <CJK>
-0x517C # <CJK>
-0x517D # <CJK>
-0x5180 # <CJK>
-0x5181 # <CJK>
-0x5182 # <CJK>
-0x5185 # <CJK>
-0x5188 # <CJK>
-0x5189 # <CJK>
-0x518C # <CJK>
-0x518D # <CJK>
-0x5192 # <CJK>
-0x5195 # <CJK>
-0x5196 # <CJK>
-0x5197 # <CJK>
-0x5199 # <CJK>
-0x519B # <CJK>
-0x519C # <CJK>
-0x51A0 # <CJK>
-0x51A2 # <CJK>
-0x51A4 # <CJK>
-0x51A5 # <CJK>
-0x51AB # <CJK>
-0x51AC # <CJK>
-0x51AF # <CJK>
-0x51B0 # <CJK>
-0x51B1 # <CJK>
-0x51B2 # <CJK>
-0x51B3 # <CJK>
-0x51B5 # <CJK>
-0x51B6 # <CJK>
-0x51B7 # <CJK>
-0x51BB # <CJK>
-0x51BC # <CJK>
-0x51BD # <CJK>
-0x51C0 # <CJK>
-0x51C4 # <CJK>
-0x51C6 # <CJK>
-0x51C7 # <CJK>
-0x51C9 # <CJK>
-0x51CB # <CJK>
-0x51CC # <CJK>
-0x51CF # <CJK>
-0x51D1 # <CJK>
-0x51DB # <CJK>
-0x51DD # <CJK>
-0x51E0 # <CJK>
-0x51E1 # <CJK>
-0x51E4 # <CJK>
-0x51EB # <CJK>
-0x51ED # <CJK>
-0x51EF # <CJK>
-0x51F0 # <CJK>
-0x51F3 # <CJK>
-0x51F5 # <CJK>
-0x51F6 # <CJK>
-0x51F8 # <CJK>
-0x51F9 # <CJK>
-0x51FA # <CJK>
-0x51FB # <CJK>
-0x51FC # <CJK>
-0x51FD # <CJK>
-0x51FF # <CJK>
-0x5200 # <CJK>
-0x5201 # <CJK>
-0x5202 # <CJK>
-0x5203 # <CJK>
-0x5206 # <CJK>
-0x5207 # <CJK>
-0x5208 # <CJK>
-0x520A # <CJK>
-0x520D # <CJK>
-0x520E # <CJK>
-0x5211 # <CJK>
-0x5212 # <CJK>
-0x5216 # <CJK>
-0x5217 # <CJK>
-0x5218 # <CJK>
-0x5219 # <CJK>
-0x521A # <CJK>
-0x521B # <CJK>
-0x521D # <CJK>
-0x5220 # <CJK>
-0x5224 # <CJK>
-0x5228 # <CJK>
-0x5229 # <CJK>
-0x522B # <CJK>
-0x522D # <CJK>
-0x522E # <CJK>
-0x5230 # <CJK>
-0x5233 # <CJK>
-0x5236 # <CJK>
-0x5237 # <CJK>
-0x5238 # <CJK>
-0x5239 # <CJK>
-0x523A # <CJK>
-0x523B # <CJK>
-0x523D # <CJK>
-0x523F # <CJK>
-0x5240 # <CJK>
-0x5241 # <CJK>
-0x5242 # <CJK>
-0x5243 # <CJK>
-0x524A # <CJK>
-0x524C # <CJK>
-0x524D # <CJK>
-0x5250 # <CJK>
-0x5251 # <CJK>
-0x5254 # <CJK>
-0x5256 # <CJK>
-0x525C # <CJK>
-0x525E # <CJK>
-0x5261 # <CJK>
-0x5265 # <CJK>
-0x5267 # <CJK>
-0x5269 # <CJK>
-0x526A # <CJK>
-0x526F # <CJK>
-0x5272 # <CJK>
-0x527D # <CJK>
-0x527F # <CJK>
-0x5281 # <CJK>
-0x5282 # <CJK>
-0x5288 # <CJK>
-0x5290 # <CJK>
-0x5293 # <CJK>
-0x529B # <CJK>
-0x529D # <CJK>
-0x529E # <CJK>
-0x529F # <CJK>
-0x52A0 # <CJK>
-0x52A1 # <CJK>
-0x52A2 # <CJK>
-0x52A3 # <CJK>
-0x52A8 # <CJK>
-0x52A9 # <CJK>
-0x52AA # <CJK>
-0x52AB # <CJK>
-0x52AC # <CJK>
-0x52AD # <CJK>
-0x52B1 # <CJK>
-0x52B2 # <CJK>
-0x52B3 # <CJK>
-0x52BE # <CJK>
-0x52BF # <CJK>
-0x52C3 # <CJK>
-0x52C7 # <CJK>
-0x52C9 # <CJK>
-0x52CB # <CJK>
-0x52D0 # <CJK>
-0x52D2 # <CJK>
-0x52D6 # <CJK>
-0x52D8 # <CJK>
-0x52DF # <CJK>
-0x52E4 # <CJK>
-0x52F0 # <CJK>
-0x52F9 # <CJK>
-0x52FA # <CJK>
-0x52FE # <CJK>
-0x52FF # <CJK>
-0x5300 # <CJK>
-0x5305 # <CJK>
-0x5306 # <CJK>
-0x5308 # <CJK>
-0x530D # <CJK>
-0x530F # <CJK>
-0x5310 # <CJK>
-0x5315 # <CJK>
-0x5316 # <CJK>
-0x5317 # <CJK>
-0x5319 # <CJK>
-0x531A # <CJK>
-0x531D # <CJK>
-0x5320 # <CJK>
-0x5321 # <CJK>
-0x5323 # <CJK>
-0x5326 # <CJK>
-0x532A # <CJK>
-0x532E # <CJK>
-0x5339 # <CJK>
-0x533A # <CJK>
-0x533B # <CJK>
-0x533E # <CJK>
-0x533F # <CJK>
-0x5341 # <CJK>
-0x5343 # <CJK>
-0x5345 # <CJK>
-0x5347 # <CJK>
-0x5348 # <CJK>
-0x5349 # <CJK>
-0x534A # <CJK>
-0x534E # <CJK>
-0x534F # <CJK>
-0x5351 # <CJK>
-0x5352 # <CJK>
-0x5353 # <CJK>
-0x5355 # <CJK>
-0x5356 # <CJK>
-0x5357 # <CJK>
-0x535A # <CJK>
-0x535C # <CJK>
-0x535E # <CJK>
-0x535F # <CJK>
-0x5360 # <CJK>
-0x5361 # <CJK>
-0x5362 # <CJK>
-0x5363 # <CJK>
-0x5364 # <CJK>
-0x5366 # <CJK>
-0x5367 # <CJK>
-0x5369 # <CJK>
-0x536B # <CJK>
-0x536E # <CJK>
-0x536F # <CJK>
-0x5370 # <CJK>
-0x5371 # <CJK>
-0x5373 # <CJK>
-0x5374 # <CJK>
-0x5375 # <CJK>
-0x5377 # <CJK>
-0x5378 # <CJK>
-0x537A # <CJK>
-0x537F # <CJK>
-0x5382 # <CJK>
-0x5384 # <CJK>
-0x5385 # <CJK>
-0x5386 # <CJK>
-0x5389 # <CJK>
-0x538B # <CJK>
-0x538C # <CJK>
-0x538D # <CJK>
-0x5395 # <CJK>
-0x5398 # <CJK>
-0x539A # <CJK>
-0x539D # <CJK>
-0x539F # <CJK>
-0x53A2 # <CJK>
-0x53A3 # <CJK>
-0x53A5 # <CJK>
-0x53A6 # <CJK>
-0x53A8 # <CJK>
-0x53A9 # <CJK>
-0x53AE # <CJK>
-0x53B6 # <CJK>
-0x53BB # <CJK>
-0x53BF # <CJK>
-0x53C1 # <CJK>
-0x53C2 # <CJK>
-0x53C8 # <CJK>
-0x53C9 # <CJK>
-0x53CA # <CJK>
-0x53CB # <CJK>
-0x53CC # <CJK>
-0x53CD # <CJK>
-0x53D1 # <CJK>
-0x53D4 # <CJK>
-0x53D6 # <CJK>
-0x53D7 # <CJK>
-0x53D8 # <CJK>
-0x53D9 # <CJK>
-0x53DB # <CJK>
-0x53DF # <CJK>
-0x53E0 # <CJK>
-0x53E3 # <CJK>
-0x53E4 # <CJK>
-0x53E5 # <CJK>
-0x53E6 # <CJK>
-0x53E8 # <CJK>
-0x53E9 # <CJK>
-0x53EA # <CJK>
-0x53EB # <CJK>
-0x53EC # <CJK>
-0x53ED # <CJK>
-0x53EE # <CJK>
-0x53EF # <CJK>
-0x53F0 # <CJK>
-0x53F1 # <CJK>
-0x53F2 # <CJK>
-0x53F3 # <CJK>
-0x53F5 # <CJK>
-0x53F6 # <CJK>
-0x53F7 # <CJK>
-0x53F8 # <CJK>
-0x53F9 # <CJK>
-0x53FB # <CJK>
-0x53FC # <CJK>
-0x53FD # <CJK>
-0x5401 # <CJK>
-0x5403 # <CJK>
-0x5404 # <CJK>
-0x5406 # <CJK>
-0x5408 # <CJK>
-0x5409 # <CJK>
-0x540A # <CJK>
-0x540C # <CJK>
-0x540D # <CJK>
-0x540E # <CJK>
-0x540F # <CJK>
-0x5410 # <CJK>
-0x5411 # <CJK>
-0x5412 # <CJK>
-0x5413 # <CJK>
-0x5415 # <CJK>
-0x5416 # <CJK>
-0x5417 # <CJK>
-0x541B # <CJK>
-0x541D # <CJK>
-0x541E # <CJK>
-0x541F # <CJK>
-0x5420 # <CJK>
-0x5421 # <CJK>
-0x5423 # <CJK>
-0x5426 # <CJK>
-0x5427 # <CJK>
-0x5428 # <CJK>
-0x5429 # <CJK>
-0x542B # <CJK>
-0x542C # <CJK>
-0x542D # <CJK>
-0x542E # <CJK>
-0x542F # <CJK>
-0x5431 # <CJK>
-0x5432 # <CJK>
-0x5434 # <CJK>
-0x5435 # <CJK>
-0x5438 # <CJK>
-0x5439 # <CJK>
-0x543B # <CJK>
-0x543C # <CJK>
-0x543E # <CJK>
-0x5440 # <CJK>
-0x5443 # <CJK>
-0x5446 # <CJK>
-0x5448 # <CJK>
-0x544A # <CJK>
-0x544B # <CJK>
-0x5450 # <CJK>
-0x5452 # <CJK>
-0x5453 # <CJK>
-0x5454 # <CJK>
-0x5455 # <CJK>
-0x5456 # <CJK>
-0x5457 # <CJK>
-0x5458 # <CJK>
-0x5459 # <CJK>
-0x545B # <CJK>
-0x545C # <CJK>
-0x5462 # <CJK>
-0x5464 # <CJK>
-0x5466 # <CJK>
-0x5468 # <CJK>
-0x5471 # <CJK>
-0x5472 # <CJK>
-0x5473 # <CJK>
-0x5475 # <CJK>
-0x5476 # <CJK>
-0x5477 # <CJK>
-0x5478 # <CJK>
-0x547B # <CJK>
-0x547C # <CJK>
-0x547D # <CJK>
-0x5480 # <CJK>
-0x5482 # <CJK>
-0x5484 # <CJK>
-0x5486 # <CJK>
-0x548B # <CJK>
-0x548C # <CJK>
-0x548E # <CJK>
-0x548F # <CJK>
-0x5490 # <CJK>
-0x5492 # <CJK>
-0x5494 # <CJK>
-0x5495 # <CJK>
-0x5496 # <CJK>
-0x5499 # <CJK>
-0x549A # <CJK>
-0x549B # <CJK>
-0x549D # <CJK>
-0x54A3 # <CJK>
-0x54A4 # <CJK>
-0x54A6 # <CJK>
-0x54A7 # <CJK>
-0x54A8 # <CJK>
-0x54A9 # <CJK>
-0x54AA # <CJK>
-0x54AB # <CJK>
-0x54AC # <CJK>
-0x54AD # <CJK>
-0x54AF # <CJK>
-0x54B1 # <CJK>
-0x54B3 # <CJK>
-0x54B4 # <CJK>
-0x54B8 # <CJK>
-0x54BB # <CJK>
-0x54BD # <CJK>
-0x54BF # <CJK>
-0x54C0 # <CJK>
-0x54C1 # <CJK>
-0x54C2 # <CJK>
-0x54C4 # <CJK>
-0x54C6 # <CJK>
-0x54C7 # <CJK>
-0x54C8 # <CJK>
-0x54C9 # <CJK>
-0x54CC # <CJK>
-0x54CD # <CJK>
-0x54CE # <CJK>
-0x54CF # <CJK>
-0x54D0 # <CJK>
-0x54D1 # <CJK>
-0x54D2 # <CJK>
-0x54D3 # <CJK>
-0x54D4 # <CJK>
-0x54D5 # <CJK>
-0x54D7 # <CJK>
-0x54D9 # <CJK>
-0x54DA # <CJK>
-0x54DC # <CJK>
-0x54DD # <CJK>
-0x54DE # <CJK>
-0x54DF # <CJK>
-0x54E5 # <CJK>
-0x54E6 # <CJK>
-0x54E7 # <CJK>
-0x54E8 # <CJK>
-0x54E9 # <CJK>
-0x54EA # <CJK>
-0x54ED # <CJK>
-0x54EE # <CJK>
-0x54F2 # <CJK>
-0x54F3 # <CJK>
-0x54FA # <CJK>
-0x54FC # <CJK>
-0x54FD # <CJK>
-0x54FF # <CJK>
-0x5501 # <CJK>
-0x5506 # <CJK>
-0x5507 # <CJK>
-0x5509 # <CJK>
-0x550F # <CJK>
-0x5510 # <CJK>
-0x5511 # <CJK>
-0x5514 # <CJK>
-0x551B # <CJK>
-0x5520 # <CJK>
-0x5522 # <CJK>
-0x5523 # <CJK>
-0x5524 # <CJK>
-0x5527 # <CJK>
-0x552A # <CJK>
-0x552C # <CJK>
-0x552E # <CJK>
-0x552F # <CJK>
-0x5530 # <CJK>
-0x5531 # <CJK>
-0x5533 # <CJK>
-0x5537 # <CJK>
-0x553C # <CJK>
-0x553E # <CJK>
-0x553F # <CJK>
-0x5541 # <CJK>
-0x5543 # <CJK>
-0x5544 # <CJK>
-0x5546 # <CJK>
-0x5549 # <CJK>
-0x554A # <CJK>
-0x5550 # <CJK>
-0x5555 # <CJK>
-0x5556 # <CJK>
-0x555C # <CJK>
-0x5561 # <CJK>
-0x5564 # <CJK>
-0x5565 # <CJK>
-0x5566 # <CJK>
-0x5567 # <CJK>
-0x556A # <CJK>
-0x556C # <CJK>
-0x556D # <CJK>
-0x556E # <CJK>
-0x5575 # <CJK>
-0x5576 # <CJK>
-0x5577 # <CJK>
-0x5578 # <CJK>
-0x557B # <CJK>
-0x557C # <CJK>
-0x557E # <CJK>
-0x5580 # <CJK>
-0x5581 # <CJK>
-0x5582 # <CJK>
-0x5583 # <CJK>
-0x5584 # <CJK>
-0x5587 # <CJK>
-0x5588 # <CJK>
-0x5589 # <CJK>
-0x558A # <CJK>
-0x558B # <CJK>
-0x558F # <CJK>
-0x5591 # <CJK>
-0x5594 # <CJK>
-0x5598 # <CJK>
-0x5599 # <CJK>
-0x559C # <CJK>
-0x559D # <CJK>
-0x559F # <CJK>
-0x55A7 # <CJK>
-0x55B1 # <CJK>
-0x55B3 # <CJK>
-0x55B5 # <CJK>
-0x55B7 # <CJK>
-0x55B9 # <CJK>
-0x55BB # <CJK>
-0x55BD # <CJK>
-0x55BE # <CJK>
-0x55C4 # <CJK>
-0x55C5 # <CJK>
-0x55C9 # <CJK>
-0x55CC # <CJK>
-0x55CD # <CJK>
-0x55D1 # <CJK>
-0x55D2 # <CJK>
-0x55D3 # <CJK>
-0x55D4 # <CJK>
-0x55D6 # <CJK>
-0x55DC # <CJK>
-0x55DD # <CJK>
-0x55DF # <CJK>
-0x55E1 # <CJK>
-0x55E3 # <CJK>
-0x55E4 # <CJK>
-0x55E5 # <CJK>
-0x55E6 # <CJK>
-0x55E8 # <CJK>
-0x55EA # <CJK>
-0x55EB # <CJK>
-0x55EC # <CJK>
-0x55EF # <CJK>
-0x55F2 # <CJK>
-0x55F3 # <CJK>
-0x55F5 # <CJK>
-0x55F7 # <CJK>
-0x55FD # <CJK>
-0x55FE # <CJK>
-0x5600 # <CJK>
-0x5601 # <CJK>
-0x5608 # <CJK>
-0x5609 # <CJK>
-0x560C # <CJK>
-0x560E # <CJK>
-0x560F # <CJK>
-0x5618 # <CJK>
-0x561B # <CJK>
-0x561E # <CJK>
-0x561F # <CJK>
-0x5623 # <CJK>
-0x5624 # <CJK>
-0x5627 # <CJK>
-0x562C # <CJK>
-0x562D # <CJK>
-0x5631 # <CJK>
-0x5632 # <CJK>
-0x5634 # <CJK>
-0x5636 # <CJK>
-0x5639 # <CJK>
-0x563B # <CJK>
-0x563F # <CJK>
-0x564C # <CJK>
-0x564D # <CJK>
-0x564E # <CJK>
-0x5654 # <CJK>
-0x5657 # <CJK>
-0x5658 # <CJK>
-0x5659 # <CJK>
-0x565C # <CJK>
-0x5662 # <CJK>
-0x5664 # <CJK>
-0x5668 # <CJK>
-0x5669 # <CJK>
-0x566A # <CJK>
-0x566B # <CJK>
-0x566C # <CJK>
-0x5671 # <CJK>
-0x5676 # <CJK>
-0x567B # <CJK>
-0x567C # <CJK>
-0x5685 # <CJK>
-0x5686 # <CJK>
-0x568E # <CJK>
-0x568F # <CJK>
-0x5693 # <CJK>
-0x56A3 # <CJK>
-0x56AF # <CJK>
-0x56B7 # <CJK>
-0x56BC # <CJK>
-0x56CA # <CJK>
-0x56D4 # <CJK>
-0x56D7 # <CJK>
-0x56DA # <CJK>
-0x56DB # <CJK>
-0x56DD # <CJK>
-0x56DE # <CJK>
-0x56DF # <CJK>
-0x56E0 # <CJK>
-0x56E1 # <CJK>
-0x56E2 # <CJK>
-0x56E4 # <CJK>
-0x56EB # <CJK>
-0x56ED # <CJK>
-0x56F0 # <CJK>
-0x56F1 # <CJK>
-0x56F4 # <CJK>
-0x56F5 # <CJK>
-0x56F9 # <CJK>
-0x56FA # <CJK>
-0x56FD # <CJK>
-0x56FE # <CJK>
-0x56FF # <CJK>
-0x5703 # <CJK>
-0x5704 # <CJK>
-0x5706 # <CJK>
-0x5708 # <CJK>
-0x5709 # <CJK>
-0x570A # <CJK>
-0x571C # <CJK>
-0x571F # <CJK>
-0x5723 # <CJK>
-0x5728 # <CJK>
-0x5729 # <CJK>
-0x572A # <CJK>
-0x572C # <CJK>
-0x572D # <CJK>
-0x572E # <CJK>
-0x572F # <CJK>
-0x5730 # <CJK>
-0x5733 # <CJK>
-0x5739 # <CJK>
-0x573A # <CJK>
-0x573B # <CJK>
-0x573E # <CJK>
-0x5740 # <CJK>
-0x5742 # <CJK>
-0x5747 # <CJK>
-0x574A # <CJK>
-0x574C # <CJK>
-0x574D # <CJK>
-0x574E # <CJK>
-0x574F # <CJK>
-0x5750 # <CJK>
-0x5751 # <CJK>
-0x5757 # <CJK>
-0x575A # <CJK>
-0x575B # <CJK>
-0x575C # <CJK>
-0x575D # <CJK>
-0x575E # <CJK>
-0x575F # <CJK>
-0x5760 # <CJK>
-0x5761 # <CJK>
-0x5764 # <CJK>
-0x5766 # <CJK>
-0x5768 # <CJK>
-0x5769 # <CJK>
-0x576A # <CJK>
-0x576B # <CJK>
-0x576D # <CJK>
-0x576F # <CJK>
-0x5773 # <CJK>
-0x5776 # <CJK>
-0x5777 # <CJK>
-0x577B # <CJK>
-0x577C # <CJK>
-0x5782 # <CJK>
-0x5783 # <CJK>
-0x5784 # <CJK>
-0x5785 # <CJK>
-0x5786 # <CJK>
-0x578B # <CJK>
-0x578C # <CJK>
-0x5792 # <CJK>
-0x5793 # <CJK>
-0x579B # <CJK>
-0x57A0 # <CJK>
-0x57A1 # <CJK>
-0x57A2 # <CJK>
-0x57A3 # <CJK>
-0x57A4 # <CJK>
-0x57A6 # <CJK>
-0x57A7 # <CJK>
-0x57A9 # <CJK>
-0x57AB # <CJK>
-0x57AD # <CJK>
-0x57AE # <CJK>
-0x57B2 # <CJK>
-0x57B4 # <CJK>
-0x57B8 # <CJK>
-0x57C2 # <CJK>
-0x57C3 # <CJK>
-0x57CB # <CJK>
-0x57CE # <CJK>
-0x57CF # <CJK>
-0x57D2 # <CJK>
-0x57D4 # <CJK>
-0x57D5 # <CJK>
-0x57D8 # <CJK>
-0x57D9 # <CJK>
-0x57DA # <CJK>
-0x57DD # <CJK>
-0x57DF # <CJK>
-0x57E0 # <CJK>
-0x57E4 # <CJK>
-0x57ED # <CJK>
-0x57EF # <CJK>
-0x57F4 # <CJK>
-0x57F8 # <CJK>
-0x57F9 # <CJK>
-0x57FA # <CJK>
-0x57FD # <CJK>
-0x5800 # <CJK>
-0x5802 # <CJK>
-0x5806 # <CJK>
-0x5807 # <CJK>
-0x580B # <CJK>
-0x580D # <CJK>
-0x5811 # <CJK>
-0x5815 # <CJK>
-0x5819 # <CJK>
-0x581E # <CJK>
-0x5820 # <CJK>
-0x5821 # <CJK>
-0x5824 # <CJK>
-0x582A # <CJK>
-0x5830 # <CJK>
-0x5835 # <CJK>
-0x5844 # <CJK>
-0x584C # <CJK>
-0x584D # <CJK>
-0x5851 # <CJK>
-0x5854 # <CJK>
-0x5858 # <CJK>
-0x585E # <CJK>
-0x5865 # <CJK>
-0x586B # <CJK>
-0x586C # <CJK>
-0x587E # <CJK>
-0x5880 # <CJK>
-0x5881 # <CJK>
-0x5883 # <CJK>
-0x5885 # <CJK>
-0x5889 # <CJK>
-0x5892 # <CJK>
-0x5893 # <CJK>
-0x5899 # <CJK>
-0x589A # <CJK>
-0x589E # <CJK>
-0x589F # <CJK>
-0x58A8 # <CJK>
-0x58A9 # <CJK>
-0x58BC # <CJK>
-0x58C1 # <CJK>
-0x58C5 # <CJK>
-0x58D1 # <CJK>
-0x58D5 # <CJK>
-0x58E4 # <CJK>
-0x58EB # <CJK>
-0x58EC # <CJK>
-0x58EE # <CJK>
-0x58F0 # <CJK>
-0x58F3 # <CJK>
-0x58F6 # <CJK>
-0x58F9 # <CJK>
-0x5902 # <CJK>
-0x5904 # <CJK>
-0x5907 # <CJK>
-0x590D # <CJK>
-0x590F # <CJK>
-0x5914 # <CJK>
-0x5915 # <CJK>
-0x5916 # <CJK>
-0x5919 # <CJK>
-0x591A # <CJK>
-0x591C # <CJK>
-0x591F # <CJK>
-0x5924 # <CJK>
-0x5925 # <CJK>
-0x5927 # <CJK>
-0x5929 # <CJK>
-0x592A # <CJK>
-0x592B # <CJK>
-0x592D # <CJK>
-0x592E # <CJK>
-0x592F # <CJK>
-0x5931 # <CJK>
-0x5934 # <CJK>
-0x5937 # <CJK>
-0x5938 # <CJK>
-0x5939 # <CJK>
-0x593A # <CJK>
-0x593C # <CJK>
-0x5941 # <CJK>
-0x5942 # <CJK>
-0x5944 # <CJK>
-0x5947 # <CJK>
-0x5948 # <CJK>
-0x5949 # <CJK>
-0x594B # <CJK>
-0x594E # <CJK>
-0x594F # <CJK>
-0x5951 # <CJK>
-0x5954 # <CJK>
-0x5955 # <CJK>
-0x5956 # <CJK>
-0x5957 # <CJK>
-0x5958 # <CJK>
-0x595A # <CJK>
-0x5960 # <CJK>
-0x5962 # <CJK>
-0x5965 # <CJK>
-0x5973 # <CJK>
-0x5974 # <CJK>
-0x5976 # <CJK>
-0x5978 # <CJK>
-0x5979 # <CJK>
-0x597D # <CJK>
-0x5981 # <CJK>
-0x5982 # <CJK>
-0x5983 # <CJK>
-0x5984 # <CJK>
-0x5986 # <CJK>
-0x5987 # <CJK>
-0x5988 # <CJK>
-0x598A # <CJK>
-0x598D # <CJK>
-0x5992 # <CJK>
-0x5993 # <CJK>
-0x5996 # <CJK>
-0x5997 # <CJK>
-0x5999 # <CJK>
-0x599E # <CJK>
-0x59A3 # <CJK>
-0x59A4 # <CJK>
-0x59A5 # <CJK>
-0x59A8 # <CJK>
-0x59A9 # <CJK>
-0x59AA # <CJK>
-0x59AB # <CJK>
-0x59AE # <CJK>
-0x59AF # <CJK>
-0x59B2 # <CJK>
-0x59B9 # <CJK>
-0x59BB # <CJK>
-0x59BE # <CJK>
-0x59C6 # <CJK>
-0x59CA # <CJK>
-0x59CB # <CJK>
-0x59D0 # <CJK>
-0x59D1 # <CJK>
-0x59D2 # <CJK>
-0x59D3 # <CJK>
-0x59D4 # <CJK>
-0x59D7 # <CJK>
-0x59D8 # <CJK>
-0x59DA # <CJK>
-0x59DC # <CJK>
-0x59DD # <CJK>
-0x59E3 # <CJK>
-0x59E5 # <CJK>
-0x59E8 # <CJK>
-0x59EC # <CJK>
-0x59F9 # <CJK>
-0x59FB # <CJK>
-0x59FF # <CJK>
-0x5A01 # <CJK>
-0x5A03 # <CJK>
-0x5A04 # <CJK>
-0x5A05 # <CJK>
-0x5A06 # <CJK>
-0x5A07 # <CJK>
-0x5A08 # <CJK>
-0x5A09 # <CJK>
-0x5A0C # <CJK>
-0x5A11 # <CJK>
-0x5A13 # <CJK>
-0x5A18 # <CJK>
-0x5A1C # <CJK>
-0x5A1F # <CJK>
-0x5A20 # <CJK>
-0x5A23 # <CJK>
-0x5A25 # <CJK>
-0x5A29 # <CJK>
-0x5A31 # <CJK>
-0x5A32 # <CJK>
-0x5A34 # <CJK>
-0x5A36 # <CJK>
-0x5A3C # <CJK>
-0x5A40 # <CJK>
-0x5A46 # <CJK>
-0x5A49 # <CJK>
-0x5A4A # <CJK>
-0x5A55 # <CJK>
-0x5A5A # <CJK>
-0x5A62 # <CJK>
-0x5A67 # <CJK>
-0x5A6A # <CJK>
-0x5A74 # <CJK>
-0x5A75 # <CJK>
-0x5A76 # <CJK>
-0x5A77 # <CJK>
-0x5A7A # <CJK>
-0x5A7F # <CJK>
-0x5A92 # <CJK>
-0x5A9A # <CJK>
-0x5A9B # <CJK>
-0x5AAA # <CJK>
-0x5AB2 # <CJK>
-0x5AB3 # <CJK>
-0x5AB5 # <CJK>
-0x5AB8 # <CJK>
-0x5ABE # <CJK>
-0x5AC1 # <CJK>
-0x5AC2 # <CJK>
-0x5AC9 # <CJK>
-0x5ACC # <CJK>
-0x5AD2 # <CJK>
-0x5AD4 # <CJK>
-0x5AD6 # <CJK>
-0x5AD8 # <CJK>
-0x5ADC # <CJK>
-0x5AE0 # <CJK>
-0x5AE1 # <CJK>
-0x5AE3 # <CJK>
-0x5AE6 # <CJK>
-0x5AE9 # <CJK>
-0x5AEB # <CJK>
-0x5AF1 # <CJK>
-0x5B09 # <CJK>
-0x5B16 # <CJK>
-0x5B17 # <CJK>
-0x5B32 # <CJK>
-0x5B34 # <CJK>
-0x5B37 # <CJK>
-0x5B40 # <CJK>
-0x5B50 # <CJK>
-0x5B51 # <CJK>
-0x5B53 # <CJK>
-0x5B54 # <CJK>
-0x5B55 # <CJK>
-0x5B57 # <CJK>
-0x5B58 # <CJK>
-0x5B59 # <CJK>
-0x5B5A # <CJK>
-0x5B5B # <CJK>
-0x5B5C # <CJK>
-0x5B5D # <CJK>
-0x5B5F # <CJK>
-0x5B62 # <CJK>
-0x5B63 # <CJK>
-0x5B64 # <CJK>
-0x5B65 # <CJK>
-0x5B66 # <CJK>
-0x5B69 # <CJK>
-0x5B6A # <CJK>
-0x5B6C # <CJK>
-0x5B70 # <CJK>
-0x5B71 # <CJK>
-0x5B73 # <CJK>
-0x5B75 # <CJK>
-0x5B7A # <CJK>
-0x5B7D # <CJK>
-0x5B80 # <CJK>
-0x5B81 # <CJK>
-0x5B83 # <CJK>
-0x5B84 # <CJK>
-0x5B85 # <CJK>
-0x5B87 # <CJK>
-0x5B88 # <CJK>
-0x5B89 # <CJK>
-0x5B8B # <CJK>
-0x5B8C # <CJK>
-0x5B8F # <CJK>
-0x5B93 # <CJK>
-0x5B95 # <CJK>
-0x5B97 # <CJK>
-0x5B98 # <CJK>
-0x5B99 # <CJK>
-0x5B9A # <CJK>
-0x5B9B # <CJK>
-0x5B9C # <CJK>
-0x5B9D # <CJK>
-0x5B9E # <CJK>
-0x5BA0 # <CJK>
-0x5BA1 # <CJK>
-0x5BA2 # <CJK>
-0x5BA3 # <CJK>
-0x5BA4 # <CJK>
-0x5BA5 # <CJK>
-0x5BA6 # <CJK>
-0x5BAA # <CJK>
-0x5BAB # <CJK>
-0x5BB0 # <CJK>
-0x5BB3 # <CJK>
-0x5BB4 # <CJK>
-0x5BB5 # <CJK>
-0x5BB6 # <CJK>
-0x5BB8 # <CJK>
-0x5BB9 # <CJK>
-0x5BBD # <CJK>
-0x5BBE # <CJK>
-0x5BBF # <CJK>
-0x5BC2 # <CJK>
-0x5BC4 # <CJK>
-0x5BC5 # <CJK>
-0x5BC6 # <CJK>
-0x5BC7 # <CJK>
-0x5BCC # <CJK>
-0x5BD0 # <CJK>
-0x5BD2 # <CJK>
-0x5BD3 # <CJK>
-0x5BDD # <CJK>
-0x5BDE # <CJK>
-0x5BDF # <CJK>
-0x5BE1 # <CJK>
-0x5BE4 # <CJK>
-0x5BE5 # <CJK>
-0x5BE8 # <CJK>
-0x5BEE # <CJK>
-0x5BF0 # <CJK>
-0x5BF8 # <CJK>
-0x5BF9 # <CJK>
-0x5BFA # <CJK>
-0x5BFB # <CJK>
-0x5BFC # <CJK>
-0x5BFF # <CJK>
-0x5C01 # <CJK>
-0x5C04 # <CJK>
-0x5C06 # <CJK>
-0x5C09 # <CJK>
-0x5C0A # <CJK>
-0x5C0F # <CJK>
-0x5C11 # <CJK>
-0x5C14 # <CJK>
-0x5C15 # <CJK>
-0x5C16 # <CJK>
-0x5C18 # <CJK>
-0x5C1A # <CJK>
-0x5C1C # <CJK>
-0x5C1D # <CJK>
-0x5C22 # <CJK>
-0x5C24 # <CJK>
-0x5C25 # <CJK>
-0x5C27 # <CJK>
-0x5C2C # <CJK>
-0x5C31 # <CJK>
-0x5C34 # <CJK>
-0x5C38 # <CJK>
-0x5C39 # <CJK>
-0x5C3A # <CJK>
-0x5C3B # <CJK>
-0x5C3C # <CJK>
-0x5C3D # <CJK>
-0x5C3E # <CJK>
-0x5C3F # <CJK>
-0x5C40 # <CJK>
-0x5C41 # <CJK>
-0x5C42 # <CJK>
-0x5C45 # <CJK>
-0x5C48 # <CJK>
-0x5C49 # <CJK>
-0x5C4A # <CJK>
-0x5C4B # <CJK>
-0x5C4E # <CJK>
-0x5C4F # <CJK>
-0x5C50 # <CJK>
-0x5C51 # <CJK>
-0x5C55 # <CJK>
-0x5C59 # <CJK>
-0x5C5E # <CJK>
-0x5C60 # <CJK>
-0x5C61 # <CJK>
-0x5C63 # <CJK>
-0x5C65 # <CJK>
-0x5C66 # <CJK>
-0x5C6E # <CJK>
-0x5C6F # <CJK>
-0x5C71 # <CJK>
-0x5C79 # <CJK>
-0x5C7A # <CJK>
-0x5C7F # <CJK>
-0x5C81 # <CJK>
-0x5C82 # <CJK>
-0x5C88 # <CJK>
-0x5C8C # <CJK>
-0x5C8D # <CJK>
-0x5C90 # <CJK>
-0x5C91 # <CJK>
-0x5C94 # <CJK>
-0x5C96 # <CJK>
-0x5C97 # <CJK>
-0x5C98 # <CJK>
-0x5C99 # <CJK>
-0x5C9A # <CJK>
-0x5C9B # <CJK>
-0x5C9C # <CJK>
-0x5CA2 # <CJK>
-0x5CA3 # <CJK>
-0x5CA9 # <CJK>
-0x5CAB # <CJK>
-0x5CAC # <CJK>
-0x5CAD # <CJK>
-0x5CB1 # <CJK>
-0x5CB3 # <CJK>
-0x5CB5 # <CJK>
-0x5CB7 # <CJK>
-0x5CB8 # <CJK>
-0x5CBD # <CJK>
-0x5CBF # <CJK>
-0x5CC1 # <CJK>
-0x5CC4 # <CJK>
-0x5CCB # <CJK>
-0x5CD2 # <CJK>
-0x5CD9 # <CJK>
-0x5CE1 # <CJK>
-0x5CE4 # <CJK>
-0x5CE5 # <CJK>
-0x5CE6 # <CJK>
-0x5CE8 # <CJK>
-0x5CEA # <CJK>
-0x5CED # <CJK>
-0x5CF0 # <CJK>
-0x5CFB # <CJK>
-0x5D02 # <CJK>
-0x5D03 # <CJK>
-0x5D06 # <CJK>
-0x5D07 # <CJK>
-0x5D0E # <CJK>
-0x5D14 # <CJK>
-0x5D16 # <CJK>
-0x5D1B # <CJK>
-0x5D1E # <CJK>
-0x5D24 # <CJK>
-0x5D26 # <CJK>
-0x5D27 # <CJK>
-0x5D29 # <CJK>
-0x5D2D # <CJK>
-0x5D2E # <CJK>
-0x5D34 # <CJK>
-0x5D3D # <CJK>
-0x5D3E # <CJK>
-0x5D47 # <CJK>
-0x5D4A # <CJK>
-0x5D4B # <CJK>
-0x5D4C # <CJK>
-0x5D58 # <CJK>
-0x5D5B # <CJK>
-0x5D5D # <CJK>
-0x5D69 # <CJK>
-0x5D6B # <CJK>
-0x5D6C # <CJK>
-0x5D6F # <CJK>
-0x5D74 # <CJK>
-0x5D82 # <CJK>
-0x5D99 # <CJK>
-0x5D9D # <CJK>
-0x5DB7 # <CJK>
-0x5DC5 # <CJK>
-0x5DCD # <CJK>
-0x5DDB # <CJK>
-0x5DDD # <CJK>
-0x5DDE # <CJK>
-0x5DE1 # <CJK>
-0x5DE2 # <CJK>
-0x5DE5 # <CJK>
-0x5DE6 # <CJK>
-0x5DE7 # <CJK>
-0x5DE8 # <CJK>
-0x5DE9 # <CJK>
-0x5DEB # <CJK>
-0x5DEE # <CJK>
-0x5DEF # <CJK>
-0x5DF1 # <CJK>
-0x5DF2 # <CJK>
-0x5DF3 # <CJK>
-0x5DF4 # <CJK>
-0x5DF7 # <CJK>
-0x5DFD # <CJK>
-0x5DFE # <CJK>
-0x5E01 # <CJK>
-0x5E02 # <CJK>
-0x5E03 # <CJK>
-0x5E05 # <CJK>
-0x5E06 # <CJK>
-0x5E08 # <CJK>
-0x5E0C # <CJK>
-0x5E0F # <CJK>
-0x5E10 # <CJK>
-0x5E11 # <CJK>
-0x5E14 # <CJK>
-0x5E15 # <CJK>
-0x5E16 # <CJK>
-0x5E18 # <CJK>
-0x5E19 # <CJK>
-0x5E1A # <CJK>
-0x5E1B # <CJK>
-0x5E1C # <CJK>
-0x5E1D # <CJK>
-0x5E26 # <CJK>
-0x5E27 # <CJK>
-0x5E2D # <CJK>
-0x5E2E # <CJK>
-0x5E31 # <CJK>
-0x5E37 # <CJK>
-0x5E38 # <CJK>
-0x5E3B # <CJK>
-0x5E3C # <CJK>
-0x5E3D # <CJK>
-0x5E42 # <CJK>
-0x5E44 # <CJK>
-0x5E45 # <CJK>
-0x5E4C # <CJK>
-0x5E54 # <CJK>
-0x5E55 # <CJK>
-0x5E5B # <CJK>
-0x5E5E # <CJK>
-0x5E61 # <CJK>
-0x5E62 # <CJK>
-0x5E72 # <CJK>
-0x5E73 # <CJK>
-0x5E74 # <CJK>
-0x5E76 # <CJK>
-0x5E78 # <CJK>
-0x5E7A # <CJK>
-0x5E7B # <CJK>
-0x5E7C # <CJK>
-0x5E7D # <CJK>
-0x5E7F # <CJK>
-0x5E80 # <CJK>
-0x5E84 # <CJK>
-0x5E86 # <CJK>
-0x5E87 # <CJK>
-0x5E8A # <CJK>
-0x5E8B # <CJK>
-0x5E8F # <CJK>
-0x5E90 # <CJK>
-0x5E91 # <CJK>
-0x5E93 # <CJK>
-0x5E94 # <CJK>
-0x5E95 # <CJK>
-0x5E96 # <CJK>
-0x5E97 # <CJK>
-0x5E99 # <CJK>
-0x5E9A # <CJK>
-0x5E9C # <CJK>
-0x5E9E # <CJK>
-0x5E9F # <CJK>
-0x5EA0 # <CJK>
-0x5EA5 # <CJK>
-0x5EA6 # <CJK>
-0x5EA7 # <CJK>
-0x5EAD # <CJK>
-0x5EB3 # <CJK>
-0x5EB5 # <CJK>
-0x5EB6 # <CJK>
-0x5EB7 # <CJK>
-0x5EB8 # <CJK>
-0x5EB9 # <CJK>
-0x5EBE # <CJK>
-0x5EC9 # <CJK>
-0x5ECA # <CJK>
-0x5ED1 # <CJK>
-0x5ED2 # <CJK>
-0x5ED3 # <CJK>
-0x5ED6 # <CJK>
-0x5EDB # <CJK>
-0x5EE8 # <CJK>
-0x5EEA # <CJK>
-0x5EF4 # <CJK>
-0x5EF6 # <CJK>
-0x5EF7 # <CJK>
-0x5EFA # <CJK>
-0x5EFE # <CJK>
-0x5EFF # <CJK>
-0x5F00 # <CJK>
-0x5F01 # <CJK>
-0x5F02 # <CJK>
-0x5F03 # <CJK>
-0x5F04 # <CJK>
-0x5F08 # <CJK>
-0x5F0A # <CJK>
-0x5F0B # <CJK>
-0x5F0F # <CJK>
-0x5F11 # <CJK>
-0x5F13 # <CJK>
-0x5F15 # <CJK>
-0x5F17 # <CJK>
-0x5F18 # <CJK>
-0x5F1B # <CJK>
-0x5F1F # <CJK>
-0x5F20 # <CJK>
-0x5F25 # <CJK>
-0x5F26 # <CJK>
-0x5F27 # <CJK>
-0x5F29 # <CJK>
-0x5F2A # <CJK>
-0x5F2D # <CJK>
-0x5F2F # <CJK>
-0x5F31 # <CJK>
-0x5F39 # <CJK>
-0x5F3A # <CJK>
-0x5F3C # <CJK>
-0x5F40 # <CJK>
-0x5F50 # <CJK>
-0x5F52 # <CJK>
-0x5F53 # <CJK>
-0x5F55 # <CJK>
-0x5F56 # <CJK>
-0x5F57 # <CJK>
-0x5F58 # <CJK>
-0x5F5D # <CJK>
-0x5F61 # <CJK>
-0x5F62 # <CJK>
-0x5F64 # <CJK>
-0x5F66 # <CJK>
-0x5F69 # <CJK>
-0x5F6A # <CJK>
-0x5F6C # <CJK>
-0x5F6D # <CJK>
-0x5F70 # <CJK>
-0x5F71 # <CJK>
-0x5F73 # <CJK>
-0x5F77 # <CJK>
-0x5F79 # <CJK>
-0x5F7B # <CJK>
-0x5F7C # <CJK>
-0x5F80 # <CJK>
-0x5F81 # <CJK>
-0x5F82 # <CJK>
-0x5F84 # <CJK>
-0x5F85 # <CJK>
-0x5F87 # <CJK>
-0x5F88 # <CJK>
-0x5F89 # <CJK>
-0x5F8A # <CJK>
-0x5F8B # <CJK>
-0x5F8C # <CJK>
-0x5F90 # <CJK>
-0x5F92 # <CJK>
-0x5F95 # <CJK>
-0x5F97 # <CJK>
-0x5F98 # <CJK>
-0x5F99 # <CJK>
-0x5F9C # <CJK>
-0x5FA1 # <CJK>
-0x5FA8 # <CJK>
-0x5FAA # <CJK>
-0x5FAD # <CJK>
-0x5FAE # <CJK>
-0x5FB5 # <CJK>
-0x5FB7 # <CJK>
-0x5FBC # <CJK>
-0x5FBD # <CJK>
-0x5FC3 # <CJK>
-0x5FC4 # <CJK>
-0x5FC5 # <CJK>
-0x5FC6 # <CJK>
-0x5FC9 # <CJK>
-0x5FCC # <CJK>
-0x5FCD # <CJK>
-0x5FCF # <CJK>
-0x5FD0 # <CJK>
-0x5FD1 # <CJK>
-0x5FD2 # <CJK>
-0x5FD6 # <CJK>
-0x5FD7 # <CJK>
-0x5FD8 # <CJK>
-0x5FD9 # <CJK>
-0x5FDD # <CJK>
-0x5FE0 # <CJK>
-0x5FE1 # <CJK>
-0x5FE4 # <CJK>
-0x5FE7 # <CJK>
-0x5FEA # <CJK>
-0x5FEB # <CJK>
-0x5FED # <CJK>
-0x5FEE # <CJK>
-0x5FF1 # <CJK>
-0x5FF5 # <CJK>
-0x5FF8 # <CJK>
-0x5FFB # <CJK>
-0x5FFD # <CJK>
-0x5FFE # <CJK>
-0x5FFF # <CJK>
-0x6000 # <CJK>
-0x6001 # <CJK>
-0x6002 # <CJK>
-0x6003 # <CJK>
-0x6004 # <CJK>
-0x6005 # <CJK>
-0x6006 # <CJK>
-0x600A # <CJK>
-0x600D # <CJK>
-0x600E # <CJK>
-0x600F # <CJK>
-0x6012 # <CJK>
-0x6014 # <CJK>
-0x6015 # <CJK>
-0x6016 # <CJK>
-0x6019 # <CJK>
-0x601B # <CJK>
-0x601C # <CJK>
-0x601D # <CJK>
-0x6020 # <CJK>
-0x6021 # <CJK>
-0x6025 # <CJK>
-0x6026 # <CJK>
-0x6027 # <CJK>
-0x6028 # <CJK>
-0x6029 # <CJK>
-0x602A # <CJK>
-0x602B # <CJK>
-0x602F # <CJK>
-0x6035 # <CJK>
-0x603B # <CJK>
-0x603C # <CJK>
-0x603F # <CJK>
-0x6041 # <CJK>
-0x6042 # <CJK>
-0x6043 # <CJK>
-0x604B # <CJK>
-0x604D # <CJK>
-0x6050 # <CJK>
-0x6052 # <CJK>
-0x6055 # <CJK>
-0x6059 # <CJK>
-0x605A # <CJK>
-0x605D # <CJK>
-0x6062 # <CJK>
-0x6063 # <CJK>
-0x6064 # <CJK>
-0x6067 # <CJK>
-0x6068 # <CJK>
-0x6069 # <CJK>
-0x606A # <CJK>
-0x606B # <CJK>
-0x606C # <CJK>
-0x606D # <CJK>
-0x606F # <CJK>
-0x6070 # <CJK>
-0x6073 # <CJK>
-0x6076 # <CJK>
-0x6078 # <CJK>
-0x6079 # <CJK>
-0x607A # <CJK>
-0x607B # <CJK>
-0x607C # <CJK>
-0x607D # <CJK>
-0x607F # <CJK>
-0x6083 # <CJK>
-0x6084 # <CJK>
-0x6089 # <CJK>
-0x608C # <CJK>
-0x608D # <CJK>
-0x6092 # <CJK>
-0x6094 # <CJK>
-0x6096 # <CJK>
-0x609A # <CJK>
-0x609B # <CJK>
-0x609D # <CJK>
-0x609F # <CJK>
-0x60A0 # <CJK>
-0x60A3 # <CJK>
-0x60A6 # <CJK>
-0x60A8 # <CJK>
-0x60AB # <CJK>
-0x60AC # <CJK>
-0x60AD # <CJK>
-0x60AF # <CJK>
-0x60B1 # <CJK>
-0x60B2 # <CJK>
-0x60B4 # <CJK>
-0x60B8 # <CJK>
-0x60BB # <CJK>
-0x60BC # <CJK>
-0x60C5 # <CJK>
-0x60C6 # <CJK>
-0x60CA # <CJK>
-0x60CB # <CJK>
-0x60D1 # <CJK>
-0x60D5 # <CJK>
-0x60D8 # <CJK>
-0x60DA # <CJK>
-0x60DC # <CJK>
-0x60DD # <CJK>
-0x60DF # <CJK>
-0x60E0 # <CJK>
-0x60E6 # <CJK>
-0x60E7 # <CJK>
-0x60E8 # <CJK>
-0x60E9 # <CJK>
-0x60EB # <CJK>
-0x60EC # <CJK>
-0x60ED # <CJK>
-0x60EE # <CJK>
-0x60EF # <CJK>
-0x60F0 # <CJK>
-0x60F3 # <CJK>
-0x60F4 # <CJK>
-0x60F6 # <CJK>
-0x60F9 # <CJK>
-0x60FA # <CJK>
-0x6100 # <CJK>
-0x6101 # <CJK>
-0x6106 # <CJK>
-0x6108 # <CJK>
-0x6109 # <CJK>
-0x610D # <CJK>
-0x610E # <CJK>
-0x610F # <CJK>
-0x6115 # <CJK>
-0x611A # <CJK>
-0x611F # <CJK>
-0x6120 # <CJK>
-0x6123 # <CJK>
-0x6124 # <CJK>
-0x6126 # <CJK>
-0x6127 # <CJK>
-0x612B # <CJK>
-0x613F # <CJK>
-0x6148 # <CJK>
-0x614A # <CJK>
-0x614C # <CJK>
-0x614E # <CJK>
-0x6151 # <CJK>
-0x6155 # <CJK>
-0x615D # <CJK>
-0x6162 # <CJK>
-0x6167 # <CJK>
-0x6168 # <CJK>
-0x6170 # <CJK>
-0x6175 # <CJK>
-0x6177 # <CJK>
-0x618B # <CJK>
-0x618E # <CJK>
-0x6194 # <CJK>
-0x619D # <CJK>
-0x61A7 # <CJK>
-0x61A8 # <CJK>
-0x61A9 # <CJK>
-0x61AC # <CJK>
-0x61B7 # <CJK>
-0x61BE # <CJK>
-0x61C2 # <CJK>
-0x61C8 # <CJK>
-0x61CA # <CJK>
-0x61CB # <CJK>
-0x61D1 # <CJK>
-0x61D2 # <CJK>
-0x61D4 # <CJK>
-0x61E6 # <CJK>
-0x61F5 # <CJK>
-0x61FF # <CJK>
-0x6206 # <CJK>
-0x6208 # <CJK>
-0x620A # <CJK>
-0x620B # <CJK>
-0x620C # <CJK>
-0x620D # <CJK>
-0x620E # <CJK>
-0x620F # <CJK>
-0x6210 # <CJK>
-0x6211 # <CJK>
-0x6212 # <CJK>
-0x6215 # <CJK>
-0x6216 # <CJK>
-0x6217 # <CJK>
-0x6218 # <CJK>
-0x621A # <CJK>
-0x621B # <CJK>
-0x621F # <CJK>
-0x6221 # <CJK>
-0x6222 # <CJK>
-0x6224 # <CJK>
-0x6225 # <CJK>
-0x622A # <CJK>
-0x622C # <CJK>
-0x622E # <CJK>
-0x6233 # <CJK>
-0x6234 # <CJK>
-0x6237 # <CJK>
-0x623D # <CJK>
-0x623E # <CJK>
-0x623F # <CJK>
-0x6240 # <CJK>
-0x6241 # <CJK>
-0x6243 # <CJK>
-0x6247 # <CJK>
-0x6248 # <CJK>
-0x6249 # <CJK>
-0x624B # <CJK>
-0x624C # <CJK>
-0x624D # <CJK>
-0x624E # <CJK>
-0x6251 # <CJK>
-0x6252 # <CJK>
-0x6253 # <CJK>
-0x6254 # <CJK>
-0x6258 # <CJK>
-0x625B # <CJK>
-0x6263 # <CJK>
-0x6266 # <CJK>
-0x6267 # <CJK>
-0x6269 # <CJK>
-0x626A # <CJK>
-0x626B # <CJK>
-0x626C # <CJK>
-0x626D # <CJK>
-0x626E # <CJK>
-0x626F # <CJK>
-0x6270 # <CJK>
-0x6273 # <CJK>
-0x6276 # <CJK>
-0x6279 # <CJK>
-0x627C # <CJK>
-0x627E # <CJK>
-0x627F # <CJK>
-0x6280 # <CJK>
-0x6284 # <CJK>
-0x6289 # <CJK>
-0x628A # <CJK>
-0x6291 # <CJK>
-0x6292 # <CJK>
-0x6293 # <CJK>
-0x6295 # <CJK>
-0x6296 # <CJK>
-0x6297 # <CJK>
-0x6298 # <CJK>
-0x629A # <CJK>
-0x629B # <CJK>
-0x629F # <CJK>
-0x62A0 # <CJK>
-0x62A1 # <CJK>
-0x62A2 # <CJK>
-0x62A4 # <CJK>
-0x62A5 # <CJK>
-0x62A8 # <CJK>
-0x62AB # <CJK>
-0x62AC # <CJK>
-0x62B1 # <CJK>
-0x62B5 # <CJK>
-0x62B9 # <CJK>
-0x62BB # <CJK>
-0x62BC # <CJK>
-0x62BD # <CJK>
-0x62BF # <CJK>
-0x62C2 # <CJK>
-0x62C4 # <CJK>
-0x62C5 # <CJK>
-0x62C6 # <CJK>
-0x62C7 # <CJK>
-0x62C8 # <CJK>
-0x62C9 # <CJK>
-0x62CA # <CJK>
-0x62CC # <CJK>
-0x62CD # <CJK>
-0x62CE # <CJK>
-0x62D0 # <CJK>
-0x62D2 # <CJK>
-0x62D3 # <CJK>
-0x62D4 # <CJK>
-0x62D6 # <CJK>
-0x62D7 # <CJK>
-0x62D8 # <CJK>
-0x62D9 # <CJK>
-0x62DA # <CJK>
-0x62DB # <CJK>
-0x62DC # <CJK>
-0x62DF # <CJK>
-0x62E2 # <CJK>
-0x62E3 # <CJK>
-0x62E5 # <CJK>
-0x62E6 # <CJK>
-0x62E7 # <CJK>
-0x62E8 # <CJK>
-0x62E9 # <CJK>
-0x62EC # <CJK>
-0x62ED # <CJK>
-0x62EE # <CJK>
-0x62EF # <CJK>
-0x62F1 # <CJK>
-0x62F3 # <CJK>
-0x62F4 # <CJK>
-0x62F6 # <CJK>
-0x62F7 # <CJK>
-0x62FC # <CJK>
-0x62FD # <CJK>
-0x62FE # <CJK>
-0x62FF # <CJK>
-0x6301 # <CJK>
-0x6302 # <CJK>
-0x6307 # <CJK>
-0x6308 # <CJK>
-0x6309 # <CJK>
-0x630E # <CJK>
-0x6311 # <CJK>
-0x6316 # <CJK>
-0x631A # <CJK>
-0x631B # <CJK>
-0x631D # <CJK>
-0x631E # <CJK>
-0x631F # <CJK>
-0x6320 # <CJK>
-0x6321 # <CJK>
-0x6322 # <CJK>
-0x6323 # <CJK>
-0x6324 # <CJK>
-0x6325 # <CJK>
-0x6328 # <CJK>
-0x632A # <CJK>
-0x632B # <CJK>
-0x632F # <CJK>
-0x6332 # <CJK>
-0x6339 # <CJK>
-0x633A # <CJK>
-0x633D # <CJK>
-0x6342 # <CJK>
-0x6343 # <CJK>
-0x6345 # <CJK>
-0x6346 # <CJK>
-0x6349 # <CJK>
-0x634B # <CJK>
-0x634C # <CJK>
-0x634D # <CJK>
-0x634E # <CJK>
-0x634F # <CJK>
-0x6350 # <CJK>
-0x6355 # <CJK>
-0x635E # <CJK>
-0x635F # <CJK>
-0x6361 # <CJK>
-0x6362 # <CJK>
-0x6363 # <CJK>
-0x6367 # <CJK>
-0x6369 # <CJK>
-0x636D # <CJK>
-0x636E # <CJK>
-0x6371 # <CJK>
-0x6376 # <CJK>
-0x6377 # <CJK>
-0x637A # <CJK>
-0x637B # <CJK>
-0x6380 # <CJK>
-0x6382 # <CJK>
-0x6387 # <CJK>
-0x6388 # <CJK>
-0x6389 # <CJK>
-0x638A # <CJK>
-0x638C # <CJK>
-0x638E # <CJK>
-0x638F # <CJK>
-0x6390 # <CJK>
-0x6392 # <CJK>
-0x6396 # <CJK>
-0x6398 # <CJK>
-0x63A0 # <CJK>
-0x63A2 # <CJK>
-0x63A3 # <CJK>
-0x63A5 # <CJK>
-0x63A7 # <CJK>
-0x63A8 # <CJK>
-0x63A9 # <CJK>
-0x63AA # <CJK>
-0x63AC # <CJK>
-0x63AD # <CJK>
-0x63AE # <CJK>
-0x63B0 # <CJK>
-0x63B3 # <CJK>
-0x63B4 # <CJK>
-0x63B7 # <CJK>
-0x63B8 # <CJK>
-0x63BA # <CJK>
-0x63BC # <CJK>
-0x63BE # <CJK>
-0x63C4 # <CJK>
-0x63C6 # <CJK>
-0x63C9 # <CJK>
-0x63CD # <CJK>
-0x63CE # <CJK>
-0x63CF # <CJK>
-0x63D0 # <CJK>
-0x63D2 # <CJK>
-0x63D6 # <CJK>
-0x63DE # <CJK>
-0x63E0 # <CJK>
-0x63E1 # <CJK>
-0x63E3 # <CJK>
-0x63E9 # <CJK>
-0x63EA # <CJK>
-0x63ED # <CJK>
-0x63F2 # <CJK>
-0x63F4 # <CJK>
-0x63F6 # <CJK>
-0x63F8 # <CJK>
-0x63FD # <CJK>
-0x63FF # <CJK>
-0x6400 # <CJK>
-0x6401 # <CJK>
-0x6402 # <CJK>
-0x6405 # <CJK>
-0x640B # <CJK>
-0x640C # <CJK>
-0x640F # <CJK>
-0x6410 # <CJK>
-0x6413 # <CJK>
-0x6414 # <CJK>
-0x641B # <CJK>
-0x641C # <CJK>
-0x641E # <CJK>
-0x6420 # <CJK>
-0x6421 # <CJK>
-0x6426 # <CJK>
-0x642A # <CJK>
-0x642C # <CJK>
-0x642D # <CJK>
-0x6434 # <CJK>
-0x643A # <CJK>
-0x643D # <CJK>
-0x643F # <CJK>
-0x6441 # <CJK>
-0x6444 # <CJK>
-0x6445 # <CJK>
-0x6446 # <CJK>
-0x6447 # <CJK>
-0x6448 # <CJK>
-0x644A # <CJK>
-0x6452 # <CJK>
-0x6454 # <CJK>
-0x6458 # <CJK>
-0x645E # <CJK>
-0x6467 # <CJK>
-0x6469 # <CJK>
-0x646D # <CJK>
-0x6478 # <CJK>
-0x6479 # <CJK>
-0x647A # <CJK>
-0x6482 # <CJK>
-0x6484 # <CJK>
-0x6485 # <CJK>
-0x6487 # <CJK>
-0x6491 # <CJK>
-0x6492 # <CJK>
-0x6495 # <CJK>
-0x6496 # <CJK>
-0x6499 # <CJK>
-0x649E # <CJK>
-0x64A4 # <CJK>
-0x64A9 # <CJK>
-0x64AC # <CJK>
-0x64AD # <CJK>
-0x64AE # <CJK>
-0x64B0 # <CJK>
-0x64B5 # <CJK>
-0x64B7 # <CJK>
-0x64B8 # <CJK>
-0x64BA # <CJK>
-0x64BC # <CJK>
-0x64C0 # <CJK>
-0x64C2 # <CJK>
-0x64C5 # <CJK>
-0x64CD # <CJK>
-0x64CE # <CJK>
-0x64D0 # <CJK>
-0x64D2 # <CJK>
-0x64D7 # <CJK>
-0x64D8 # <CJK>
-0x64DE # <CJK>
-0x64E2 # <CJK>
-0x64E4 # <CJK>
-0x64E6 # <CJK>
-0x6500 # <CJK>
-0x6509 # <CJK>
-0x6512 # <CJK>
-0x6518 # <CJK>
-0x6525 # <CJK>
-0x652B # <CJK>
-0x652E # <CJK>
-0x652F # <CJK>
-0x6534 # <CJK>
-0x6535 # <CJK>
-0x6536 # <CJK>
-0x6538 # <CJK>
-0x6539 # <CJK>
-0x653B # <CJK>
-0x653E # <CJK>
-0x653F # <CJK>
-0x6545 # <CJK>
-0x6548 # <CJK>
-0x6549 # <CJK>
-0x654C # <CJK>
-0x654F # <CJK>
-0x6551 # <CJK>
-0x6555 # <CJK>
-0x6556 # <CJK>
-0x6559 # <CJK>
-0x655B # <CJK>
-0x655D # <CJK>
-0x655E # <CJK>
-0x6562 # <CJK>
-0x6563 # <CJK>
-0x6566 # <CJK>
-0x656B # <CJK>
-0x656C # <CJK>
-0x6570 # <CJK>
-0x6572 # <CJK>
-0x6574 # <CJK>
-0x6577 # <CJK>
-0x6587 # <CJK>
-0x658B # <CJK>
-0x658C # <CJK>
-0x6590 # <CJK>
-0x6591 # <CJK>
-0x6593 # <CJK>
-0x6597 # <CJK>
-0x6599 # <CJK>
-0x659B # <CJK>
-0x659C # <CJK>
-0x659F # <CJK>
-0x65A1 # <CJK>
-0x65A4 # <CJK>
-0x65A5 # <CJK>
-0x65A7 # <CJK>
-0x65A9 # <CJK>
-0x65AB # <CJK>
-0x65AD # <CJK>
-0x65AF # <CJK>
-0x65B0 # <CJK>
-0x65B9 # <CJK>
-0x65BC # <CJK>
-0x65BD # <CJK>
-0x65C1 # <CJK>
-0x65C3 # <CJK>
-0x65C4 # <CJK>
-0x65C5 # <CJK>
-0x65C6 # <CJK>
-0x65CB # <CJK>
-0x65CC # <CJK>
-0x65CE # <CJK>
-0x65CF # <CJK>
-0x65D2 # <CJK>
-0x65D6 # <CJK>
-0x65D7 # <CJK>
-0x65E0 # <CJK>
-0x65E2 # <CJK>
-0x65E5 # <CJK>
-0x65E6 # <CJK>
-0x65E7 # <CJK>
-0x65E8 # <CJK>
-0x65E9 # <CJK>
-0x65EC # <CJK>
-0x65ED # <CJK>
-0x65EE # <CJK>
-0x65EF # <CJK>
-0x65F0 # <CJK>
-0x65F1 # <CJK>
-0x65F6 # <CJK>
-0x65F7 # <CJK>
-0x65FA # <CJK>
-0x6600 # <CJK>
-0x6602 # <CJK>
-0x6603 # <CJK>
-0x6606 # <CJK>
-0x660A # <CJK>
-0x660C # <CJK>
-0x660E # <CJK>
-0x660F # <CJK>
-0x6613 # <CJK>
-0x6614 # <CJK>
-0x6615 # <CJK>
-0x6619 # <CJK>
-0x661D # <CJK>
-0x661F # <CJK>
-0x6620 # <CJK>
-0x6625 # <CJK>
-0x6627 # <CJK>
-0x6628 # <CJK>
-0x662D # <CJK>
-0x662F # <CJK>
-0x6631 # <CJK>
-0x6634 # <CJK>
-0x6635 # <CJK>
-0x6636 # <CJK>
-0x663C # <CJK>
-0x663E # <CJK>
-0x6641 # <CJK>
-0x6643 # <CJK>
-0x664B # <CJK>
-0x664C # <CJK>
-0x664F # <CJK>
-0x6652 # <CJK>
-0x6653 # <CJK>
-0x6654 # <CJK>
-0x6655 # <CJK>
-0x6656 # <CJK>
-0x6657 # <CJK>
-0x665A # <CJK>
-0x665F # <CJK>
-0x6661 # <CJK>
-0x6664 # <CJK>
-0x6666 # <CJK>
-0x6668 # <CJK>
-0x666E # <CJK>
-0x666F # <CJK>
-0x6670 # <CJK>
-0x6674 # <CJK>
-0x6676 # <CJK>
-0x6677 # <CJK>
-0x667A # <CJK>
-0x667E # <CJK>
-0x6682 # <CJK>
-0x6684 # <CJK>
-0x6687 # <CJK>
-0x668C # <CJK>
-0x6691 # <CJK>
-0x6696 # <CJK>
-0x6697 # <CJK>
-0x669D # <CJK>
-0x66A7 # <CJK>
-0x66A8 # <CJK>
-0x66AE # <CJK>
-0x66B4 # <CJK>
-0x66B9 # <CJK>
-0x66BE # <CJK>
-0x66D9 # <CJK>
-0x66DB # <CJK>
-0x66DC # <CJK>
-0x66DD # <CJK>
-0x66E6 # <CJK>
-0x66E9 # <CJK>
-0x66F0 # <CJK>
-0x66F2 # <CJK>
-0x66F3 # <CJK>
-0x66F4 # <CJK>
-0x66F7 # <CJK>
-0x66F9 # <CJK>
-0x66FC # <CJK>
-0x66FE # <CJK>
-0x66FF # <CJK>
-0x6700 # <CJK>
-0x6708 # <CJK>
-0x6709 # <CJK>
-0x670A # <CJK>
-0x670B # <CJK>
-0x670D # <CJK>
-0x6710 # <CJK>
-0x6714 # <CJK>
-0x6715 # <CJK>
-0x6717 # <CJK>
-0x671B # <CJK>
-0x671D # <CJK>
-0x671F # <CJK>
-0x6726 # <CJK>
-0x6728 # <CJK>
-0x672A # <CJK>
-0x672B # <CJK>
-0x672C # <CJK>
-0x672D # <CJK>
-0x672F # <CJK>
-0x6731 # <CJK>
-0x6734 # <CJK>
-0x6735 # <CJK>
-0x673A # <CJK>
-0x673D # <CJK>
-0x6740 # <CJK>
-0x6742 # <CJK>
-0x6743 # <CJK>
-0x6746 # <CJK>
-0x6748 # <CJK>
-0x6749 # <CJK>
-0x674C # <CJK>
-0x674E # <CJK>
-0x674F # <CJK>
-0x6750 # <CJK>
-0x6751 # <CJK>
-0x6753 # <CJK>
-0x6756 # <CJK>
-0x675C # <CJK>
-0x675E # <CJK>
-0x675F # <CJK>
-0x6760 # <CJK>
-0x6761 # <CJK>
-0x6765 # <CJK>
-0x6768 # <CJK>
-0x6769 # <CJK>
-0x676A # <CJK>
-0x676D # <CJK>
-0x676F # <CJK>
-0x6770 # <CJK>
-0x6772 # <CJK>
-0x6773 # <CJK>
-0x6775 # <CJK>
-0x6777 # <CJK>
-0x677C # <CJK>
-0x677E # <CJK>
-0x677F # <CJK>
-0x6781 # <CJK>
-0x6784 # <CJK>
-0x6787 # <CJK>
-0x6789 # <CJK>
-0x678B # <CJK>
-0x6790 # <CJK>
-0x6795 # <CJK>
-0x6797 # <CJK>
-0x6798 # <CJK>
-0x679A # <CJK>
-0x679C # <CJK>
-0x679D # <CJK>
-0x679E # <CJK>
-0x67A2 # <CJK>
-0x67A3 # <CJK>
-0x67A5 # <CJK>
-0x67A7 # <CJK>
-0x67A8 # <CJK>
-0x67AA # <CJK>
-0x67AB # <CJK>
-0x67AD # <CJK>
-0x67AF # <CJK>
-0x67B0 # <CJK>
-0x67B3 # <CJK>
-0x67B5 # <CJK>
-0x67B6 # <CJK>
-0x67B7 # <CJK>
-0x67B8 # <CJK>
-0x67C1 # <CJK>
-0x67C3 # <CJK>
-0x67C4 # <CJK>
-0x67CF # <CJK>
-0x67D0 # <CJK>
-0x67D1 # <CJK>
-0x67D2 # <CJK>
-0x67D3 # <CJK>
-0x67D4 # <CJK>
-0x67D8 # <CJK>
-0x67D9 # <CJK>
-0x67DA # <CJK>
-0x67DC # <CJK>
-0x67DD # <CJK>
-0x67DE # <CJK>
-0x67E0 # <CJK>
-0x67E2 # <CJK>
-0x67E5 # <CJK>
-0x67E9 # <CJK>
-0x67EC # <CJK>
-0x67EF # <CJK>
-0x67F0 # <CJK>
-0x67F1 # <CJK>
-0x67F3 # <CJK>
-0x67F4 # <CJK>
-0x67FD # <CJK>
-0x67FF # <CJK>
-0x6800 # <CJK>
-0x6805 # <CJK>
-0x6807 # <CJK>
-0x6808 # <CJK>
-0x6809 # <CJK>
-0x680A # <CJK>
-0x680B # <CJK>
-0x680C # <CJK>
-0x680E # <CJK>
-0x680F # <CJK>
-0x6811 # <CJK>
-0x6813 # <CJK>
-0x6816 # <CJK>
-0x6817 # <CJK>
-0x681D # <CJK>
-0x6821 # <CJK>
-0x6829 # <CJK>
-0x682A # <CJK>
-0x6832 # <CJK>
-0x6833 # <CJK>
-0x6837 # <CJK>
-0x6838 # <CJK>
-0x6839 # <CJK>
-0x683C # <CJK>
-0x683D # <CJK>
-0x683E # <CJK>
-0x6840 # <CJK>
-0x6841 # <CJK>
-0x6842 # <CJK>
-0x6843 # <CJK>
-0x6844 # <CJK>
-0x6845 # <CJK>
-0x6846 # <CJK>
-0x6848 # <CJK>
-0x6849 # <CJK>
-0x684A # <CJK>
-0x684C # <CJK>
-0x684E # <CJK>
-0x6850 # <CJK>
-0x6851 # <CJK>
-0x6853 # <CJK>
-0x6854 # <CJK>
-0x6855 # <CJK>
-0x6860 # <CJK>
-0x6861 # <CJK>
-0x6862 # <CJK>
-0x6863 # <CJK>
-0x6864 # <CJK>
-0x6865 # <CJK>
-0x6866 # <CJK>
-0x6867 # <CJK>
-0x6868 # <CJK>
-0x6869 # <CJK>
-0x686B # <CJK>
-0x6874 # <CJK>
-0x6876 # <CJK>
-0x6877 # <CJK>
-0x6881 # <CJK>
-0x6883 # <CJK>
-0x6885 # <CJK>
-0x6886 # <CJK>
-0x688F # <CJK>
-0x6893 # <CJK>
-0x6897 # <CJK>
-0x68A2 # <CJK>
-0x68A6 # <CJK>
-0x68A7 # <CJK>
-0x68A8 # <CJK>
-0x68AD # <CJK>
-0x68AF # <CJK>
-0x68B0 # <CJK>
-0x68B3 # <CJK>
-0x68B5 # <CJK>
-0x68C0 # <CJK>
-0x68C2 # <CJK>
-0x68C9 # <CJK>
-0x68CB # <CJK>
-0x68CD # <CJK>
-0x68D2 # <CJK>
-0x68D5 # <CJK>
-0x68D8 # <CJK>
-0x68DA # <CJK>
-0x68E0 # <CJK>
-0x68E3 # <CJK>
-0x68EE # <CJK>
-0x68F0 # <CJK>
-0x68F1 # <CJK>
-0x68F5 # <CJK>
-0x68F9 # <CJK>
-0x68FA # <CJK>
-0x68FC # <CJK>
-0x6901 # <CJK>
-0x6905 # <CJK>
-0x690B # <CJK>
-0x690D # <CJK>
-0x690E # <CJK>
-0x6910 # <CJK>
-0x6912 # <CJK>
-0x691F # <CJK>
-0x6920 # <CJK>
-0x6924 # <CJK>
-0x692D # <CJK>
-0x6930 # <CJK>
-0x6934 # <CJK>
-0x6939 # <CJK>
-0x693D # <CJK>
-0x693F # <CJK>
-0x6942 # <CJK>
-0x6954 # <CJK>
-0x6957 # <CJK>
-0x695A # <CJK>
-0x695D # <CJK>
-0x695E # <CJK>
-0x6960 # <CJK>
-0x6963 # <CJK>
-0x6966 # <CJK>
-0x696B # <CJK>
-0x696E # <CJK>
-0x6971 # <CJK>
-0x6977 # <CJK>
-0x6978 # <CJK>
-0x6979 # <CJK>
-0x697C # <CJK>
-0x6980 # <CJK>
-0x6982 # <CJK>
-0x6984 # <CJK>
-0x6986 # <CJK>
-0x6987 # <CJK>
-0x6988 # <CJK>
-0x6989 # <CJK>
-0x698D # <CJK>
-0x6994 # <CJK>
-0x6995 # <CJK>
-0x6998 # <CJK>
-0x699B # <CJK>
-0x699C # <CJK>
-0x69A7 # <CJK>
-0x69A8 # <CJK>
-0x69AB # <CJK>
-0x69AD # <CJK>
-0x69B1 # <CJK>
-0x69B4 # <CJK>
-0x69B7 # <CJK>
-0x69BB # <CJK>
-0x69C1 # <CJK>
-0x69CA # <CJK>
-0x69CC # <CJK>
-0x69CE # <CJK>
-0x69D0 # <CJK>
-0x69D4 # <CJK>
-0x69DB # <CJK>
-0x69DF # <CJK>
-0x69E0 # <CJK>
-0x69ED # <CJK>
-0x69F2 # <CJK>
-0x69FD # <CJK>
-0x69FF # <CJK>
-0x6A0A # <CJK>
-0x6A17 # <CJK>
-0x6A18 # <CJK>
-0x6A1F # <CJK>
-0x6A21 # <CJK>
-0x6A28 # <CJK>
-0x6A2A # <CJK>
-0x6A2F # <CJK>
-0x6A31 # <CJK>
-0x6A35 # <CJK>
-0x6A3D # <CJK>
-0x6A3E # <CJK>
-0x6A44 # <CJK>
-0x6A47 # <CJK>
-0x6A50 # <CJK>
-0x6A58 # <CJK>
-0x6A59 # <CJK>
-0x6A5B # <CJK>
-0x6A61 # <CJK>
-0x6A65 # <CJK>
-0x6A71 # <CJK>
-0x6A79 # <CJK>
-0x6A7C # <CJK>
-0x6A80 # <CJK>
-0x6A84 # <CJK>
-0x6A8E # <CJK>
-0x6A90 # <CJK>
-0x6A91 # <CJK>
-0x6A97 # <CJK>
-0x6AA0 # <CJK>
-0x6AA9 # <CJK>
-0x6AAB # <CJK>
-0x6AAC # <CJK>
-0x6B20 # <CJK>
-0x6B21 # <CJK>
-0x6B22 # <CJK>
-0x6B23 # <CJK>
-0x6B24 # <CJK>
-0x6B27 # <CJK>
-0x6B32 # <CJK>
-0x6B37 # <CJK>
-0x6B39 # <CJK>
-0x6B3A # <CJK>
-0x6B3E # <CJK>
-0x6B43 # <CJK>
-0x6B46 # <CJK>
-0x6B47 # <CJK>
-0x6B49 # <CJK>
-0x6B4C # <CJK>
-0x6B59 # <CJK>
-0x6B62 # <CJK>
-0x6B63 # <CJK>
-0x6B64 # <CJK>
-0x6B65 # <CJK>
-0x6B66 # <CJK>
-0x6B67 # <CJK>
-0x6B6A # <CJK>
-0x6B79 # <CJK>
-0x6B7B # <CJK>
-0x6B7C # <CJK>
-0x6B81 # <CJK>
-0x6B82 # <CJK>
-0x6B83 # <CJK>
-0x6B84 # <CJK>
-0x6B86 # <CJK>
-0x6B87 # <CJK>
-0x6B89 # <CJK>
-0x6B8A # <CJK>
-0x6B8B # <CJK>
-0x6B8D # <CJK>
-0x6B92 # <CJK>
-0x6B93 # <CJK>
-0x6B96 # <CJK>
-0x6B9A # <CJK>
-0x6B9B # <CJK>
-0x6BA1 # <CJK>
-0x6BAA # <CJK>
-0x6BB3 # <CJK>
-0x6BB4 # <CJK>
-0x6BB5 # <CJK>
-0x6BB7 # <CJK>
-0x6BBF # <CJK>
-0x6BC1 # <CJK>
-0x6BC2 # <CJK>
-0x6BC5 # <CJK>
-0x6BCB # <CJK>
-0x6BCD # <CJK>
-0x6BCF # <CJK>
-0x6BD2 # <CJK>
-0x6BD3 # <CJK>
-0x6BD4 # <CJK>
-0x6BD5 # <CJK>
-0x6BD6 # <CJK>
-0x6BD7 # <CJK>
-0x6BD9 # <CJK>
-0x6BDB # <CJK>
-0x6BE1 # <CJK>
-0x6BEA # <CJK>
-0x6BEB # <CJK>
-0x6BEF # <CJK>
-0x6BF3 # <CJK>
-0x6BF5 # <CJK>
-0x6BF9 # <CJK>
-0x6BFD # <CJK>
-0x6C05 # <CJK>
-0x6C06 # <CJK>
-0x6C07 # <CJK>
-0x6C0D # <CJK>
-0x6C0F # <CJK>
-0x6C10 # <CJK>
-0x6C11 # <CJK>
-0x6C13 # <CJK>
-0x6C14 # <CJK>
-0x6C15 # <CJK>
-0x6C16 # <CJK>
-0x6C18 # <CJK>
-0x6C19 # <CJK>
-0x6C1A # <CJK>
-0x6C1B # <CJK>
-0x6C1F # <CJK>
-0x6C21 # <CJK>
-0x6C22 # <CJK>
-0x6C24 # <CJK>
-0x6C26 # <CJK>
-0x6C27 # <CJK>
-0x6C28 # <CJK>
-0x6C29 # <CJK>
-0x6C2A # <CJK>
-0x6C2E # <CJK>
-0x6C2F # <CJK>
-0x6C30 # <CJK>
-0x6C32 # <CJK>
-0x6C34 # <CJK>
-0x6C35 # <CJK>
-0x6C38 # <CJK>
-0x6C3D # <CJK>
-0x6C40 # <CJK>
-0x6C41 # <CJK>
-0x6C42 # <CJK>
-0x6C46 # <CJK>
-0x6C47 # <CJK>
-0x6C49 # <CJK>
-0x6C4A # <CJK>
-0x6C50 # <CJK>
-0x6C54 # <CJK>
-0x6C55 # <CJK>
-0x6C57 # <CJK>
-0x6C5B # <CJK>
-0x6C5C # <CJK>
-0x6C5D # <CJK>
-0x6C5E # <CJK>
-0x6C5F # <CJK>
-0x6C60 # <CJK>
-0x6C61 # <CJK>
-0x6C64 # <CJK>
-0x6C68 # <CJK>
-0x6C69 # <CJK>
-0x6C6A # <CJK>
-0x6C70 # <CJK>
-0x6C72 # <CJK>
-0x6C74 # <CJK>
-0x6C76 # <CJK>
-0x6C79 # <CJK>
-0x6C7D # <CJK>
-0x6C7E # <CJK>
-0x6C81 # <CJK>
-0x6C82 # <CJK>
-0x6C83 # <CJK>
-0x6C85 # <CJK>
-0x6C86 # <CJK>
-0x6C88 # <CJK>
-0x6C89 # <CJK>
-0x6C8C # <CJK>
-0x6C8F # <CJK>
-0x6C90 # <CJK>
-0x6C93 # <CJK>
-0x6C94 # <CJK>
-0x6C99 # <CJK>
-0x6C9B # <CJK>
-0x6C9F # <CJK>
-0x6CA1 # <CJK>
-0x6CA3 # <CJK>
-0x6CA4 # <CJK>
-0x6CA5 # <CJK>
-0x6CA6 # <CJK>
-0x6CA7 # <CJK>
-0x6CA9 # <CJK>
-0x6CAA # <CJK>
-0x6CAB # <CJK>
-0x6CAD # <CJK>
-0x6CAE # <CJK>
-0x6CB1 # <CJK>
-0x6CB2 # <CJK>
-0x6CB3 # <CJK>
-0x6CB8 # <CJK>
-0x6CB9 # <CJK>
-0x6CBB # <CJK>
-0x6CBC # <CJK>
-0x6CBD # <CJK>
-0x6CBE # <CJK>
-0x6CBF # <CJK>
-0x6CC4 # <CJK>
-0x6CC5 # <CJK>
-0x6CC9 # <CJK>
-0x6CCA # <CJK>
-0x6CCC # <CJK>
-0x6CD0 # <CJK>
-0x6CD3 # <CJK>
-0x6CD4 # <CJK>
-0x6CD5 # <CJK>
-0x6CD6 # <CJK>
-0x6CD7 # <CJK>
-0x6CDB # <CJK>
-0x6CDE # <CJK>
-0x6CE0 # <CJK>
-0x6CE1 # <CJK>
-0x6CE2 # <CJK>
-0x6CE3 # <CJK>
-0x6CE5 # <CJK>
-0x6CE8 # <CJK>
-0x6CEA # <CJK>
-0x6CEB # <CJK>
-0x6CEE # <CJK>
-0x6CEF # <CJK>
-0x6CF0 # <CJK>
-0x6CF1 # <CJK>
-0x6CF3 # <CJK>
-0x6CF5 # <CJK>
-0x6CF6 # <CJK>
-0x6CF7 # <CJK>
-0x6CF8 # <CJK>
-0x6CFA # <CJK>
-0x6CFB # <CJK>
-0x6CFC # <CJK>
-0x6CFD # <CJK>
-0x6CFE # <CJK>
-0x6D01 # <CJK>
-0x6D04 # <CJK>
-0x6D07 # <CJK>
-0x6D0B # <CJK>
-0x6D0C # <CJK>
-0x6D0E # <CJK>
-0x6D12 # <CJK>
-0x6D17 # <CJK>
-0x6D19 # <CJK>
-0x6D1A # <CJK>
-0x6D1B # <CJK>
-0x6D1E # <CJK>
-0x6D25 # <CJK>
-0x6D27 # <CJK>
-0x6D2A # <CJK>
-0x6D2B # <CJK>
-0x6D2E # <CJK>
-0x6D31 # <CJK>
-0x6D32 # <CJK>
-0x6D33 # <CJK>
-0x6D35 # <CJK>
-0x6D39 # <CJK>
-0x6D3B # <CJK>
-0x6D3C # <CJK>
-0x6D3D # <CJK>
-0x6D3E # <CJK>
-0x6D41 # <CJK>
-0x6D43 # <CJK>
-0x6D45 # <CJK>
-0x6D46 # <CJK>
-0x6D47 # <CJK>
-0x6D48 # <CJK>
-0x6D4A # <CJK>
-0x6D4B # <CJK>
-0x6D4D # <CJK>
-0x6D4E # <CJK>
-0x6D4F # <CJK>
-0x6D51 # <CJK>
-0x6D52 # <CJK>
-0x6D53 # <CJK>
-0x6D54 # <CJK>
-0x6D59 # <CJK>
-0x6D5A # <CJK>
-0x6D5C # <CJK>
-0x6D5E # <CJK>
-0x6D60 # <CJK>
-0x6D63 # <CJK>
-0x6D66 # <CJK>
-0x6D69 # <CJK>
-0x6D6A # <CJK>
-0x6D6E # <CJK>
-0x6D6F # <CJK>
-0x6D74 # <CJK>
-0x6D77 # <CJK>
-0x6D78 # <CJK>
-0x6D7C # <CJK>
-0x6D82 # <CJK>
-0x6D85 # <CJK>
-0x6D88 # <CJK>
-0x6D89 # <CJK>
-0x6D8C # <CJK>
-0x6D8E # <CJK>
-0x6D91 # <CJK>
-0x6D93 # <CJK>
-0x6D94 # <CJK>
-0x6D95 # <CJK>
-0x6D9B # <CJK>
-0x6D9D # <CJK>
-0x6D9E # <CJK>
-0x6D9F # <CJK>
-0x6DA0 # <CJK>
-0x6DA1 # <CJK>
-0x6DA3 # <CJK>
-0x6DA4 # <CJK>
-0x6DA6 # <CJK>
-0x6DA7 # <CJK>
-0x6DA8 # <CJK>
-0x6DA9 # <CJK>
-0x6DAA # <CJK>
-0x6DAB # <CJK>
-0x6DAE # <CJK>
-0x6DAF # <CJK>
-0x6DB2 # <CJK>
-0x6DB5 # <CJK>
-0x6DB8 # <CJK>
-0x6DBF # <CJK>
-0x6DC0 # <CJK>
-0x6DC4 # <CJK>
-0x6DC5 # <CJK>
-0x6DC6 # <CJK>
-0x6DC7 # <CJK>
-0x6DCB # <CJK>
-0x6DCC # <CJK>
-0x6DD1 # <CJK>
-0x6DD6 # <CJK>
-0x6DD8 # <CJK>
-0x6DD9 # <CJK>
-0x6DDD # <CJK>
-0x6DDE # <CJK>
-0x6DE0 # <CJK>
-0x6DE1 # <CJK>
-0x6DE4 # <CJK>
-0x6DE6 # <CJK>
-0x6DEB # <CJK>
-0x6DEC # <CJK>
-0x6DEE # <CJK>
-0x6DF1 # <CJK>
-0x6DF3 # <CJK>
-0x6DF7 # <CJK>
-0x6DF9 # <CJK>
-0x6DFB # <CJK>
-0x6DFC # <CJK>
-0x6E05 # <CJK>
-0x6E0A # <CJK>
-0x6E0C # <CJK>
-0x6E0D # <CJK>
-0x6E0E # <CJK>
-0x6E10 # <CJK>
-0x6E11 # <CJK>
-0x6E14 # <CJK>
-0x6E16 # <CJK>
-0x6E17 # <CJK>
-0x6E1A # <CJK>
-0x6E1D # <CJK>
-0x6E20 # <CJK>
-0x6E21 # <CJK>
-0x6E23 # <CJK>
-0x6E24 # <CJK>
-0x6E25 # <CJK>
-0x6E29 # <CJK>
-0x6E2B # <CJK>
-0x6E2D # <CJK>
-0x6E2F # <CJK>
-0x6E32 # <CJK>
-0x6E34 # <CJK>
-0x6E38 # <CJK>
-0x6E3A # <CJK>
-0x6E43 # <CJK>
-0x6E44 # <CJK>
-0x6E4D # <CJK>
-0x6E4E # <CJK>
-0x6E53 # <CJK>
-0x6E54 # <CJK>
-0x6E56 # <CJK>
-0x6E58 # <CJK>
-0x6E5B # <CJK>
-0x6E5F # <CJK>
-0x6E6B # <CJK>
-0x6E6E # <CJK>
-0x6E7E # <CJK>
-0x6E7F # <CJK>
-0x6E83 # <CJK>
-0x6E85 # <CJK>
-0x6E86 # <CJK>
-0x6E89 # <CJK>
-0x6E8F # <CJK>
-0x6E90 # <CJK>
-0x6E98 # <CJK>
-0x6E9C # <CJK>
-0x6E9F # <CJK>
-0x6EA2 # <CJK>
-0x6EA5 # <CJK>
-0x6EA7 # <CJK>
-0x6EAA # <CJK>
-0x6EAF # <CJK>
-0x6EB1 # <CJK>
-0x6EB2 # <CJK>
-0x6EB4 # <CJK>
-0x6EB6 # <CJK>
-0x6EB7 # <CJK>
-0x6EBA # <CJK>
-0x6EBB # <CJK>
-0x6EBD # <CJK>
-0x6EC1 # <CJK>
-0x6EC2 # <CJK>
-0x6EC7 # <CJK>
-0x6ECB # <CJK>
-0x6ECF # <CJK>
-0x6ED1 # <CJK>
-0x6ED3 # <CJK>
-0x6ED4 # <CJK>
-0x6ED5 # <CJK>
-0x6ED7 # <CJK>
-0x6EDA # <CJK>
-0x6EDE # <CJK>
-0x6EDF # <CJK>
-0x6EE0 # <CJK>
-0x6EE1 # <CJK>
-0x6EE2 # <CJK>
-0x6EE4 # <CJK>
-0x6EE5 # <CJK>
-0x6EE6 # <CJK>
-0x6EE8 # <CJK>
-0x6EE9 # <CJK>
-0x6EF4 # <CJK>
-0x6EF9 # <CJK>
-0x6F02 # <CJK>
-0x6F06 # <CJK>
-0x6F09 # <CJK>
-0x6F0F # <CJK>
-0x6F13 # <CJK>
-0x6F14 # <CJK>
-0x6F15 # <CJK>
-0x6F20 # <CJK>
-0x6F24 # <CJK>
-0x6F29 # <CJK>
-0x6F2A # <CJK>
-0x6F2B # <CJK>
-0x6F2D # <CJK>
-0x6F2F # <CJK>
-0x6F31 # <CJK>
-0x6F33 # <CJK>
-0x6F36 # <CJK>
-0x6F3E # <CJK>
-0x6F46 # <CJK>
-0x6F47 # <CJK>
-0x6F4B # <CJK>
-0x6F4D # <CJK>
-0x6F58 # <CJK>
-0x6F5C # <CJK>
-0x6F5E # <CJK>
-0x6F62 # <CJK>
-0x6F66 # <CJK>
-0x6F6D # <CJK>
-0x6F6E # <CJK>
-0x6F72 # <CJK>
-0x6F74 # <CJK>
-0x6F78 # <CJK>
-0x6F7A # <CJK>
-0x6F7C # <CJK>
-0x6F84 # <CJK>
-0x6F88 # <CJK>
-0x6F89 # <CJK>
-0x6F8C # <CJK>
-0x6F8D # <CJK>
-0x6F8E # <CJK>
-0x6F9C # <CJK>
-0x6FA1 # <CJK>
-0x6FA7 # <CJK>
-0x6FB3 # <CJK>
-0x6FB6 # <CJK>
-0x6FB9 # <CJK>
-0x6FC0 # <CJK>
-0x6FC2 # <CJK>
-0x6FC9 # <CJK>
-0x6FD1 # <CJK>
-0x6FD2 # <CJK>
-0x6FDE # <CJK>
-0x6FE0 # <CJK>
-0x6FE1 # <CJK>
-0x6FEE # <CJK>
-0x6FEF # <CJK>
-0x7011 # <CJK>
-0x701A # <CJK>
-0x701B # <CJK>
-0x7023 # <CJK>
-0x7035 # <CJK>
-0x7039 # <CJK>
-0x704C # <CJK>
-0x704F # <CJK>
-0x705E # <CJK>
-0x706B # <CJK>
-0x706C # <CJK>
-0x706D # <CJK>
-0x706F # <CJK>
-0x7070 # <CJK>
-0x7075 # <CJK>
-0x7076 # <CJK>
-0x7078 # <CJK>
-0x707C # <CJK>
-0x707E # <CJK>
-0x707F # <CJK>
-0x7080 # <CJK>
-0x7085 # <CJK>
-0x7089 # <CJK>
-0x708A # <CJK>
-0x708E # <CJK>
-0x7092 # <CJK>
-0x7094 # <CJK>
-0x7095 # <CJK>
-0x7096 # <CJK>
-0x7099 # <CJK>
-0x709C # <CJK>
-0x709D # <CJK>
-0x70AB # <CJK>
-0x70AC # <CJK>
-0x70AD # <CJK>
-0x70AE # <CJK>
-0x70AF # <CJK>
-0x70B1 # <CJK>
-0x70B3 # <CJK>
-0x70B7 # <CJK>
-0x70B8 # <CJK>
-0x70B9 # <CJK>
-0x70BB # <CJK>
-0x70BC # <CJK>
-0x70BD # <CJK>
-0x70C0 # <CJK>
-0x70C1 # <CJK>
-0x70C2 # <CJK>
-0x70C3 # <CJK>
-0x70C8 # <CJK>
-0x70CA # <CJK>
-0x70D8 # <CJK>
-0x70D9 # <CJK>
-0x70DB # <CJK>
-0x70DF # <CJK>
-0x70E4 # <CJK>
-0x70E6 # <CJK>
-0x70E7 # <CJK>
-0x70E8 # <CJK>
-0x70E9 # <CJK>
-0x70EB # <CJK>
-0x70EC # <CJK>
-0x70ED # <CJK>
-0x70EF # <CJK>
-0x70F7 # <CJK>
-0x70F9 # <CJK>
-0x70FD # <CJK>
-0x7109 # <CJK>
-0x710A # <CJK>
-0x7110 # <CJK>
-0x7113 # <CJK>
-0x7115 # <CJK>
-0x7116 # <CJK>
-0x7118 # <CJK>
-0x7119 # <CJK>
-0x711A # <CJK>
-0x7126 # <CJK>
-0x712F # <CJK>
-0x7130 # <CJK>
-0x7131 # <CJK>
-0x7136 # <CJK>
-0x7145 # <CJK>
-0x714A # <CJK>
-0x714C # <CJK>
-0x714E # <CJK>
-0x715C # <CJK>
-0x715E # <CJK>
-0x7164 # <CJK>
-0x7166 # <CJK>
-0x7167 # <CJK>
-0x7168 # <CJK>
-0x716E # <CJK>
-0x7172 # <CJK>
-0x7173 # <CJK>
-0x7178 # <CJK>
-0x717A # <CJK>
-0x717D # <CJK>
-0x7184 # <CJK>
-0x718A # <CJK>
-0x718F # <CJK>
-0x7194 # <CJK>
-0x7198 # <CJK>
-0x7199 # <CJK>
-0x719F # <CJK>
-0x71A0 # <CJK>
-0x71A8 # <CJK>
-0x71AC # <CJK>
-0x71B3 # <CJK>
-0x71B5 # <CJK>
-0x71B9 # <CJK>
-0x71C3 # <CJK>
-0x71CE # <CJK>
-0x71D4 # <CJK>
-0x71D5 # <CJK>
-0x71E0 # <CJK>
-0x71E5 # <CJK>
-0x71E7 # <CJK>
-0x71EE # <CJK>
-0x71F9 # <CJK>
-0x7206 # <CJK>
-0x721D # <CJK>
-0x7228 # <CJK>
-0x722A # <CJK>
-0x722C # <CJK>
-0x7230 # <CJK>
-0x7231 # <CJK>
-0x7235 # <CJK>
-0x7236 # <CJK>
-0x7237 # <CJK>
-0x7238 # <CJK>
-0x7239 # <CJK>
-0x723B # <CJK>
-0x723D # <CJK>
-0x723F # <CJK>
-0x7247 # <CJK>
-0x7248 # <CJK>
-0x724C # <CJK>
-0x724D # <CJK>
-0x7252 # <CJK>
-0x7256 # <CJK>
-0x7259 # <CJK>
-0x725B # <CJK>
-0x725D # <CJK>
-0x725F # <CJK>
-0x7261 # <CJK>
-0x7262 # <CJK>
-0x7266 # <CJK>
-0x7267 # <CJK>
-0x7269 # <CJK>
-0x726E # <CJK>
-0x726F # <CJK>
-0x7272 # <CJK>
-0x7275 # <CJK>
-0x7279 # <CJK>
-0x727A # <CJK>
-0x727E # <CJK>
-0x727F # <CJK>
-0x7280 # <CJK>
-0x7281 # <CJK>
-0x7284 # <CJK>
-0x728A # <CJK>
-0x728B # <CJK>
-0x728D # <CJK>
-0x728F # <CJK>
-0x7292 # <CJK>
-0x729F # <CJK>
-0x72AC # <CJK>
-0x72AD # <CJK>
-0x72AF # <CJK>
-0x72B0 # <CJK>
-0x72B4 # <CJK>
-0x72B6 # <CJK>
-0x72B7 # <CJK>
-0x72B8 # <CJK>
-0x72B9 # <CJK>
-0x72C1 # <CJK>
-0x72C2 # <CJK>
-0x72C3 # <CJK>
-0x72C4 # <CJK>
-0x72C8 # <CJK>
-0x72CD # <CJK>
-0x72CE # <CJK>
-0x72D0 # <CJK>
-0x72D2 # <CJK>
-0x72D7 # <CJK>
-0x72D9 # <CJK>
-0x72DE # <CJK>
-0x72E0 # <CJK>
-0x72E1 # <CJK>
-0x72E8 # <CJK>
-0x72E9 # <CJK>
-0x72EC # <CJK>
-0x72ED # <CJK>
-0x72EE # <CJK>
-0x72EF # <CJK>
-0x72F0 # <CJK>
-0x72F1 # <CJK>
-0x72F2 # <CJK>
-0x72F3 # <CJK>
-0x72F4 # <CJK>
-0x72F7 # <CJK>
-0x72F8 # <CJK>
-0x72FA # <CJK>
-0x72FB # <CJK>
-0x72FC # <CJK>
-0x7301 # <CJK>
-0x7303 # <CJK>
-0x730A # <CJK>
-0x730E # <CJK>
-0x7313 # <CJK>
-0x7315 # <CJK>
-0x7316 # <CJK>
-0x7317 # <CJK>
-0x731B # <CJK>
-0x731C # <CJK>
-0x731D # <CJK>
-0x731E # <CJK>
-0x7321 # <CJK>
-0x7322 # <CJK>
-0x7325 # <CJK>
-0x7329 # <CJK>
-0x732A # <CJK>
-0x732B # <CJK>
-0x732C # <CJK>
-0x732E # <CJK>
-0x7331 # <CJK>
-0x7334 # <CJK>
-0x7337 # <CJK>
-0x7338 # <CJK>
-0x7339 # <CJK>
-0x733E # <CJK>
-0x733F # <CJK>
-0x734D # <CJK>
-0x7350 # <CJK>
-0x7352 # <CJK>
-0x7357 # <CJK>
-0x7360 # <CJK>
-0x736C # <CJK>
-0x736D # <CJK>
-0x736F # <CJK>
-0x737E # <CJK>
-0x7384 # <CJK>
-0x7387 # <CJK>
-0x7389 # <CJK>
-0x738B # <CJK>
-0x738E # <CJK>
-0x7391 # <CJK>
-0x7396 # <CJK>
-0x739B # <CJK>
-0x739F # <CJK>
-0x73A2 # <CJK>
-0x73A9 # <CJK>
-0x73AB # <CJK>
-0x73AE # <CJK>
-0x73AF # <CJK>
-0x73B0 # <CJK>
-0x73B2 # <CJK>
-0x73B3 # <CJK>
-0x73B7 # <CJK>
-0x73BA # <CJK>
-0x73BB # <CJK>
-0x73C0 # <CJK>
-0x73C2 # <CJK>
-0x73C8 # <CJK>
-0x73C9 # <CJK>
-0x73CA # <CJK>
-0x73CD # <CJK>
-0x73CF # <CJK>
-0x73D0 # <CJK>
-0x73D1 # <CJK>
-0x73D9 # <CJK>
-0x73DE # <CJK>
-0x73E0 # <CJK>
-0x73E5 # <CJK>
-0x73E7 # <CJK>
-0x73E9 # <CJK>
-0x73ED # <CJK>
-0x73F2 # <CJK>
-0x7403 # <CJK>
-0x7405 # <CJK>
-0x7406 # <CJK>
-0x7409 # <CJK>
-0x740A # <CJK>
-0x740F # <CJK>
-0x7410 # <CJK>
-0x741A # <CJK>
-0x741B # <CJK>
-0x7422 # <CJK>
-0x7425 # <CJK>
-0x7426 # <CJK>
-0x7428 # <CJK>
-0x742A # <CJK>
-0x742C # <CJK>
-0x742E # <CJK>
-0x7430 # <CJK>
-0x7433 # <CJK>
-0x7434 # <CJK>
-0x7435 # <CJK>
-0x7436 # <CJK>
-0x743C # <CJK>
-0x7441 # <CJK>
-0x7455 # <CJK>
-0x7457 # <CJK>
-0x7459 # <CJK>
-0x745A # <CJK>
-0x745B # <CJK>
-0x745C # <CJK>
-0x745E # <CJK>
-0x745F # <CJK>
-0x746D # <CJK>
-0x7470 # <CJK>
-0x7476 # <CJK>
-0x7477 # <CJK>
-0x747E # <CJK>
-0x7480 # <CJK>
-0x7481 # <CJK>
-0x7483 # <CJK>
-0x7487 # <CJK>
-0x748B # <CJK>
-0x748E # <CJK>
-0x7490 # <CJK>
-0x749C # <CJK>
-0x749E # <CJK>
-0x74A7 # <CJK>
-0x74A8 # <CJK>
-0x74A9 # <CJK>
-0x74BA # <CJK>
-0x74D2 # <CJK>
-0x74DC # <CJK>
-0x74DE # <CJK>
-0x74E0 # <CJK>
-0x74E2 # <CJK>
-0x74E3 # <CJK>
-0x74E4 # <CJK>
-0x74E6 # <CJK>
-0x74EE # <CJK>
-0x74EF # <CJK>
-0x74F4 # <CJK>
-0x74F6 # <CJK>
-0x74F7 # <CJK>
-0x74FF # <CJK>
-0x7504 # <CJK>
-0x750D # <CJK>
-0x750F # <CJK>
-0x7511 # <CJK>
-0x7513 # <CJK>
-0x7518 # <CJK>
-0x7519 # <CJK>
-0x751A # <CJK>
-0x751C # <CJK>
-0x751F # <CJK>
-0x7525 # <CJK>
-0x7528 # <CJK>
-0x7529 # <CJK>
-0x752B # <CJK>
-0x752C # <CJK>
-0x752D # <CJK>
-0x752F # <CJK>
-0x7530 # <CJK>
-0x7531 # <CJK>
-0x7532 # <CJK>
-0x7533 # <CJK>
-0x7535 # <CJK>
-0x7537 # <CJK>
-0x7538 # <CJK>
-0x753A # <CJK>
-0x753B # <CJK>
-0x753E # <CJK>
-0x7540 # <CJK>
-0x7545 # <CJK>
-0x7548 # <CJK>
-0x754B # <CJK>
-0x754C # <CJK>
-0x754E # <CJK>
-0x754F # <CJK>
-0x7554 # <CJK>
-0x7559 # <CJK>
-0x755A # <CJK>
-0x755B # <CJK>
-0x755C # <CJK>
-0x7565 # <CJK>
-0x7566 # <CJK>
-0x756A # <CJK>
-0x7572 # <CJK>
-0x7574 # <CJK>
-0x7578 # <CJK>
-0x7579 # <CJK>
-0x757F # <CJK>
-0x7583 # <CJK>
-0x7586 # <CJK>
-0x758B # <CJK>
-0x758F # <CJK>
-0x7591 # <CJK>
-0x7592 # <CJK>
-0x7594 # <CJK>
-0x7596 # <CJK>
-0x7597 # <CJK>
-0x7599 # <CJK>
-0x759A # <CJK>
-0x759D # <CJK>
-0x759F # <CJK>
-0x75A0 # <CJK>
-0x75A1 # <CJK>
-0x75A3 # <CJK>
-0x75A4 # <CJK>
-0x75A5 # <CJK>
-0x75AB # <CJK>
-0x75AC # <CJK>
-0x75AE # <CJK>
-0x75AF # <CJK>
-0x75B0 # <CJK>
-0x75B1 # <CJK>
-0x75B2 # <CJK>
-0x75B3 # <CJK>
-0x75B4 # <CJK>
-0x75B5 # <CJK>
-0x75B8 # <CJK>
-0x75B9 # <CJK>
-0x75BC # <CJK>
-0x75BD # <CJK>
-0x75BE # <CJK>
-0x75C2 # <CJK>
-0x75C3 # <CJK>
-0x75C4 # <CJK>
-0x75C5 # <CJK>
-0x75C7 # <CJK>
-0x75C8 # <CJK>
-0x75C9 # <CJK>
-0x75CA # <CJK>
-0x75CD # <CJK>
-0x75D2 # <CJK>
-0x75D4 # <CJK>
-0x75D5 # <CJK>
-0x75D6 # <CJK>
-0x75D8 # <CJK>
-0x75DB # <CJK>
-0x75DE # <CJK>
-0x75E2 # <CJK>
-0x75E3 # <CJK>
-0x75E4 # <CJK>
-0x75E6 # <CJK>
-0x75E7 # <CJK>
-0x75E8 # <CJK>
-0x75EA # <CJK>
-0x75EB # <CJK>
-0x75F0 # <CJK>
-0x75F1 # <CJK>
-0x75F4 # <CJK>
-0x75F9 # <CJK>
-0x75FC # <CJK>
-0x75FF # <CJK>
-0x7600 # <CJK>
-0x7601 # <CJK>
-0x7603 # <CJK>
-0x7605 # <CJK>
-0x760A # <CJK>
-0x760C # <CJK>
-0x7610 # <CJK>
-0x7615 # <CJK>
-0x7617 # <CJK>
-0x7618 # <CJK>
-0x7619 # <CJK>
-0x761B # <CJK>
-0x761F # <CJK>
-0x7620 # <CJK>
-0x7622 # <CJK>
-0x7624 # <CJK>
-0x7625 # <CJK>
-0x7626 # <CJK>
-0x7629 # <CJK>
-0x762A # <CJK>
-0x762B # <CJK>
-0x762D # <CJK>
-0x7630 # <CJK>
-0x7633 # <CJK>
-0x7634 # <CJK>
-0x7635 # <CJK>
-0x7638 # <CJK>
-0x763C # <CJK>
-0x763E # <CJK>
-0x763F # <CJK>
-0x7640 # <CJK>
-0x7643 # <CJK>
-0x764C # <CJK>
-0x764D # <CJK>
-0x7654 # <CJK>
-0x7656 # <CJK>
-0x765C # <CJK>
-0x765E # <CJK>
-0x7663 # <CJK>
-0x766B # <CJK>
-0x766F # <CJK>
-0x7678 # <CJK>
-0x767B # <CJK>
-0x767D # <CJK>
-0x767E # <CJK>
-0x7682 # <CJK>
-0x7684 # <CJK>
-0x7686 # <CJK>
-0x7687 # <CJK>
-0x7688 # <CJK>
-0x768B # <CJK>
-0x768E # <CJK>
-0x7691 # <CJK>
-0x7693 # <CJK>
-0x7696 # <CJK>
-0x7699 # <CJK>
-0x76A4 # <CJK>
-0x76AE # <CJK>
-0x76B1 # <CJK>
-0x76B2 # <CJK>
-0x76B4 # <CJK>
-0x76BF # <CJK>
-0x76C2 # <CJK>
-0x76C5 # <CJK>
-0x76C6 # <CJK>
-0x76C8 # <CJK>
-0x76CA # <CJK>
-0x76CD # <CJK>
-0x76CE # <CJK>
-0x76CF # <CJK>
-0x76D0 # <CJK>
-0x76D1 # <CJK>
-0x76D2 # <CJK>
-0x76D4 # <CJK>
-0x76D6 # <CJK>
-0x76D7 # <CJK>
-0x76D8 # <CJK>
-0x76DB # <CJK>
-0x76DF # <CJK>
-0x76E5 # <CJK>
-0x76EE # <CJK>
-0x76EF # <CJK>
-0x76F1 # <CJK>
-0x76F2 # <CJK>
-0x76F4 # <CJK>
-0x76F8 # <CJK>
-0x76F9 # <CJK>
-0x76FC # <CJK>
-0x76FE # <CJK>
-0x7701 # <CJK>
-0x7704 # <CJK>
-0x7707 # <CJK>
-0x7708 # <CJK>
-0x7709 # <CJK>
-0x770B # <CJK>
-0x770D # <CJK>
-0x7719 # <CJK>
-0x771A # <CJK>
-0x771F # <CJK>
-0x7720 # <CJK>
-0x7722 # <CJK>
-0x7726 # <CJK>
-0x7728 # <CJK>
-0x7729 # <CJK>
-0x772D # <CJK>
-0x772F # <CJK>
-0x7735 # <CJK>
-0x7736 # <CJK>
-0x7737 # <CJK>
-0x7738 # <CJK>
-0x773A # <CJK>
-0x773C # <CJK>
-0x7740 # <CJK>
-0x7741 # <CJK>
-0x7743 # <CJK>
-0x7747 # <CJK>
-0x7750 # <CJK>
-0x7751 # <CJK>
-0x775A # <CJK>
-0x775B # <CJK>
-0x7761 # <CJK>
-0x7762 # <CJK>
-0x7763 # <CJK>
-0x7765 # <CJK>
-0x7766 # <CJK>
-0x7768 # <CJK>
-0x776B # <CJK>
-0x776C # <CJK>
-0x7779 # <CJK>
-0x777D # <CJK>
-0x777E # <CJK>
-0x777F # <CJK>
-0x7780 # <CJK>
-0x7784 # <CJK>
-0x7785 # <CJK>
-0x778C # <CJK>
-0x778D # <CJK>
-0x778E # <CJK>
-0x7791 # <CJK>
-0x7792 # <CJK>
-0x779F # <CJK>
-0x77A0 # <CJK>
-0x77A2 # <CJK>
-0x77A5 # <CJK>
-0x77A7 # <CJK>
-0x77A9 # <CJK>
-0x77AA # <CJK>
-0x77AC # <CJK>
-0x77B0 # <CJK>
-0x77B3 # <CJK>
-0x77B5 # <CJK>
-0x77BB # <CJK>
-0x77BD # <CJK>
-0x77BF # <CJK>
-0x77CD # <CJK>
-0x77D7 # <CJK>
-0x77DB # <CJK>
-0x77DC # <CJK>
-0x77E2 # <CJK>
-0x77E3 # <CJK>
-0x77E5 # <CJK>
-0x77E7 # <CJK>
-0x77E9 # <CJK>
-0x77EB # <CJK>
-0x77EC # <CJK>
-0x77ED # <CJK>
-0x77EE # <CJK>
-0x77F3 # <CJK>
-0x77F6 # <CJK>
-0x77F8 # <CJK>
-0x77FD # <CJK>
-0x77FE # <CJK>
-0x77FF # <CJK>
-0x7800 # <CJK>
-0x7801 # <CJK>
-0x7802 # <CJK>
-0x7809 # <CJK>
-0x780C # <CJK>
-0x780D # <CJK>
-0x7811 # <CJK>
-0x7812 # <CJK>
-0x7814 # <CJK>
-0x7816 # <CJK>
-0x7817 # <CJK>
-0x7818 # <CJK>
-0x781A # <CJK>
-0x781C # <CJK>
-0x781D # <CJK>
-0x781F # <CJK>
-0x7823 # <CJK>
-0x7825 # <CJK>
-0x7826 # <CJK>
-0x7827 # <CJK>
-0x7829 # <CJK>
-0x782C # <CJK>
-0x782D # <CJK>
-0x7830 # <CJK>
-0x7834 # <CJK>
-0x7837 # <CJK>
-0x7838 # <CJK>
-0x7839 # <CJK>
-0x783A # <CJK>
-0x783B # <CJK>
-0x783C # <CJK>
-0x783E # <CJK>
-0x7840 # <CJK>
-0x7845 # <CJK>
-0x7847 # <CJK>
-0x784C # <CJK>
-0x784E # <CJK>
-0x7850 # <CJK>
-0x7852 # <CJK>
-0x7855 # <CJK>
-0x7856 # <CJK>
-0x7857 # <CJK>
-0x785D # <CJK>
-0x786A # <CJK>
-0x786B # <CJK>
-0x786C # <CJK>
-0x786D # <CJK>
-0x786E # <CJK>
-0x7877 # <CJK>
-0x787C # <CJK>
-0x7887 # <CJK>
-0x7889 # <CJK>
-0x788C # <CJK>
-0x788D # <CJK>
-0x788E # <CJK>
-0x7891 # <CJK>
-0x7893 # <CJK>
-0x7897 # <CJK>
-0x7898 # <CJK>
-0x789A # <CJK>
-0x789B # <CJK>
-0x789C # <CJK>
-0x789F # <CJK>
-0x78A1 # <CJK>
-0x78A3 # <CJK>
-0x78A5 # <CJK>
-0x78A7 # <CJK>
-0x78B0 # <CJK>
-0x78B1 # <CJK>
-0x78B2 # <CJK>
-0x78B3 # <CJK>
-0x78B4 # <CJK>
-0x78B9 # <CJK>
-0x78BE # <CJK>
-0x78C1 # <CJK>
-0x78C5 # <CJK>
-0x78C9 # <CJK>
-0x78CA # <CJK>
-0x78CB # <CJK>
-0x78D0 # <CJK>
-0x78D4 # <CJK>
-0x78D5 # <CJK>
-0x78D9 # <CJK>
-0x78E8 # <CJK>
-0x78EC # <CJK>
-0x78F2 # <CJK>
-0x78F4 # <CJK>
-0x78F7 # <CJK>
-0x78FA # <CJK>
-0x7901 # <CJK>
-0x7905 # <CJK>
-0x7913 # <CJK>
-0x791E # <CJK>
-0x7924 # <CJK>
-0x7934 # <CJK>
-0x793A # <CJK>
-0x793B # <CJK>
-0x793C # <CJK>
-0x793E # <CJK>
-0x7940 # <CJK>
-0x7941 # <CJK>
-0x7946 # <CJK>
-0x7948 # <CJK>
-0x7949 # <CJK>
-0x7953 # <CJK>
-0x7956 # <CJK>
-0x7957 # <CJK>
-0x795A # <CJK>
-0x795B # <CJK>
-0x795C # <CJK>
-0x795D # <CJK>
-0x795E # <CJK>
-0x795F # <CJK>
-0x7960 # <CJK>
-0x7962 # <CJK>
-0x7965 # <CJK>
-0x7967 # <CJK>
-0x7968 # <CJK>
-0x796D # <CJK>
-0x796F # <CJK>
-0x7977 # <CJK>
-0x7978 # <CJK>
-0x797A # <CJK>
-0x7980 # <CJK>
-0x7981 # <CJK>
-0x7984 # <CJK>
-0x7985 # <CJK>
-0x798A # <CJK>
-0x798F # <CJK>
-0x799A # <CJK>
-0x79A7 # <CJK>
-0x79B3 # <CJK>
-0x79B9 # <CJK>
-0x79BA # <CJK>
-0x79BB # <CJK>
-0x79BD # <CJK>
-0x79BE # <CJK>
-0x79C0 # <CJK>
-0x79C1 # <CJK>
-0x79C3 # <CJK>
-0x79C6 # <CJK>
-0x79C9 # <CJK>
-0x79CB # <CJK>
-0x79CD # <CJK>
-0x79D1 # <CJK>
-0x79D2 # <CJK>
-0x79D5 # <CJK>
-0x79D8 # <CJK>
-0x79DF # <CJK>
-0x79E3 # <CJK>
-0x79E4 # <CJK>
-0x79E6 # <CJK>
-0x79E7 # <CJK>
-0x79E9 # <CJK>
-0x79EB # <CJK>
-0x79ED # <CJK>
-0x79EF # <CJK>
-0x79F0 # <CJK>
-0x79F8 # <CJK>
-0x79FB # <CJK>
-0x79FD # <CJK>
-0x7A00 # <CJK>
-0x7A02 # <CJK>
-0x7A03 # <CJK>
-0x7A06 # <CJK>
-0x7A0B # <CJK>
-0x7A0D # <CJK>
-0x7A0E # <CJK>
-0x7A14 # <CJK>
-0x7A17 # <CJK>
-0x7A1A # <CJK>
-0x7A1E # <CJK>
-0x7A20 # <CJK>
-0x7A23 # <CJK>
-0x7A33 # <CJK>
-0x7A37 # <CJK>
-0x7A39 # <CJK>
-0x7A3B # <CJK>
-0x7A3C # <CJK>
-0x7A3D # <CJK>
-0x7A3F # <CJK>
-0x7A46 # <CJK>
-0x7A51 # <CJK>
-0x7A57 # <CJK>
-0x7A70 # <CJK>
-0x7A74 # <CJK>
-0x7A76 # <CJK>
-0x7A77 # <CJK>
-0x7A78 # <CJK>
-0x7A79 # <CJK>
-0x7A7A # <CJK>
-0x7A7F # <CJK>
-0x7A80 # <CJK>
-0x7A81 # <CJK>
-0x7A83 # <CJK>
-0x7A84 # <CJK>
-0x7A86 # <CJK>
-0x7A88 # <CJK>
-0x7A8D # <CJK>
-0x7A91 # <CJK>
-0x7A92 # <CJK>
-0x7A95 # <CJK>
-0x7A96 # <CJK>
-0x7A97 # <CJK>
-0x7A98 # <CJK>
-0x7A9C # <CJK>
-0x7A9D # <CJK>
-0x7A9F # <CJK>
-0x7AA0 # <CJK>
-0x7AA5 # <CJK>
-0x7AA6 # <CJK>
-0x7AA8 # <CJK>
-0x7AAC # <CJK>
-0x7AAD # <CJK>
-0x7AB3 # <CJK>
-0x7ABF # <CJK>
-0x7ACB # <CJK>
-0x7AD6 # <CJK>
-0x7AD9 # <CJK>
-0x7ADE # <CJK>
-0x7ADF # <CJK>
-0x7AE0 # <CJK>
-0x7AE3 # <CJK>
-0x7AE5 # <CJK>
-0x7AE6 # <CJK>
-0x7AED # <CJK>
-0x7AEF # <CJK>
-0x7AF9 # <CJK>
-0x7AFA # <CJK>
-0x7AFD # <CJK>
-0x7AFF # <CJK>
-0x7B03 # <CJK>
-0x7B04 # <CJK>
-0x7B06 # <CJK>
-0x7B08 # <CJK>
-0x7B0A # <CJK>
-0x7B0B # <CJK>
-0x7B0F # <CJK>
-0x7B11 # <CJK>
-0x7B14 # <CJK>
-0x7B15 # <CJK>
-0x7B19 # <CJK>
-0x7B1B # <CJK>
-0x7B1E # <CJK>
-0x7B20 # <CJK>
-0x7B24 # <CJK>
-0x7B25 # <CJK>
-0x7B26 # <CJK>
-0x7B28 # <CJK>
-0x7B2A # <CJK>
-0x7B2B # <CJK>
-0x7B2C # <CJK>
-0x7B2E # <CJK>
-0x7B31 # <CJK>
-0x7B33 # <CJK>
-0x7B38 # <CJK>
-0x7B3A # <CJK>
-0x7B3C # <CJK>
-0x7B3E # <CJK>
-0x7B45 # <CJK>
-0x7B47 # <CJK>
-0x7B49 # <CJK>
-0x7B4B # <CJK>
-0x7B4C # <CJK>
-0x7B4F # <CJK>
-0x7B50 # <CJK>
-0x7B51 # <CJK>
-0x7B52 # <CJK>
-0x7B54 # <CJK>
-0x7B56 # <CJK>
-0x7B58 # <CJK>
-0x7B5A # <CJK>
-0x7B5B # <CJK>
-0x7B5D # <CJK>
-0x7B60 # <CJK>
-0x7B62 # <CJK>
-0x7B6E # <CJK>
-0x7B71 # <CJK>
-0x7B72 # <CJK>
-0x7B75 # <CJK>
-0x7B77 # <CJK>
-0x7B79 # <CJK>
-0x7B7B # <CJK>
-0x7B7E # <CJK>
-0x7B80 # <CJK>
-0x7B85 # <CJK>
-0x7B8D # <CJK>
-0x7B90 # <CJK>
-0x7B94 # <CJK>
-0x7B95 # <CJK>
-0x7B97 # <CJK>
-0x7B9C # <CJK>
-0x7B9D # <CJK>
-0x7BA1 # <CJK>
-0x7BA2 # <CJK>
-0x7BA6 # <CJK>
-0x7BA7 # <CJK>
-0x7BA8 # <CJK>
-0x7BA9 # <CJK>
-0x7BAA # <CJK>
-0x7BAB # <CJK>
-0x7BAC # <CJK>
-0x7BAD # <CJK>
-0x7BB1 # <CJK>
-0x7BB4 # <CJK>
-0x7BB8 # <CJK>
-0x7BC1 # <CJK>
-0x7BC6 # <CJK>
-0x7BC7 # <CJK>
-0x7BCC # <CJK>
-0x7BD1 # <CJK>
-0x7BD3 # <CJK>
-0x7BD9 # <CJK>
-0x7BDA # <CJK>
-0x7BDD # <CJK>
-0x7BE1 # <CJK>
-0x7BE5 # <CJK>
-0x7BE6 # <CJK>
-0x7BEA # <CJK>
-0x7BEE # <CJK>
-0x7BF1 # <CJK>
-0x7BF7 # <CJK>
-0x7BFC # <CJK>
-0x7BFE # <CJK>
-0x7C07 # <CJK>
-0x7C0B # <CJK>
-0x7C0C # <CJK>
-0x7C0F # <CJK>
-0x7C16 # <CJK>
-0x7C1F # <CJK>
-0x7C26 # <CJK>
-0x7C27 # <CJK>
-0x7C2A # <CJK>
-0x7C38 # <CJK>
-0x7C3F # <CJK>
-0x7C40 # <CJK>
-0x7C41 # <CJK>
-0x7C4D # <CJK>
-0x7C73 # <CJK>
-0x7C74 # <CJK>
-0x7C7B # <CJK>
-0x7C7C # <CJK>
-0x7C7D # <CJK>
-0x7C89 # <CJK>
-0x7C91 # <CJK>
-0x7C92 # <CJK>
-0x7C95 # <CJK>
-0x7C97 # <CJK>
-0x7C98 # <CJK>
-0x7C9C # <CJK>
-0x7C9D # <CJK>
-0x7C9E # <CJK>
-0x7C9F # <CJK>
-0x7CA2 # <CJK>
-0x7CA4 # <CJK>
-0x7CA5 # <CJK>
-0x7CAA # <CJK>
-0x7CAE # <CJK>
-0x7CB1 # <CJK>
-0x7CB2 # <CJK>
-0x7CB3 # <CJK>
-0x7CB9 # <CJK>
-0x7CBC # <CJK>
-0x7CBD # <CJK>
-0x7CBE # <CJK>
-0x7CC1 # <CJK>
-0x7CC5 # <CJK>
-0x7CC7 # <CJK>
-0x7CC8 # <CJK>
-0x7CCA # <CJK>
-0x7CCC # <CJK>
-0x7CCD # <CJK>
-0x7CD5 # <CJK>
-0x7CD6 # <CJK>
-0x7CD7 # <CJK>
-0x7CD9 # <CJK>
-0x7CDC # <CJK>
-0x7CDF # <CJK>
-0x7CE0 # <CJK>
-0x7CE8 # <CJK>
-0x7CEF # <CJK>
-0x7CF8 # <CJK>
-0x7CFB # <CJK>
-0x7D0A # <CJK>
-0x7D20 # <CJK>
-0x7D22 # <CJK>
-0x7D27 # <CJK>
-0x7D2B # <CJK>
-0x7D2F # <CJK>
-0x7D6E # <CJK>
-0x7D77 # <CJK>
-0x7DA6 # <CJK>
-0x7DAE # <CJK>
-0x7E3B # <CJK>
-0x7E41 # <CJK>
-0x7E47 # <CJK>
-0x7E82 # <CJK>
-0x7E9B # <CJK>
-0x7E9F # <CJK>
-0x7EA0 # <CJK>
-0x7EA1 # <CJK>
-0x7EA2 # <CJK>
-0x7EA3 # <CJK>
-0x7EA4 # <CJK>
-0x7EA5 # <CJK>
-0x7EA6 # <CJK>
-0x7EA7 # <CJK>
-0x7EA8 # <CJK>
-0x7EA9 # <CJK>
-0x7EAA # <CJK>
-0x7EAB # <CJK>
-0x7EAC # <CJK>
-0x7EAD # <CJK>
-0x7EAF # <CJK>
-0x7EB0 # <CJK>
-0x7EB1 # <CJK>
-0x7EB2 # <CJK>
-0x7EB3 # <CJK>
-0x7EB5 # <CJK>
-0x7EB6 # <CJK>
-0x7EB7 # <CJK>
-0x7EB8 # <CJK>
-0x7EB9 # <CJK>
-0x7EBA # <CJK>
-0x7EBD # <CJK>
-0x7EBE # <CJK>
-0x7EBF # <CJK>
-0x7EC0 # <CJK>
-0x7EC1 # <CJK>
-0x7EC2 # <CJK>
-0x7EC3 # <CJK>
-0x7EC4 # <CJK>
-0x7EC5 # <CJK>
-0x7EC6 # <CJK>
-0x7EC7 # <CJK>
-0x7EC8 # <CJK>
-0x7EC9 # <CJK>
-0x7ECA # <CJK>
-0x7ECB # <CJK>
-0x7ECC # <CJK>
-0x7ECD # <CJK>
-0x7ECE # <CJK>
-0x7ECF # <CJK>
-0x7ED0 # <CJK>
-0x7ED1 # <CJK>
-0x7ED2 # <CJK>
-0x7ED3 # <CJK>
-0x7ED4 # <CJK>
-0x7ED5 # <CJK>
-0x7ED7 # <CJK>
-0x7ED8 # <CJK>
-0x7ED9 # <CJK>
-0x7EDA # <CJK>
-0x7EDB # <CJK>
-0x7EDC # <CJK>
-0x7EDD # <CJK>
-0x7EDE # <CJK>
-0x7EDF # <CJK>
-0x7EE0 # <CJK>
-0x7EE1 # <CJK>
-0x7EE2 # <CJK>
-0x7EE3 # <CJK>
-0x7EE5 # <CJK>
-0x7EE6 # <CJK>
-0x7EE7 # <CJK>
-0x7EE8 # <CJK>
-0x7EE9 # <CJK>
-0x7EEA # <CJK>
-0x7EEB # <CJK>
-0x7EED # <CJK>
-0x7EEE # <CJK>
-0x7EEF # <CJK>
-0x7EF0 # <CJK>
-0x7EF1 # <CJK>
-0x7EF2 # <CJK>
-0x7EF3 # <CJK>
-0x7EF4 # <CJK>
-0x7EF5 # <CJK>
-0x7EF6 # <CJK>
-0x7EF7 # <CJK>
-0x7EF8 # <CJK>
-0x7EFA # <CJK>
-0x7EFB # <CJK>
-0x7EFC # <CJK>
-0x7EFD # <CJK>
-0x7EFE # <CJK>
-0x7EFF # <CJK>
-0x7F00 # <CJK>
-0x7F01 # <CJK>
-0x7F02 # <CJK>
-0x7F03 # <CJK>
-0x7F04 # <CJK>
-0x7F05 # <CJK>
-0x7F06 # <CJK>
-0x7F07 # <CJK>
-0x7F08 # <CJK>
-0x7F09 # <CJK>
-0x7F0B # <CJK>
-0x7F0C # <CJK>
-0x7F0D # <CJK>
-0x7F0E # <CJK>
-0x7F0F # <CJK>
-0x7F11 # <CJK>
-0x7F12 # <CJK>
-0x7F13 # <CJK>
-0x7F14 # <CJK>
-0x7F15 # <CJK>
-0x7F16 # <CJK>
-0x7F17 # <CJK>
-0x7F18 # <CJK>
-0x7F19 # <CJK>
-0x7F1A # <CJK>
-0x7F1B # <CJK>
-0x7F1C # <CJK>
-0x7F1D # <CJK>
-0x7F1F # <CJK>
-0x7F20 # <CJK>
-0x7F21 # <CJK>
-0x7F22 # <CJK>
-0x7F23 # <CJK>
-0x7F24 # <CJK>
-0x7F25 # <CJK>
-0x7F26 # <CJK>
-0x7F27 # <CJK>
-0x7F28 # <CJK>
-0x7F29 # <CJK>
-0x7F2A # <CJK>
-0x7F2B # <CJK>
-0x7F2C # <CJK>
-0x7F2D # <CJK>
-0x7F2E # <CJK>
-0x7F2F # <CJK>
-0x7F30 # <CJK>
-0x7F31 # <CJK>
-0x7F32 # <CJK>
-0x7F33 # <CJK>
-0x7F34 # <CJK>
-0x7F35 # <CJK>
-0x7F36 # <CJK>
-0x7F38 # <CJK>
-0x7F3A # <CJK>
-0x7F42 # <CJK>
-0x7F44 # <CJK>
-0x7F45 # <CJK>
-0x7F50 # <CJK>
-0x7F51 # <CJK>
-0x7F54 # <CJK>
-0x7F55 # <CJK>
-0x7F57 # <CJK>
-0x7F58 # <CJK>
-0x7F5A # <CJK>
-0x7F5F # <CJK>
-0x7F61 # <CJK>
-0x7F62 # <CJK>
-0x7F68 # <CJK>
-0x7F69 # <CJK>
-0x7F6A # <CJK>
-0x7F6E # <CJK>
-0x7F71 # <CJK>
-0x7F72 # <CJK>
-0x7F74 # <CJK>
-0x7F79 # <CJK>
-0x7F7E # <CJK>
-0x7F81 # <CJK>
-0x7F8A # <CJK>
-0x7F8C # <CJK>
-0x7F8E # <CJK>
-0x7F94 # <CJK>
-0x7F9A # <CJK>
-0x7F9D # <CJK>
-0x7F9E # <CJK>
-0x7F9F # <CJK>
-0x7FA1 # <CJK>
-0x7FA4 # <CJK>
-0x7FA7 # <CJK>
-0x7FAF # <CJK>
-0x7FB0 # <CJK>
-0x7FB2 # <CJK>
-0x7FB8 # <CJK>
-0x7FB9 # <CJK>
-0x7FBC # <CJK>
-0x7FBD # <CJK>
-0x7FBF # <CJK>
-0x7FC1 # <CJK>
-0x7FC5 # <CJK>
-0x7FCA # <CJK>
-0x7FCC # <CJK>
-0x7FCE # <CJK>
-0x7FD4 # <CJK>
-0x7FD5 # <CJK>
-0x7FD8 # <CJK>
-0x7FDF # <CJK>
-0x7FE0 # <CJK>
-0x7FE1 # <CJK>
-0x7FE5 # <CJK>
-0x7FE6 # <CJK>
-0x7FE9 # <CJK>
-0x7FEE # <CJK>
-0x7FF0 # <CJK>
-0x7FF1 # <CJK>
-0x7FF3 # <CJK>
-0x7FFB # <CJK>
-0x7FFC # <CJK>
-0x8000 # <CJK>
-0x8001 # <CJK>
-0x8003 # <CJK>
-0x8004 # <CJK>
-0x8005 # <CJK>
-0x8006 # <CJK>
-0x800B # <CJK>
-0x800C # <CJK>
-0x800D # <CJK>
-0x8010 # <CJK>
-0x8012 # <CJK>
-0x8014 # <CJK>
-0x8015 # <CJK>
-0x8016 # <CJK>
-0x8017 # <CJK>
-0x8018 # <CJK>
-0x8019 # <CJK>
-0x801C # <CJK>
-0x8020 # <CJK>
-0x8022 # <CJK>
-0x8025 # <CJK>
-0x8026 # <CJK>
-0x8027 # <CJK>
-0x8028 # <CJK>
-0x8029 # <CJK>
-0x802A # <CJK>
-0x8031 # <CJK>
-0x8033 # <CJK>
-0x8035 # <CJK>
-0x8036 # <CJK>
-0x8037 # <CJK>
-0x8038 # <CJK>
-0x803B # <CJK>
-0x803D # <CJK>
-0x803F # <CJK>
-0x8042 # <CJK>
-0x8043 # <CJK>
-0x8046 # <CJK>
-0x804A # <CJK>
-0x804B # <CJK>
-0x804C # <CJK>
-0x804D # <CJK>
-0x8052 # <CJK>
-0x8054 # <CJK>
-0x8058 # <CJK>
-0x805A # <CJK>
-0x8069 # <CJK>
-0x806A # <CJK>
-0x8071 # <CJK>
-0x807F # <CJK>
-0x8080 # <CJK>
-0x8083 # <CJK>
-0x8084 # <CJK>
-0x8086 # <CJK>
-0x8087 # <CJK>
-0x8089 # <CJK>
-0x808B # <CJK>
-0x808C # <CJK>
-0x8093 # <CJK>
-0x8096 # <CJK>
-0x8098 # <CJK>
-0x809A # <CJK>
-0x809B # <CJK>
-0x809C # <CJK>
-0x809D # <CJK>
-0x809F # <CJK>
-0x80A0 # <CJK>
-0x80A1 # <CJK>
-0x80A2 # <CJK>
-0x80A4 # <CJK>
-0x80A5 # <CJK>
-0x80A9 # <CJK>
-0x80AA # <CJK>
-0x80AB # <CJK>
-0x80AD # <CJK>
-0x80AE # <CJK>
-0x80AF # <CJK>
-0x80B1 # <CJK>
-0x80B2 # <CJK>
-0x80B4 # <CJK>
-0x80B7 # <CJK>
-0x80BA # <CJK>
-0x80BC # <CJK>
-0x80BD # <CJK>
-0x80BE # <CJK>
-0x80BF # <CJK>
-0x80C0 # <CJK>
-0x80C1 # <CJK>
-0x80C2 # <CJK>
-0x80C3 # <CJK>
-0x80C4 # <CJK>
-0x80C6 # <CJK>
-0x80CC # <CJK>
-0x80CD # <CJK>
-0x80CE # <CJK>
-0x80D6 # <CJK>
-0x80D7 # <CJK>
-0x80D9 # <CJK>
-0x80DA # <CJK>
-0x80DB # <CJK>
-0x80DC # <CJK>
-0x80DD # <CJK>
-0x80DE # <CJK>
-0x80E1 # <CJK>
-0x80E4 # <CJK>
-0x80E5 # <CJK>
-0x80E7 # <CJK>
-0x80E8 # <CJK>
-0x80E9 # <CJK>
-0x80EA # <CJK>
-0x80EB # <CJK>
-0x80EC # <CJK>
-0x80ED # <CJK>
-0x80EF # <CJK>
-0x80F0 # <CJK>
-0x80F1 # <CJK>
-0x80F2 # <CJK>
-0x80F3 # <CJK>
-0x80F4 # <CJK>
-0x80F6 # <CJK>
-0x80F8 # <CJK>
-0x80FA # <CJK>
-0x80FC # <CJK>
-0x80FD # <CJK>
-0x8102 # <CJK>
-0x8106 # <CJK>
-0x8109 # <CJK>
-0x810A # <CJK>
-0x810D # <CJK>
-0x810E # <CJK>
-0x810F # <CJK>
-0x8110 # <CJK>
-0x8111 # <CJK>
-0x8112 # <CJK>
-0x8113 # <CJK>
-0x8114 # <CJK>
-0x8116 # <CJK>
-0x8118 # <CJK>
-0x811A # <CJK>
-0x811E # <CJK>
-0x812C # <CJK>
-0x812F # <CJK>
-0x8131 # <CJK>
-0x8132 # <CJK>
-0x8136 # <CJK>
-0x8138 # <CJK>
-0x813E # <CJK>
-0x8146 # <CJK>
-0x8148 # <CJK>
-0x814A # <CJK>
-0x814B # <CJK>
-0x814C # <CJK>
-0x8150 # <CJK>
-0x8151 # <CJK>
-0x8153 # <CJK>
-0x8154 # <CJK>
-0x8155 # <CJK>
-0x8159 # <CJK>
-0x815A # <CJK>
-0x8160 # <CJK>
-0x8165 # <CJK>
-0x8167 # <CJK>
-0x8169 # <CJK>
-0x816D # <CJK>
-0x816E # <CJK>
-0x8170 # <CJK>
-0x8171 # <CJK>
-0x8174 # <CJK>
-0x8179 # <CJK>
-0x817A # <CJK>
-0x817B # <CJK>
-0x817C # <CJK>
-0x817D # <CJK>
-0x817E # <CJK>
-0x817F # <CJK>
-0x8180 # <CJK>
-0x8182 # <CJK>
-0x8188 # <CJK>
-0x818A # <CJK>
-0x818F # <CJK>
-0x8191 # <CJK>
-0x8198 # <CJK>
-0x819B # <CJK>
-0x819C # <CJK>
-0x819D # <CJK>
-0x81A3 # <CJK>
-0x81A6 # <CJK>
-0x81A8 # <CJK>
-0x81AA # <CJK>
-0x81B3 # <CJK>
-0x81BA # <CJK>
-0x81BB # <CJK>
-0x81C0 # <CJK>
-0x81C1 # <CJK>
-0x81C2 # <CJK>
-0x81C3 # <CJK>
-0x81C6 # <CJK>
-0x81CA # <CJK>
-0x81CC # <CJK>
-0x81E3 # <CJK>
-0x81E7 # <CJK>
-0x81EA # <CJK>
-0x81EC # <CJK>
-0x81ED # <CJK>
-0x81F3 # <CJK>
-0x81F4 # <CJK>
-0x81FB # <CJK>
-0x81FC # <CJK>
-0x81FE # <CJK>
-0x8200 # <CJK>
-0x8201 # <CJK>
-0x8202 # <CJK>
-0x8204 # <CJK>
-0x8205 # <CJK>
-0x8206 # <CJK>
-0x820C # <CJK>
-0x820D # <CJK>
-0x8210 # <CJK>
-0x8212 # <CJK>
-0x8214 # <CJK>
-0x821B # <CJK>
-0x821C # <CJK>
-0x821E # <CJK>
-0x821F # <CJK>
-0x8221 # <CJK>
-0x8222 # <CJK>
-0x8223 # <CJK>
-0x8228 # <CJK>
-0x822A # <CJK>
-0x822B # <CJK>
-0x822C # <CJK>
-0x822D # <CJK>
-0x822F # <CJK>
-0x8230 # <CJK>
-0x8231 # <CJK>
-0x8233 # <CJK>
-0x8234 # <CJK>
-0x8235 # <CJK>
-0x8236 # <CJK>
-0x8237 # <CJK>
-0x8238 # <CJK>
-0x8239 # <CJK>
-0x823B # <CJK>
-0x823E # <CJK>
-0x8244 # <CJK>
-0x8247 # <CJK>
-0x8249 # <CJK>
-0x824B # <CJK>
-0x824F # <CJK>
-0x8258 # <CJK>
-0x825A # <CJK>
-0x825F # <CJK>
-0x8268 # <CJK>
-0x826E # <CJK>
-0x826F # <CJK>
-0x8270 # <CJK>
-0x8272 # <CJK>
-0x8273 # <CJK>
-0x8274 # <CJK>
-0x8279 # <CJK>
-0x827A # <CJK>
-0x827D # <CJK>
-0x827E # <CJK>
-0x827F # <CJK>
-0x8282 # <CJK>
-0x8284 # <CJK>
-0x8288 # <CJK>
-0x828A # <CJK>
-0x828B # <CJK>
-0x828D # <CJK>
-0x828E # <CJK>
-0x828F # <CJK>
-0x8291 # <CJK>
-0x8292 # <CJK>
-0x8297 # <CJK>
-0x8298 # <CJK>
-0x8299 # <CJK>
-0x829C # <CJK>
-0x829D # <CJK>
-0x829F # <CJK>
-0x82A1 # <CJK>
-0x82A4 # <CJK>
-0x82A5 # <CJK>
-0x82A6 # <CJK>
-0x82A8 # <CJK>
-0x82A9 # <CJK>
-0x82AA # <CJK>
-0x82AB # <CJK>
-0x82AC # <CJK>
-0x82AD # <CJK>
-0x82AE # <CJK>
-0x82AF # <CJK>
-0x82B0 # <CJK>
-0x82B1 # <CJK>
-0x82B3 # <CJK>
-0x82B4 # <CJK>
-0x82B7 # <CJK>
-0x82B8 # <CJK>
-0x82B9 # <CJK>
-0x82BD # <CJK>
-0x82BE # <CJK>
-0x82C1 # <CJK>
-0x82C4 # <CJK>
-0x82C7 # <CJK>
-0x82C8 # <CJK>
-0x82CA # <CJK>
-0x82CB # <CJK>
-0x82CC # <CJK>
-0x82CD # <CJK>
-0x82CE # <CJK>
-0x82CF # <CJK>
-0x82D1 # <CJK>
-0x82D2 # <CJK>
-0x82D3 # <CJK>
-0x82D4 # <CJK>
-0x82D5 # <CJK>
-0x82D7 # <CJK>
-0x82D8 # <CJK>
-0x82DB # <CJK>
-0x82DC # <CJK>
-0x82DE # <CJK>
-0x82DF # <CJK>
-0x82E0 # <CJK>
-0x82E1 # <CJK>
-0x82E3 # <CJK>
-0x82E4 # <CJK>
-0x82E5 # <CJK>
-0x82E6 # <CJK>
-0x82EB # <CJK>
-0x82EF # <CJK>
-0x82F1 # <CJK>
-0x82F4 # <CJK>
-0x82F7 # <CJK>
-0x82F9 # <CJK>
-0x82FB # <CJK>
-0x8301 # <CJK>
-0x8302 # <CJK>
-0x8303 # <CJK>
-0x8304 # <CJK>
-0x8305 # <CJK>
-0x8306 # <CJK>
-0x8307 # <CJK>
-0x8308 # <CJK>
-0x8309 # <CJK>
-0x830C # <CJK>
-0x830E # <CJK>
-0x830F # <CJK>
-0x8311 # <CJK>
-0x8314 # <CJK>
-0x8315 # <CJK>
-0x8317 # <CJK>
-0x831A # <CJK>
-0x831B # <CJK>
-0x831C # <CJK>
-0x8327 # <CJK>
-0x8328 # <CJK>
-0x832B # <CJK>
-0x832C # <CJK>
-0x832D # <CJK>
-0x832F # <CJK>
-0x8331 # <CJK>
-0x8333 # <CJK>
-0x8334 # <CJK>
-0x8335 # <CJK>
-0x8336 # <CJK>
-0x8338 # <CJK>
-0x8339 # <CJK>
-0x833A # <CJK>
-0x833C # <CJK>
-0x8340 # <CJK>
-0x8343 # <CJK>
-0x8346 # <CJK>
-0x8347 # <CJK>
-0x8349 # <CJK>
-0x834F # <CJK>
-0x8350 # <CJK>
-0x8351 # <CJK>
-0x8352 # <CJK>
-0x8354 # <CJK>
-0x835A # <CJK>
-0x835B # <CJK>
-0x835C # <CJK>
-0x835E # <CJK>
-0x835F # <CJK>
-0x8360 # <CJK>
-0x8361 # <CJK>
-0x8363 # <CJK>
-0x8364 # <CJK>
-0x8365 # <CJK>
-0x8366 # <CJK>
-0x8367 # <CJK>
-0x8368 # <CJK>
-0x8369 # <CJK>
-0x836A # <CJK>
-0x836B # <CJK>
-0x836C # <CJK>
-0x836D # <CJK>
-0x836E # <CJK>
-0x836F # <CJK>
-0x8377 # <CJK>
-0x8378 # <CJK>
-0x837B # <CJK>
-0x837C # <CJK>
-0x837D # <CJK>
-0x8385 # <CJK>
-0x8386 # <CJK>
-0x8389 # <CJK>
-0x838E # <CJK>
-0x8392 # <CJK>
-0x8393 # <CJK>
-0x8398 # <CJK>
-0x839B # <CJK>
-0x839C # <CJK>
-0x839E # <CJK>
-0x83A0 # <CJK>
-0x83A8 # <CJK>
-0x83A9 # <CJK>
-0x83AA # <CJK>
-0x83AB # <CJK>
-0x83B0 # <CJK>
-0x83B1 # <CJK>
-0x83B2 # <CJK>
-0x83B3 # <CJK>
-0x83B4 # <CJK>
-0x83B6 # <CJK>
-0x83B7 # <CJK>
-0x83B8 # <CJK>
-0x83B9 # <CJK>
-0x83BA # <CJK>
-0x83BC # <CJK>
-0x83BD # <CJK>
-0x83C0 # <CJK>
-0x83C1 # <CJK>
-0x83C5 # <CJK>
-0x83C7 # <CJK>
-0x83CA # <CJK>
-0x83CC # <CJK>
-0x83CF # <CJK>
-0x83D4 # <CJK>
-0x83D6 # <CJK>
-0x83D8 # <CJK>
-0x83DC # <CJK>
-0x83DD # <CJK>
-0x83DF # <CJK>
-0x83E0 # <CJK>
-0x83E1 # <CJK>
-0x83E5 # <CJK>
-0x83E9 # <CJK>
-0x83EA # <CJK>
-0x83F0 # <CJK>
-0x83F1 # <CJK>
-0x83F2 # <CJK>
-0x83F8 # <CJK>
-0x83F9 # <CJK>
-0x83FD # <CJK>
-0x8401 # <CJK>
-0x8403 # <CJK>
-0x8404 # <CJK>
-0x8406 # <CJK>
-0x840B # <CJK>
-0x840C # <CJK>
-0x840D # <CJK>
-0x840E # <CJK>
-0x840F # <CJK>
-0x8411 # <CJK>
-0x8418 # <CJK>
-0x841C # <CJK>
-0x841D # <CJK>
-0x8424 # <CJK>
-0x8425 # <CJK>
-0x8426 # <CJK>
-0x8427 # <CJK>
-0x8428 # <CJK>
-0x8431 # <CJK>
-0x8438 # <CJK>
-0x843C # <CJK>
-0x843D # <CJK>
-0x8446 # <CJK>
-0x8451 # <CJK>
-0x8457 # <CJK>
-0x8459 # <CJK>
-0x845A # <CJK>
-0x845B # <CJK>
-0x845C # <CJK>
-0x8461 # <CJK>
-0x8463 # <CJK>
-0x8469 # <CJK>
-0x846B # <CJK>
-0x846C # <CJK>
-0x846D # <CJK>
-0x8471 # <CJK>
-0x8473 # <CJK>
-0x8475 # <CJK>
-0x8476 # <CJK>
-0x8478 # <CJK>
-0x847A # <CJK>
-0x8482 # <CJK>
-0x8487 # <CJK>
-0x8488 # <CJK>
-0x8489 # <CJK>
-0x848B # <CJK>
-0x848C # <CJK>
-0x848E # <CJK>
-0x8497 # <CJK>
-0x8499 # <CJK>
-0x849C # <CJK>
-0x84A1 # <CJK>
-0x84AF # <CJK>
-0x84B2 # <CJK>
-0x84B4 # <CJK>
-0x84B8 # <CJK>
-0x84B9 # <CJK>
-0x84BA # <CJK>
-0x84BD # <CJK>
-0x84BF # <CJK>
-0x84C1 # <CJK>
-0x84C4 # <CJK>
-0x84C9 # <CJK>
-0x84CA # <CJK>
-0x84CD # <CJK>
-0x84D0 # <CJK>
-0x84D1 # <CJK>
-0x84D3 # <CJK>
-0x84D6 # <CJK>
-0x84DD # <CJK>
-0x84DF # <CJK>
-0x84E0 # <CJK>
-0x84E3 # <CJK>
-0x84E5 # <CJK>
-0x84E6 # <CJK>
-0x84EC # <CJK>
-0x84F0 # <CJK>
-0x84FC # <CJK>
-0x84FF # <CJK>
-0x850C # <CJK>
-0x8511 # <CJK>
-0x8513 # <CJK>
-0x8517 # <CJK>
-0x851A # <CJK>
-0x851F # <CJK>
-0x8521 # <CJK>
-0x852B # <CJK>
-0x852C # <CJK>
-0x8537 # <CJK>
-0x8538 # <CJK>
-0x8539 # <CJK>
-0x853A # <CJK>
-0x853B # <CJK>
-0x853C # <CJK>
-0x853D # <CJK>
-0x8543 # <CJK>
-0x8548 # <CJK>
-0x8549 # <CJK>
-0x854A # <CJK>
-0x8556 # <CJK>
-0x8559 # <CJK>
-0x855E # <CJK>
-0x8564 # <CJK>
-0x8568 # <CJK>
-0x8572 # <CJK>
-0x8574 # <CJK>
-0x8579 # <CJK>
-0x857A # <CJK>
-0x857B # <CJK>
-0x857E # <CJK>
-0x8584 # <CJK>
-0x8585 # <CJK>
-0x8587 # <CJK>
-0x858F # <CJK>
-0x859B # <CJK>
-0x859C # <CJK>
-0x85A4 # <CJK>
-0x85A8 # <CJK>
-0x85AA # <CJK>
-0x85AE # <CJK>
-0x85AF # <CJK>
-0x85B0 # <CJK>
-0x85B7 # <CJK>
-0x85B9 # <CJK>
-0x85C1 # <CJK>
-0x85C9 # <CJK>
-0x85CF # <CJK>
-0x85D0 # <CJK>
-0x85D3 # <CJK>
-0x85D5 # <CJK>
-0x85DC # <CJK>
-0x85E4 # <CJK>
-0x85E9 # <CJK>
-0x85FB # <CJK>
-0x85FF # <CJK>
-0x8605 # <CJK>
-0x8611 # <CJK>
-0x8616 # <CJK>
-0x8627 # <CJK>
-0x8629 # <CJK>
-0x8638 # <CJK>
-0x863C # <CJK>
-0x864D # <CJK>
-0x864E # <CJK>
-0x864F # <CJK>
-0x8650 # <CJK>
-0x8651 # <CJK>
-0x8654 # <CJK>
-0x865A # <CJK>
-0x865E # <CJK>
-0x8662 # <CJK>
-0x866B # <CJK>
-0x866C # <CJK>
-0x866E # <CJK>
-0x8671 # <CJK>
-0x8679 # <CJK>
-0x867A # <CJK>
-0x867B # <CJK>
-0x867C # <CJK>
-0x867D # <CJK>
-0x867E # <CJK>
-0x867F # <CJK>
-0x8680 # <CJK>
-0x8681 # <CJK>
-0x8682 # <CJK>
-0x868A # <CJK>
-0x868B # <CJK>
-0x868C # <CJK>
-0x868D # <CJK>
-0x8693 # <CJK>
-0x8695 # <CJK>
-0x869C # <CJK>
-0x869D # <CJK>
-0x86A3 # <CJK>
-0x86A4 # <CJK>
-0x86A7 # <CJK>
-0x86A8 # <CJK>
-0x86A9 # <CJK>
-0x86AA # <CJK>
-0x86AC # <CJK>
-0x86AF # <CJK>
-0x86B0 # <CJK>
-0x86B1 # <CJK>
-0x86B4 # <CJK>
-0x86B5 # <CJK>
-0x86B6 # <CJK>
-0x86BA # <CJK>
-0x86C0 # <CJK>
-0x86C4 # <CJK>
-0x86C6 # <CJK>
-0x86C7 # <CJK>
-0x86C9 # <CJK>
-0x86CA # <CJK>
-0x86CB # <CJK>
-0x86CE # <CJK>
-0x86CF # <CJK>
-0x86D0 # <CJK>
-0x86D1 # <CJK>
-0x86D4 # <CJK>
-0x86D8 # <CJK>
-0x86D9 # <CJK>
-0x86DB # <CJK>
-0x86DE # <CJK>
-0x86DF # <CJK>
-0x86E4 # <CJK>
-0x86E9 # <CJK>
-0x86ED # <CJK>
-0x86EE # <CJK>
-0x86F0 # <CJK>
-0x86F1 # <CJK>
-0x86F2 # <CJK>
-0x86F3 # <CJK>
-0x86F4 # <CJK>
-0x86F8 # <CJK>
-0x86F9 # <CJK>
-0x86FE # <CJK>
-0x8700 # <CJK>
-0x8702 # <CJK>
-0x8703 # <CJK>
-0x8707 # <CJK>
-0x8708 # <CJK>
-0x8709 # <CJK>
-0x870A # <CJK>
-0x870D # <CJK>
-0x8712 # <CJK>
-0x8713 # <CJK>
-0x8715 # <CJK>
-0x8717 # <CJK>
-0x8718 # <CJK>
-0x871A # <CJK>
-0x871C # <CJK>
-0x871E # <CJK>
-0x8721 # <CJK>
-0x8722 # <CJK>
-0x8723 # <CJK>
-0x8725 # <CJK>
-0x8729 # <CJK>
-0x872E # <CJK>
-0x8731 # <CJK>
-0x8734 # <CJK>
-0x8737 # <CJK>
-0x873B # <CJK>
-0x873E # <CJK>
-0x873F # <CJK>
-0x8747 # <CJK>
-0x8748 # <CJK>
-0x8749 # <CJK>
-0x874C # <CJK>
-0x874E # <CJK>
-0x8753 # <CJK>
-0x8757 # <CJK>
-0x8759 # <CJK>
-0x8760 # <CJK>
-0x8763 # <CJK>
-0x8764 # <CJK>
-0x8765 # <CJK>
-0x876E # <CJK>
-0x8770 # <CJK>
-0x8774 # <CJK>
-0x8776 # <CJK>
-0x877B # <CJK>
-0x877C # <CJK>
-0x877D # <CJK>
-0x877E # <CJK>
-0x8782 # <CJK>
-0x8783 # <CJK>
-0x8785 # <CJK>
-0x8788 # <CJK>
-0x878B # <CJK>
-0x878D # <CJK>
-0x8793 # <CJK>
-0x8797 # <CJK>
-0x879F # <CJK>
-0x87A8 # <CJK>
-0x87AB # <CJK>
-0x87AC # <CJK>
-0x87AD # <CJK>
-0x87AF # <CJK>
-0x87B3 # <CJK>
-0x87B5 # <CJK>
-0x87BA # <CJK>
-0x87BD # <CJK>
-0x87C0 # <CJK>
-0x87C6 # <CJK>
-0x87CA # <CJK>
-0x87CB # <CJK>
-0x87D1 # <CJK>
-0x87D2 # <CJK>
-0x87D3 # <CJK>
-0x87DB # <CJK>
-0x87E0 # <CJK>
-0x87E5 # <CJK>
-0x87EA # <CJK>
-0x87EE # <CJK>
-0x87F9 # <CJK>
-0x87FE # <CJK>
-0x8803 # <CJK>
-0x880A # <CJK>
-0x8813 # <CJK>
-0x8815 # <CJK>
-0x8816 # <CJK>
-0x881B # <CJK>
-0x8821 # <CJK>
-0x8822 # <CJK>
-0x8832 # <CJK>
-0x8839 # <CJK>
-0x883C # <CJK>
-0x8840 # <CJK>
-0x8844 # <CJK>
-0x8845 # <CJK>
-0x884C # <CJK>
-0x884D # <CJK>
-0x8854 # <CJK>
-0x8857 # <CJK>
-0x8859 # <CJK>
-0x8861 # <CJK>
-0x8862 # <CJK>
-0x8863 # <CJK>
-0x8864 # <CJK>
-0x8865 # <CJK>
-0x8868 # <CJK>
-0x8869 # <CJK>
-0x886B # <CJK>
-0x886C # <CJK>
-0x886E # <CJK>
-0x8870 # <CJK>
-0x8872 # <CJK>
-0x8877 # <CJK>
-0x887D # <CJK>
-0x887E # <CJK>
-0x887F # <CJK>
-0x8881 # <CJK>
-0x8882 # <CJK>
-0x8884 # <CJK>
-0x8885 # <CJK>
-0x8888 # <CJK>
-0x888B # <CJK>
-0x888D # <CJK>
-0x8892 # <CJK>
-0x8896 # <CJK>
-0x889C # <CJK>
-0x88A2 # <CJK>
-0x88A4 # <CJK>
-0x88AB # <CJK>
-0x88AD # <CJK>
-0x88B1 # <CJK>
-0x88B7 # <CJK>
-0x88BC # <CJK>
-0x88C1 # <CJK>
-0x88C2 # <CJK>
-0x88C5 # <CJK>
-0x88C6 # <CJK>
-0x88C9 # <CJK>
-0x88CE # <CJK>
-0x88D2 # <CJK>
-0x88D4 # <CJK>
-0x88D5 # <CJK>
-0x88D8 # <CJK>
-0x88D9 # <CJK>
-0x88DF # <CJK>
-0x88E2 # <CJK>
-0x88E3 # <CJK>
-0x88E4 # <CJK>
-0x88E5 # <CJK>
-0x88E8 # <CJK>
-0x88F0 # <CJK>
-0x88F1 # <CJK>
-0x88F3 # <CJK>
-0x88F4 # <CJK>
-0x88F8 # <CJK>
-0x88F9 # <CJK>
-0x88FC # <CJK>
-0x88FE # <CJK>
-0x8902 # <CJK>
-0x890A # <CJK>
-0x8910 # <CJK>
-0x8912 # <CJK>
-0x8913 # <CJK>
-0x8919 # <CJK>
-0x891A # <CJK>
-0x891B # <CJK>
-0x8921 # <CJK>
-0x8925 # <CJK>
-0x892A # <CJK>
-0x892B # <CJK>
-0x8930 # <CJK>
-0x8934 # <CJK>
-0x8936 # <CJK>
-0x8941 # <CJK>
-0x8944 # <CJK>
-0x895E # <CJK>
-0x895F # <CJK>
-0x8966 # <CJK>
-0x897B # <CJK>
-0x897F # <CJK>
-0x8981 # <CJK>
-0x8983 # <CJK>
-0x8986 # <CJK>
-0x89C1 # <CJK>
-0x89C2 # <CJK>
-0x89C4 # <CJK>
-0x89C5 # <CJK>
-0x89C6 # <CJK>
-0x89C7 # <CJK>
-0x89C8 # <CJK>
-0x89C9 # <CJK>
-0x89CA # <CJK>
-0x89CB # <CJK>
-0x89CC # <CJK>
-0x89CE # <CJK>
-0x89CF # <CJK>
-0x89D0 # <CJK>
-0x89D1 # <CJK>
-0x89D2 # <CJK>
-0x89D6 # <CJK>
-0x89DA # <CJK>
-0x89DC # <CJK>
-0x89DE # <CJK>
-0x89E3 # <CJK>
-0x89E5 # <CJK>
-0x89E6 # <CJK>
-0x89EB # <CJK>
-0x89EF # <CJK>
-0x89F3 # <CJK>
-0x8A00 # <CJK>
-0x8A07 # <CJK>
-0x8A3E # <CJK>
-0x8A48 # <CJK>
-0x8A79 # <CJK>
-0x8A89 # <CJK>
-0x8A8A # <CJK>
-0x8A93 # <CJK>
-0x8B07 # <CJK>
-0x8B26 # <CJK>
-0x8B66 # <CJK>
-0x8B6C # <CJK>
-0x8BA0 # <CJK>
-0x8BA1 # <CJK>
-0x8BA2 # <CJK>
-0x8BA3 # <CJK>
-0x8BA4 # <CJK>
-0x8BA5 # <CJK>
-0x8BA6 # <CJK>
-0x8BA7 # <CJK>
-0x8BA8 # <CJK>
-0x8BA9 # <CJK>
-0x8BAA # <CJK>
-0x8BAB # <CJK>
-0x8BAD # <CJK>
-0x8BAE # <CJK>
-0x8BAF # <CJK>
-0x8BB0 # <CJK>
-0x8BB2 # <CJK>
-0x8BB3 # <CJK>
-0x8BB4 # <CJK>
-0x8BB5 # <CJK>
-0x8BB6 # <CJK>
-0x8BB7 # <CJK>
-0x8BB8 # <CJK>
-0x8BB9 # <CJK>
-0x8BBA # <CJK>
-0x8BBC # <CJK>
-0x8BBD # <CJK>
-0x8BBE # <CJK>
-0x8BBF # <CJK>
-0x8BC0 # <CJK>
-0x8BC1 # <CJK>
-0x8BC2 # <CJK>
-0x8BC3 # <CJK>
-0x8BC4 # <CJK>
-0x8BC5 # <CJK>
-0x8BC6 # <CJK>
-0x8BC8 # <CJK>
-0x8BC9 # <CJK>
-0x8BCA # <CJK>
-0x8BCB # <CJK>
-0x8BCC # <CJK>
-0x8BCD # <CJK>
-0x8BCE # <CJK>
-0x8BCF # <CJK>
-0x8BD1 # <CJK>
-0x8BD2 # <CJK>
-0x8BD3 # <CJK>
-0x8BD4 # <CJK>
-0x8BD5 # <CJK>
-0x8BD6 # <CJK>
-0x8BD7 # <CJK>
-0x8BD8 # <CJK>
-0x8BD9 # <CJK>
-0x8BDA # <CJK>
-0x8BDB # <CJK>
-0x8BDC # <CJK>
-0x8BDD # <CJK>
-0x8BDE # <CJK>
-0x8BDF # <CJK>
-0x8BE0 # <CJK>
-0x8BE1 # <CJK>
-0x8BE2 # <CJK>
-0x8BE3 # <CJK>
-0x8BE4 # <CJK>
-0x8BE5 # <CJK>
-0x8BE6 # <CJK>
-0x8BE7 # <CJK>
-0x8BE8 # <CJK>
-0x8BE9 # <CJK>
-0x8BEB # <CJK>
-0x8BEC # <CJK>
-0x8BED # <CJK>
-0x8BEE # <CJK>
-0x8BEF # <CJK>
-0x8BF0 # <CJK>
-0x8BF1 # <CJK>
-0x8BF2 # <CJK>
-0x8BF3 # <CJK>
-0x8BF4 # <CJK>
-0x8BF5 # <CJK>
-0x8BF6 # <CJK>
-0x8BF7 # <CJK>
-0x8BF8 # <CJK>
-0x8BF9 # <CJK>
-0x8BFA # <CJK>
-0x8BFB # <CJK>
-0x8BFC # <CJK>
-0x8BFD # <CJK>
-0x8BFE # <CJK>
-0x8BFF # <CJK>
-0x8C00 # <CJK>
-0x8C01 # <CJK>
-0x8C02 # <CJK>
-0x8C03 # <CJK>
-0x8C04 # <CJK>
-0x8C05 # <CJK>
-0x8C06 # <CJK>
-0x8C07 # <CJK>
-0x8C08 # <CJK>
-0x8C0A # <CJK>
-0x8C0B # <CJK>
-0x8C0C # <CJK>
-0x8C0D # <CJK>
-0x8C0E # <CJK>
-0x8C0F # <CJK>
-0x8C10 # <CJK>
-0x8C11 # <CJK>
-0x8C12 # <CJK>
-0x8C13 # <CJK>
-0x8C14 # <CJK>
-0x8C15 # <CJK>
-0x8C16 # <CJK>
-0x8C17 # <CJK>
-0x8C18 # <CJK>
-0x8C19 # <CJK>
-0x8C1A # <CJK>
-0x8C1B # <CJK>
-0x8C1C # <CJK>
-0x8C1D # <CJK>
-0x8C1F # <CJK>
-0x8C20 # <CJK>
-0x8C21 # <CJK>
-0x8C22 # <CJK>
-0x8C23 # <CJK>
-0x8C24 # <CJK>
-0x8C25 # <CJK>
-0x8C26 # <CJK>
-0x8C27 # <CJK>
-0x8C28 # <CJK>
-0x8C29 # <CJK>
-0x8C2A # <CJK>
-0x8C2B # <CJK>
-0x8C2C # <CJK>
-0x8C2D # <CJK>
-0x8C2E # <CJK>
-0x8C2F # <CJK>
-0x8C30 # <CJK>
-0x8C31 # <CJK>
-0x8C32 # <CJK>
-0x8C33 # <CJK>
-0x8C34 # <CJK>
-0x8C35 # <CJK>
-0x8C36 # <CJK>
-0x8C37 # <CJK>
-0x8C41 # <CJK>
-0x8C46 # <CJK>
-0x8C47 # <CJK>
-0x8C49 # <CJK>
-0x8C4C # <CJK>
-0x8C55 # <CJK>
-0x8C5A # <CJK>
-0x8C61 # <CJK>
-0x8C62 # <CJK>
-0x8C6A # <CJK>
-0x8C6B # <CJK>
-0x8C73 # <CJK>
-0x8C78 # <CJK>
-0x8C79 # <CJK>
-0x8C7A # <CJK>
-0x8C82 # <CJK>
-0x8C85 # <CJK>
-0x8C89 # <CJK>
-0x8C8A # <CJK>
-0x8C8C # <CJK>
-0x8C94 # <CJK>
-0x8C98 # <CJK>
-0x8D1D # <CJK>
-0x8D1E # <CJK>
-0x8D1F # <CJK>
-0x8D21 # <CJK>
-0x8D22 # <CJK>
-0x8D23 # <CJK>
-0x8D24 # <CJK>
-0x8D25 # <CJK>
-0x8D26 # <CJK>
-0x8D27 # <CJK>
-0x8D28 # <CJK>
-0x8D29 # <CJK>
-0x8D2A # <CJK>
-0x8D2B # <CJK>
-0x8D2C # <CJK>
-0x8D2D # <CJK>
-0x8D2E # <CJK>
-0x8D2F # <CJK>
-0x8D30 # <CJK>
-0x8D31 # <CJK>
-0x8D32 # <CJK>
-0x8D33 # <CJK>
-0x8D34 # <CJK>
-0x8D35 # <CJK>
-0x8D36 # <CJK>
-0x8D37 # <CJK>
-0x8D38 # <CJK>
-0x8D39 # <CJK>
-0x8D3A # <CJK>
-0x8D3B # <CJK>
-0x8D3C # <CJK>
-0x8D3D # <CJK>
-0x8D3E # <CJK>
-0x8D3F # <CJK>
-0x8D40 # <CJK>
-0x8D41 # <CJK>
-0x8D42 # <CJK>
-0x8D43 # <CJK>
-0x8D44 # <CJK>
-0x8D45 # <CJK>
-0x8D46 # <CJK>
-0x8D47 # <CJK>
-0x8D48 # <CJK>
-0x8D49 # <CJK>
-0x8D4A # <CJK>
-0x8D4B # <CJK>
-0x8D4C # <CJK>
-0x8D4D # <CJK>
-0x8D4E # <CJK>
-0x8D4F # <CJK>
-0x8D50 # <CJK>
-0x8D53 # <CJK>
-0x8D54 # <CJK>
-0x8D55 # <CJK>
-0x8D56 # <CJK>
-0x8D58 # <CJK>
-0x8D59 # <CJK>
-0x8D5A # <CJK>
-0x8D5B # <CJK>
-0x8D5C # <CJK>
-0x8D5D # <CJK>
-0x8D5E # <CJK>
-0x8D60 # <CJK>
-0x8D61 # <CJK>
-0x8D62 # <CJK>
-0x8D63 # <CJK>
-0x8D64 # <CJK>
-0x8D66 # <CJK>
-0x8D67 # <CJK>
-0x8D6B # <CJK>
-0x8D6D # <CJK>
-0x8D70 # <CJK>
-0x8D73 # <CJK>
-0x8D74 # <CJK>
-0x8D75 # <CJK>
-0x8D76 # <CJK>
-0x8D77 # <CJK>
-0x8D81 # <CJK>
-0x8D84 # <CJK>
-0x8D85 # <CJK>
-0x8D8A # <CJK>
-0x8D8B # <CJK>
-0x8D91 # <CJK>
-0x8D94 # <CJK>
-0x8D9F # <CJK>
-0x8DA3 # <CJK>
-0x8DB1 # <CJK>
-0x8DB3 # <CJK>
-0x8DB4 # <CJK>
-0x8DB5 # <CJK>
-0x8DB8 # <CJK>
-0x8DBA # <CJK>
-0x8DBC # <CJK>
-0x8DBE # <CJK>
-0x8DBF # <CJK>
-0x8DC3 # <CJK>
-0x8DC4 # <CJK>
-0x8DC6 # <CJK>
-0x8DCB # <CJK>
-0x8DCC # <CJK>
-0x8DCE # <CJK>
-0x8DCF # <CJK>
-0x8DD1 # <CJK>
-0x8DD6 # <CJK>
-0x8DD7 # <CJK>
-0x8DDA # <CJK>
-0x8DDB # <CJK>
-0x8DDD # <CJK>
-0x8DDE # <CJK>
-0x8DDF # <CJK>
-0x8DE3 # <CJK>
-0x8DE4 # <CJK>
-0x8DE8 # <CJK>
-0x8DEA # <CJK>
-0x8DEB # <CJK>
-0x8DEC # <CJK>
-0x8DEF # <CJK>
-0x8DF3 # <CJK>
-0x8DF5 # <CJK>
-0x8DF7 # <CJK>
-0x8DF8 # <CJK>
-0x8DF9 # <CJK>
-0x8DFA # <CJK>
-0x8DFB # <CJK>
-0x8DFD # <CJK>
-0x8E05 # <CJK>
-0x8E09 # <CJK>
-0x8E0A # <CJK>
-0x8E0C # <CJK>
-0x8E0F # <CJK>
-0x8E14 # <CJK>
-0x8E1D # <CJK>
-0x8E1E # <CJK>
-0x8E1F # <CJK>
-0x8E22 # <CJK>
-0x8E23 # <CJK>
-0x8E29 # <CJK>
-0x8E2A # <CJK>
-0x8E2C # <CJK>
-0x8E2E # <CJK>
-0x8E2F # <CJK>
-0x8E31 # <CJK>
-0x8E35 # <CJK>
-0x8E39 # <CJK>
-0x8E3A # <CJK>
-0x8E3D # <CJK>
-0x8E40 # <CJK>
-0x8E41 # <CJK>
-0x8E42 # <CJK>
-0x8E44 # <CJK>
-0x8E47 # <CJK>
-0x8E48 # <CJK>
-0x8E49 # <CJK>
-0x8E4A # <CJK>
-0x8E4B # <CJK>
-0x8E51 # <CJK>
-0x8E52 # <CJK>
-0x8E59 # <CJK>
-0x8E66 # <CJK>
-0x8E69 # <CJK>
-0x8E6C # <CJK>
-0x8E6D # <CJK>
-0x8E6F # <CJK>
-0x8E70 # <CJK>
-0x8E72 # <CJK>
-0x8E74 # <CJK>
-0x8E76 # <CJK>
-0x8E7C # <CJK>
-0x8E7F # <CJK>
-0x8E81 # <CJK>
-0x8E85 # <CJK>
-0x8E87 # <CJK>
-0x8E8F # <CJK>
-0x8E90 # <CJK>
-0x8E94 # <CJK>
-0x8E9C # <CJK>
-0x8E9E # <CJK>
-0x8EAB # <CJK>
-0x8EAC # <CJK>
-0x8EAF # <CJK>
-0x8EB2 # <CJK>
-0x8EBA # <CJK>
-0x8ECE # <CJK>
-0x8F66 # <CJK>
-0x8F67 # <CJK>
-0x8F68 # <CJK>
-0x8F69 # <CJK>
-0x8F6B # <CJK>
-0x8F6C # <CJK>
-0x8F6D # <CJK>
-0x8F6E # <CJK>
-0x8F6F # <CJK>
-0x8F70 # <CJK>
-0x8F71 # <CJK>
-0x8F72 # <CJK>
-0x8F73 # <CJK>
-0x8F74 # <CJK>
-0x8F75 # <CJK>
-0x8F76 # <CJK>
-0x8F77 # <CJK>
-0x8F78 # <CJK>
-0x8F79 # <CJK>
-0x8F7A # <CJK>
-0x8F7B # <CJK>
-0x8F7C # <CJK>
-0x8F7D # <CJK>
-0x8F7E # <CJK>
-0x8F7F # <CJK>
-0x8F81 # <CJK>
-0x8F82 # <CJK>
-0x8F83 # <CJK>
-0x8F84 # <CJK>
-0x8F85 # <CJK>
-0x8F86 # <CJK>
-0x8F87 # <CJK>
-0x8F88 # <CJK>
-0x8F89 # <CJK>
-0x8F8A # <CJK>
-0x8F8B # <CJK>
-0x8F8D # <CJK>
-0x8F8E # <CJK>
-0x8F8F # <CJK>
-0x8F90 # <CJK>
-0x8F91 # <CJK>
-0x8F93 # <CJK>
-0x8F94 # <CJK>
-0x8F95 # <CJK>
-0x8F96 # <CJK>
-0x8F97 # <CJK>
-0x8F98 # <CJK>
-0x8F99 # <CJK>
-0x8F9A # <CJK>
-0x8F9B # <CJK>
-0x8F9C # <CJK>
-0x8F9E # <CJK>
-0x8F9F # <CJK>
-0x8FA3 # <CJK>
-0x8FA8 # <CJK>
-0x8FA9 # <CJK>
-0x8FAB # <CJK>
-0x8FB0 # <CJK>
-0x8FB1 # <CJK>
-0x8FB6 # <CJK>
-0x8FB9 # <CJK>
-0x8FBD # <CJK>
-0x8FBE # <CJK>
-0x8FC1 # <CJK>
-0x8FC2 # <CJK>
-0x8FC4 # <CJK>
-0x8FC5 # <CJK>
-0x8FC7 # <CJK>
-0x8FC8 # <CJK>
-0x8FCE # <CJK>
-0x8FD0 # <CJK>
-0x8FD1 # <CJK>
-0x8FD3 # <CJK>
-0x8FD4 # <CJK>
-0x8FD5 # <CJK>
-0x8FD8 # <CJK>
-0x8FD9 # <CJK>
-0x8FDB # <CJK>
-0x8FDC # <CJK>
-0x8FDD # <CJK>
-0x8FDE # <CJK>
-0x8FDF # <CJK>
-0x8FE2 # <CJK>
-0x8FE4 # <CJK>
-0x8FE5 # <CJK>
-0x8FE6 # <CJK>
-0x8FE8 # <CJK>
-0x8FE9 # <CJK>
-0x8FEA # <CJK>
-0x8FEB # <CJK>
-0x8FED # <CJK>
-0x8FEE # <CJK>
-0x8FF0 # <CJK>
-0x8FF3 # <CJK>
-0x8FF7 # <CJK>
-0x8FF8 # <CJK>
-0x8FF9 # <CJK>
-0x8FFD # <CJK>
-0x9000 # <CJK>
-0x9001 # <CJK>
-0x9002 # <CJK>
-0x9003 # <CJK>
-0x9004 # <CJK>
-0x9005 # <CJK>
-0x9006 # <CJK>
-0x9009 # <CJK>
-0x900A # <CJK>
-0x900B # <CJK>
-0x900D # <CJK>
-0x900F # <CJK>
-0x9010 # <CJK>
-0x9011 # <CJK>
-0x9012 # <CJK>
-0x9014 # <CJK>
-0x9016 # <CJK>
-0x9017 # <CJK>
-0x901A # <CJK>
-0x901B # <CJK>
-0x901D # <CJK>
-0x901E # <CJK>
-0x901F # <CJK>
-0x9020 # <CJK>
-0x9021 # <CJK>
-0x9022 # <CJK>
-0x9026 # <CJK>
-0x902D # <CJK>
-0x902E # <CJK>
-0x902F # <CJK>
-0x9035 # <CJK>
-0x9036 # <CJK>
-0x9038 # <CJK>
-0x903B # <CJK>
-0x903C # <CJK>
-0x903E # <CJK>
-0x9041 # <CJK>
-0x9042 # <CJK>
-0x9044 # <CJK>
-0x9047 # <CJK>
-0x904D # <CJK>
-0x904F # <CJK>
-0x9050 # <CJK>
-0x9051 # <CJK>
-0x9052 # <CJK>
-0x9053 # <CJK>
-0x9057 # <CJK>
-0x9058 # <CJK>
-0x905B # <CJK>
-0x9062 # <CJK>
-0x9063 # <CJK>
-0x9065 # <CJK>
-0x9068 # <CJK>
-0x906D # <CJK>
-0x906E # <CJK>
-0x9074 # <CJK>
-0x9075 # <CJK>
-0x907D # <CJK>
-0x907F # <CJK>
-0x9080 # <CJK>
-0x9082 # <CJK>
-0x9083 # <CJK>
-0x9088 # <CJK>
-0x908B # <CJK>
-0x9091 # <CJK>
-0x9093 # <CJK>
-0x9095 # <CJK>
-0x9097 # <CJK>
-0x9099 # <CJK>
-0x909B # <CJK>
-0x909D # <CJK>
-0x90A1 # <CJK>
-0x90A2 # <CJK>
-0x90A3 # <CJK>
-0x90A6 # <CJK>
-0x90AA # <CJK>
-0x90AC # <CJK>
-0x90AE # <CJK>
-0x90AF # <CJK>
-0x90B0 # <CJK>
-0x90B1 # <CJK>
-0x90B3 # <CJK>
-0x90B4 # <CJK>
-0x90B5 # <CJK>
-0x90B6 # <CJK>
-0x90B8 # <CJK>
-0x90B9 # <CJK>
-0x90BA # <CJK>
-0x90BB # <CJK>
-0x90BE # <CJK>
-0x90C1 # <CJK>
-0x90C4 # <CJK>
-0x90C5 # <CJK>
-0x90C7 # <CJK>
-0x90CA # <CJK>
-0x90CE # <CJK>
-0x90CF # <CJK>
-0x90D0 # <CJK>
-0x90D1 # <CJK>
-0x90D3 # <CJK>
-0x90D7 # <CJK>
-0x90DB # <CJK>
-0x90DC # <CJK>
-0x90DD # <CJK>
-0x90E1 # <CJK>
-0x90E2 # <CJK>
-0x90E6 # <CJK>
-0x90E7 # <CJK>
-0x90E8 # <CJK>
-0x90EB # <CJK>
-0x90ED # <CJK>
-0x90EF # <CJK>
-0x90F4 # <CJK>
-0x90F8 # <CJK>
-0x90FD # <CJK>
-0x90FE # <CJK>
-0x9102 # <CJK>
-0x9104 # <CJK>
-0x9119 # <CJK>
-0x911E # <CJK>
-0x9122 # <CJK>
-0x9123 # <CJK>
-0x912F # <CJK>
-0x9131 # <CJK>
-0x9139 # <CJK>
-0x9143 # <CJK>
-0x9146 # <CJK>
-0x9149 # <CJK>
-0x914A # <CJK>
-0x914B # <CJK>
-0x914C # <CJK>
-0x914D # <CJK>
-0x914E # <CJK>
-0x914F # <CJK>
-0x9150 # <CJK>
-0x9152 # <CJK>
-0x9157 # <CJK>
-0x915A # <CJK>
-0x915D # <CJK>
-0x915E # <CJK>
-0x9161 # <CJK>
-0x9162 # <CJK>
-0x9163 # <CJK>
-0x9164 # <CJK>
-0x9165 # <CJK>
-0x9169 # <CJK>
-0x916A # <CJK>
-0x916C # <CJK>
-0x916E # <CJK>
-0x916F # <CJK>
-0x9170 # <CJK>
-0x9171 # <CJK>
-0x9172 # <CJK>
-0x9174 # <CJK>
-0x9175 # <CJK>
-0x9176 # <CJK>
-0x9177 # <CJK>
-0x9178 # <CJK>
-0x9179 # <CJK>
-0x917D # <CJK>
-0x917E # <CJK>
-0x917F # <CJK>
-0x9185 # <CJK>
-0x9187 # <CJK>
-0x9189 # <CJK>
-0x918B # <CJK>
-0x918C # <CJK>
-0x918D # <CJK>
-0x9190 # <CJK>
-0x9191 # <CJK>
-0x9192 # <CJK>
-0x919A # <CJK>
-0x919B # <CJK>
-0x91A2 # <CJK>
-0x91A3 # <CJK>
-0x91AA # <CJK>
-0x91AD # <CJK>
-0x91AE # <CJK>
-0x91AF # <CJK>
-0x91B4 # <CJK>
-0x91B5 # <CJK>
-0x91BA # <CJK>
-0x91C7 # <CJK>
-0x91C9 # <CJK>
-0x91CA # <CJK>
-0x91CC # <CJK>
-0x91CD # <CJK>
-0x91CE # <CJK>
-0x91CF # <CJK>
-0x91D1 # <CJK>
-0x91DC # <CJK>
-0x9274 # <CJK>
-0x928E # <CJK>
-0x92AE # <CJK>
-0x92C8 # <CJK>
-0x933E # <CJK>
-0x936A # <CJK>
-0x938F # <CJK>
-0x93CA # <CJK>
-0x93D6 # <CJK>
-0x943E # <CJK>
-0x946B # <CJK>
-0x9485 # <CJK>
-0x9486 # <CJK>
-0x9487 # <CJK>
-0x9488 # <CJK>
-0x9489 # <CJK>
-0x948A # <CJK>
-0x948B # <CJK>
-0x948C # <CJK>
-0x948D # <CJK>
-0x948E # <CJK>
-0x948F # <CJK>
-0x9490 # <CJK>
-0x9492 # <CJK>
-0x9493 # <CJK>
-0x9494 # <CJK>
-0x9495 # <CJK>
-0x9497 # <CJK>
-0x9499 # <CJK>
-0x949A # <CJK>
-0x949B # <CJK>
-0x949C # <CJK>
-0x949D # <CJK>
-0x949E # <CJK>
-0x949F # <CJK>
-0x94A0 # <CJK>
-0x94A1 # <CJK>
-0x94A2 # <CJK>
-0x94A3 # <CJK>
-0x94A4 # <CJK>
-0x94A5 # <CJK>
-0x94A6 # <CJK>
-0x94A7 # <CJK>
-0x94A8 # <CJK>
-0x94A9 # <CJK>
-0x94AA # <CJK>
-0x94AB # <CJK>
-0x94AC # <CJK>
-0x94AD # <CJK>
-0x94AE # <CJK>
-0x94AF # <CJK>
-0x94B0 # <CJK>
-0x94B1 # <CJK>
-0x94B2 # <CJK>
-0x94B3 # <CJK>
-0x94B4 # <CJK>
-0x94B5 # <CJK>
-0x94B6 # <CJK>
-0x94B7 # <CJK>
-0x94B8 # <CJK>
-0x94B9 # <CJK>
-0x94BA # <CJK>
-0x94BB # <CJK>
-0x94BC # <CJK>
-0x94BD # <CJK>
-0x94BE # <CJK>
-0x94BF # <CJK>
-0x94C0 # <CJK>
-0x94C1 # <CJK>
-0x94C2 # <CJK>
-0x94C3 # <CJK>
-0x94C4 # <CJK>
-0x94C5 # <CJK>
-0x94C6 # <CJK>
-0x94C8 # <CJK>
-0x94C9 # <CJK>
-0x94CA # <CJK>
-0x94CB # <CJK>
-0x94CC # <CJK>
-0x94CD # <CJK>
-0x94CE # <CJK>
-0x94D0 # <CJK>
-0x94D1 # <CJK>
-0x94D2 # <CJK>
-0x94D5 # <CJK>
-0x94D6 # <CJK>
-0x94D7 # <CJK>
-0x94D8 # <CJK>
-0x94D9 # <CJK>
-0x94DB # <CJK>
-0x94DC # <CJK>
-0x94DD # <CJK>
-0x94DE # <CJK>
-0x94DF # <CJK>
-0x94E0 # <CJK>
-0x94E1 # <CJK>
-0x94E2 # <CJK>
-0x94E3 # <CJK>
-0x94E4 # <CJK>
-0x94E5 # <CJK>
-0x94E7 # <CJK>
-0x94E8 # <CJK>
-0x94E9 # <CJK>
-0x94EA # <CJK>
-0x94EB # <CJK>
-0x94EC # <CJK>
-0x94ED # <CJK>
-0x94EE # <CJK>
-0x94EF # <CJK>
-0x94F0 # <CJK>
-0x94F1 # <CJK>
-0x94F2 # <CJK>
-0x94F3 # <CJK>
-0x94F4 # <CJK>
-0x94F5 # <CJK>
-0x94F6 # <CJK>
-0x94F7 # <CJK>
-0x94F8 # <CJK>
-0x94F9 # <CJK>
-0x94FA # <CJK>
-0x94FC # <CJK>
-0x94FD # <CJK>
-0x94FE # <CJK>
-0x94FF # <CJK>
-0x9500 # <CJK>
-0x9501 # <CJK>
-0x9502 # <CJK>
-0x9503 # <CJK>
-0x9504 # <CJK>
-0x9505 # <CJK>
-0x9506 # <CJK>
-0x9507 # <CJK>
-0x9508 # <CJK>
-0x9509 # <CJK>
-0x950A # <CJK>
-0x950B # <CJK>
-0x950C # <CJK>
-0x950D # <CJK>
-0x950E # <CJK>
-0x950F # <CJK>
-0x9510 # <CJK>
-0x9511 # <CJK>
-0x9512 # <CJK>
-0x9513 # <CJK>
-0x9514 # <CJK>
-0x9515 # <CJK>
-0x9516 # <CJK>
-0x9517 # <CJK>
-0x9518 # <CJK>
-0x9519 # <CJK>
-0x951A # <CJK>
-0x951B # <CJK>
-0x951D # <CJK>
-0x951E # <CJK>
-0x951F # <CJK>
-0x9521 # <CJK>
-0x9522 # <CJK>
-0x9523 # <CJK>
-0x9524 # <CJK>
-0x9525 # <CJK>
-0x9526 # <CJK>
-0x9528 # <CJK>
-0x9529 # <CJK>
-0x952A # <CJK>
-0x952B # <CJK>
-0x952C # <CJK>
-0x952D # <CJK>
-0x952E # <CJK>
-0x952F # <CJK>
-0x9530 # <CJK>
-0x9531 # <CJK>
-0x9532 # <CJK>
-0x9534 # <CJK>
-0x9535 # <CJK>
-0x9536 # <CJK>
-0x9537 # <CJK>
-0x9538 # <CJK>
-0x9539 # <CJK>
-0x953A # <CJK>
-0x953B # <CJK>
-0x953C # <CJK>
-0x953E # <CJK>
-0x953F # <CJK>
-0x9540 # <CJK>
-0x9541 # <CJK>
-0x9542 # <CJK>
-0x9544 # <CJK>
-0x9545 # <CJK>
-0x9546 # <CJK>
-0x9547 # <CJK>
-0x9549 # <CJK>
-0x954A # <CJK>
-0x954C # <CJK>
-0x954D # <CJK>
-0x954E # <CJK>
-0x954F # <CJK>
-0x9550 # <CJK>
-0x9551 # <CJK>
-0x9552 # <CJK>
-0x9553 # <CJK>
-0x9554 # <CJK>
-0x9556 # <CJK>
-0x9557 # <CJK>
-0x9558 # <CJK>
-0x9559 # <CJK>
-0x955B # <CJK>
-0x955C # <CJK>
-0x955D # <CJK>
-0x955E # <CJK>
-0x955F # <CJK>
-0x9561 # <CJK>
-0x9562 # <CJK>
-0x9563 # <CJK>
-0x9564 # <CJK>
-0x9565 # <CJK>
-0x9566 # <CJK>
-0x9567 # <CJK>
-0x9568 # <CJK>
-0x9569 # <CJK>
-0x956A # <CJK>
-0x956B # <CJK>
-0x956C # <CJK>
-0x956D # <CJK>
-0x956F # <CJK>
-0x9570 # <CJK>
-0x9571 # <CJK>
-0x9572 # <CJK>
-0x9573 # <CJK>
-0x9576 # <CJK>
-0x957F # <CJK>
-0x95E8 # <CJK>
-0x95E9 # <CJK>
-0x95EA # <CJK>
-0x95EB # <CJK>
-0x95ED # <CJK>
-0x95EE # <CJK>
-0x95EF # <CJK>
-0x95F0 # <CJK>
-0x95F1 # <CJK>
-0x95F2 # <CJK>
-0x95F3 # <CJK>
-0x95F4 # <CJK>
-0x95F5 # <CJK>
-0x95F6 # <CJK>
-0x95F7 # <CJK>
-0x95F8 # <CJK>
-0x95F9 # <CJK>
-0x95FA # <CJK>
-0x95FB # <CJK>
-0x95FC # <CJK>
-0x95FD # <CJK>
-0x95FE # <CJK>
-0x9600 # <CJK>
-0x9601 # <CJK>
-0x9602 # <CJK>
-0x9603 # <CJK>
-0x9604 # <CJK>
-0x9605 # <CJK>
-0x9606 # <CJK>
-0x9608 # <CJK>
-0x9609 # <CJK>
-0x960A # <CJK>
-0x960B # <CJK>
-0x960C # <CJK>
-0x960D # <CJK>
-0x960E # <CJK>
-0x960F # <CJK>
-0x9610 # <CJK>
-0x9611 # <CJK>
-0x9612 # <CJK>
-0x9614 # <CJK>
-0x9615 # <CJK>
-0x9616 # <CJK>
-0x9617 # <CJK>
-0x9619 # <CJK>
-0x961A # <CJK>
-0x961C # <CJK>
-0x961D # <CJK>
-0x961F # <CJK>
-0x9621 # <CJK>
-0x9622 # <CJK>
-0x962A # <CJK>
-0x962E # <CJK>
-0x9631 # <CJK>
-0x9632 # <CJK>
-0x9633 # <CJK>
-0x9634 # <CJK>
-0x9635 # <CJK>
-0x9636 # <CJK>
-0x963B # <CJK>
-0x963C # <CJK>
-0x963D # <CJK>
-0x963F # <CJK>
-0x9640 # <CJK>
-0x9642 # <CJK>
-0x9644 # <CJK>
-0x9645 # <CJK>
-0x9646 # <CJK>
-0x9647 # <CJK>
-0x9648 # <CJK>
-0x9649 # <CJK>
-0x964B # <CJK>
-0x964C # <CJK>
-0x964D # <CJK>
-0x9650 # <CJK>
-0x9654 # <CJK>
-0x9655 # <CJK>
-0x965B # <CJK>
-0x965F # <CJK>
-0x9661 # <CJK>
-0x9662 # <CJK>
-0x9664 # <CJK>
-0x9667 # <CJK>
-0x9668 # <CJK>
-0x9669 # <CJK>
-0x966A # <CJK>
-0x966C # <CJK>
-0x9672 # <CJK>
-0x9674 # <CJK>
-0x9675 # <CJK>
-0x9676 # <CJK>
-0x9677 # <CJK>
-0x9685 # <CJK>
-0x9686 # <CJK>
-0x9688 # <CJK>
-0x968B # <CJK>
-0x968D # <CJK>
-0x968F # <CJK>
-0x9690 # <CJK>
-0x9694 # <CJK>
-0x9697 # <CJK>
-0x9698 # <CJK>
-0x9699 # <CJK>
-0x969C # <CJK>
-0x96A7 # <CJK>
-0x96B0 # <CJK>
-0x96B3 # <CJK>
-0x96B6 # <CJK>
-0x96B9 # <CJK>
-0x96BC # <CJK>
-0x96BD # <CJK>
-0x96BE # <CJK>
-0x96C0 # <CJK>
-0x96C1 # <CJK>
-0x96C4 # <CJK>
-0x96C5 # <CJK>
-0x96C6 # <CJK>
-0x96C7 # <CJK>
-0x96C9 # <CJK>
-0x96CC # <CJK>
-0x96CD # <CJK>
-0x96CE # <CJK>
-0x96CF # <CJK>
-0x96D2 # <CJK>
-0x96D5 # <CJK>
-0x96E0 # <CJK>
-0x96E8 # <CJK>
-0x96E9 # <CJK>
-0x96EA # <CJK>
-0x96EF # <CJK>
-0x96F3 # <CJK>
-0x96F6 # <CJK>
-0x96F7 # <CJK>
-0x96F9 # <CJK>
-0x96FE # <CJK>
-0x9700 # <CJK>
-0x9701 # <CJK>
-0x9704 # <CJK>
-0x9706 # <CJK>
-0x9707 # <CJK>
-0x9708 # <CJK>
-0x9709 # <CJK>
-0x970D # <CJK>
-0x970E # <CJK>
-0x970F # <CJK>
-0x9713 # <CJK>
-0x9716 # <CJK>
-0x971C # <CJK>
-0x971E # <CJK>
-0x972A # <CJK>
-0x972D # <CJK>
-0x9730 # <CJK>
-0x9732 # <CJK>
-0x9738 # <CJK>
-0x9739 # <CJK>
-0x973E # <CJK>
-0x9752 # <CJK>
-0x9753 # <CJK>
-0x9756 # <CJK>
-0x9759 # <CJK>
-0x975B # <CJK>
-0x975E # <CJK>
-0x9760 # <CJK>
-0x9761 # <CJK>
-0x9762 # <CJK>
-0x9765 # <CJK>
-0x9769 # <CJK>
-0x9773 # <CJK>
-0x9774 # <CJK>
-0x9776 # <CJK>
-0x977C # <CJK>
-0x9785 # <CJK>
-0x978B # <CJK>
-0x978D # <CJK>
-0x9791 # <CJK>
-0x9792 # <CJK>
-0x9794 # <CJK>
-0x9798 # <CJK>
-0x97A0 # <CJK>
-0x97A3 # <CJK>
-0x97AB # <CJK>
-0x97AD # <CJK>
-0x97AF # <CJK>
-0x97B2 # <CJK>
-0x97B4 # <CJK>
-0x97E6 # <CJK>
-0x97E7 # <CJK>
-0x97E9 # <CJK>
-0x97EA # <CJK>
-0x97EB # <CJK>
-0x97EC # <CJK>
-0x97ED # <CJK>
-0x97F3 # <CJK>
-0x97F5 # <CJK>
-0x97F6 # <CJK>
-0x9875 # <CJK>
-0x9876 # <CJK>
-0x9877 # <CJK>
-0x9878 # <CJK>
-0x9879 # <CJK>
-0x987A # <CJK>
-0x987B # <CJK>
-0x987C # <CJK>
-0x987D # <CJK>
-0x987E # <CJK>
-0x987F # <CJK>
-0x9880 # <CJK>
-0x9881 # <CJK>
-0x9882 # <CJK>
-0x9883 # <CJK>
-0x9884 # <CJK>
-0x9885 # <CJK>
-0x9886 # <CJK>
-0x9887 # <CJK>
-0x9888 # <CJK>
-0x9889 # <CJK>
-0x988A # <CJK>
-0x988C # <CJK>
-0x988D # <CJK>
-0x988F # <CJK>
-0x9890 # <CJK>
-0x9891 # <CJK>
-0x9893 # <CJK>
-0x9894 # <CJK>
-0x9896 # <CJK>
-0x9897 # <CJK>
-0x9898 # <CJK>
-0x989A # <CJK>
-0x989B # <CJK>
-0x989C # <CJK>
-0x989D # <CJK>
-0x989E # <CJK>
-0x989F # <CJK>
-0x98A0 # <CJK>
-0x98A1 # <CJK>
-0x98A2 # <CJK>
-0x98A4 # <CJK>
-0x98A5 # <CJK>
-0x98A6 # <CJK>
-0x98A7 # <CJK>
-0x98CE # <CJK>
-0x98D1 # <CJK>
-0x98D2 # <CJK>
-0x98D3 # <CJK>
-0x98D5 # <CJK>
-0x98D8 # <CJK>
-0x98D9 # <CJK>
-0x98DA # <CJK>
-0x98DE # <CJK>
-0x98DF # <CJK>
-0x98E7 # <CJK>
-0x98E8 # <CJK>
-0x990D # <CJK>
-0x9910 # <CJK>
-0x992E # <CJK>
-0x9954 # <CJK>
-0x9955 # <CJK>
-0x9963 # <CJK>
-0x9965 # <CJK>
-0x9967 # <CJK>
-0x9968 # <CJK>
-0x9969 # <CJK>
-0x996A # <CJK>
-0x996B # <CJK>
-0x996C # <CJK>
-0x996D # <CJK>
-0x996E # <CJK>
-0x996F # <CJK>
-0x9970 # <CJK>
-0x9971 # <CJK>
-0x9972 # <CJK>
-0x9974 # <CJK>
-0x9975 # <CJK>
-0x9976 # <CJK>
-0x9977 # <CJK>
-0x997A # <CJK>
-0x997C # <CJK>
-0x997D # <CJK>
-0x997F # <CJK>
-0x9980 # <CJK>
-0x9981 # <CJK>
-0x9984 # <CJK>
-0x9985 # <CJK>
-0x9986 # <CJK>
-0x9987 # <CJK>
-0x9988 # <CJK>
-0x998A # <CJK>
-0x998B # <CJK>
-0x998D # <CJK>
-0x998F # <CJK>
-0x9990 # <CJK>
-0x9991 # <CJK>
-0x9992 # <CJK>
-0x9993 # <CJK>
-0x9994 # <CJK>
-0x9995 # <CJK>
-0x9996 # <CJK>
-0x9997 # <CJK>
-0x9998 # <CJK>
-0x9999 # <CJK>
-0x99A5 # <CJK>
-0x99A8 # <CJK>
-0x9A6C # <CJK>
-0x9A6D # <CJK>
-0x9A6E # <CJK>
-0x9A6F # <CJK>
-0x9A70 # <CJK>
-0x9A71 # <CJK>
-0x9A73 # <CJK>
-0x9A74 # <CJK>
-0x9A75 # <CJK>
-0x9A76 # <CJK>
-0x9A77 # <CJK>
-0x9A78 # <CJK>
-0x9A79 # <CJK>
-0x9A7A # <CJK>
-0x9A7B # <CJK>
-0x9A7C # <CJK>
-0x9A7D # <CJK>
-0x9A7E # <CJK>
-0x9A7F # <CJK>
-0x9A80 # <CJK>
-0x9A81 # <CJK>
-0x9A82 # <CJK>
-0x9A84 # <CJK>
-0x9A85 # <CJK>
-0x9A86 # <CJK>
-0x9A87 # <CJK>
-0x9A88 # <CJK>
-0x9A8A # <CJK>
-0x9A8B # <CJK>
-0x9A8C # <CJK>
-0x9A8F # <CJK>
-0x9A90 # <CJK>
-0x9A91 # <CJK>
-0x9A92 # <CJK>
-0x9A93 # <CJK>
-0x9A96 # <CJK>
-0x9A97 # <CJK>
-0x9A98 # <CJK>
-0x9A9A # <CJK>
-0x9A9B # <CJK>
-0x9A9C # <CJK>
-0x9A9D # <CJK>
-0x9A9E # <CJK>
-0x9A9F # <CJK>
-0x9AA0 # <CJK>
-0x9AA1 # <CJK>
-0x9AA2 # <CJK>
-0x9AA3 # <CJK>
-0x9AA4 # <CJK>
-0x9AA5 # <CJK>
-0x9AA7 # <CJK>
-0x9AA8 # <CJK>
-0x9AB0 # <CJK>
-0x9AB1 # <CJK>
-0x9AB6 # <CJK>
-0x9AB7 # <CJK>
-0x9AB8 # <CJK>
-0x9ABA # <CJK>
-0x9ABC # <CJK>
-0x9AC0 # <CJK>
-0x9AC1 # <CJK>
-0x9AC2 # <CJK>
-0x9AC5 # <CJK>
-0x9ACB # <CJK>
-0x9ACC # <CJK>
-0x9AD1 # <CJK>
-0x9AD3 # <CJK>
-0x9AD8 # <CJK>
-0x9ADF # <CJK>
-0x9AE1 # <CJK>
-0x9AE6 # <CJK>
-0x9AEB # <CJK>
-0x9AED # <CJK>
-0x9AEF # <CJK>
-0x9AF9 # <CJK>
-0x9AFB # <CJK>
-0x9B03 # <CJK>
-0x9B08 # <CJK>
-0x9B0F # <CJK>
-0x9B13 # <CJK>
-0x9B1F # <CJK>
-0x9B23 # <CJK>
-0x9B2F # <CJK>
-0x9B32 # <CJK>
-0x9B3B # <CJK>
-0x9B3C # <CJK>
-0x9B41 # <CJK>
-0x9B42 # <CJK>
-0x9B43 # <CJK>
-0x9B44 # <CJK>
-0x9B45 # <CJK>
-0x9B47 # <CJK>
-0x9B48 # <CJK>
-0x9B49 # <CJK>
-0x9B4D # <CJK>
-0x9B4F # <CJK>
-0x9B51 # <CJK>
-0x9B54 # <CJK>
-0x9C7C # <CJK>
-0x9C7F # <CJK>
-0x9C81 # <CJK>
-0x9C82 # <CJK>
-0x9C85 # <CJK>
-0x9C86 # <CJK>
-0x9C87 # <CJK>
-0x9C88 # <CJK>
-0x9C8B # <CJK>
-0x9C8D # <CJK>
-0x9C8E # <CJK>
-0x9C90 # <CJK>
-0x9C91 # <CJK>
-0x9C92 # <CJK>
-0x9C94 # <CJK>
-0x9C95 # <CJK>
-0x9C9A # <CJK>
-0x9C9B # <CJK>
-0x9C9C # <CJK>
-0x9C9E # <CJK>
-0x9C9F # <CJK>
-0x9CA0 # <CJK>
-0x9CA1 # <CJK>
-0x9CA2 # <CJK>
-0x9CA3 # <CJK>
-0x9CA4 # <CJK>
-0x9CA5 # <CJK>
-0x9CA6 # <CJK>
-0x9CA7 # <CJK>
-0x9CA8 # <CJK>
-0x9CA9 # <CJK>
-0x9CAB # <CJK>
-0x9CAD # <CJK>
-0x9CAE # <CJK>
-0x9CB0 # <CJK>
-0x9CB1 # <CJK>
-0x9CB2 # <CJK>
-0x9CB3 # <CJK>
-0x9CB4 # <CJK>
-0x9CB5 # <CJK>
-0x9CB6 # <CJK>
-0x9CB7 # <CJK>
-0x9CB8 # <CJK>
-0x9CBA # <CJK>
-0x9CBB # <CJK>
-0x9CBC # <CJK>
-0x9CBD # <CJK>
-0x9CC3 # <CJK>
-0x9CC4 # <CJK>
-0x9CC5 # <CJK>
-0x9CC6 # <CJK>
-0x9CC7 # <CJK>
-0x9CCA # <CJK>
-0x9CCB # <CJK>
-0x9CCC # <CJK>
-0x9CCD # <CJK>
-0x9CCE # <CJK>
-0x9CCF # <CJK>
-0x9CD0 # <CJK>
-0x9CD3 # <CJK>
-0x9CD4 # <CJK>
-0x9CD5 # <CJK>
-0x9CD6 # <CJK>
-0x9CD7 # <CJK>
-0x9CD8 # <CJK>
-0x9CD9 # <CJK>
-0x9CDC # <CJK>
-0x9CDD # <CJK>
-0x9CDE # <CJK>
-0x9CDF # <CJK>
-0x9CE2 # <CJK>
-0x9E1F # <CJK>
-0x9E20 # <CJK>
-0x9E21 # <CJK>
-0x9E22 # <CJK>
-0x9E23 # <CJK>
-0x9E25 # <CJK>
-0x9E26 # <CJK>
-0x9E28 # <CJK>
-0x9E29 # <CJK>
-0x9E2A # <CJK>
-0x9E2B # <CJK>
-0x9E2C # <CJK>
-0x9E2D # <CJK>
-0x9E2F # <CJK>
-0x9E31 # <CJK>
-0x9E32 # <CJK>
-0x9E33 # <CJK>
-0x9E35 # <CJK>
-0x9E36 # <CJK>
-0x9E37 # <CJK>
-0x9E38 # <CJK>
-0x9E39 # <CJK>
-0x9E3A # <CJK>
-0x9E3D # <CJK>
-0x9E3E # <CJK>
-0x9E3F # <CJK>
-0x9E41 # <CJK>
-0x9E42 # <CJK>
-0x9E43 # <CJK>
-0x9E44 # <CJK>
-0x9E45 # <CJK>
-0x9E46 # <CJK>
-0x9E47 # <CJK>
-0x9E48 # <CJK>
-0x9E49 # <CJK>
-0x9E4A # <CJK>
-0x9E4B # <CJK>
-0x9E4C # <CJK>
-0x9E4E # <CJK>
-0x9E4F # <CJK>
-0x9E51 # <CJK>
-0x9E55 # <CJK>
-0x9E57 # <CJK>
-0x9E58 # <CJK>
-0x9E5A # <CJK>
-0x9E5B # <CJK>
-0x9E5C # <CJK>
-0x9E5E # <CJK>
-0x9E63 # <CJK>
-0x9E64 # <CJK>
-0x9E66 # <CJK>
-0x9E67 # <CJK>
-0x9E68 # <CJK>
-0x9E69 # <CJK>
-0x9E6A # <CJK>
-0x9E6B # <CJK>
-0x9E6C # <CJK>
-0x9E6D # <CJK>
-0x9E70 # <CJK>
-0x9E71 # <CJK>
-0x9E73 # <CJK>
-0x9E7E # <CJK>
-0x9E7F # <CJK>
-0x9E82 # <CJK>
-0x9E87 # <CJK>
-0x9E88 # <CJK>
-0x9E8B # <CJK>
-0x9E92 # <CJK>
-0x9E93 # <CJK>
-0x9E9D # <CJK>
-0x9E9F # <CJK>
-0x9EA6 # <CJK>
-0x9EB4 # <CJK>
-0x9EB8 # <CJK>
-0x9EBB # <CJK>
-0x9EBD # <CJK>
-0x9EBE # <CJK>
-0x9EC4 # <CJK>
-0x9EC9 # <CJK>
-0x9ECD # <CJK>
-0x9ECE # <CJK>
-0x9ECF # <CJK>
-0x9ED1 # <CJK>
-0x9ED4 # <CJK>
-0x9ED8 # <CJK>
-0x9EDB # <CJK>
-0x9EDC # <CJK>
-0x9EDD # <CJK>
-0x9EDF # <CJK>
-0x9EE0 # <CJK>
-0x9EE2 # <CJK>
-0x9EE5 # <CJK>
-0x9EE7 # <CJK>
-0x9EE9 # <CJK>
-0x9EEA # <CJK>
-0x9EEF # <CJK>
-0x9EF9 # <CJK>
-0x9EFB # <CJK>
-0x9EFC # <CJK>
-0x9EFE # <CJK>
-0x9F0B # <CJK>
-0x9F0D # <CJK>
-0x9F0E # <CJK>
-0x9F10 # <CJK>
-0x9F13 # <CJK>
-0x9F17 # <CJK>
-0x9F19 # <CJK>
-0x9F20 # <CJK>
-0x9F22 # <CJK>
-0x9F2C # <CJK>
-0x9F2F # <CJK>
-0x9F37 # <CJK>
-0x9F39 # <CJK>
-0x9F3B # <CJK>
-0x9F3D # <CJK>
-0x9F3E # <CJK>
-0x9F44 # <CJK>
-0x9F50 # <CJK>
-0x9F51 # <CJK>
-0x9F7F # <CJK>
-0x9F80 # <CJK>
-0x9F83 # <CJK>
-0x9F84 # <CJK>
-0x9F85 # <CJK>
-0x9F86 # <CJK>
-0x9F87 # <CJK>
-0x9F88 # <CJK>
-0x9F89 # <CJK>
-0x9F8A # <CJK>
-0x9F8B # <CJK>
-0x9F8C # <CJK>
-0x9F99 # <CJK>
-0x9F9A # <CJK>
-0x9F9B # <CJK>
-0x9F9F # <CJK>
-0x9FA0 # <CJK>
+#
+# fontconfig/fc-lang/zh_cn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese (simplified) (ZH-CN)
+#
+# Coverage computed from GB2312
+#
+0x02C7 # CARON (Mandarin Chinese third tone)
+0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+0x4E00 # <CJK>
+0x4E01 # <CJK>
+0x4E03 # <CJK>
+0x4E07 # <CJK>
+0x4E08 # <CJK>
+0x4E09 # <CJK>
+0x4E0A # <CJK>
+0x4E0B # <CJK>
+0x4E0C # <CJK>
+0x4E0D # <CJK>
+0x4E0E # <CJK>
+0x4E10 # <CJK>
+0x4E11 # <CJK>
+0x4E13 # <CJK>
+0x4E14 # <CJK>
+0x4E15 # <CJK>
+0x4E16 # <CJK>
+0x4E18 # <CJK>
+0x4E19 # <CJK>
+0x4E1A # <CJK>
+0x4E1B # <CJK>
+0x4E1C # <CJK>
+0x4E1D # <CJK>
+0x4E1E # <CJK>
+0x4E22 # <CJK>
+0x4E24 # <CJK>
+0x4E25 # <CJK>
+0x4E27 # <CJK>
+0x4E28 # <CJK>
+0x4E2A # <CJK>
+0x4E2B # <CJK>
+0x4E2C # <CJK>
+0x4E2D # <CJK>
+0x4E30 # <CJK>
+0x4E32 # <CJK>
+0x4E34 # <CJK>
+0x4E36 # <CJK>
+0x4E38 # <CJK>
+0x4E39 # <CJK>
+0x4E3A # <CJK>
+0x4E3B # <CJK>
+0x4E3D # <CJK>
+0x4E3E # <CJK>
+0x4E3F # <CJK>
+0x4E43 # <CJK>
+0x4E45 # <CJK>
+0x4E47 # <CJK>
+0x4E48 # <CJK>
+0x4E49 # <CJK>
+0x4E4B # <CJK>
+0x4E4C # <CJK>
+0x4E4D # <CJK>
+0x4E4E # <CJK>
+0x4E4F # <CJK>
+0x4E50 # <CJK>
+0x4E52 # <CJK>
+0x4E53 # <CJK>
+0x4E54 # <CJK>
+0x4E56 # <CJK>
+0x4E58 # <CJK>
+0x4E59 # <CJK>
+0x4E5C # <CJK>
+0x4E5D # <CJK>
+0x4E5E # <CJK>
+0x4E5F # <CJK>
+0x4E60 # <CJK>
+0x4E61 # <CJK>
+0x4E66 # <CJK>
+0x4E69 # <CJK>
+0x4E70 # <CJK>
+0x4E71 # <CJK>
+0x4E73 # <CJK>
+0x4E7E # <CJK>
+0x4E86 # <CJK>
+0x4E88 # <CJK>
+0x4E89 # <CJK>
+0x4E8B # <CJK>
+0x4E8C # <CJK>
+0x4E8D # <CJK>
+0x4E8E # <CJK>
+0x4E8F # <CJK>
+0x4E91 # <CJK>
+0x4E92 # <CJK>
+0x4E93 # <CJK>
+0x4E94 # <CJK>
+0x4E95 # <CJK>
+0x4E98 # <CJK>
+0x4E9A # <CJK>
+0x4E9B # <CJK>
+0x4E9F # <CJK>
+0x4EA0 # <CJK>
+0x4EA1 # <CJK>
+0x4EA2 # <CJK>
+0x4EA4 # <CJK>
+0x4EA5 # <CJK>
+0x4EA6 # <CJK>
+0x4EA7 # <CJK>
+0x4EA8 # <CJK>
+0x4EA9 # <CJK>
+0x4EAB # <CJK>
+0x4EAC # <CJK>
+0x4EAD # <CJK>
+0x4EAE # <CJK>
+0x4EB2 # <CJK>
+0x4EB3 # <CJK>
+0x4EB5 # <CJK>
+0x4EBA # <CJK>
+0x4EBB # <CJK>
+0x4EBF # <CJK>
+0x4EC0 # <CJK>
+0x4EC1 # <CJK>
+0x4EC2 # <CJK>
+0x4EC3 # <CJK>
+0x4EC4 # <CJK>
+0x4EC5 # <CJK>
+0x4EC6 # <CJK>
+0x4EC7 # <CJK>
+0x4EC9 # <CJK>
+0x4ECA # <CJK>
+0x4ECB # <CJK>
+0x4ECD # <CJK>
+0x4ECE # <CJK>
+0x4ED1 # <CJK>
+0x4ED3 # <CJK>
+0x4ED4 # <CJK>
+0x4ED5 # <CJK>
+0x4ED6 # <CJK>
+0x4ED7 # <CJK>
+0x4ED8 # <CJK>
+0x4ED9 # <CJK>
+0x4EDD # <CJK>
+0x4EDE # <CJK>
+0x4EDF # <CJK>
+0x4EE1 # <CJK>
+0x4EE3 # <CJK>
+0x4EE4 # <CJK>
+0x4EE5 # <CJK>
+0x4EE8 # <CJK>
+0x4EEA # <CJK>
+0x4EEB # <CJK>
+0x4EEC # <CJK>
+0x4EF0 # <CJK>
+0x4EF2 # <CJK>
+0x4EF3 # <CJK>
+0x4EF5 # <CJK>
+0x4EF6 # <CJK>
+0x4EF7 # <CJK>
+0x4EFB # <CJK>
+0x4EFD # <CJK>
+0x4EFF # <CJK>
+0x4F01 # <CJK>
+0x4F09 # <CJK>
+0x4F0A # <CJK>
+0x4F0D # <CJK>
+0x4F0E # <CJK>
+0x4F0F # <CJK>
+0x4F10 # <CJK>
+0x4F11 # <CJK>
+0x4F17 # <CJK>
+0x4F18 # <CJK>
+0x4F19 # <CJK>
+0x4F1A # <CJK>
+0x4F1B # <CJK>
+0x4F1E # <CJK>
+0x4F1F # <CJK>
+0x4F20 # <CJK>
+0x4F22 # <CJK>
+0x4F24 # <CJK>
+0x4F25 # <CJK>
+0x4F26 # <CJK>
+0x4F27 # <CJK>
+0x4F2A # <CJK>
+0x4F2B # <CJK>
+0x4F2F # <CJK>
+0x4F30 # <CJK>
+0x4F32 # <CJK>
+0x4F34 # <CJK>
+0x4F36 # <CJK>
+0x4F38 # <CJK>
+0x4F3A # <CJK>
+0x4F3C # <CJK>
+0x4F3D # <CJK>
+0x4F43 # <CJK>
+0x4F46 # <CJK>
+0x4F4D # <CJK>
+0x4F4E # <CJK>
+0x4F4F # <CJK>
+0x4F50 # <CJK>
+0x4F51 # <CJK>
+0x4F53 # <CJK>
+0x4F55 # <CJK>
+0x4F57 # <CJK>
+0x4F58 # <CJK>
+0x4F59 # <CJK>
+0x4F5A # <CJK>
+0x4F5B # <CJK>
+0x4F5C # <CJK>
+0x4F5D # <CJK>
+0x4F5E # <CJK>
+0x4F5F # <CJK>
+0x4F60 # <CJK>
+0x4F63 # <CJK>
+0x4F64 # <CJK>
+0x4F65 # <CJK>
+0x4F67 # <CJK>
+0x4F69 # <CJK>
+0x4F6C # <CJK>
+0x4F6F # <CJK>
+0x4F70 # <CJK>
+0x4F73 # <CJK>
+0x4F74 # <CJK>
+0x4F76 # <CJK>
+0x4F7B # <CJK>
+0x4F7C # <CJK>
+0x4F7E # <CJK>
+0x4F7F # <CJK>
+0x4F83 # <CJK>
+0x4F84 # <CJK>
+0x4F88 # <CJK>
+0x4F89 # <CJK>
+0x4F8B # <CJK>
+0x4F8D # <CJK>
+0x4F8F # <CJK>
+0x4F91 # <CJK>
+0x4F94 # <CJK>
+0x4F97 # <CJK>
+0x4F9B # <CJK>
+0x4F9D # <CJK>
+0x4FA0 # <CJK>
+0x4FA3 # <CJK>
+0x4FA5 # <CJK>
+0x4FA6 # <CJK>
+0x4FA7 # <CJK>
+0x4FA8 # <CJK>
+0x4FA9 # <CJK>
+0x4FAA # <CJK>
+0x4FAC # <CJK>
+0x4FAE # <CJK>
+0x4FAF # <CJK>
+0x4FB5 # <CJK>
+0x4FBF # <CJK>
+0x4FC3 # <CJK>
+0x4FC4 # <CJK>
+0x4FC5 # <CJK>
+0x4FCA # <CJK>
+0x4FCE # <CJK>
+0x4FCF # <CJK>
+0x4FD0 # <CJK>
+0x4FD1 # <CJK>
+0x4FD7 # <CJK>
+0x4FD8 # <CJK>
+0x4FDA # <CJK>
+0x4FDC # <CJK>
+0x4FDD # <CJK>
+0x4FDE # <CJK>
+0x4FDF # <CJK>
+0x4FE1 # <CJK>
+0x4FE3 # <CJK>
+0x4FE6 # <CJK>
+0x4FE8 # <CJK>
+0x4FE9 # <CJK>
+0x4FEA # <CJK>
+0x4FED # <CJK>
+0x4FEE # <CJK>
+0x4FEF # <CJK>
+0x4FF1 # <CJK>
+0x4FF3 # <CJK>
+0x4FF8 # <CJK>
+0x4FFA # <CJK>
+0x4FFE # <CJK>
+0x500C # <CJK>
+0x500D # <CJK>
+0x500F # <CJK>
+0x5012 # <CJK>
+0x5014 # <CJK>
+0x5018 # <CJK>
+0x5019 # <CJK>
+0x501A # <CJK>
+0x501C # <CJK>
+0x501F # <CJK>
+0x5021 # <CJK>
+0x5025 # <CJK>
+0x5026 # <CJK>
+0x5028 # <CJK>
+0x5029 # <CJK>
+0x502A # <CJK>
+0x502C # <CJK>
+0x502D # <CJK>
+0x502E # <CJK>
+0x503A # <CJK>
+0x503C # <CJK>
+0x503E # <CJK>
+0x5043 # <CJK>
+0x5047 # <CJK>
+0x5048 # <CJK>
+0x504C # <CJK>
+0x504E # <CJK>
+0x504F # <CJK>
+0x5055 # <CJK>
+0x505A # <CJK>
+0x505C # <CJK>
+0x5065 # <CJK>
+0x506C # <CJK>
+0x5076 # <CJK>
+0x5077 # <CJK>
+0x507B # <CJK>
+0x507E # <CJK>
+0x507F # <CJK>
+0x5080 # <CJK>
+0x5085 # <CJK>
+0x5088 # <CJK>
+0x508D # <CJK>
+0x50A3 # <CJK>
+0x50A5 # <CJK>
+0x50A7 # <CJK>
+0x50A8 # <CJK>
+0x50A9 # <CJK>
+0x50AC # <CJK>
+0x50B2 # <CJK>
+0x50BA # <CJK>
+0x50BB # <CJK>
+0x50CF # <CJK>
+0x50D6 # <CJK>
+0x50DA # <CJK>
+0x50E6 # <CJK>
+0x50E7 # <CJK>
+0x50EC # <CJK>
+0x50ED # <CJK>
+0x50EE # <CJK>
+0x50F3 # <CJK>
+0x50F5 # <CJK>
+0x50FB # <CJK>
+0x5106 # <CJK>
+0x5107 # <CJK>
+0x510B # <CJK>
+0x5112 # <CJK>
+0x5121 # <CJK>
+0x513F # <CJK>
+0x5140 # <CJK>
+0x5141 # <CJK>
+0x5143 # <CJK>
+0x5144 # <CJK>
+0x5145 # <CJK>
+0x5146 # <CJK>
+0x5148 # <CJK>
+0x5149 # <CJK>
+0x514B # <CJK>
+0x514D # <CJK>
+0x5151 # <CJK>
+0x5154 # <CJK>
+0x5155 # <CJK>
+0x5156 # <CJK>
+0x515A # <CJK>
+0x515C # <CJK>
+0x5162 # <CJK>
+0x5165 # <CJK>
+0x5168 # <CJK>
+0x516B # <CJK>
+0x516C # <CJK>
+0x516D # <CJK>
+0x516E # <CJK>
+0x5170 # <CJK>
+0x5171 # <CJK>
+0x5173 # <CJK>
+0x5174 # <CJK>
+0x5175 # <CJK>
+0x5176 # <CJK>
+0x5177 # <CJK>
+0x5178 # <CJK>
+0x5179 # <CJK>
+0x517B # <CJK>
+0x517C # <CJK>
+0x517D # <CJK>
+0x5180 # <CJK>
+0x5181 # <CJK>
+0x5182 # <CJK>
+0x5185 # <CJK>
+0x5188 # <CJK>
+0x5189 # <CJK>
+0x518C # <CJK>
+0x518D # <CJK>
+0x5192 # <CJK>
+0x5195 # <CJK>
+0x5196 # <CJK>
+0x5197 # <CJK>
+0x5199 # <CJK>
+0x519B # <CJK>
+0x519C # <CJK>
+0x51A0 # <CJK>
+0x51A2 # <CJK>
+0x51A4 # <CJK>
+0x51A5 # <CJK>
+0x51AB # <CJK>
+0x51AC # <CJK>
+0x51AF # <CJK>
+0x51B0 # <CJK>
+0x51B1 # <CJK>
+0x51B2 # <CJK>
+0x51B3 # <CJK>
+0x51B5 # <CJK>
+0x51B6 # <CJK>
+0x51B7 # <CJK>
+0x51BB # <CJK>
+0x51BC # <CJK>
+0x51BD # <CJK>
+0x51C0 # <CJK>
+0x51C4 # <CJK>
+0x51C6 # <CJK>
+0x51C7 # <CJK>
+0x51C9 # <CJK>
+0x51CB # <CJK>
+0x51CC # <CJK>
+0x51CF # <CJK>
+0x51D1 # <CJK>
+0x51DB # <CJK>
+0x51DD # <CJK>
+0x51E0 # <CJK>
+0x51E1 # <CJK>
+0x51E4 # <CJK>
+0x51EB # <CJK>
+0x51ED # <CJK>
+0x51EF # <CJK>
+0x51F0 # <CJK>
+0x51F3 # <CJK>
+0x51F5 # <CJK>
+0x51F6 # <CJK>
+0x51F8 # <CJK>
+0x51F9 # <CJK>
+0x51FA # <CJK>
+0x51FB # <CJK>
+0x51FC # <CJK>
+0x51FD # <CJK>
+0x51FF # <CJK>
+0x5200 # <CJK>
+0x5201 # <CJK>
+0x5202 # <CJK>
+0x5203 # <CJK>
+0x5206 # <CJK>
+0x5207 # <CJK>
+0x5208 # <CJK>
+0x520A # <CJK>
+0x520D # <CJK>
+0x520E # <CJK>
+0x5211 # <CJK>
+0x5212 # <CJK>
+0x5216 # <CJK>
+0x5217 # <CJK>
+0x5218 # <CJK>
+0x5219 # <CJK>
+0x521A # <CJK>
+0x521B # <CJK>
+0x521D # <CJK>
+0x5220 # <CJK>
+0x5224 # <CJK>
+0x5228 # <CJK>
+0x5229 # <CJK>
+0x522B # <CJK>
+0x522D # <CJK>
+0x522E # <CJK>
+0x5230 # <CJK>
+0x5233 # <CJK>
+0x5236 # <CJK>
+0x5237 # <CJK>
+0x5238 # <CJK>
+0x5239 # <CJK>
+0x523A # <CJK>
+0x523B # <CJK>
+0x523D # <CJK>
+0x523F # <CJK>
+0x5240 # <CJK>
+0x5241 # <CJK>
+0x5242 # <CJK>
+0x5243 # <CJK>
+0x524A # <CJK>
+0x524C # <CJK>
+0x524D # <CJK>
+0x5250 # <CJK>
+0x5251 # <CJK>
+0x5254 # <CJK>
+0x5256 # <CJK>
+0x525C # <CJK>
+0x525E # <CJK>
+0x5261 # <CJK>
+0x5265 # <CJK>
+0x5267 # <CJK>
+0x5269 # <CJK>
+0x526A # <CJK>
+0x526F # <CJK>
+0x5272 # <CJK>
+0x527D # <CJK>
+0x527F # <CJK>
+0x5281 # <CJK>
+0x5282 # <CJK>
+0x5288 # <CJK>
+0x5290 # <CJK>
+0x5293 # <CJK>
+0x529B # <CJK>
+0x529D # <CJK>
+0x529E # <CJK>
+0x529F # <CJK>
+0x52A0 # <CJK>
+0x52A1 # <CJK>
+0x52A2 # <CJK>
+0x52A3 # <CJK>
+0x52A8 # <CJK>
+0x52A9 # <CJK>
+0x52AA # <CJK>
+0x52AB # <CJK>
+0x52AC # <CJK>
+0x52AD # <CJK>
+0x52B1 # <CJK>
+0x52B2 # <CJK>
+0x52B3 # <CJK>
+0x52BE # <CJK>
+0x52BF # <CJK>
+0x52C3 # <CJK>
+0x52C7 # <CJK>
+0x52C9 # <CJK>
+0x52CB # <CJK>
+0x52D0 # <CJK>
+0x52D2 # <CJK>
+0x52D6 # <CJK>
+0x52D8 # <CJK>
+0x52DF # <CJK>
+0x52E4 # <CJK>
+0x52F0 # <CJK>
+0x52F9 # <CJK>
+0x52FA # <CJK>
+0x52FE # <CJK>
+0x52FF # <CJK>
+0x5300 # <CJK>
+0x5305 # <CJK>
+0x5306 # <CJK>
+0x5308 # <CJK>
+0x530D # <CJK>
+0x530F # <CJK>
+0x5310 # <CJK>
+0x5315 # <CJK>
+0x5316 # <CJK>
+0x5317 # <CJK>
+0x5319 # <CJK>
+0x531A # <CJK>
+0x531D # <CJK>
+0x5320 # <CJK>
+0x5321 # <CJK>
+0x5323 # <CJK>
+0x5326 # <CJK>
+0x532A # <CJK>
+0x532E # <CJK>
+0x5339 # <CJK>
+0x533A # <CJK>
+0x533B # <CJK>
+0x533E # <CJK>
+0x533F # <CJK>
+0x5341 # <CJK>
+0x5343 # <CJK>
+0x5345 # <CJK>
+0x5347 # <CJK>
+0x5348 # <CJK>
+0x5349 # <CJK>
+0x534A # <CJK>
+0x534E # <CJK>
+0x534F # <CJK>
+0x5351 # <CJK>
+0x5352 # <CJK>
+0x5353 # <CJK>
+0x5355 # <CJK>
+0x5356 # <CJK>
+0x5357 # <CJK>
+0x535A # <CJK>
+0x535C # <CJK>
+0x535E # <CJK>
+0x535F # <CJK>
+0x5360 # <CJK>
+0x5361 # <CJK>
+0x5362 # <CJK>
+0x5363 # <CJK>
+0x5364 # <CJK>
+0x5366 # <CJK>
+0x5367 # <CJK>
+0x5369 # <CJK>
+0x536B # <CJK>
+0x536E # <CJK>
+0x536F # <CJK>
+0x5370 # <CJK>
+0x5371 # <CJK>
+0x5373 # <CJK>
+0x5374 # <CJK>
+0x5375 # <CJK>
+0x5377 # <CJK>
+0x5378 # <CJK>
+0x537A # <CJK>
+0x537F # <CJK>
+0x5382 # <CJK>
+0x5384 # <CJK>
+0x5385 # <CJK>
+0x5386 # <CJK>
+0x5389 # <CJK>
+0x538B # <CJK>
+0x538C # <CJK>
+0x538D # <CJK>
+0x5395 # <CJK>
+0x5398 # <CJK>
+0x539A # <CJK>
+0x539D # <CJK>
+0x539F # <CJK>
+0x53A2 # <CJK>
+0x53A3 # <CJK>
+0x53A5 # <CJK>
+0x53A6 # <CJK>
+0x53A8 # <CJK>
+0x53A9 # <CJK>
+0x53AE # <CJK>
+0x53B6 # <CJK>
+0x53BB # <CJK>
+0x53BF # <CJK>
+0x53C1 # <CJK>
+0x53C2 # <CJK>
+0x53C8 # <CJK>
+0x53C9 # <CJK>
+0x53CA # <CJK>
+0x53CB # <CJK>
+0x53CC # <CJK>
+0x53CD # <CJK>
+0x53D1 # <CJK>
+0x53D4 # <CJK>
+0x53D6 # <CJK>
+0x53D7 # <CJK>
+0x53D8 # <CJK>
+0x53D9 # <CJK>
+0x53DB # <CJK>
+0x53DF # <CJK>
+0x53E0 # <CJK>
+0x53E3 # <CJK>
+0x53E4 # <CJK>
+0x53E5 # <CJK>
+0x53E6 # <CJK>
+0x53E8 # <CJK>
+0x53E9 # <CJK>
+0x53EA # <CJK>
+0x53EB # <CJK>
+0x53EC # <CJK>
+0x53ED # <CJK>
+0x53EE # <CJK>
+0x53EF # <CJK>
+0x53F0 # <CJK>
+0x53F1 # <CJK>
+0x53F2 # <CJK>
+0x53F3 # <CJK>
+0x53F5 # <CJK>
+0x53F6 # <CJK>
+0x53F7 # <CJK>
+0x53F8 # <CJK>
+0x53F9 # <CJK>
+0x53FB # <CJK>
+0x53FC # <CJK>
+0x53FD # <CJK>
+0x5401 # <CJK>
+0x5403 # <CJK>
+0x5404 # <CJK>
+0x5406 # <CJK>
+0x5408 # <CJK>
+0x5409 # <CJK>
+0x540A # <CJK>
+0x540C # <CJK>
+0x540D # <CJK>
+0x540E # <CJK>
+0x540F # <CJK>
+0x5410 # <CJK>
+0x5411 # <CJK>
+0x5412 # <CJK>
+0x5413 # <CJK>
+0x5415 # <CJK>
+0x5416 # <CJK>
+0x5417 # <CJK>
+0x541B # <CJK>
+0x541D # <CJK>
+0x541E # <CJK>
+0x541F # <CJK>
+0x5420 # <CJK>
+0x5421 # <CJK>
+0x5423 # <CJK>
+0x5426 # <CJK>
+0x5427 # <CJK>
+0x5428 # <CJK>
+0x5429 # <CJK>
+0x542B # <CJK>
+0x542C # <CJK>
+0x542D # <CJK>
+0x542E # <CJK>
+0x542F # <CJK>
+0x5431 # <CJK>
+0x5432 # <CJK>
+0x5434 # <CJK>
+0x5435 # <CJK>
+0x5438 # <CJK>
+0x5439 # <CJK>
+0x543B # <CJK>
+0x543C # <CJK>
+0x543E # <CJK>
+0x5440 # <CJK>
+0x5443 # <CJK>
+0x5446 # <CJK>
+0x5448 # <CJK>
+0x544A # <CJK>
+0x544B # <CJK>
+0x5450 # <CJK>
+0x5452 # <CJK>
+0x5453 # <CJK>
+0x5454 # <CJK>
+0x5455 # <CJK>
+0x5456 # <CJK>
+0x5457 # <CJK>
+0x5458 # <CJK>
+0x5459 # <CJK>
+0x545B # <CJK>
+0x545C # <CJK>
+0x5462 # <CJK>
+0x5464 # <CJK>
+0x5466 # <CJK>
+0x5468 # <CJK>
+0x5471 # <CJK>
+0x5472 # <CJK>
+0x5473 # <CJK>
+0x5475 # <CJK>
+0x5476 # <CJK>
+0x5477 # <CJK>
+0x5478 # <CJK>
+0x547B # <CJK>
+0x547C # <CJK>
+0x547D # <CJK>
+0x5480 # <CJK>
+0x5482 # <CJK>
+0x5484 # <CJK>
+0x5486 # <CJK>
+0x548B # <CJK>
+0x548C # <CJK>
+0x548E # <CJK>
+0x548F # <CJK>
+0x5490 # <CJK>
+0x5492 # <CJK>
+0x5494 # <CJK>
+0x5495 # <CJK>
+0x5496 # <CJK>
+0x5499 # <CJK>
+0x549A # <CJK>
+0x549B # <CJK>
+0x549D # <CJK>
+0x54A3 # <CJK>
+0x54A4 # <CJK>
+0x54A6 # <CJK>
+0x54A7 # <CJK>
+0x54A8 # <CJK>
+0x54A9 # <CJK>
+0x54AA # <CJK>
+0x54AB # <CJK>
+0x54AC # <CJK>
+0x54AD # <CJK>
+0x54AF # <CJK>
+0x54B1 # <CJK>
+0x54B3 # <CJK>
+0x54B4 # <CJK>
+0x54B8 # <CJK>
+0x54BB # <CJK>
+0x54BD # <CJK>
+0x54BF # <CJK>
+0x54C0 # <CJK>
+0x54C1 # <CJK>
+0x54C2 # <CJK>
+0x54C4 # <CJK>
+0x54C6 # <CJK>
+0x54C7 # <CJK>
+0x54C8 # <CJK>
+0x54C9 # <CJK>
+0x54CC # <CJK>
+0x54CD # <CJK>
+0x54CE # <CJK>
+0x54CF # <CJK>
+0x54D0 # <CJK>
+0x54D1 # <CJK>
+0x54D2 # <CJK>
+0x54D3 # <CJK>
+0x54D4 # <CJK>
+0x54D5 # <CJK>
+0x54D7 # <CJK>
+0x54D9 # <CJK>
+0x54DA # <CJK>
+0x54DC # <CJK>
+0x54DD # <CJK>
+0x54DE # <CJK>
+0x54DF # <CJK>
+0x54E5 # <CJK>
+0x54E6 # <CJK>
+0x54E7 # <CJK>
+0x54E8 # <CJK>
+0x54E9 # <CJK>
+0x54EA # <CJK>
+0x54ED # <CJK>
+0x54EE # <CJK>
+0x54F2 # <CJK>
+0x54F3 # <CJK>
+0x54FA # <CJK>
+0x54FC # <CJK>
+0x54FD # <CJK>
+0x54FF # <CJK>
+0x5501 # <CJK>
+0x5506 # <CJK>
+0x5507 # <CJK>
+0x5509 # <CJK>
+0x550F # <CJK>
+0x5510 # <CJK>
+0x5511 # <CJK>
+0x5514 # <CJK>
+0x551B # <CJK>
+0x5520 # <CJK>
+0x5522 # <CJK>
+0x5523 # <CJK>
+0x5524 # <CJK>
+0x5527 # <CJK>
+0x552A # <CJK>
+0x552C # <CJK>
+0x552E # <CJK>
+0x552F # <CJK>
+0x5530 # <CJK>
+0x5531 # <CJK>
+0x5533 # <CJK>
+0x5537 # <CJK>
+0x553C # <CJK>
+0x553E # <CJK>
+0x553F # <CJK>
+0x5541 # <CJK>
+0x5543 # <CJK>
+0x5544 # <CJK>
+0x5546 # <CJK>
+0x5549 # <CJK>
+0x554A # <CJK>
+0x5550 # <CJK>
+0x5555 # <CJK>
+0x5556 # <CJK>
+0x555C # <CJK>
+0x5561 # <CJK>
+0x5564 # <CJK>
+0x5565 # <CJK>
+0x5566 # <CJK>
+0x5567 # <CJK>
+0x556A # <CJK>
+0x556C # <CJK>
+0x556D # <CJK>
+0x556E # <CJK>
+0x5575 # <CJK>
+0x5576 # <CJK>
+0x5577 # <CJK>
+0x5578 # <CJK>
+0x557B # <CJK>
+0x557C # <CJK>
+0x557E # <CJK>
+0x5580 # <CJK>
+0x5581 # <CJK>
+0x5582 # <CJK>
+0x5583 # <CJK>
+0x5584 # <CJK>
+0x5587 # <CJK>
+0x5588 # <CJK>
+0x5589 # <CJK>
+0x558A # <CJK>
+0x558B # <CJK>
+0x558F # <CJK>
+0x5591 # <CJK>
+0x5594 # <CJK>
+0x5598 # <CJK>
+0x5599 # <CJK>
+0x559C # <CJK>
+0x559D # <CJK>
+0x559F # <CJK>
+0x55A7 # <CJK>
+0x55B1 # <CJK>
+0x55B3 # <CJK>
+0x55B5 # <CJK>
+0x55B7 # <CJK>
+0x55B9 # <CJK>
+0x55BB # <CJK>
+0x55BD # <CJK>
+0x55BE # <CJK>
+0x55C4 # <CJK>
+0x55C5 # <CJK>
+0x55C9 # <CJK>
+0x55CC # <CJK>
+0x55CD # <CJK>
+0x55D1 # <CJK>
+0x55D2 # <CJK>
+0x55D3 # <CJK>
+0x55D4 # <CJK>
+0x55D6 # <CJK>
+0x55DC # <CJK>
+0x55DD # <CJK>
+0x55DF # <CJK>
+0x55E1 # <CJK>
+0x55E3 # <CJK>
+0x55E4 # <CJK>
+0x55E5 # <CJK>
+0x55E6 # <CJK>
+0x55E8 # <CJK>
+0x55EA # <CJK>
+0x55EB # <CJK>
+0x55EC # <CJK>
+0x55EF # <CJK>
+0x55F2 # <CJK>
+0x55F3 # <CJK>
+0x55F5 # <CJK>
+0x55F7 # <CJK>
+0x55FD # <CJK>
+0x55FE # <CJK>
+0x5600 # <CJK>
+0x5601 # <CJK>
+0x5608 # <CJK>
+0x5609 # <CJK>
+0x560C # <CJK>
+0x560E # <CJK>
+0x560F # <CJK>
+0x5618 # <CJK>
+0x561B # <CJK>
+0x561E # <CJK>
+0x561F # <CJK>
+0x5623 # <CJK>
+0x5624 # <CJK>
+0x5627 # <CJK>
+0x562C # <CJK>
+0x562D # <CJK>
+0x5631 # <CJK>
+0x5632 # <CJK>
+0x5634 # <CJK>
+0x5636 # <CJK>
+0x5639 # <CJK>
+0x563B # <CJK>
+0x563F # <CJK>
+0x564C # <CJK>
+0x564D # <CJK>
+0x564E # <CJK>
+0x5654 # <CJK>
+0x5657 # <CJK>
+0x5658 # <CJK>
+0x5659 # <CJK>
+0x565C # <CJK>
+0x5662 # <CJK>
+0x5664 # <CJK>
+0x5668 # <CJK>
+0x5669 # <CJK>
+0x566A # <CJK>
+0x566B # <CJK>
+0x566C # <CJK>
+0x5671 # <CJK>
+0x5676 # <CJK>
+0x567B # <CJK>
+0x567C # <CJK>
+0x5685 # <CJK>
+0x5686 # <CJK>
+0x568E # <CJK>
+0x568F # <CJK>
+0x5693 # <CJK>
+0x56A3 # <CJK>
+0x56AF # <CJK>
+0x56B7 # <CJK>
+0x56BC # <CJK>
+0x56CA # <CJK>
+0x56D4 # <CJK>
+0x56D7 # <CJK>
+0x56DA # <CJK>
+0x56DB # <CJK>
+0x56DD # <CJK>
+0x56DE # <CJK>
+0x56DF # <CJK>
+0x56E0 # <CJK>
+0x56E1 # <CJK>
+0x56E2 # <CJK>
+0x56E4 # <CJK>
+0x56EB # <CJK>
+0x56ED # <CJK>
+0x56F0 # <CJK>
+0x56F1 # <CJK>
+0x56F4 # <CJK>
+0x56F5 # <CJK>
+0x56F9 # <CJK>
+0x56FA # <CJK>
+0x56FD # <CJK>
+0x56FE # <CJK>
+0x56FF # <CJK>
+0x5703 # <CJK>
+0x5704 # <CJK>
+0x5706 # <CJK>
+0x5708 # <CJK>
+0x5709 # <CJK>
+0x570A # <CJK>
+0x571C # <CJK>
+0x571F # <CJK>
+0x5723 # <CJK>
+0x5728 # <CJK>
+0x5729 # <CJK>
+0x572A # <CJK>
+0x572C # <CJK>
+0x572D # <CJK>
+0x572E # <CJK>
+0x572F # <CJK>
+0x5730 # <CJK>
+0x5733 # <CJK>
+0x5739 # <CJK>
+0x573A # <CJK>
+0x573B # <CJK>
+0x573E # <CJK>
+0x5740 # <CJK>
+0x5742 # <CJK>
+0x5747 # <CJK>
+0x574A # <CJK>
+0x574C # <CJK>
+0x574D # <CJK>
+0x574E # <CJK>
+0x574F # <CJK>
+0x5750 # <CJK>
+0x5751 # <CJK>
+0x5757 # <CJK>
+0x575A # <CJK>
+0x575B # <CJK>
+0x575C # <CJK>
+0x575D # <CJK>
+0x575E # <CJK>
+0x575F # <CJK>
+0x5760 # <CJK>
+0x5761 # <CJK>
+0x5764 # <CJK>
+0x5766 # <CJK>
+0x5768 # <CJK>
+0x5769 # <CJK>
+0x576A # <CJK>
+0x576B # <CJK>
+0x576D # <CJK>
+0x576F # <CJK>
+0x5773 # <CJK>
+0x5776 # <CJK>
+0x5777 # <CJK>
+0x577B # <CJK>
+0x577C # <CJK>
+0x5782 # <CJK>
+0x5783 # <CJK>
+0x5784 # <CJK>
+0x5785 # <CJK>
+0x5786 # <CJK>
+0x578B # <CJK>
+0x578C # <CJK>
+0x5792 # <CJK>
+0x5793 # <CJK>
+0x579B # <CJK>
+0x57A0 # <CJK>
+0x57A1 # <CJK>
+0x57A2 # <CJK>
+0x57A3 # <CJK>
+0x57A4 # <CJK>
+0x57A6 # <CJK>
+0x57A7 # <CJK>
+0x57A9 # <CJK>
+0x57AB # <CJK>
+0x57AD # <CJK>
+0x57AE # <CJK>
+0x57B2 # <CJK>
+0x57B4 # <CJK>
+0x57B8 # <CJK>
+0x57C2 # <CJK>
+0x57C3 # <CJK>
+0x57CB # <CJK>
+0x57CE # <CJK>
+0x57CF # <CJK>
+0x57D2 # <CJK>
+0x57D4 # <CJK>
+0x57D5 # <CJK>
+0x57D8 # <CJK>
+0x57D9 # <CJK>
+0x57DA # <CJK>
+0x57DD # <CJK>
+0x57DF # <CJK>
+0x57E0 # <CJK>
+0x57E4 # <CJK>
+0x57ED # <CJK>
+0x57EF # <CJK>
+0x57F4 # <CJK>
+0x57F8 # <CJK>
+0x57F9 # <CJK>
+0x57FA # <CJK>
+0x57FD # <CJK>
+0x5800 # <CJK>
+0x5802 # <CJK>
+0x5806 # <CJK>
+0x5807 # <CJK>
+0x580B # <CJK>
+0x580D # <CJK>
+0x5811 # <CJK>
+0x5815 # <CJK>
+0x5819 # <CJK>
+0x581E # <CJK>
+0x5820 # <CJK>
+0x5821 # <CJK>
+0x5824 # <CJK>
+0x582A # <CJK>
+0x5830 # <CJK>
+0x5835 # <CJK>
+0x5844 # <CJK>
+0x584C # <CJK>
+0x584D # <CJK>
+0x5851 # <CJK>
+0x5854 # <CJK>
+0x5858 # <CJK>
+0x585E # <CJK>
+0x5865 # <CJK>
+0x586B # <CJK>
+0x586C # <CJK>
+0x587E # <CJK>
+0x5880 # <CJK>
+0x5881 # <CJK>
+0x5883 # <CJK>
+0x5885 # <CJK>
+0x5889 # <CJK>
+0x5892 # <CJK>
+0x5893 # <CJK>
+0x5899 # <CJK>
+0x589A # <CJK>
+0x589E # <CJK>
+0x589F # <CJK>
+0x58A8 # <CJK>
+0x58A9 # <CJK>
+0x58BC # <CJK>
+0x58C1 # <CJK>
+0x58C5 # <CJK>
+0x58D1 # <CJK>
+0x58D5 # <CJK>
+0x58E4 # <CJK>
+0x58EB # <CJK>
+0x58EC # <CJK>
+0x58EE # <CJK>
+0x58F0 # <CJK>
+0x58F3 # <CJK>
+0x58F6 # <CJK>
+0x58F9 # <CJK>
+0x5902 # <CJK>
+0x5904 # <CJK>
+0x5907 # <CJK>
+0x590D # <CJK>
+0x590F # <CJK>
+0x5914 # <CJK>
+0x5915 # <CJK>
+0x5916 # <CJK>
+0x5919 # <CJK>
+0x591A # <CJK>
+0x591C # <CJK>
+0x591F # <CJK>
+0x5924 # <CJK>
+0x5925 # <CJK>
+0x5927 # <CJK>
+0x5929 # <CJK>
+0x592A # <CJK>
+0x592B # <CJK>
+0x592D # <CJK>
+0x592E # <CJK>
+0x592F # <CJK>
+0x5931 # <CJK>
+0x5934 # <CJK>
+0x5937 # <CJK>
+0x5938 # <CJK>
+0x5939 # <CJK>
+0x593A # <CJK>
+0x593C # <CJK>
+0x5941 # <CJK>
+0x5942 # <CJK>
+0x5944 # <CJK>
+0x5947 # <CJK>
+0x5948 # <CJK>
+0x5949 # <CJK>
+0x594B # <CJK>
+0x594E # <CJK>
+0x594F # <CJK>
+0x5951 # <CJK>
+0x5954 # <CJK>
+0x5955 # <CJK>
+0x5956 # <CJK>
+0x5957 # <CJK>
+0x5958 # <CJK>
+0x595A # <CJK>
+0x5960 # <CJK>
+0x5962 # <CJK>
+0x5965 # <CJK>
+0x5973 # <CJK>
+0x5974 # <CJK>
+0x5976 # <CJK>
+0x5978 # <CJK>
+0x5979 # <CJK>
+0x597D # <CJK>
+0x5981 # <CJK>
+0x5982 # <CJK>
+0x5983 # <CJK>
+0x5984 # <CJK>
+0x5986 # <CJK>
+0x5987 # <CJK>
+0x5988 # <CJK>
+0x598A # <CJK>
+0x598D # <CJK>
+0x5992 # <CJK>
+0x5993 # <CJK>
+0x5996 # <CJK>
+0x5997 # <CJK>
+0x5999 # <CJK>
+0x599E # <CJK>
+0x59A3 # <CJK>
+0x59A4 # <CJK>
+0x59A5 # <CJK>
+0x59A8 # <CJK>
+0x59A9 # <CJK>
+0x59AA # <CJK>
+0x59AB # <CJK>
+0x59AE # <CJK>
+0x59AF # <CJK>
+0x59B2 # <CJK>
+0x59B9 # <CJK>
+0x59BB # <CJK>
+0x59BE # <CJK>
+0x59C6 # <CJK>
+0x59CA # <CJK>
+0x59CB # <CJK>
+0x59D0 # <CJK>
+0x59D1 # <CJK>
+0x59D2 # <CJK>
+0x59D3 # <CJK>
+0x59D4 # <CJK>
+0x59D7 # <CJK>
+0x59D8 # <CJK>
+0x59DA # <CJK>
+0x59DC # <CJK>
+0x59DD # <CJK>
+0x59E3 # <CJK>
+0x59E5 # <CJK>
+0x59E8 # <CJK>
+0x59EC # <CJK>
+0x59F9 # <CJK>
+0x59FB # <CJK>
+0x59FF # <CJK>
+0x5A01 # <CJK>
+0x5A03 # <CJK>
+0x5A04 # <CJK>
+0x5A05 # <CJK>
+0x5A06 # <CJK>
+0x5A07 # <CJK>
+0x5A08 # <CJK>
+0x5A09 # <CJK>
+0x5A0C # <CJK>
+0x5A11 # <CJK>
+0x5A13 # <CJK>
+0x5A18 # <CJK>
+0x5A1C # <CJK>
+0x5A1F # <CJK>
+0x5A20 # <CJK>
+0x5A23 # <CJK>
+0x5A25 # <CJK>
+0x5A29 # <CJK>
+0x5A31 # <CJK>
+0x5A32 # <CJK>
+0x5A34 # <CJK>
+0x5A36 # <CJK>
+0x5A3C # <CJK>
+0x5A40 # <CJK>
+0x5A46 # <CJK>
+0x5A49 # <CJK>
+0x5A4A # <CJK>
+0x5A55 # <CJK>
+0x5A5A # <CJK>
+0x5A62 # <CJK>
+0x5A67 # <CJK>
+0x5A6A # <CJK>
+0x5A74 # <CJK>
+0x5A75 # <CJK>
+0x5A76 # <CJK>
+0x5A77 # <CJK>
+0x5A7A # <CJK>
+0x5A7F # <CJK>
+0x5A92 # <CJK>
+0x5A9A # <CJK>
+0x5A9B # <CJK>
+0x5AAA # <CJK>
+0x5AB2 # <CJK>
+0x5AB3 # <CJK>
+0x5AB5 # <CJK>
+0x5AB8 # <CJK>
+0x5ABE # <CJK>
+0x5AC1 # <CJK>
+0x5AC2 # <CJK>
+0x5AC9 # <CJK>
+0x5ACC # <CJK>
+0x5AD2 # <CJK>
+0x5AD4 # <CJK>
+0x5AD6 # <CJK>
+0x5AD8 # <CJK>
+0x5ADC # <CJK>
+0x5AE0 # <CJK>
+0x5AE1 # <CJK>
+0x5AE3 # <CJK>
+0x5AE6 # <CJK>
+0x5AE9 # <CJK>
+0x5AEB # <CJK>
+0x5AF1 # <CJK>
+0x5B09 # <CJK>
+0x5B16 # <CJK>
+0x5B17 # <CJK>
+0x5B32 # <CJK>
+0x5B34 # <CJK>
+0x5B37 # <CJK>
+0x5B40 # <CJK>
+0x5B50 # <CJK>
+0x5B51 # <CJK>
+0x5B53 # <CJK>
+0x5B54 # <CJK>
+0x5B55 # <CJK>
+0x5B57 # <CJK>
+0x5B58 # <CJK>
+0x5B59 # <CJK>
+0x5B5A # <CJK>
+0x5B5B # <CJK>
+0x5B5C # <CJK>
+0x5B5D # <CJK>
+0x5B5F # <CJK>
+0x5B62 # <CJK>
+0x5B63 # <CJK>
+0x5B64 # <CJK>
+0x5B65 # <CJK>
+0x5B66 # <CJK>
+0x5B69 # <CJK>
+0x5B6A # <CJK>
+0x5B6C # <CJK>
+0x5B70 # <CJK>
+0x5B71 # <CJK>
+0x5B73 # <CJK>
+0x5B75 # <CJK>
+0x5B7A # <CJK>
+0x5B7D # <CJK>
+0x5B80 # <CJK>
+0x5B81 # <CJK>
+0x5B83 # <CJK>
+0x5B84 # <CJK>
+0x5B85 # <CJK>
+0x5B87 # <CJK>
+0x5B88 # <CJK>
+0x5B89 # <CJK>
+0x5B8B # <CJK>
+0x5B8C # <CJK>
+0x5B8F # <CJK>
+0x5B93 # <CJK>
+0x5B95 # <CJK>
+0x5B97 # <CJK>
+0x5B98 # <CJK>
+0x5B99 # <CJK>
+0x5B9A # <CJK>
+0x5B9B # <CJK>
+0x5B9C # <CJK>
+0x5B9D # <CJK>
+0x5B9E # <CJK>
+0x5BA0 # <CJK>
+0x5BA1 # <CJK>
+0x5BA2 # <CJK>
+0x5BA3 # <CJK>
+0x5BA4 # <CJK>
+0x5BA5 # <CJK>
+0x5BA6 # <CJK>
+0x5BAA # <CJK>
+0x5BAB # <CJK>
+0x5BB0 # <CJK>
+0x5BB3 # <CJK>
+0x5BB4 # <CJK>
+0x5BB5 # <CJK>
+0x5BB6 # <CJK>
+0x5BB8 # <CJK>
+0x5BB9 # <CJK>
+0x5BBD # <CJK>
+0x5BBE # <CJK>
+0x5BBF # <CJK>
+0x5BC2 # <CJK>
+0x5BC4 # <CJK>
+0x5BC5 # <CJK>
+0x5BC6 # <CJK>
+0x5BC7 # <CJK>
+0x5BCC # <CJK>
+0x5BD0 # <CJK>
+0x5BD2 # <CJK>
+0x5BD3 # <CJK>
+0x5BDD # <CJK>
+0x5BDE # <CJK>
+0x5BDF # <CJK>
+0x5BE1 # <CJK>
+0x5BE4 # <CJK>
+0x5BE5 # <CJK>
+0x5BE8 # <CJK>
+0x5BEE # <CJK>
+0x5BF0 # <CJK>
+0x5BF8 # <CJK>
+0x5BF9 # <CJK>
+0x5BFA # <CJK>
+0x5BFB # <CJK>
+0x5BFC # <CJK>
+0x5BFF # <CJK>
+0x5C01 # <CJK>
+0x5C04 # <CJK>
+0x5C06 # <CJK>
+0x5C09 # <CJK>
+0x5C0A # <CJK>
+0x5C0F # <CJK>
+0x5C11 # <CJK>
+0x5C14 # <CJK>
+0x5C15 # <CJK>
+0x5C16 # <CJK>
+0x5C18 # <CJK>
+0x5C1A # <CJK>
+0x5C1C # <CJK>
+0x5C1D # <CJK>
+0x5C22 # <CJK>
+0x5C24 # <CJK>
+0x5C25 # <CJK>
+0x5C27 # <CJK>
+0x5C2C # <CJK>
+0x5C31 # <CJK>
+0x5C34 # <CJK>
+0x5C38 # <CJK>
+0x5C39 # <CJK>
+0x5C3A # <CJK>
+0x5C3B # <CJK>
+0x5C3C # <CJK>
+0x5C3D # <CJK>
+0x5C3E # <CJK>
+0x5C3F # <CJK>
+0x5C40 # <CJK>
+0x5C41 # <CJK>
+0x5C42 # <CJK>
+0x5C45 # <CJK>
+0x5C48 # <CJK>
+0x5C49 # <CJK>
+0x5C4A # <CJK>
+0x5C4B # <CJK>
+0x5C4E # <CJK>
+0x5C4F # <CJK>
+0x5C50 # <CJK>
+0x5C51 # <CJK>
+0x5C55 # <CJK>
+0x5C59 # <CJK>
+0x5C5E # <CJK>
+0x5C60 # <CJK>
+0x5C61 # <CJK>
+0x5C63 # <CJK>
+0x5C65 # <CJK>
+0x5C66 # <CJK>
+0x5C6E # <CJK>
+0x5C6F # <CJK>
+0x5C71 # <CJK>
+0x5C79 # <CJK>
+0x5C7A # <CJK>
+0x5C7F # <CJK>
+0x5C81 # <CJK>
+0x5C82 # <CJK>
+0x5C88 # <CJK>
+0x5C8C # <CJK>
+0x5C8D # <CJK>
+0x5C90 # <CJK>
+0x5C91 # <CJK>
+0x5C94 # <CJK>
+0x5C96 # <CJK>
+0x5C97 # <CJK>
+0x5C98 # <CJK>
+0x5C99 # <CJK>
+0x5C9A # <CJK>
+0x5C9B # <CJK>
+0x5C9C # <CJK>
+0x5CA2 # <CJK>
+0x5CA3 # <CJK>
+0x5CA9 # <CJK>
+0x5CAB # <CJK>
+0x5CAC # <CJK>
+0x5CAD # <CJK>
+0x5CB1 # <CJK>
+0x5CB3 # <CJK>
+0x5CB5 # <CJK>
+0x5CB7 # <CJK>
+0x5CB8 # <CJK>
+0x5CBD # <CJK>
+0x5CBF # <CJK>
+0x5CC1 # <CJK>
+0x5CC4 # <CJK>
+0x5CCB # <CJK>
+0x5CD2 # <CJK>
+0x5CD9 # <CJK>
+0x5CE1 # <CJK>
+0x5CE4 # <CJK>
+0x5CE5 # <CJK>
+0x5CE6 # <CJK>
+0x5CE8 # <CJK>
+0x5CEA # <CJK>
+0x5CED # <CJK>
+0x5CF0 # <CJK>
+0x5CFB # <CJK>
+0x5D02 # <CJK>
+0x5D03 # <CJK>
+0x5D06 # <CJK>
+0x5D07 # <CJK>
+0x5D0E # <CJK>
+0x5D14 # <CJK>
+0x5D16 # <CJK>
+0x5D1B # <CJK>
+0x5D1E # <CJK>
+0x5D24 # <CJK>
+0x5D26 # <CJK>
+0x5D27 # <CJK>
+0x5D29 # <CJK>
+0x5D2D # <CJK>
+0x5D2E # <CJK>
+0x5D34 # <CJK>
+0x5D3D # <CJK>
+0x5D3E # <CJK>
+0x5D47 # <CJK>
+0x5D4A # <CJK>
+0x5D4B # <CJK>
+0x5D4C # <CJK>
+0x5D58 # <CJK>
+0x5D5B # <CJK>
+0x5D5D # <CJK>
+0x5D69 # <CJK>
+0x5D6B # <CJK>
+0x5D6C # <CJK>
+0x5D6F # <CJK>
+0x5D74 # <CJK>
+0x5D82 # <CJK>
+0x5D99 # <CJK>
+0x5D9D # <CJK>
+0x5DB7 # <CJK>
+0x5DC5 # <CJK>
+0x5DCD # <CJK>
+0x5DDB # <CJK>
+0x5DDD # <CJK>
+0x5DDE # <CJK>
+0x5DE1 # <CJK>
+0x5DE2 # <CJK>
+0x5DE5 # <CJK>
+0x5DE6 # <CJK>
+0x5DE7 # <CJK>
+0x5DE8 # <CJK>
+0x5DE9 # <CJK>
+0x5DEB # <CJK>
+0x5DEE # <CJK>
+0x5DEF # <CJK>
+0x5DF1 # <CJK>
+0x5DF2 # <CJK>
+0x5DF3 # <CJK>
+0x5DF4 # <CJK>
+0x5DF7 # <CJK>
+0x5DFD # <CJK>
+0x5DFE # <CJK>
+0x5E01 # <CJK>
+0x5E02 # <CJK>
+0x5E03 # <CJK>
+0x5E05 # <CJK>
+0x5E06 # <CJK>
+0x5E08 # <CJK>
+0x5E0C # <CJK>
+0x5E0F # <CJK>
+0x5E10 # <CJK>
+0x5E11 # <CJK>
+0x5E14 # <CJK>
+0x5E15 # <CJK>
+0x5E16 # <CJK>
+0x5E18 # <CJK>
+0x5E19 # <CJK>
+0x5E1A # <CJK>
+0x5E1B # <CJK>
+0x5E1C # <CJK>
+0x5E1D # <CJK>
+0x5E26 # <CJK>
+0x5E27 # <CJK>
+0x5E2D # <CJK>
+0x5E2E # <CJK>
+0x5E31 # <CJK>
+0x5E37 # <CJK>
+0x5E38 # <CJK>
+0x5E3B # <CJK>
+0x5E3C # <CJK>
+0x5E3D # <CJK>
+0x5E42 # <CJK>
+0x5E44 # <CJK>
+0x5E45 # <CJK>
+0x5E4C # <CJK>
+0x5E54 # <CJK>
+0x5E55 # <CJK>
+0x5E5B # <CJK>
+0x5E5E # <CJK>
+0x5E61 # <CJK>
+0x5E62 # <CJK>
+0x5E72 # <CJK>
+0x5E73 # <CJK>
+0x5E74 # <CJK>
+0x5E76 # <CJK>
+0x5E78 # <CJK>
+0x5E7A # <CJK>
+0x5E7B # <CJK>
+0x5E7C # <CJK>
+0x5E7D # <CJK>
+0x5E7F # <CJK>
+0x5E80 # <CJK>
+0x5E84 # <CJK>
+0x5E86 # <CJK>
+0x5E87 # <CJK>
+0x5E8A # <CJK>
+0x5E8B # <CJK>
+0x5E8F # <CJK>
+0x5E90 # <CJK>
+0x5E91 # <CJK>
+0x5E93 # <CJK>
+0x5E94 # <CJK>
+0x5E95 # <CJK>
+0x5E96 # <CJK>
+0x5E97 # <CJK>
+0x5E99 # <CJK>
+0x5E9A # <CJK>
+0x5E9C # <CJK>
+0x5E9E # <CJK>
+0x5E9F # <CJK>
+0x5EA0 # <CJK>
+0x5EA5 # <CJK>
+0x5EA6 # <CJK>
+0x5EA7 # <CJK>
+0x5EAD # <CJK>
+0x5EB3 # <CJK>
+0x5EB5 # <CJK>
+0x5EB6 # <CJK>
+0x5EB7 # <CJK>
+0x5EB8 # <CJK>
+0x5EB9 # <CJK>
+0x5EBE # <CJK>
+0x5EC9 # <CJK>
+0x5ECA # <CJK>
+0x5ED1 # <CJK>
+0x5ED2 # <CJK>
+0x5ED3 # <CJK>
+0x5ED6 # <CJK>
+0x5EDB # <CJK>
+0x5EE8 # <CJK>
+0x5EEA # <CJK>
+0x5EF4 # <CJK>
+0x5EF6 # <CJK>
+0x5EF7 # <CJK>
+0x5EFA # <CJK>
+0x5EFE # <CJK>
+0x5EFF # <CJK>
+0x5F00 # <CJK>
+0x5F01 # <CJK>
+0x5F02 # <CJK>
+0x5F03 # <CJK>
+0x5F04 # <CJK>
+0x5F08 # <CJK>
+0x5F0A # <CJK>
+0x5F0B # <CJK>
+0x5F0F # <CJK>
+0x5F11 # <CJK>
+0x5F13 # <CJK>
+0x5F15 # <CJK>
+0x5F17 # <CJK>
+0x5F18 # <CJK>
+0x5F1B # <CJK>
+0x5F1F # <CJK>
+0x5F20 # <CJK>
+0x5F25 # <CJK>
+0x5F26 # <CJK>
+0x5F27 # <CJK>
+0x5F29 # <CJK>
+0x5F2A # <CJK>
+0x5F2D # <CJK>
+0x5F2F # <CJK>
+0x5F31 # <CJK>
+0x5F39 # <CJK>
+0x5F3A # <CJK>
+0x5F3C # <CJK>
+0x5F40 # <CJK>
+0x5F50 # <CJK>
+0x5F52 # <CJK>
+0x5F53 # <CJK>
+0x5F55 # <CJK>
+0x5F56 # <CJK>
+0x5F57 # <CJK>
+0x5F58 # <CJK>
+0x5F5D # <CJK>
+0x5F61 # <CJK>
+0x5F62 # <CJK>
+0x5F64 # <CJK>
+0x5F66 # <CJK>
+0x5F69 # <CJK>
+0x5F6A # <CJK>
+0x5F6C # <CJK>
+0x5F6D # <CJK>
+0x5F70 # <CJK>
+0x5F71 # <CJK>
+0x5F73 # <CJK>
+0x5F77 # <CJK>
+0x5F79 # <CJK>
+0x5F7B # <CJK>
+0x5F7C # <CJK>
+0x5F80 # <CJK>
+0x5F81 # <CJK>
+0x5F82 # <CJK>
+0x5F84 # <CJK>
+0x5F85 # <CJK>
+0x5F87 # <CJK>
+0x5F88 # <CJK>
+0x5F89 # <CJK>
+0x5F8A # <CJK>
+0x5F8B # <CJK>
+0x5F8C # <CJK>
+0x5F90 # <CJK>
+0x5F92 # <CJK>
+0x5F95 # <CJK>
+0x5F97 # <CJK>
+0x5F98 # <CJK>
+0x5F99 # <CJK>
+0x5F9C # <CJK>
+0x5FA1 # <CJK>
+0x5FA8 # <CJK>
+0x5FAA # <CJK>
+0x5FAD # <CJK>
+0x5FAE # <CJK>
+0x5FB5 # <CJK>
+0x5FB7 # <CJK>
+0x5FBC # <CJK>
+0x5FBD # <CJK>
+0x5FC3 # <CJK>
+0x5FC4 # <CJK>
+0x5FC5 # <CJK>
+0x5FC6 # <CJK>
+0x5FC9 # <CJK>
+0x5FCC # <CJK>
+0x5FCD # <CJK>
+0x5FCF # <CJK>
+0x5FD0 # <CJK>
+0x5FD1 # <CJK>
+0x5FD2 # <CJK>
+0x5FD6 # <CJK>
+0x5FD7 # <CJK>
+0x5FD8 # <CJK>
+0x5FD9 # <CJK>
+0x5FDD # <CJK>
+0x5FE0 # <CJK>
+0x5FE1 # <CJK>
+0x5FE4 # <CJK>
+0x5FE7 # <CJK>
+0x5FEA # <CJK>
+0x5FEB # <CJK>
+0x5FED # <CJK>
+0x5FEE # <CJK>
+0x5FF1 # <CJK>
+0x5FF5 # <CJK>
+0x5FF8 # <CJK>
+0x5FFB # <CJK>
+0x5FFD # <CJK>
+0x5FFE # <CJK>
+0x5FFF # <CJK>
+0x6000 # <CJK>
+0x6001 # <CJK>
+0x6002 # <CJK>
+0x6003 # <CJK>
+0x6004 # <CJK>
+0x6005 # <CJK>
+0x6006 # <CJK>
+0x600A # <CJK>
+0x600D # <CJK>
+0x600E # <CJK>
+0x600F # <CJK>
+0x6012 # <CJK>
+0x6014 # <CJK>
+0x6015 # <CJK>
+0x6016 # <CJK>
+0x6019 # <CJK>
+0x601B # <CJK>
+0x601C # <CJK>
+0x601D # <CJK>
+0x6020 # <CJK>
+0x6021 # <CJK>
+0x6025 # <CJK>
+0x6026 # <CJK>
+0x6027 # <CJK>
+0x6028 # <CJK>
+0x6029 # <CJK>
+0x602A # <CJK>
+0x602B # <CJK>
+0x602F # <CJK>
+0x6035 # <CJK>
+0x603B # <CJK>
+0x603C # <CJK>
+0x603F # <CJK>
+0x6041 # <CJK>
+0x6042 # <CJK>
+0x6043 # <CJK>
+0x604B # <CJK>
+0x604D # <CJK>
+0x6050 # <CJK>
+0x6052 # <CJK>
+0x6055 # <CJK>
+0x6059 # <CJK>
+0x605A # <CJK>
+0x605D # <CJK>
+0x6062 # <CJK>
+0x6063 # <CJK>
+0x6064 # <CJK>
+0x6067 # <CJK>
+0x6068 # <CJK>
+0x6069 # <CJK>
+0x606A # <CJK>
+0x606B # <CJK>
+0x606C # <CJK>
+0x606D # <CJK>
+0x606F # <CJK>
+0x6070 # <CJK>
+0x6073 # <CJK>
+0x6076 # <CJK>
+0x6078 # <CJK>
+0x6079 # <CJK>
+0x607A # <CJK>
+0x607B # <CJK>
+0x607C # <CJK>
+0x607D # <CJK>
+0x607F # <CJK>
+0x6083 # <CJK>
+0x6084 # <CJK>
+0x6089 # <CJK>
+0x608C # <CJK>
+0x608D # <CJK>
+0x6092 # <CJK>
+0x6094 # <CJK>
+0x6096 # <CJK>
+0x609A # <CJK>
+0x609B # <CJK>
+0x609D # <CJK>
+0x609F # <CJK>
+0x60A0 # <CJK>
+0x60A3 # <CJK>
+0x60A6 # <CJK>
+0x60A8 # <CJK>
+0x60AB # <CJK>
+0x60AC # <CJK>
+0x60AD # <CJK>
+0x60AF # <CJK>
+0x60B1 # <CJK>
+0x60B2 # <CJK>
+0x60B4 # <CJK>
+0x60B8 # <CJK>
+0x60BB # <CJK>
+0x60BC # <CJK>
+0x60C5 # <CJK>
+0x60C6 # <CJK>
+0x60CA # <CJK>
+0x60CB # <CJK>
+0x60D1 # <CJK>
+0x60D5 # <CJK>
+0x60D8 # <CJK>
+0x60DA # <CJK>
+0x60DC # <CJK>
+0x60DD # <CJK>
+0x60DF # <CJK>
+0x60E0 # <CJK>
+0x60E6 # <CJK>
+0x60E7 # <CJK>
+0x60E8 # <CJK>
+0x60E9 # <CJK>
+0x60EB # <CJK>
+0x60EC # <CJK>
+0x60ED # <CJK>
+0x60EE # <CJK>
+0x60EF # <CJK>
+0x60F0 # <CJK>
+0x60F3 # <CJK>
+0x60F4 # <CJK>
+0x60F6 # <CJK>
+0x60F9 # <CJK>
+0x60FA # <CJK>
+0x6100 # <CJK>
+0x6101 # <CJK>
+0x6106 # <CJK>
+0x6108 # <CJK>
+0x6109 # <CJK>
+0x610D # <CJK>
+0x610E # <CJK>
+0x610F # <CJK>
+0x6115 # <CJK>
+0x611A # <CJK>
+0x611F # <CJK>
+0x6120 # <CJK>
+0x6123 # <CJK>
+0x6124 # <CJK>
+0x6126 # <CJK>
+0x6127 # <CJK>
+0x612B # <CJK>
+0x613F # <CJK>
+0x6148 # <CJK>
+0x614A # <CJK>
+0x614C # <CJK>
+0x614E # <CJK>
+0x6151 # <CJK>
+0x6155 # <CJK>
+0x615D # <CJK>
+0x6162 # <CJK>
+0x6167 # <CJK>
+0x6168 # <CJK>
+0x6170 # <CJK>
+0x6175 # <CJK>
+0x6177 # <CJK>
+0x618B # <CJK>
+0x618E # <CJK>
+0x6194 # <CJK>
+0x619D # <CJK>
+0x61A7 # <CJK>
+0x61A8 # <CJK>
+0x61A9 # <CJK>
+0x61AC # <CJK>
+0x61B7 # <CJK>
+0x61BE # <CJK>
+0x61C2 # <CJK>
+0x61C8 # <CJK>
+0x61CA # <CJK>
+0x61CB # <CJK>
+0x61D1 # <CJK>
+0x61D2 # <CJK>
+0x61D4 # <CJK>
+0x61E6 # <CJK>
+0x61F5 # <CJK>
+0x61FF # <CJK>
+0x6206 # <CJK>
+0x6208 # <CJK>
+0x620A # <CJK>
+0x620B # <CJK>
+0x620C # <CJK>
+0x620D # <CJK>
+0x620E # <CJK>
+0x620F # <CJK>
+0x6210 # <CJK>
+0x6211 # <CJK>
+0x6212 # <CJK>
+0x6215 # <CJK>
+0x6216 # <CJK>
+0x6217 # <CJK>
+0x6218 # <CJK>
+0x621A # <CJK>
+0x621B # <CJK>
+0x621F # <CJK>
+0x6221 # <CJK>
+0x6222 # <CJK>
+0x6224 # <CJK>
+0x6225 # <CJK>
+0x622A # <CJK>
+0x622C # <CJK>
+0x622E # <CJK>
+0x6233 # <CJK>
+0x6234 # <CJK>
+0x6237 # <CJK>
+0x623D # <CJK>
+0x623E # <CJK>
+0x623F # <CJK>
+0x6240 # <CJK>
+0x6241 # <CJK>
+0x6243 # <CJK>
+0x6247 # <CJK>
+0x6248 # <CJK>
+0x6249 # <CJK>
+0x624B # <CJK>
+0x624C # <CJK>
+0x624D # <CJK>
+0x624E # <CJK>
+0x6251 # <CJK>
+0x6252 # <CJK>
+0x6253 # <CJK>
+0x6254 # <CJK>
+0x6258 # <CJK>
+0x625B # <CJK>
+0x6263 # <CJK>
+0x6266 # <CJK>
+0x6267 # <CJK>
+0x6269 # <CJK>
+0x626A # <CJK>
+0x626B # <CJK>
+0x626C # <CJK>
+0x626D # <CJK>
+0x626E # <CJK>
+0x626F # <CJK>
+0x6270 # <CJK>
+0x6273 # <CJK>
+0x6276 # <CJK>
+0x6279 # <CJK>
+0x627C # <CJK>
+0x627E # <CJK>
+0x627F # <CJK>
+0x6280 # <CJK>
+0x6284 # <CJK>
+0x6289 # <CJK>
+0x628A # <CJK>
+0x6291 # <CJK>
+0x6292 # <CJK>
+0x6293 # <CJK>
+0x6295 # <CJK>
+0x6296 # <CJK>
+0x6297 # <CJK>
+0x6298 # <CJK>
+0x629A # <CJK>
+0x629B # <CJK>
+0x629F # <CJK>
+0x62A0 # <CJK>
+0x62A1 # <CJK>
+0x62A2 # <CJK>
+0x62A4 # <CJK>
+0x62A5 # <CJK>
+0x62A8 # <CJK>
+0x62AB # <CJK>
+0x62AC # <CJK>
+0x62B1 # <CJK>
+0x62B5 # <CJK>
+0x62B9 # <CJK>
+0x62BB # <CJK>
+0x62BC # <CJK>
+0x62BD # <CJK>
+0x62BF # <CJK>
+0x62C2 # <CJK>
+0x62C4 # <CJK>
+0x62C5 # <CJK>
+0x62C6 # <CJK>
+0x62C7 # <CJK>
+0x62C8 # <CJK>
+0x62C9 # <CJK>
+0x62CA # <CJK>
+0x62CC # <CJK>
+0x62CD # <CJK>
+0x62CE # <CJK>
+0x62D0 # <CJK>
+0x62D2 # <CJK>
+0x62D3 # <CJK>
+0x62D4 # <CJK>
+0x62D6 # <CJK>
+0x62D7 # <CJK>
+0x62D8 # <CJK>
+0x62D9 # <CJK>
+0x62DA # <CJK>
+0x62DB # <CJK>
+0x62DC # <CJK>
+0x62DF # <CJK>
+0x62E2 # <CJK>
+0x62E3 # <CJK>
+0x62E5 # <CJK>
+0x62E6 # <CJK>
+0x62E7 # <CJK>
+0x62E8 # <CJK>
+0x62E9 # <CJK>
+0x62EC # <CJK>
+0x62ED # <CJK>
+0x62EE # <CJK>
+0x62EF # <CJK>
+0x62F1 # <CJK>
+0x62F3 # <CJK>
+0x62F4 # <CJK>
+0x62F6 # <CJK>
+0x62F7 # <CJK>
+0x62FC # <CJK>
+0x62FD # <CJK>
+0x62FE # <CJK>
+0x62FF # <CJK>
+0x6301 # <CJK>
+0x6302 # <CJK>
+0x6307 # <CJK>
+0x6308 # <CJK>
+0x6309 # <CJK>
+0x630E # <CJK>
+0x6311 # <CJK>
+0x6316 # <CJK>
+0x631A # <CJK>
+0x631B # <CJK>
+0x631D # <CJK>
+0x631E # <CJK>
+0x631F # <CJK>
+0x6320 # <CJK>
+0x6321 # <CJK>
+0x6322 # <CJK>
+0x6323 # <CJK>
+0x6324 # <CJK>
+0x6325 # <CJK>
+0x6328 # <CJK>
+0x632A # <CJK>
+0x632B # <CJK>
+0x632F # <CJK>
+0x6332 # <CJK>
+0x6339 # <CJK>
+0x633A # <CJK>
+0x633D # <CJK>
+0x6342 # <CJK>
+0x6343 # <CJK>
+0x6345 # <CJK>
+0x6346 # <CJK>
+0x6349 # <CJK>
+0x634B # <CJK>
+0x634C # <CJK>
+0x634D # <CJK>
+0x634E # <CJK>
+0x634F # <CJK>
+0x6350 # <CJK>
+0x6355 # <CJK>
+0x635E # <CJK>
+0x635F # <CJK>
+0x6361 # <CJK>
+0x6362 # <CJK>
+0x6363 # <CJK>
+0x6367 # <CJK>
+0x6369 # <CJK>
+0x636D # <CJK>
+0x636E # <CJK>
+0x6371 # <CJK>
+0x6376 # <CJK>
+0x6377 # <CJK>
+0x637A # <CJK>
+0x637B # <CJK>
+0x6380 # <CJK>
+0x6382 # <CJK>
+0x6387 # <CJK>
+0x6388 # <CJK>
+0x6389 # <CJK>
+0x638A # <CJK>
+0x638C # <CJK>
+0x638E # <CJK>
+0x638F # <CJK>
+0x6390 # <CJK>
+0x6392 # <CJK>
+0x6396 # <CJK>
+0x6398 # <CJK>
+0x63A0 # <CJK>
+0x63A2 # <CJK>
+0x63A3 # <CJK>
+0x63A5 # <CJK>
+0x63A7 # <CJK>
+0x63A8 # <CJK>
+0x63A9 # <CJK>
+0x63AA # <CJK>
+0x63AC # <CJK>
+0x63AD # <CJK>
+0x63AE # <CJK>
+0x63B0 # <CJK>
+0x63B3 # <CJK>
+0x63B4 # <CJK>
+0x63B7 # <CJK>
+0x63B8 # <CJK>
+0x63BA # <CJK>
+0x63BC # <CJK>
+0x63BE # <CJK>
+0x63C4 # <CJK>
+0x63C6 # <CJK>
+0x63C9 # <CJK>
+0x63CD # <CJK>
+0x63CE # <CJK>
+0x63CF # <CJK>
+0x63D0 # <CJK>
+0x63D2 # <CJK>
+0x63D6 # <CJK>
+0x63DE # <CJK>
+0x63E0 # <CJK>
+0x63E1 # <CJK>
+0x63E3 # <CJK>
+0x63E9 # <CJK>
+0x63EA # <CJK>
+0x63ED # <CJK>
+0x63F2 # <CJK>
+0x63F4 # <CJK>
+0x63F6 # <CJK>
+0x63F8 # <CJK>
+0x63FD # <CJK>
+0x63FF # <CJK>
+0x6400 # <CJK>
+0x6401 # <CJK>
+0x6402 # <CJK>
+0x6405 # <CJK>
+0x640B # <CJK>
+0x640C # <CJK>
+0x640F # <CJK>
+0x6410 # <CJK>
+0x6413 # <CJK>
+0x6414 # <CJK>
+0x641B # <CJK>
+0x641C # <CJK>
+0x641E # <CJK>
+0x6420 # <CJK>
+0x6421 # <CJK>
+0x6426 # <CJK>
+0x642A # <CJK>
+0x642C # <CJK>
+0x642D # <CJK>
+0x6434 # <CJK>
+0x643A # <CJK>
+0x643D # <CJK>
+0x643F # <CJK>
+0x6441 # <CJK>
+0x6444 # <CJK>
+0x6445 # <CJK>
+0x6446 # <CJK>
+0x6447 # <CJK>
+0x6448 # <CJK>
+0x644A # <CJK>
+0x6452 # <CJK>
+0x6454 # <CJK>
+0x6458 # <CJK>
+0x645E # <CJK>
+0x6467 # <CJK>
+0x6469 # <CJK>
+0x646D # <CJK>
+0x6478 # <CJK>
+0x6479 # <CJK>
+0x647A # <CJK>
+0x6482 # <CJK>
+0x6484 # <CJK>
+0x6485 # <CJK>
+0x6487 # <CJK>
+0x6491 # <CJK>
+0x6492 # <CJK>
+0x6495 # <CJK>
+0x6496 # <CJK>
+0x6499 # <CJK>
+0x649E # <CJK>
+0x64A4 # <CJK>
+0x64A9 # <CJK>
+0x64AC # <CJK>
+0x64AD # <CJK>
+0x64AE # <CJK>
+0x64B0 # <CJK>
+0x64B5 # <CJK>
+0x64B7 # <CJK>
+0x64B8 # <CJK>
+0x64BA # <CJK>
+0x64BC # <CJK>
+0x64C0 # <CJK>
+0x64C2 # <CJK>
+0x64C5 # <CJK>
+0x64CD # <CJK>
+0x64CE # <CJK>
+0x64D0 # <CJK>
+0x64D2 # <CJK>
+0x64D7 # <CJK>
+0x64D8 # <CJK>
+0x64DE # <CJK>
+0x64E2 # <CJK>
+0x64E4 # <CJK>
+0x64E6 # <CJK>
+0x6500 # <CJK>
+0x6509 # <CJK>
+0x6512 # <CJK>
+0x6518 # <CJK>
+0x6525 # <CJK>
+0x652B # <CJK>
+0x652E # <CJK>
+0x652F # <CJK>
+0x6534 # <CJK>
+0x6535 # <CJK>
+0x6536 # <CJK>
+0x6538 # <CJK>
+0x6539 # <CJK>
+0x653B # <CJK>
+0x653E # <CJK>
+0x653F # <CJK>
+0x6545 # <CJK>
+0x6548 # <CJK>
+0x6549 # <CJK>
+0x654C # <CJK>
+0x654F # <CJK>
+0x6551 # <CJK>
+0x6555 # <CJK>
+0x6556 # <CJK>
+0x6559 # <CJK>
+0x655B # <CJK>
+0x655D # <CJK>
+0x655E # <CJK>
+0x6562 # <CJK>
+0x6563 # <CJK>
+0x6566 # <CJK>
+0x656B # <CJK>
+0x656C # <CJK>
+0x6570 # <CJK>
+0x6572 # <CJK>
+0x6574 # <CJK>
+0x6577 # <CJK>
+0x6587 # <CJK>
+0x658B # <CJK>
+0x658C # <CJK>
+0x6590 # <CJK>
+0x6591 # <CJK>
+0x6593 # <CJK>
+0x6597 # <CJK>
+0x6599 # <CJK>
+0x659B # <CJK>
+0x659C # <CJK>
+0x659F # <CJK>
+0x65A1 # <CJK>
+0x65A4 # <CJK>
+0x65A5 # <CJK>
+0x65A7 # <CJK>
+0x65A9 # <CJK>
+0x65AB # <CJK>
+0x65AD # <CJK>
+0x65AF # <CJK>
+0x65B0 # <CJK>
+0x65B9 # <CJK>
+0x65BC # <CJK>
+0x65BD # <CJK>
+0x65C1 # <CJK>
+0x65C3 # <CJK>
+0x65C4 # <CJK>
+0x65C5 # <CJK>
+0x65C6 # <CJK>
+0x65CB # <CJK>
+0x65CC # <CJK>
+0x65CE # <CJK>
+0x65CF # <CJK>
+0x65D2 # <CJK>
+0x65D6 # <CJK>
+0x65D7 # <CJK>
+0x65E0 # <CJK>
+0x65E2 # <CJK>
+0x65E5 # <CJK>
+0x65E6 # <CJK>
+0x65E7 # <CJK>
+0x65E8 # <CJK>
+0x65E9 # <CJK>
+0x65EC # <CJK>
+0x65ED # <CJK>
+0x65EE # <CJK>
+0x65EF # <CJK>
+0x65F0 # <CJK>
+0x65F1 # <CJK>
+0x65F6 # <CJK>
+0x65F7 # <CJK>
+0x65FA # <CJK>
+0x6600 # <CJK>
+0x6602 # <CJK>
+0x6603 # <CJK>
+0x6606 # <CJK>
+0x660A # <CJK>
+0x660C # <CJK>
+0x660E # <CJK>
+0x660F # <CJK>
+0x6613 # <CJK>
+0x6614 # <CJK>
+0x6615 # <CJK>
+0x6619 # <CJK>
+0x661D # <CJK>
+0x661F # <CJK>
+0x6620 # <CJK>
+0x6625 # <CJK>
+0x6627 # <CJK>
+0x6628 # <CJK>
+0x662D # <CJK>
+0x662F # <CJK>
+0x6631 # <CJK>
+0x6634 # <CJK>
+0x6635 # <CJK>
+0x6636 # <CJK>
+0x663C # <CJK>
+0x663E # <CJK>
+0x6641 # <CJK>
+0x6643 # <CJK>
+0x664B # <CJK>
+0x664C # <CJK>
+0x664F # <CJK>
+0x6652 # <CJK>
+0x6653 # <CJK>
+0x6654 # <CJK>
+0x6655 # <CJK>
+0x6656 # <CJK>
+0x6657 # <CJK>
+0x665A # <CJK>
+0x665F # <CJK>
+0x6661 # <CJK>
+0x6664 # <CJK>
+0x6666 # <CJK>
+0x6668 # <CJK>
+0x666E # <CJK>
+0x666F # <CJK>
+0x6670 # <CJK>
+0x6674 # <CJK>
+0x6676 # <CJK>
+0x6677 # <CJK>
+0x667A # <CJK>
+0x667E # <CJK>
+0x6682 # <CJK>
+0x6684 # <CJK>
+0x6687 # <CJK>
+0x668C # <CJK>
+0x6691 # <CJK>
+0x6696 # <CJK>
+0x6697 # <CJK>
+0x669D # <CJK>
+0x66A7 # <CJK>
+0x66A8 # <CJK>
+0x66AE # <CJK>
+0x66B4 # <CJK>
+0x66B9 # <CJK>
+0x66BE # <CJK>
+0x66D9 # <CJK>
+0x66DB # <CJK>
+0x66DC # <CJK>
+0x66DD # <CJK>
+0x66E6 # <CJK>
+0x66E9 # <CJK>
+0x66F0 # <CJK>
+0x66F2 # <CJK>
+0x66F3 # <CJK>
+0x66F4 # <CJK>
+0x66F7 # <CJK>
+0x66F9 # <CJK>
+0x66FC # <CJK>
+0x66FE # <CJK>
+0x66FF # <CJK>
+0x6700 # <CJK>
+0x6708 # <CJK>
+0x6709 # <CJK>
+0x670A # <CJK>
+0x670B # <CJK>
+0x670D # <CJK>
+0x6710 # <CJK>
+0x6714 # <CJK>
+0x6715 # <CJK>
+0x6717 # <CJK>
+0x671B # <CJK>
+0x671D # <CJK>
+0x671F # <CJK>
+0x6726 # <CJK>
+0x6728 # <CJK>
+0x672A # <CJK>
+0x672B # <CJK>
+0x672C # <CJK>
+0x672D # <CJK>
+0x672F # <CJK>
+0x6731 # <CJK>
+0x6734 # <CJK>
+0x6735 # <CJK>
+0x673A # <CJK>
+0x673D # <CJK>
+0x6740 # <CJK>
+0x6742 # <CJK>
+0x6743 # <CJK>
+0x6746 # <CJK>
+0x6748 # <CJK>
+0x6749 # <CJK>
+0x674C # <CJK>
+0x674E # <CJK>
+0x674F # <CJK>
+0x6750 # <CJK>
+0x6751 # <CJK>
+0x6753 # <CJK>
+0x6756 # <CJK>
+0x675C # <CJK>
+0x675E # <CJK>
+0x675F # <CJK>
+0x6760 # <CJK>
+0x6761 # <CJK>
+0x6765 # <CJK>
+0x6768 # <CJK>
+0x6769 # <CJK>
+0x676A # <CJK>
+0x676D # <CJK>
+0x676F # <CJK>
+0x6770 # <CJK>
+0x6772 # <CJK>
+0x6773 # <CJK>
+0x6775 # <CJK>
+0x6777 # <CJK>
+0x677C # <CJK>
+0x677E # <CJK>
+0x677F # <CJK>
+0x6781 # <CJK>
+0x6784 # <CJK>
+0x6787 # <CJK>
+0x6789 # <CJK>
+0x678B # <CJK>
+0x6790 # <CJK>
+0x6795 # <CJK>
+0x6797 # <CJK>
+0x6798 # <CJK>
+0x679A # <CJK>
+0x679C # <CJK>
+0x679D # <CJK>
+0x679E # <CJK>
+0x67A2 # <CJK>
+0x67A3 # <CJK>
+0x67A5 # <CJK>
+0x67A7 # <CJK>
+0x67A8 # <CJK>
+0x67AA # <CJK>
+0x67AB # <CJK>
+0x67AD # <CJK>
+0x67AF # <CJK>
+0x67B0 # <CJK>
+0x67B3 # <CJK>
+0x67B5 # <CJK>
+0x67B6 # <CJK>
+0x67B7 # <CJK>
+0x67B8 # <CJK>
+0x67C1 # <CJK>
+0x67C3 # <CJK>
+0x67C4 # <CJK>
+0x67CF # <CJK>
+0x67D0 # <CJK>
+0x67D1 # <CJK>
+0x67D2 # <CJK>
+0x67D3 # <CJK>
+0x67D4 # <CJK>
+0x67D8 # <CJK>
+0x67D9 # <CJK>
+0x67DA # <CJK>
+0x67DC # <CJK>
+0x67DD # <CJK>
+0x67DE # <CJK>
+0x67E0 # <CJK>
+0x67E2 # <CJK>
+0x67E5 # <CJK>
+0x67E9 # <CJK>
+0x67EC # <CJK>
+0x67EF # <CJK>
+0x67F0 # <CJK>
+0x67F1 # <CJK>
+0x67F3 # <CJK>
+0x67F4 # <CJK>
+0x67FD # <CJK>
+0x67FF # <CJK>
+0x6800 # <CJK>
+0x6805 # <CJK>
+0x6807 # <CJK>
+0x6808 # <CJK>
+0x6809 # <CJK>
+0x680A # <CJK>
+0x680B # <CJK>
+0x680C # <CJK>
+0x680E # <CJK>
+0x680F # <CJK>
+0x6811 # <CJK>
+0x6813 # <CJK>
+0x6816 # <CJK>
+0x6817 # <CJK>
+0x681D # <CJK>
+0x6821 # <CJK>
+0x6829 # <CJK>
+0x682A # <CJK>
+0x6832 # <CJK>
+0x6833 # <CJK>
+0x6837 # <CJK>
+0x6838 # <CJK>
+0x6839 # <CJK>
+0x683C # <CJK>
+0x683D # <CJK>
+0x683E # <CJK>
+0x6840 # <CJK>
+0x6841 # <CJK>
+0x6842 # <CJK>
+0x6843 # <CJK>
+0x6844 # <CJK>
+0x6845 # <CJK>
+0x6846 # <CJK>
+0x6848 # <CJK>
+0x6849 # <CJK>
+0x684A # <CJK>
+0x684C # <CJK>
+0x684E # <CJK>
+0x6850 # <CJK>
+0x6851 # <CJK>
+0x6853 # <CJK>
+0x6854 # <CJK>
+0x6855 # <CJK>
+0x6860 # <CJK>
+0x6861 # <CJK>
+0x6862 # <CJK>
+0x6863 # <CJK>
+0x6864 # <CJK>
+0x6865 # <CJK>
+0x6866 # <CJK>
+0x6867 # <CJK>
+0x6868 # <CJK>
+0x6869 # <CJK>
+0x686B # <CJK>
+0x6874 # <CJK>
+0x6876 # <CJK>
+0x6877 # <CJK>
+0x6881 # <CJK>
+0x6883 # <CJK>
+0x6885 # <CJK>
+0x6886 # <CJK>
+0x688F # <CJK>
+0x6893 # <CJK>
+0x6897 # <CJK>
+0x68A2 # <CJK>
+0x68A6 # <CJK>
+0x68A7 # <CJK>
+0x68A8 # <CJK>
+0x68AD # <CJK>
+0x68AF # <CJK>
+0x68B0 # <CJK>
+0x68B3 # <CJK>
+0x68B5 # <CJK>
+0x68C0 # <CJK>
+0x68C2 # <CJK>
+0x68C9 # <CJK>
+0x68CB # <CJK>
+0x68CD # <CJK>
+0x68D2 # <CJK>
+0x68D5 # <CJK>
+0x68D8 # <CJK>
+0x68DA # <CJK>
+0x68E0 # <CJK>
+0x68E3 # <CJK>
+0x68EE # <CJK>
+0x68F0 # <CJK>
+0x68F1 # <CJK>
+0x68F5 # <CJK>
+0x68F9 # <CJK>
+0x68FA # <CJK>
+0x68FC # <CJK>
+0x6901 # <CJK>
+0x6905 # <CJK>
+0x690B # <CJK>
+0x690D # <CJK>
+0x690E # <CJK>
+0x6910 # <CJK>
+0x6912 # <CJK>
+0x691F # <CJK>
+0x6920 # <CJK>
+0x6924 # <CJK>
+0x692D # <CJK>
+0x6930 # <CJK>
+0x6934 # <CJK>
+0x6939 # <CJK>
+0x693D # <CJK>
+0x693F # <CJK>
+0x6942 # <CJK>
+0x6954 # <CJK>
+0x6957 # <CJK>
+0x695A # <CJK>
+0x695D # <CJK>
+0x695E # <CJK>
+0x6960 # <CJK>
+0x6963 # <CJK>
+0x6966 # <CJK>
+0x696B # <CJK>
+0x696E # <CJK>
+0x6971 # <CJK>
+0x6977 # <CJK>
+0x6978 # <CJK>
+0x6979 # <CJK>
+0x697C # <CJK>
+0x6980 # <CJK>
+0x6982 # <CJK>
+0x6984 # <CJK>
+0x6986 # <CJK>
+0x6987 # <CJK>
+0x6988 # <CJK>
+0x6989 # <CJK>
+0x698D # <CJK>
+0x6994 # <CJK>
+0x6995 # <CJK>
+0x6998 # <CJK>
+0x699B # <CJK>
+0x699C # <CJK>
+0x69A7 # <CJK>
+0x69A8 # <CJK>
+0x69AB # <CJK>
+0x69AD # <CJK>
+0x69B1 # <CJK>
+0x69B4 # <CJK>
+0x69B7 # <CJK>
+0x69BB # <CJK>
+0x69C1 # <CJK>
+0x69CA # <CJK>
+0x69CC # <CJK>
+0x69CE # <CJK>
+0x69D0 # <CJK>
+0x69D4 # <CJK>
+0x69DB # <CJK>
+0x69DF # <CJK>
+0x69E0 # <CJK>
+0x69ED # <CJK>
+0x69F2 # <CJK>
+0x69FD # <CJK>
+0x69FF # <CJK>
+0x6A0A # <CJK>
+0x6A17 # <CJK>
+0x6A18 # <CJK>
+0x6A1F # <CJK>
+0x6A21 # <CJK>
+0x6A28 # <CJK>
+0x6A2A # <CJK>
+0x6A2F # <CJK>
+0x6A31 # <CJK>
+0x6A35 # <CJK>
+0x6A3D # <CJK>
+0x6A3E # <CJK>
+0x6A44 # <CJK>
+0x6A47 # <CJK>
+0x6A50 # <CJK>
+0x6A58 # <CJK>
+0x6A59 # <CJK>
+0x6A5B # <CJK>
+0x6A61 # <CJK>
+0x6A65 # <CJK>
+0x6A71 # <CJK>
+0x6A79 # <CJK>
+0x6A7C # <CJK>
+0x6A80 # <CJK>
+0x6A84 # <CJK>
+0x6A8E # <CJK>
+0x6A90 # <CJK>
+0x6A91 # <CJK>
+0x6A97 # <CJK>
+0x6AA0 # <CJK>
+0x6AA9 # <CJK>
+0x6AAB # <CJK>
+0x6AAC # <CJK>
+0x6B20 # <CJK>
+0x6B21 # <CJK>
+0x6B22 # <CJK>
+0x6B23 # <CJK>
+0x6B24 # <CJK>
+0x6B27 # <CJK>
+0x6B32 # <CJK>
+0x6B37 # <CJK>
+0x6B39 # <CJK>
+0x6B3A # <CJK>
+0x6B3E # <CJK>
+0x6B43 # <CJK>
+0x6B46 # <CJK>
+0x6B47 # <CJK>
+0x6B49 # <CJK>
+0x6B4C # <CJK>
+0x6B59 # <CJK>
+0x6B62 # <CJK>
+0x6B63 # <CJK>
+0x6B64 # <CJK>
+0x6B65 # <CJK>
+0x6B66 # <CJK>
+0x6B67 # <CJK>
+0x6B6A # <CJK>
+0x6B79 # <CJK>
+0x6B7B # <CJK>
+0x6B7C # <CJK>
+0x6B81 # <CJK>
+0x6B82 # <CJK>
+0x6B83 # <CJK>
+0x6B84 # <CJK>
+0x6B86 # <CJK>
+0x6B87 # <CJK>
+0x6B89 # <CJK>
+0x6B8A # <CJK>
+0x6B8B # <CJK>
+0x6B8D # <CJK>
+0x6B92 # <CJK>
+0x6B93 # <CJK>
+0x6B96 # <CJK>
+0x6B9A # <CJK>
+0x6B9B # <CJK>
+0x6BA1 # <CJK>
+0x6BAA # <CJK>
+0x6BB3 # <CJK>
+0x6BB4 # <CJK>
+0x6BB5 # <CJK>
+0x6BB7 # <CJK>
+0x6BBF # <CJK>
+0x6BC1 # <CJK>
+0x6BC2 # <CJK>
+0x6BC5 # <CJK>
+0x6BCB # <CJK>
+0x6BCD # <CJK>
+0x6BCF # <CJK>
+0x6BD2 # <CJK>
+0x6BD3 # <CJK>
+0x6BD4 # <CJK>
+0x6BD5 # <CJK>
+0x6BD6 # <CJK>
+0x6BD7 # <CJK>
+0x6BD9 # <CJK>
+0x6BDB # <CJK>
+0x6BE1 # <CJK>
+0x6BEA # <CJK>
+0x6BEB # <CJK>
+0x6BEF # <CJK>
+0x6BF3 # <CJK>
+0x6BF5 # <CJK>
+0x6BF9 # <CJK>
+0x6BFD # <CJK>
+0x6C05 # <CJK>
+0x6C06 # <CJK>
+0x6C07 # <CJK>
+0x6C0D # <CJK>
+0x6C0F # <CJK>
+0x6C10 # <CJK>
+0x6C11 # <CJK>
+0x6C13 # <CJK>
+0x6C14 # <CJK>
+0x6C15 # <CJK>
+0x6C16 # <CJK>
+0x6C18 # <CJK>
+0x6C19 # <CJK>
+0x6C1A # <CJK>
+0x6C1B # <CJK>
+0x6C1F # <CJK>
+0x6C21 # <CJK>
+0x6C22 # <CJK>
+0x6C24 # <CJK>
+0x6C26 # <CJK>
+0x6C27 # <CJK>
+0x6C28 # <CJK>
+0x6C29 # <CJK>
+0x6C2A # <CJK>
+0x6C2E # <CJK>
+0x6C2F # <CJK>
+0x6C30 # <CJK>
+0x6C32 # <CJK>
+0x6C34 # <CJK>
+0x6C35 # <CJK>
+0x6C38 # <CJK>
+0x6C3D # <CJK>
+0x6C40 # <CJK>
+0x6C41 # <CJK>
+0x6C42 # <CJK>
+0x6C46 # <CJK>
+0x6C47 # <CJK>
+0x6C49 # <CJK>
+0x6C4A # <CJK>
+0x6C50 # <CJK>
+0x6C54 # <CJK>
+0x6C55 # <CJK>
+0x6C57 # <CJK>
+0x6C5B # <CJK>
+0x6C5C # <CJK>
+0x6C5D # <CJK>
+0x6C5E # <CJK>
+0x6C5F # <CJK>
+0x6C60 # <CJK>
+0x6C61 # <CJK>
+0x6C64 # <CJK>
+0x6C68 # <CJK>
+0x6C69 # <CJK>
+0x6C6A # <CJK>
+0x6C70 # <CJK>
+0x6C72 # <CJK>
+0x6C74 # <CJK>
+0x6C76 # <CJK>
+0x6C79 # <CJK>
+0x6C7D # <CJK>
+0x6C7E # <CJK>
+0x6C81 # <CJK>
+0x6C82 # <CJK>
+0x6C83 # <CJK>
+0x6C85 # <CJK>
+0x6C86 # <CJK>
+0x6C88 # <CJK>
+0x6C89 # <CJK>
+0x6C8C # <CJK>
+0x6C8F # <CJK>
+0x6C90 # <CJK>
+0x6C93 # <CJK>
+0x6C94 # <CJK>
+0x6C99 # <CJK>
+0x6C9B # <CJK>
+0x6C9F # <CJK>
+0x6CA1 # <CJK>
+0x6CA3 # <CJK>
+0x6CA4 # <CJK>
+0x6CA5 # <CJK>
+0x6CA6 # <CJK>
+0x6CA7 # <CJK>
+0x6CA9 # <CJK>
+0x6CAA # <CJK>
+0x6CAB # <CJK>
+0x6CAD # <CJK>
+0x6CAE # <CJK>
+0x6CB1 # <CJK>
+0x6CB2 # <CJK>
+0x6CB3 # <CJK>
+0x6CB8 # <CJK>
+0x6CB9 # <CJK>
+0x6CBB # <CJK>
+0x6CBC # <CJK>
+0x6CBD # <CJK>
+0x6CBE # <CJK>
+0x6CBF # <CJK>
+0x6CC4 # <CJK>
+0x6CC5 # <CJK>
+0x6CC9 # <CJK>
+0x6CCA # <CJK>
+0x6CCC # <CJK>
+0x6CD0 # <CJK>
+0x6CD3 # <CJK>
+0x6CD4 # <CJK>
+0x6CD5 # <CJK>
+0x6CD6 # <CJK>
+0x6CD7 # <CJK>
+0x6CDB # <CJK>
+0x6CDE # <CJK>
+0x6CE0 # <CJK>
+0x6CE1 # <CJK>
+0x6CE2 # <CJK>
+0x6CE3 # <CJK>
+0x6CE5 # <CJK>
+0x6CE8 # <CJK>
+0x6CEA # <CJK>
+0x6CEB # <CJK>
+0x6CEE # <CJK>
+0x6CEF # <CJK>
+0x6CF0 # <CJK>
+0x6CF1 # <CJK>
+0x6CF3 # <CJK>
+0x6CF5 # <CJK>
+0x6CF6 # <CJK>
+0x6CF7 # <CJK>
+0x6CF8 # <CJK>
+0x6CFA # <CJK>
+0x6CFB # <CJK>
+0x6CFC # <CJK>
+0x6CFD # <CJK>
+0x6CFE # <CJK>
+0x6D01 # <CJK>
+0x6D04 # <CJK>
+0x6D07 # <CJK>
+0x6D0B # <CJK>
+0x6D0C # <CJK>
+0x6D0E # <CJK>
+0x6D12 # <CJK>
+0x6D17 # <CJK>
+0x6D19 # <CJK>
+0x6D1A # <CJK>
+0x6D1B # <CJK>
+0x6D1E # <CJK>
+0x6D25 # <CJK>
+0x6D27 # <CJK>
+0x6D2A # <CJK>
+0x6D2B # <CJK>
+0x6D2E # <CJK>
+0x6D31 # <CJK>
+0x6D32 # <CJK>
+0x6D33 # <CJK>
+0x6D35 # <CJK>
+0x6D39 # <CJK>
+0x6D3B # <CJK>
+0x6D3C # <CJK>
+0x6D3D # <CJK>
+0x6D3E # <CJK>
+0x6D41 # <CJK>
+0x6D43 # <CJK>
+0x6D45 # <CJK>
+0x6D46 # <CJK>
+0x6D47 # <CJK>
+0x6D48 # <CJK>
+0x6D4A # <CJK>
+0x6D4B # <CJK>
+0x6D4D # <CJK>
+0x6D4E # <CJK>
+0x6D4F # <CJK>
+0x6D51 # <CJK>
+0x6D52 # <CJK>
+0x6D53 # <CJK>
+0x6D54 # <CJK>
+0x6D59 # <CJK>
+0x6D5A # <CJK>
+0x6D5C # <CJK>
+0x6D5E # <CJK>
+0x6D60 # <CJK>
+0x6D63 # <CJK>
+0x6D66 # <CJK>
+0x6D69 # <CJK>
+0x6D6A # <CJK>
+0x6D6E # <CJK>
+0x6D6F # <CJK>
+0x6D74 # <CJK>
+0x6D77 # <CJK>
+0x6D78 # <CJK>
+0x6D7C # <CJK>
+0x6D82 # <CJK>
+0x6D85 # <CJK>
+0x6D88 # <CJK>
+0x6D89 # <CJK>
+0x6D8C # <CJK>
+0x6D8E # <CJK>
+0x6D91 # <CJK>
+0x6D93 # <CJK>
+0x6D94 # <CJK>
+0x6D95 # <CJK>
+0x6D9B # <CJK>
+0x6D9D # <CJK>
+0x6D9E # <CJK>
+0x6D9F # <CJK>
+0x6DA0 # <CJK>
+0x6DA1 # <CJK>
+0x6DA3 # <CJK>
+0x6DA4 # <CJK>
+0x6DA6 # <CJK>
+0x6DA7 # <CJK>
+0x6DA8 # <CJK>
+0x6DA9 # <CJK>
+0x6DAA # <CJK>
+0x6DAB # <CJK>
+0x6DAE # <CJK>
+0x6DAF # <CJK>
+0x6DB2 # <CJK>
+0x6DB5 # <CJK>
+0x6DB8 # <CJK>
+0x6DBF # <CJK>
+0x6DC0 # <CJK>
+0x6DC4 # <CJK>
+0x6DC5 # <CJK>
+0x6DC6 # <CJK>
+0x6DC7 # <CJK>
+0x6DCB # <CJK>
+0x6DCC # <CJK>
+0x6DD1 # <CJK>
+0x6DD6 # <CJK>
+0x6DD8 # <CJK>
+0x6DD9 # <CJK>
+0x6DDD # <CJK>
+0x6DDE # <CJK>
+0x6DE0 # <CJK>
+0x6DE1 # <CJK>
+0x6DE4 # <CJK>
+0x6DE6 # <CJK>
+0x6DEB # <CJK>
+0x6DEC # <CJK>
+0x6DEE # <CJK>
+0x6DF1 # <CJK>
+0x6DF3 # <CJK>
+0x6DF7 # <CJK>
+0x6DF9 # <CJK>
+0x6DFB # <CJK>
+0x6DFC # <CJK>
+0x6E05 # <CJK>
+0x6E0A # <CJK>
+0x6E0C # <CJK>
+0x6E0D # <CJK>
+0x6E0E # <CJK>
+0x6E10 # <CJK>
+0x6E11 # <CJK>
+0x6E14 # <CJK>
+0x6E16 # <CJK>
+0x6E17 # <CJK>
+0x6E1A # <CJK>
+0x6E1D # <CJK>
+0x6E20 # <CJK>
+0x6E21 # <CJK>
+0x6E23 # <CJK>
+0x6E24 # <CJK>
+0x6E25 # <CJK>
+0x6E29 # <CJK>
+0x6E2B # <CJK>
+0x6E2D # <CJK>
+0x6E2F # <CJK>
+0x6E32 # <CJK>
+0x6E34 # <CJK>
+0x6E38 # <CJK>
+0x6E3A # <CJK>
+0x6E43 # <CJK>
+0x6E44 # <CJK>
+0x6E4D # <CJK>
+0x6E4E # <CJK>
+0x6E53 # <CJK>
+0x6E54 # <CJK>
+0x6E56 # <CJK>
+0x6E58 # <CJK>
+0x6E5B # <CJK>
+0x6E5F # <CJK>
+0x6E6B # <CJK>
+0x6E6E # <CJK>
+0x6E7E # <CJK>
+0x6E7F # <CJK>
+0x6E83 # <CJK>
+0x6E85 # <CJK>
+0x6E86 # <CJK>
+0x6E89 # <CJK>
+0x6E8F # <CJK>
+0x6E90 # <CJK>
+0x6E98 # <CJK>
+0x6E9C # <CJK>
+0x6E9F # <CJK>
+0x6EA2 # <CJK>
+0x6EA5 # <CJK>
+0x6EA7 # <CJK>
+0x6EAA # <CJK>
+0x6EAF # <CJK>
+0x6EB1 # <CJK>
+0x6EB2 # <CJK>
+0x6EB4 # <CJK>
+0x6EB6 # <CJK>
+0x6EB7 # <CJK>
+0x6EBA # <CJK>
+0x6EBB # <CJK>
+0x6EBD # <CJK>
+0x6EC1 # <CJK>
+0x6EC2 # <CJK>
+0x6EC7 # <CJK>
+0x6ECB # <CJK>
+0x6ECF # <CJK>
+0x6ED1 # <CJK>
+0x6ED3 # <CJK>
+0x6ED4 # <CJK>
+0x6ED5 # <CJK>
+0x6ED7 # <CJK>
+0x6EDA # <CJK>
+0x6EDE # <CJK>
+0x6EDF # <CJK>
+0x6EE0 # <CJK>
+0x6EE1 # <CJK>
+0x6EE2 # <CJK>
+0x6EE4 # <CJK>
+0x6EE5 # <CJK>
+0x6EE6 # <CJK>
+0x6EE8 # <CJK>
+0x6EE9 # <CJK>
+0x6EF4 # <CJK>
+0x6EF9 # <CJK>
+0x6F02 # <CJK>
+0x6F06 # <CJK>
+0x6F09 # <CJK>
+0x6F0F # <CJK>
+0x6F13 # <CJK>
+0x6F14 # <CJK>
+0x6F15 # <CJK>
+0x6F20 # <CJK>
+0x6F24 # <CJK>
+0x6F29 # <CJK>
+0x6F2A # <CJK>
+0x6F2B # <CJK>
+0x6F2D # <CJK>
+0x6F2F # <CJK>
+0x6F31 # <CJK>
+0x6F33 # <CJK>
+0x6F36 # <CJK>
+0x6F3E # <CJK>
+0x6F46 # <CJK>
+0x6F47 # <CJK>
+0x6F4B # <CJK>
+0x6F4D # <CJK>
+0x6F58 # <CJK>
+0x6F5C # <CJK>
+0x6F5E # <CJK>
+0x6F62 # <CJK>
+0x6F66 # <CJK>
+0x6F6D # <CJK>
+0x6F6E # <CJK>
+0x6F72 # <CJK>
+0x6F74 # <CJK>
+0x6F78 # <CJK>
+0x6F7A # <CJK>
+0x6F7C # <CJK>
+0x6F84 # <CJK>
+0x6F88 # <CJK>
+0x6F89 # <CJK>
+0x6F8C # <CJK>
+0x6F8D # <CJK>
+0x6F8E # <CJK>
+0x6F9C # <CJK>
+0x6FA1 # <CJK>
+0x6FA7 # <CJK>
+0x6FB3 # <CJK>
+0x6FB6 # <CJK>
+0x6FB9 # <CJK>
+0x6FC0 # <CJK>
+0x6FC2 # <CJK>
+0x6FC9 # <CJK>
+0x6FD1 # <CJK>
+0x6FD2 # <CJK>
+0x6FDE # <CJK>
+0x6FE0 # <CJK>
+0x6FE1 # <CJK>
+0x6FEE # <CJK>
+0x6FEF # <CJK>
+0x7011 # <CJK>
+0x701A # <CJK>
+0x701B # <CJK>
+0x7023 # <CJK>
+0x7035 # <CJK>
+0x7039 # <CJK>
+0x704C # <CJK>
+0x704F # <CJK>
+0x705E # <CJK>
+0x706B # <CJK>
+0x706C # <CJK>
+0x706D # <CJK>
+0x706F # <CJK>
+0x7070 # <CJK>
+0x7075 # <CJK>
+0x7076 # <CJK>
+0x7078 # <CJK>
+0x707C # <CJK>
+0x707E # <CJK>
+0x707F # <CJK>
+0x7080 # <CJK>
+0x7085 # <CJK>
+0x7089 # <CJK>
+0x708A # <CJK>
+0x708E # <CJK>
+0x7092 # <CJK>
+0x7094 # <CJK>
+0x7095 # <CJK>
+0x7096 # <CJK>
+0x7099 # <CJK>
+0x709C # <CJK>
+0x709D # <CJK>
+0x70AB # <CJK>
+0x70AC # <CJK>
+0x70AD # <CJK>
+0x70AE # <CJK>
+0x70AF # <CJK>
+0x70B1 # <CJK>
+0x70B3 # <CJK>
+0x70B7 # <CJK>
+0x70B8 # <CJK>
+0x70B9 # <CJK>
+0x70BB # <CJK>
+0x70BC # <CJK>
+0x70BD # <CJK>
+0x70C0 # <CJK>
+0x70C1 # <CJK>
+0x70C2 # <CJK>
+0x70C3 # <CJK>
+0x70C8 # <CJK>
+0x70CA # <CJK>
+0x70D8 # <CJK>
+0x70D9 # <CJK>
+0x70DB # <CJK>
+0x70DF # <CJK>
+0x70E4 # <CJK>
+0x70E6 # <CJK>
+0x70E7 # <CJK>
+0x70E8 # <CJK>
+0x70E9 # <CJK>
+0x70EB # <CJK>
+0x70EC # <CJK>
+0x70ED # <CJK>
+0x70EF # <CJK>
+0x70F7 # <CJK>
+0x70F9 # <CJK>
+0x70FD # <CJK>
+0x7109 # <CJK>
+0x710A # <CJK>
+0x7110 # <CJK>
+0x7113 # <CJK>
+0x7115 # <CJK>
+0x7116 # <CJK>
+0x7118 # <CJK>
+0x7119 # <CJK>
+0x711A # <CJK>
+0x7126 # <CJK>
+0x712F # <CJK>
+0x7130 # <CJK>
+0x7131 # <CJK>
+0x7136 # <CJK>
+0x7145 # <CJK>
+0x714A # <CJK>
+0x714C # <CJK>
+0x714E # <CJK>
+0x715C # <CJK>
+0x715E # <CJK>
+0x7164 # <CJK>
+0x7166 # <CJK>
+0x7167 # <CJK>
+0x7168 # <CJK>
+0x716E # <CJK>
+0x7172 # <CJK>
+0x7173 # <CJK>
+0x7178 # <CJK>
+0x717A # <CJK>
+0x717D # <CJK>
+0x7184 # <CJK>
+0x718A # <CJK>
+0x718F # <CJK>
+0x7194 # <CJK>
+0x7198 # <CJK>
+0x7199 # <CJK>
+0x719F # <CJK>
+0x71A0 # <CJK>
+0x71A8 # <CJK>
+0x71AC # <CJK>
+0x71B3 # <CJK>
+0x71B5 # <CJK>
+0x71B9 # <CJK>
+0x71C3 # <CJK>
+0x71CE # <CJK>
+0x71D4 # <CJK>
+0x71D5 # <CJK>
+0x71E0 # <CJK>
+0x71E5 # <CJK>
+0x71E7 # <CJK>
+0x71EE # <CJK>
+0x71F9 # <CJK>
+0x7206 # <CJK>
+0x721D # <CJK>
+0x7228 # <CJK>
+0x722A # <CJK>
+0x722C # <CJK>
+0x7230 # <CJK>
+0x7231 # <CJK>
+0x7235 # <CJK>
+0x7236 # <CJK>
+0x7237 # <CJK>
+0x7238 # <CJK>
+0x7239 # <CJK>
+0x723B # <CJK>
+0x723D # <CJK>
+0x723F # <CJK>
+0x7247 # <CJK>
+0x7248 # <CJK>
+0x724C # <CJK>
+0x724D # <CJK>
+0x7252 # <CJK>
+0x7256 # <CJK>
+0x7259 # <CJK>
+0x725B # <CJK>
+0x725D # <CJK>
+0x725F # <CJK>
+0x7261 # <CJK>
+0x7262 # <CJK>
+0x7266 # <CJK>
+0x7267 # <CJK>
+0x7269 # <CJK>
+0x726E # <CJK>
+0x726F # <CJK>
+0x7272 # <CJK>
+0x7275 # <CJK>
+0x7279 # <CJK>
+0x727A # <CJK>
+0x727E # <CJK>
+0x727F # <CJK>
+0x7280 # <CJK>
+0x7281 # <CJK>
+0x7284 # <CJK>
+0x728A # <CJK>
+0x728B # <CJK>
+0x728D # <CJK>
+0x728F # <CJK>
+0x7292 # <CJK>
+0x729F # <CJK>
+0x72AC # <CJK>
+0x72AD # <CJK>
+0x72AF # <CJK>
+0x72B0 # <CJK>
+0x72B4 # <CJK>
+0x72B6 # <CJK>
+0x72B7 # <CJK>
+0x72B8 # <CJK>
+0x72B9 # <CJK>
+0x72C1 # <CJK>
+0x72C2 # <CJK>
+0x72C3 # <CJK>
+0x72C4 # <CJK>
+0x72C8 # <CJK>
+0x72CD # <CJK>
+0x72CE # <CJK>
+0x72D0 # <CJK>
+0x72D2 # <CJK>
+0x72D7 # <CJK>
+0x72D9 # <CJK>
+0x72DE # <CJK>
+0x72E0 # <CJK>
+0x72E1 # <CJK>
+0x72E8 # <CJK>
+0x72E9 # <CJK>
+0x72EC # <CJK>
+0x72ED # <CJK>
+0x72EE # <CJK>
+0x72EF # <CJK>
+0x72F0 # <CJK>
+0x72F1 # <CJK>
+0x72F2 # <CJK>
+0x72F3 # <CJK>
+0x72F4 # <CJK>
+0x72F7 # <CJK>
+0x72F8 # <CJK>
+0x72FA # <CJK>
+0x72FB # <CJK>
+0x72FC # <CJK>
+0x7301 # <CJK>
+0x7303 # <CJK>
+0x730A # <CJK>
+0x730E # <CJK>
+0x7313 # <CJK>
+0x7315 # <CJK>
+0x7316 # <CJK>
+0x7317 # <CJK>
+0x731B # <CJK>
+0x731C # <CJK>
+0x731D # <CJK>
+0x731E # <CJK>
+0x7321 # <CJK>
+0x7322 # <CJK>
+0x7325 # <CJK>
+0x7329 # <CJK>
+0x732A # <CJK>
+0x732B # <CJK>
+0x732C # <CJK>
+0x732E # <CJK>
+0x7331 # <CJK>
+0x7334 # <CJK>
+0x7337 # <CJK>
+0x7338 # <CJK>
+0x7339 # <CJK>
+0x733E # <CJK>
+0x733F # <CJK>
+0x734D # <CJK>
+0x7350 # <CJK>
+0x7352 # <CJK>
+0x7357 # <CJK>
+0x7360 # <CJK>
+0x736C # <CJK>
+0x736D # <CJK>
+0x736F # <CJK>
+0x737E # <CJK>
+0x7384 # <CJK>
+0x7387 # <CJK>
+0x7389 # <CJK>
+0x738B # <CJK>
+0x738E # <CJK>
+0x7391 # <CJK>
+0x7396 # <CJK>
+0x739B # <CJK>
+0x739F # <CJK>
+0x73A2 # <CJK>
+0x73A9 # <CJK>
+0x73AB # <CJK>
+0x73AE # <CJK>
+0x73AF # <CJK>
+0x73B0 # <CJK>
+0x73B2 # <CJK>
+0x73B3 # <CJK>
+0x73B7 # <CJK>
+0x73BA # <CJK>
+0x73BB # <CJK>
+0x73C0 # <CJK>
+0x73C2 # <CJK>
+0x73C8 # <CJK>
+0x73C9 # <CJK>
+0x73CA # <CJK>
+0x73CD # <CJK>
+0x73CF # <CJK>
+0x73D0 # <CJK>
+0x73D1 # <CJK>
+0x73D9 # <CJK>
+0x73DE # <CJK>
+0x73E0 # <CJK>
+0x73E5 # <CJK>
+0x73E7 # <CJK>
+0x73E9 # <CJK>
+0x73ED # <CJK>
+0x73F2 # <CJK>
+0x7403 # <CJK>
+0x7405 # <CJK>
+0x7406 # <CJK>
+0x7409 # <CJK>
+0x740A # <CJK>
+0x740F # <CJK>
+0x7410 # <CJK>
+0x741A # <CJK>
+0x741B # <CJK>
+0x7422 # <CJK>
+0x7425 # <CJK>
+0x7426 # <CJK>
+0x7428 # <CJK>
+0x742A # <CJK>
+0x742C # <CJK>
+0x742E # <CJK>
+0x7430 # <CJK>
+0x7433 # <CJK>
+0x7434 # <CJK>
+0x7435 # <CJK>
+0x7436 # <CJK>
+0x743C # <CJK>
+0x7441 # <CJK>
+0x7455 # <CJK>
+0x7457 # <CJK>
+0x7459 # <CJK>
+0x745A # <CJK>
+0x745B # <CJK>
+0x745C # <CJK>
+0x745E # <CJK>
+0x745F # <CJK>
+0x746D # <CJK>
+0x7470 # <CJK>
+0x7476 # <CJK>
+0x7477 # <CJK>
+0x747E # <CJK>
+0x7480 # <CJK>
+0x7481 # <CJK>
+0x7483 # <CJK>
+0x7487 # <CJK>
+0x748B # <CJK>
+0x748E # <CJK>
+0x7490 # <CJK>
+0x749C # <CJK>
+0x749E # <CJK>
+0x74A7 # <CJK>
+0x74A8 # <CJK>
+0x74A9 # <CJK>
+0x74BA # <CJK>
+0x74D2 # <CJK>
+0x74DC # <CJK>
+0x74DE # <CJK>
+0x74E0 # <CJK>
+0x74E2 # <CJK>
+0x74E3 # <CJK>
+0x74E4 # <CJK>
+0x74E6 # <CJK>
+0x74EE # <CJK>
+0x74EF # <CJK>
+0x74F4 # <CJK>
+0x74F6 # <CJK>
+0x74F7 # <CJK>
+0x74FF # <CJK>
+0x7504 # <CJK>
+0x750D # <CJK>
+0x750F # <CJK>
+0x7511 # <CJK>
+0x7513 # <CJK>
+0x7518 # <CJK>
+0x7519 # <CJK>
+0x751A # <CJK>
+0x751C # <CJK>
+0x751F # <CJK>
+0x7525 # <CJK>
+0x7528 # <CJK>
+0x7529 # <CJK>
+0x752B # <CJK>
+0x752C # <CJK>
+0x752D # <CJK>
+0x752F # <CJK>
+0x7530 # <CJK>
+0x7531 # <CJK>
+0x7532 # <CJK>
+0x7533 # <CJK>
+0x7535 # <CJK>
+0x7537 # <CJK>
+0x7538 # <CJK>
+0x753A # <CJK>
+0x753B # <CJK>
+0x753E # <CJK>
+0x7540 # <CJK>
+0x7545 # <CJK>
+0x7548 # <CJK>
+0x754B # <CJK>
+0x754C # <CJK>
+0x754E # <CJK>
+0x754F # <CJK>
+0x7554 # <CJK>
+0x7559 # <CJK>
+0x755A # <CJK>
+0x755B # <CJK>
+0x755C # <CJK>
+0x7565 # <CJK>
+0x7566 # <CJK>
+0x756A # <CJK>
+0x7572 # <CJK>
+0x7574 # <CJK>
+0x7578 # <CJK>
+0x7579 # <CJK>
+0x757F # <CJK>
+0x7583 # <CJK>
+0x7586 # <CJK>
+0x758B # <CJK>
+0x758F # <CJK>
+0x7591 # <CJK>
+0x7592 # <CJK>
+0x7594 # <CJK>
+0x7596 # <CJK>
+0x7597 # <CJK>
+0x7599 # <CJK>
+0x759A # <CJK>
+0x759D # <CJK>
+0x759F # <CJK>
+0x75A0 # <CJK>
+0x75A1 # <CJK>
+0x75A3 # <CJK>
+0x75A4 # <CJK>
+0x75A5 # <CJK>
+0x75AB # <CJK>
+0x75AC # <CJK>
+0x75AE # <CJK>
+0x75AF # <CJK>
+0x75B0 # <CJK>
+0x75B1 # <CJK>
+0x75B2 # <CJK>
+0x75B3 # <CJK>
+0x75B4 # <CJK>
+0x75B5 # <CJK>
+0x75B8 # <CJK>
+0x75B9 # <CJK>
+0x75BC # <CJK>
+0x75BD # <CJK>
+0x75BE # <CJK>
+0x75C2 # <CJK>
+0x75C3 # <CJK>
+0x75C4 # <CJK>
+0x75C5 # <CJK>
+0x75C7 # <CJK>
+0x75C8 # <CJK>
+0x75C9 # <CJK>
+0x75CA # <CJK>
+0x75CD # <CJK>
+0x75D2 # <CJK>
+0x75D4 # <CJK>
+0x75D5 # <CJK>
+0x75D6 # <CJK>
+0x75D8 # <CJK>
+0x75DB # <CJK>
+0x75DE # <CJK>
+0x75E2 # <CJK>
+0x75E3 # <CJK>
+0x75E4 # <CJK>
+0x75E6 # <CJK>
+0x75E7 # <CJK>
+0x75E8 # <CJK>
+0x75EA # <CJK>
+0x75EB # <CJK>
+0x75F0 # <CJK>
+0x75F1 # <CJK>
+0x75F4 # <CJK>
+0x75F9 # <CJK>
+0x75FC # <CJK>
+0x75FF # <CJK>
+0x7600 # <CJK>
+0x7601 # <CJK>
+0x7603 # <CJK>
+0x7605 # <CJK>
+0x760A # <CJK>
+0x760C # <CJK>
+0x7610 # <CJK>
+0x7615 # <CJK>
+0x7617 # <CJK>
+0x7618 # <CJK>
+0x7619 # <CJK>
+0x761B # <CJK>
+0x761F # <CJK>
+0x7620 # <CJK>
+0x7622 # <CJK>
+0x7624 # <CJK>
+0x7625 # <CJK>
+0x7626 # <CJK>
+0x7629 # <CJK>
+0x762A # <CJK>
+0x762B # <CJK>
+0x762D # <CJK>
+0x7630 # <CJK>
+0x7633 # <CJK>
+0x7634 # <CJK>
+0x7635 # <CJK>
+0x7638 # <CJK>
+0x763C # <CJK>
+0x763E # <CJK>
+0x763F # <CJK>
+0x7640 # <CJK>
+0x7643 # <CJK>
+0x764C # <CJK>
+0x764D # <CJK>
+0x7654 # <CJK>
+0x7656 # <CJK>
+0x765C # <CJK>
+0x765E # <CJK>
+0x7663 # <CJK>
+0x766B # <CJK>
+0x766F # <CJK>
+0x7678 # <CJK>
+0x767B # <CJK>
+0x767D # <CJK>
+0x767E # <CJK>
+0x7682 # <CJK>
+0x7684 # <CJK>
+0x7686 # <CJK>
+0x7687 # <CJK>
+0x7688 # <CJK>
+0x768B # <CJK>
+0x768E # <CJK>
+0x7691 # <CJK>
+0x7693 # <CJK>
+0x7696 # <CJK>
+0x7699 # <CJK>
+0x76A4 # <CJK>
+0x76AE # <CJK>
+0x76B1 # <CJK>
+0x76B2 # <CJK>
+0x76B4 # <CJK>
+0x76BF # <CJK>
+0x76C2 # <CJK>
+0x76C5 # <CJK>
+0x76C6 # <CJK>
+0x76C8 # <CJK>
+0x76CA # <CJK>
+0x76CD # <CJK>
+0x76CE # <CJK>
+0x76CF # <CJK>
+0x76D0 # <CJK>
+0x76D1 # <CJK>
+0x76D2 # <CJK>
+0x76D4 # <CJK>
+0x76D6 # <CJK>
+0x76D7 # <CJK>
+0x76D8 # <CJK>
+0x76DB # <CJK>
+0x76DF # <CJK>
+0x76E5 # <CJK>
+0x76EE # <CJK>
+0x76EF # <CJK>
+0x76F1 # <CJK>
+0x76F2 # <CJK>
+0x76F4 # <CJK>
+0x76F8 # <CJK>
+0x76F9 # <CJK>
+0x76FC # <CJK>
+0x76FE # <CJK>
+0x7701 # <CJK>
+0x7704 # <CJK>
+0x7707 # <CJK>
+0x7708 # <CJK>
+0x7709 # <CJK>
+0x770B # <CJK>
+0x770D # <CJK>
+0x7719 # <CJK>
+0x771A # <CJK>
+0x771F # <CJK>
+0x7720 # <CJK>
+0x7722 # <CJK>
+0x7726 # <CJK>
+0x7728 # <CJK>
+0x7729 # <CJK>
+0x772D # <CJK>
+0x772F # <CJK>
+0x7735 # <CJK>
+0x7736 # <CJK>
+0x7737 # <CJK>
+0x7738 # <CJK>
+0x773A # <CJK>
+0x773C # <CJK>
+0x7740 # <CJK>
+0x7741 # <CJK>
+0x7743 # <CJK>
+0x7747 # <CJK>
+0x7750 # <CJK>
+0x7751 # <CJK>
+0x775A # <CJK>
+0x775B # <CJK>
+0x7761 # <CJK>
+0x7762 # <CJK>
+0x7763 # <CJK>
+0x7765 # <CJK>
+0x7766 # <CJK>
+0x7768 # <CJK>
+0x776B # <CJK>
+0x776C # <CJK>
+0x7779 # <CJK>
+0x777D # <CJK>
+0x777E # <CJK>
+0x777F # <CJK>
+0x7780 # <CJK>
+0x7784 # <CJK>
+0x7785 # <CJK>
+0x778C # <CJK>
+0x778D # <CJK>
+0x778E # <CJK>
+0x7791 # <CJK>
+0x7792 # <CJK>
+0x779F # <CJK>
+0x77A0 # <CJK>
+0x77A2 # <CJK>
+0x77A5 # <CJK>
+0x77A7 # <CJK>
+0x77A9 # <CJK>
+0x77AA # <CJK>
+0x77AC # <CJK>
+0x77B0 # <CJK>
+0x77B3 # <CJK>
+0x77B5 # <CJK>
+0x77BB # <CJK>
+0x77BD # <CJK>
+0x77BF # <CJK>
+0x77CD # <CJK>
+0x77D7 # <CJK>
+0x77DB # <CJK>
+0x77DC # <CJK>
+0x77E2 # <CJK>
+0x77E3 # <CJK>
+0x77E5 # <CJK>
+0x77E7 # <CJK>
+0x77E9 # <CJK>
+0x77EB # <CJK>
+0x77EC # <CJK>
+0x77ED # <CJK>
+0x77EE # <CJK>
+0x77F3 # <CJK>
+0x77F6 # <CJK>
+0x77F8 # <CJK>
+0x77FD # <CJK>
+0x77FE # <CJK>
+0x77FF # <CJK>
+0x7800 # <CJK>
+0x7801 # <CJK>
+0x7802 # <CJK>
+0x7809 # <CJK>
+0x780C # <CJK>
+0x780D # <CJK>
+0x7811 # <CJK>
+0x7812 # <CJK>
+0x7814 # <CJK>
+0x7816 # <CJK>
+0x7817 # <CJK>
+0x7818 # <CJK>
+0x781A # <CJK>
+0x781C # <CJK>
+0x781D # <CJK>
+0x781F # <CJK>
+0x7823 # <CJK>
+0x7825 # <CJK>
+0x7826 # <CJK>
+0x7827 # <CJK>
+0x7829 # <CJK>
+0x782C # <CJK>
+0x782D # <CJK>
+0x7830 # <CJK>
+0x7834 # <CJK>
+0x7837 # <CJK>
+0x7838 # <CJK>
+0x7839 # <CJK>
+0x783A # <CJK>
+0x783B # <CJK>
+0x783C # <CJK>
+0x783E # <CJK>
+0x7840 # <CJK>
+0x7845 # <CJK>
+0x7847 # <CJK>
+0x784C # <CJK>
+0x784E # <CJK>
+0x7850 # <CJK>
+0x7852 # <CJK>
+0x7855 # <CJK>
+0x7856 # <CJK>
+0x7857 # <CJK>
+0x785D # <CJK>
+0x786A # <CJK>
+0x786B # <CJK>
+0x786C # <CJK>
+0x786D # <CJK>
+0x786E # <CJK>
+0x7877 # <CJK>
+0x787C # <CJK>
+0x7887 # <CJK>
+0x7889 # <CJK>
+0x788C # <CJK>
+0x788D # <CJK>
+0x788E # <CJK>
+0x7891 # <CJK>
+0x7893 # <CJK>
+0x7897 # <CJK>
+0x7898 # <CJK>
+0x789A # <CJK>
+0x789B # <CJK>
+0x789C # <CJK>
+0x789F # <CJK>
+0x78A1 # <CJK>
+0x78A3 # <CJK>
+0x78A5 # <CJK>
+0x78A7 # <CJK>
+0x78B0 # <CJK>
+0x78B1 # <CJK>
+0x78B2 # <CJK>
+0x78B3 # <CJK>
+0x78B4 # <CJK>
+0x78B9 # <CJK>
+0x78BE # <CJK>
+0x78C1 # <CJK>
+0x78C5 # <CJK>
+0x78C9 # <CJK>
+0x78CA # <CJK>
+0x78CB # <CJK>
+0x78D0 # <CJK>
+0x78D4 # <CJK>
+0x78D5 # <CJK>
+0x78D9 # <CJK>
+0x78E8 # <CJK>
+0x78EC # <CJK>
+0x78F2 # <CJK>
+0x78F4 # <CJK>
+0x78F7 # <CJK>
+0x78FA # <CJK>
+0x7901 # <CJK>
+0x7905 # <CJK>
+0x7913 # <CJK>
+0x791E # <CJK>
+0x7924 # <CJK>
+0x7934 # <CJK>
+0x793A # <CJK>
+0x793B # <CJK>
+0x793C # <CJK>
+0x793E # <CJK>
+0x7940 # <CJK>
+0x7941 # <CJK>
+0x7946 # <CJK>
+0x7948 # <CJK>
+0x7949 # <CJK>
+0x7953 # <CJK>
+0x7956 # <CJK>
+0x7957 # <CJK>
+0x795A # <CJK>
+0x795B # <CJK>
+0x795C # <CJK>
+0x795D # <CJK>
+0x795E # <CJK>
+0x795F # <CJK>
+0x7960 # <CJK>
+0x7962 # <CJK>
+0x7965 # <CJK>
+0x7967 # <CJK>
+0x7968 # <CJK>
+0x796D # <CJK>
+0x796F # <CJK>
+0x7977 # <CJK>
+0x7978 # <CJK>
+0x797A # <CJK>
+0x7980 # <CJK>
+0x7981 # <CJK>
+0x7984 # <CJK>
+0x7985 # <CJK>
+0x798A # <CJK>
+0x798F # <CJK>
+0x799A # <CJK>
+0x79A7 # <CJK>
+0x79B3 # <CJK>
+0x79B9 # <CJK>
+0x79BA # <CJK>
+0x79BB # <CJK>
+0x79BD # <CJK>
+0x79BE # <CJK>
+0x79C0 # <CJK>
+0x79C1 # <CJK>
+0x79C3 # <CJK>
+0x79C6 # <CJK>
+0x79C9 # <CJK>
+0x79CB # <CJK>
+0x79CD # <CJK>
+0x79D1 # <CJK>
+0x79D2 # <CJK>
+0x79D5 # <CJK>
+0x79D8 # <CJK>
+0x79DF # <CJK>
+0x79E3 # <CJK>
+0x79E4 # <CJK>
+0x79E6 # <CJK>
+0x79E7 # <CJK>
+0x79E9 # <CJK>
+0x79EB # <CJK>
+0x79ED # <CJK>
+0x79EF # <CJK>
+0x79F0 # <CJK>
+0x79F8 # <CJK>
+0x79FB # <CJK>
+0x79FD # <CJK>
+0x7A00 # <CJK>
+0x7A02 # <CJK>
+0x7A03 # <CJK>
+0x7A06 # <CJK>
+0x7A0B # <CJK>
+0x7A0D # <CJK>
+0x7A0E # <CJK>
+0x7A14 # <CJK>
+0x7A17 # <CJK>
+0x7A1A # <CJK>
+0x7A1E # <CJK>
+0x7A20 # <CJK>
+0x7A23 # <CJK>
+0x7A33 # <CJK>
+0x7A37 # <CJK>
+0x7A39 # <CJK>
+0x7A3B # <CJK>
+0x7A3C # <CJK>
+0x7A3D # <CJK>
+0x7A3F # <CJK>
+0x7A46 # <CJK>
+0x7A51 # <CJK>
+0x7A57 # <CJK>
+0x7A70 # <CJK>
+0x7A74 # <CJK>
+0x7A76 # <CJK>
+0x7A77 # <CJK>
+0x7A78 # <CJK>
+0x7A79 # <CJK>
+0x7A7A # <CJK>
+0x7A7F # <CJK>
+0x7A80 # <CJK>
+0x7A81 # <CJK>
+0x7A83 # <CJK>
+0x7A84 # <CJK>
+0x7A86 # <CJK>
+0x7A88 # <CJK>
+0x7A8D # <CJK>
+0x7A91 # <CJK>
+0x7A92 # <CJK>
+0x7A95 # <CJK>
+0x7A96 # <CJK>
+0x7A97 # <CJK>
+0x7A98 # <CJK>
+0x7A9C # <CJK>
+0x7A9D # <CJK>
+0x7A9F # <CJK>
+0x7AA0 # <CJK>
+0x7AA5 # <CJK>
+0x7AA6 # <CJK>
+0x7AA8 # <CJK>
+0x7AAC # <CJK>
+0x7AAD # <CJK>
+0x7AB3 # <CJK>
+0x7ABF # <CJK>
+0x7ACB # <CJK>
+0x7AD6 # <CJK>
+0x7AD9 # <CJK>
+0x7ADE # <CJK>
+0x7ADF # <CJK>
+0x7AE0 # <CJK>
+0x7AE3 # <CJK>
+0x7AE5 # <CJK>
+0x7AE6 # <CJK>
+0x7AED # <CJK>
+0x7AEF # <CJK>
+0x7AF9 # <CJK>
+0x7AFA # <CJK>
+0x7AFD # <CJK>
+0x7AFF # <CJK>
+0x7B03 # <CJK>
+0x7B04 # <CJK>
+0x7B06 # <CJK>
+0x7B08 # <CJK>
+0x7B0A # <CJK>
+0x7B0B # <CJK>
+0x7B0F # <CJK>
+0x7B11 # <CJK>
+0x7B14 # <CJK>
+0x7B15 # <CJK>
+0x7B19 # <CJK>
+0x7B1B # <CJK>
+0x7B1E # <CJK>
+0x7B20 # <CJK>
+0x7B24 # <CJK>
+0x7B25 # <CJK>
+0x7B26 # <CJK>
+0x7B28 # <CJK>
+0x7B2A # <CJK>
+0x7B2B # <CJK>
+0x7B2C # <CJK>
+0x7B2E # <CJK>
+0x7B31 # <CJK>
+0x7B33 # <CJK>
+0x7B38 # <CJK>
+0x7B3A # <CJK>
+0x7B3C # <CJK>
+0x7B3E # <CJK>
+0x7B45 # <CJK>
+0x7B47 # <CJK>
+0x7B49 # <CJK>
+0x7B4B # <CJK>
+0x7B4C # <CJK>
+0x7B4F # <CJK>
+0x7B50 # <CJK>
+0x7B51 # <CJK>
+0x7B52 # <CJK>
+0x7B54 # <CJK>
+0x7B56 # <CJK>
+0x7B58 # <CJK>
+0x7B5A # <CJK>
+0x7B5B # <CJK>
+0x7B5D # <CJK>
+0x7B60 # <CJK>
+0x7B62 # <CJK>
+0x7B6E # <CJK>
+0x7B71 # <CJK>
+0x7B72 # <CJK>
+0x7B75 # <CJK>
+0x7B77 # <CJK>
+0x7B79 # <CJK>
+0x7B7B # <CJK>
+0x7B7E # <CJK>
+0x7B80 # <CJK>
+0x7B85 # <CJK>
+0x7B8D # <CJK>
+0x7B90 # <CJK>
+0x7B94 # <CJK>
+0x7B95 # <CJK>
+0x7B97 # <CJK>
+0x7B9C # <CJK>
+0x7B9D # <CJK>
+0x7BA1 # <CJK>
+0x7BA2 # <CJK>
+0x7BA6 # <CJK>
+0x7BA7 # <CJK>
+0x7BA8 # <CJK>
+0x7BA9 # <CJK>
+0x7BAA # <CJK>
+0x7BAB # <CJK>
+0x7BAC # <CJK>
+0x7BAD # <CJK>
+0x7BB1 # <CJK>
+0x7BB4 # <CJK>
+0x7BB8 # <CJK>
+0x7BC1 # <CJK>
+0x7BC6 # <CJK>
+0x7BC7 # <CJK>
+0x7BCC # <CJK>
+0x7BD1 # <CJK>
+0x7BD3 # <CJK>
+0x7BD9 # <CJK>
+0x7BDA # <CJK>
+0x7BDD # <CJK>
+0x7BE1 # <CJK>
+0x7BE5 # <CJK>
+0x7BE6 # <CJK>
+0x7BEA # <CJK>
+0x7BEE # <CJK>
+0x7BF1 # <CJK>
+0x7BF7 # <CJK>
+0x7BFC # <CJK>
+0x7BFE # <CJK>
+0x7C07 # <CJK>
+0x7C0B # <CJK>
+0x7C0C # <CJK>
+0x7C0F # <CJK>
+0x7C16 # <CJK>
+0x7C1F # <CJK>
+0x7C26 # <CJK>
+0x7C27 # <CJK>
+0x7C2A # <CJK>
+0x7C38 # <CJK>
+0x7C3F # <CJK>
+0x7C40 # <CJK>
+0x7C41 # <CJK>
+0x7C4D # <CJK>
+0x7C73 # <CJK>
+0x7C74 # <CJK>
+0x7C7B # <CJK>
+0x7C7C # <CJK>
+0x7C7D # <CJK>
+0x7C89 # <CJK>
+0x7C91 # <CJK>
+0x7C92 # <CJK>
+0x7C95 # <CJK>
+0x7C97 # <CJK>
+0x7C98 # <CJK>
+0x7C9C # <CJK>
+0x7C9D # <CJK>
+0x7C9E # <CJK>
+0x7C9F # <CJK>
+0x7CA2 # <CJK>
+0x7CA4 # <CJK>
+0x7CA5 # <CJK>
+0x7CAA # <CJK>
+0x7CAE # <CJK>
+0x7CB1 # <CJK>
+0x7CB2 # <CJK>
+0x7CB3 # <CJK>
+0x7CB9 # <CJK>
+0x7CBC # <CJK>
+0x7CBD # <CJK>
+0x7CBE # <CJK>
+0x7CC1 # <CJK>
+0x7CC5 # <CJK>
+0x7CC7 # <CJK>
+0x7CC8 # <CJK>
+0x7CCA # <CJK>
+0x7CCC # <CJK>
+0x7CCD # <CJK>
+0x7CD5 # <CJK>
+0x7CD6 # <CJK>
+0x7CD7 # <CJK>
+0x7CD9 # <CJK>
+0x7CDC # <CJK>
+0x7CDF # <CJK>
+0x7CE0 # <CJK>
+0x7CE8 # <CJK>
+0x7CEF # <CJK>
+0x7CF8 # <CJK>
+0x7CFB # <CJK>
+0x7D0A # <CJK>
+0x7D20 # <CJK>
+0x7D22 # <CJK>
+0x7D27 # <CJK>
+0x7D2B # <CJK>
+0x7D2F # <CJK>
+0x7D6E # <CJK>
+0x7D77 # <CJK>
+0x7DA6 # <CJK>
+0x7DAE # <CJK>
+0x7E3B # <CJK>
+0x7E41 # <CJK>
+0x7E47 # <CJK>
+0x7E82 # <CJK>
+0x7E9B # <CJK>
+0x7E9F # <CJK>
+0x7EA0 # <CJK>
+0x7EA1 # <CJK>
+0x7EA2 # <CJK>
+0x7EA3 # <CJK>
+0x7EA4 # <CJK>
+0x7EA5 # <CJK>
+0x7EA6 # <CJK>
+0x7EA7 # <CJK>
+0x7EA8 # <CJK>
+0x7EA9 # <CJK>
+0x7EAA # <CJK>
+0x7EAB # <CJK>
+0x7EAC # <CJK>
+0x7EAD # <CJK>
+0x7EAF # <CJK>
+0x7EB0 # <CJK>
+0x7EB1 # <CJK>
+0x7EB2 # <CJK>
+0x7EB3 # <CJK>
+0x7EB5 # <CJK>
+0x7EB6 # <CJK>
+0x7EB7 # <CJK>
+0x7EB8 # <CJK>
+0x7EB9 # <CJK>
+0x7EBA # <CJK>
+0x7EBD # <CJK>
+0x7EBE # <CJK>
+0x7EBF # <CJK>
+0x7EC0 # <CJK>
+0x7EC1 # <CJK>
+0x7EC2 # <CJK>
+0x7EC3 # <CJK>
+0x7EC4 # <CJK>
+0x7EC5 # <CJK>
+0x7EC6 # <CJK>
+0x7EC7 # <CJK>
+0x7EC8 # <CJK>
+0x7EC9 # <CJK>
+0x7ECA # <CJK>
+0x7ECB # <CJK>
+0x7ECC # <CJK>
+0x7ECD # <CJK>
+0x7ECE # <CJK>
+0x7ECF # <CJK>
+0x7ED0 # <CJK>
+0x7ED1 # <CJK>
+0x7ED2 # <CJK>
+0x7ED3 # <CJK>
+0x7ED4 # <CJK>
+0x7ED5 # <CJK>
+0x7ED7 # <CJK>
+0x7ED8 # <CJK>
+0x7ED9 # <CJK>
+0x7EDA # <CJK>
+0x7EDB # <CJK>
+0x7EDC # <CJK>
+0x7EDD # <CJK>
+0x7EDE # <CJK>
+0x7EDF # <CJK>
+0x7EE0 # <CJK>
+0x7EE1 # <CJK>
+0x7EE2 # <CJK>
+0x7EE3 # <CJK>
+0x7EE5 # <CJK>
+0x7EE6 # <CJK>
+0x7EE7 # <CJK>
+0x7EE8 # <CJK>
+0x7EE9 # <CJK>
+0x7EEA # <CJK>
+0x7EEB # <CJK>
+0x7EED # <CJK>
+0x7EEE # <CJK>
+0x7EEF # <CJK>
+0x7EF0 # <CJK>
+0x7EF1 # <CJK>
+0x7EF2 # <CJK>
+0x7EF3 # <CJK>
+0x7EF4 # <CJK>
+0x7EF5 # <CJK>
+0x7EF6 # <CJK>
+0x7EF7 # <CJK>
+0x7EF8 # <CJK>
+0x7EFA # <CJK>
+0x7EFB # <CJK>
+0x7EFC # <CJK>
+0x7EFD # <CJK>
+0x7EFE # <CJK>
+0x7EFF # <CJK>
+0x7F00 # <CJK>
+0x7F01 # <CJK>
+0x7F02 # <CJK>
+0x7F03 # <CJK>
+0x7F04 # <CJK>
+0x7F05 # <CJK>
+0x7F06 # <CJK>
+0x7F07 # <CJK>
+0x7F08 # <CJK>
+0x7F09 # <CJK>
+0x7F0B # <CJK>
+0x7F0C # <CJK>
+0x7F0D # <CJK>
+0x7F0E # <CJK>
+0x7F0F # <CJK>
+0x7F11 # <CJK>
+0x7F12 # <CJK>
+0x7F13 # <CJK>
+0x7F14 # <CJK>
+0x7F15 # <CJK>
+0x7F16 # <CJK>
+0x7F17 # <CJK>
+0x7F18 # <CJK>
+0x7F19 # <CJK>
+0x7F1A # <CJK>
+0x7F1B # <CJK>
+0x7F1C # <CJK>
+0x7F1D # <CJK>
+0x7F1F # <CJK>
+0x7F20 # <CJK>
+0x7F21 # <CJK>
+0x7F22 # <CJK>
+0x7F23 # <CJK>
+0x7F24 # <CJK>
+0x7F25 # <CJK>
+0x7F26 # <CJK>
+0x7F27 # <CJK>
+0x7F28 # <CJK>
+0x7F29 # <CJK>
+0x7F2A # <CJK>
+0x7F2B # <CJK>
+0x7F2C # <CJK>
+0x7F2D # <CJK>
+0x7F2E # <CJK>
+0x7F2F # <CJK>
+0x7F30 # <CJK>
+0x7F31 # <CJK>
+0x7F32 # <CJK>
+0x7F33 # <CJK>
+0x7F34 # <CJK>
+0x7F35 # <CJK>
+0x7F36 # <CJK>
+0x7F38 # <CJK>
+0x7F3A # <CJK>
+0x7F42 # <CJK>
+0x7F44 # <CJK>
+0x7F45 # <CJK>
+0x7F50 # <CJK>
+0x7F51 # <CJK>
+0x7F54 # <CJK>
+0x7F55 # <CJK>
+0x7F57 # <CJK>
+0x7F58 # <CJK>
+0x7F5A # <CJK>
+0x7F5F # <CJK>
+0x7F61 # <CJK>
+0x7F62 # <CJK>
+0x7F68 # <CJK>
+0x7F69 # <CJK>
+0x7F6A # <CJK>
+0x7F6E # <CJK>
+0x7F71 # <CJK>
+0x7F72 # <CJK>
+0x7F74 # <CJK>
+0x7F79 # <CJK>
+0x7F7E # <CJK>
+0x7F81 # <CJK>
+0x7F8A # <CJK>
+0x7F8C # <CJK>
+0x7F8E # <CJK>
+0x7F94 # <CJK>
+0x7F9A # <CJK>
+0x7F9D # <CJK>
+0x7F9E # <CJK>
+0x7F9F # <CJK>
+0x7FA1 # <CJK>
+0x7FA4 # <CJK>
+0x7FA7 # <CJK>
+0x7FAF # <CJK>
+0x7FB0 # <CJK>
+0x7FB2 # <CJK>
+0x7FB8 # <CJK>
+0x7FB9 # <CJK>
+0x7FBC # <CJK>
+0x7FBD # <CJK>
+0x7FBF # <CJK>
+0x7FC1 # <CJK>
+0x7FC5 # <CJK>
+0x7FCA # <CJK>
+0x7FCC # <CJK>
+0x7FCE # <CJK>
+0x7FD4 # <CJK>
+0x7FD5 # <CJK>
+0x7FD8 # <CJK>
+0x7FDF # <CJK>
+0x7FE0 # <CJK>
+0x7FE1 # <CJK>
+0x7FE5 # <CJK>
+0x7FE6 # <CJK>
+0x7FE9 # <CJK>
+0x7FEE # <CJK>
+0x7FF0 # <CJK>
+0x7FF1 # <CJK>
+0x7FF3 # <CJK>
+0x7FFB # <CJK>
+0x7FFC # <CJK>
+0x8000 # <CJK>
+0x8001 # <CJK>
+0x8003 # <CJK>
+0x8004 # <CJK>
+0x8005 # <CJK>
+0x8006 # <CJK>
+0x800B # <CJK>
+0x800C # <CJK>
+0x800D # <CJK>
+0x8010 # <CJK>
+0x8012 # <CJK>
+0x8014 # <CJK>
+0x8015 # <CJK>
+0x8016 # <CJK>
+0x8017 # <CJK>
+0x8018 # <CJK>
+0x8019 # <CJK>
+0x801C # <CJK>
+0x8020 # <CJK>
+0x8022 # <CJK>
+0x8025 # <CJK>
+0x8026 # <CJK>
+0x8027 # <CJK>
+0x8028 # <CJK>
+0x8029 # <CJK>
+0x802A # <CJK>
+0x8031 # <CJK>
+0x8033 # <CJK>
+0x8035 # <CJK>
+0x8036 # <CJK>
+0x8037 # <CJK>
+0x8038 # <CJK>
+0x803B # <CJK>
+0x803D # <CJK>
+0x803F # <CJK>
+0x8042 # <CJK>
+0x8043 # <CJK>
+0x8046 # <CJK>
+0x804A # <CJK>
+0x804B # <CJK>
+0x804C # <CJK>
+0x804D # <CJK>
+0x8052 # <CJK>
+0x8054 # <CJK>
+0x8058 # <CJK>
+0x805A # <CJK>
+0x8069 # <CJK>
+0x806A # <CJK>
+0x8071 # <CJK>
+0x807F # <CJK>
+0x8080 # <CJK>
+0x8083 # <CJK>
+0x8084 # <CJK>
+0x8086 # <CJK>
+0x8087 # <CJK>
+0x8089 # <CJK>
+0x808B # <CJK>
+0x808C # <CJK>
+0x8093 # <CJK>
+0x8096 # <CJK>
+0x8098 # <CJK>
+0x809A # <CJK>
+0x809B # <CJK>
+0x809C # <CJK>
+0x809D # <CJK>
+0x809F # <CJK>
+0x80A0 # <CJK>
+0x80A1 # <CJK>
+0x80A2 # <CJK>
+0x80A4 # <CJK>
+0x80A5 # <CJK>
+0x80A9 # <CJK>
+0x80AA # <CJK>
+0x80AB # <CJK>
+0x80AD # <CJK>
+0x80AE # <CJK>
+0x80AF # <CJK>
+0x80B1 # <CJK>
+0x80B2 # <CJK>
+0x80B4 # <CJK>
+0x80B7 # <CJK>
+0x80BA # <CJK>
+0x80BC # <CJK>
+0x80BD # <CJK>
+0x80BE # <CJK>
+0x80BF # <CJK>
+0x80C0 # <CJK>
+0x80C1 # <CJK>
+0x80C2 # <CJK>
+0x80C3 # <CJK>
+0x80C4 # <CJK>
+0x80C6 # <CJK>
+0x80CC # <CJK>
+0x80CD # <CJK>
+0x80CE # <CJK>
+0x80D6 # <CJK>
+0x80D7 # <CJK>
+0x80D9 # <CJK>
+0x80DA # <CJK>
+0x80DB # <CJK>
+0x80DC # <CJK>
+0x80DD # <CJK>
+0x80DE # <CJK>
+0x80E1 # <CJK>
+0x80E4 # <CJK>
+0x80E5 # <CJK>
+0x80E7 # <CJK>
+0x80E8 # <CJK>
+0x80E9 # <CJK>
+0x80EA # <CJK>
+0x80EB # <CJK>
+0x80EC # <CJK>
+0x80ED # <CJK>
+0x80EF # <CJK>
+0x80F0 # <CJK>
+0x80F1 # <CJK>
+0x80F2 # <CJK>
+0x80F3 # <CJK>
+0x80F4 # <CJK>
+0x80F6 # <CJK>
+0x80F8 # <CJK>
+0x80FA # <CJK>
+0x80FC # <CJK>
+0x80FD # <CJK>
+0x8102 # <CJK>
+0x8106 # <CJK>
+0x8109 # <CJK>
+0x810A # <CJK>
+0x810D # <CJK>
+0x810E # <CJK>
+0x810F # <CJK>
+0x8110 # <CJK>
+0x8111 # <CJK>
+0x8112 # <CJK>
+0x8113 # <CJK>
+0x8114 # <CJK>
+0x8116 # <CJK>
+0x8118 # <CJK>
+0x811A # <CJK>
+0x811E # <CJK>
+0x812C # <CJK>
+0x812F # <CJK>
+0x8131 # <CJK>
+0x8132 # <CJK>
+0x8136 # <CJK>
+0x8138 # <CJK>
+0x813E # <CJK>
+0x8146 # <CJK>
+0x8148 # <CJK>
+0x814A # <CJK>
+0x814B # <CJK>
+0x814C # <CJK>
+0x8150 # <CJK>
+0x8151 # <CJK>
+0x8153 # <CJK>
+0x8154 # <CJK>
+0x8155 # <CJK>
+0x8159 # <CJK>
+0x815A # <CJK>
+0x8160 # <CJK>
+0x8165 # <CJK>
+0x8167 # <CJK>
+0x8169 # <CJK>
+0x816D # <CJK>
+0x816E # <CJK>
+0x8170 # <CJK>
+0x8171 # <CJK>
+0x8174 # <CJK>
+0x8179 # <CJK>
+0x817A # <CJK>
+0x817B # <CJK>
+0x817C # <CJK>
+0x817D # <CJK>
+0x817E # <CJK>
+0x817F # <CJK>
+0x8180 # <CJK>
+0x8182 # <CJK>
+0x8188 # <CJK>
+0x818A # <CJK>
+0x818F # <CJK>
+0x8191 # <CJK>
+0x8198 # <CJK>
+0x819B # <CJK>
+0x819C # <CJK>
+0x819D # <CJK>
+0x81A3 # <CJK>
+0x81A6 # <CJK>
+0x81A8 # <CJK>
+0x81AA # <CJK>
+0x81B3 # <CJK>
+0x81BA # <CJK>
+0x81BB # <CJK>
+0x81C0 # <CJK>
+0x81C1 # <CJK>
+0x81C2 # <CJK>
+0x81C3 # <CJK>
+0x81C6 # <CJK>
+0x81CA # <CJK>
+0x81CC # <CJK>
+0x81E3 # <CJK>
+0x81E7 # <CJK>
+0x81EA # <CJK>
+0x81EC # <CJK>
+0x81ED # <CJK>
+0x81F3 # <CJK>
+0x81F4 # <CJK>
+0x81FB # <CJK>
+0x81FC # <CJK>
+0x81FE # <CJK>
+0x8200 # <CJK>
+0x8201 # <CJK>
+0x8202 # <CJK>
+0x8204 # <CJK>
+0x8205 # <CJK>
+0x8206 # <CJK>
+0x820C # <CJK>
+0x820D # <CJK>
+0x8210 # <CJK>
+0x8212 # <CJK>
+0x8214 # <CJK>
+0x821B # <CJK>
+0x821C # <CJK>
+0x821E # <CJK>
+0x821F # <CJK>
+0x8221 # <CJK>
+0x8222 # <CJK>
+0x8223 # <CJK>
+0x8228 # <CJK>
+0x822A # <CJK>
+0x822B # <CJK>
+0x822C # <CJK>
+0x822D # <CJK>
+0x822F # <CJK>
+0x8230 # <CJK>
+0x8231 # <CJK>
+0x8233 # <CJK>
+0x8234 # <CJK>
+0x8235 # <CJK>
+0x8236 # <CJK>
+0x8237 # <CJK>
+0x8238 # <CJK>
+0x8239 # <CJK>
+0x823B # <CJK>
+0x823E # <CJK>
+0x8244 # <CJK>
+0x8247 # <CJK>
+0x8249 # <CJK>
+0x824B # <CJK>
+0x824F # <CJK>
+0x8258 # <CJK>
+0x825A # <CJK>
+0x825F # <CJK>
+0x8268 # <CJK>
+0x826E # <CJK>
+0x826F # <CJK>
+0x8270 # <CJK>
+0x8272 # <CJK>
+0x8273 # <CJK>
+0x8274 # <CJK>
+0x8279 # <CJK>
+0x827A # <CJK>
+0x827D # <CJK>
+0x827E # <CJK>
+0x827F # <CJK>
+0x8282 # <CJK>
+0x8284 # <CJK>
+0x8288 # <CJK>
+0x828A # <CJK>
+0x828B # <CJK>
+0x828D # <CJK>
+0x828E # <CJK>
+0x828F # <CJK>
+0x8291 # <CJK>
+0x8292 # <CJK>
+0x8297 # <CJK>
+0x8298 # <CJK>
+0x8299 # <CJK>
+0x829C # <CJK>
+0x829D # <CJK>
+0x829F # <CJK>
+0x82A1 # <CJK>
+0x82A4 # <CJK>
+0x82A5 # <CJK>
+0x82A6 # <CJK>
+0x82A8 # <CJK>
+0x82A9 # <CJK>
+0x82AA # <CJK>
+0x82AB # <CJK>
+0x82AC # <CJK>
+0x82AD # <CJK>
+0x82AE # <CJK>
+0x82AF # <CJK>
+0x82B0 # <CJK>
+0x82B1 # <CJK>
+0x82B3 # <CJK>
+0x82B4 # <CJK>
+0x82B7 # <CJK>
+0x82B8 # <CJK>
+0x82B9 # <CJK>
+0x82BD # <CJK>
+0x82BE # <CJK>
+0x82C1 # <CJK>
+0x82C4 # <CJK>
+0x82C7 # <CJK>
+0x82C8 # <CJK>
+0x82CA # <CJK>
+0x82CB # <CJK>
+0x82CC # <CJK>
+0x82CD # <CJK>
+0x82CE # <CJK>
+0x82CF # <CJK>
+0x82D1 # <CJK>
+0x82D2 # <CJK>
+0x82D3 # <CJK>
+0x82D4 # <CJK>
+0x82D5 # <CJK>
+0x82D7 # <CJK>
+0x82D8 # <CJK>
+0x82DB # <CJK>
+0x82DC # <CJK>
+0x82DE # <CJK>
+0x82DF # <CJK>
+0x82E0 # <CJK>
+0x82E1 # <CJK>
+0x82E3 # <CJK>
+0x82E4 # <CJK>
+0x82E5 # <CJK>
+0x82E6 # <CJK>
+0x82EB # <CJK>
+0x82EF # <CJK>
+0x82F1 # <CJK>
+0x82F4 # <CJK>
+0x82F7 # <CJK>
+0x82F9 # <CJK>
+0x82FB # <CJK>
+0x8301 # <CJK>
+0x8302 # <CJK>
+0x8303 # <CJK>
+0x8304 # <CJK>
+0x8305 # <CJK>
+0x8306 # <CJK>
+0x8307 # <CJK>
+0x8308 # <CJK>
+0x8309 # <CJK>
+0x830C # <CJK>
+0x830E # <CJK>
+0x830F # <CJK>
+0x8311 # <CJK>
+0x8314 # <CJK>
+0x8315 # <CJK>
+0x8317 # <CJK>
+0x831A # <CJK>
+0x831B # <CJK>
+0x831C # <CJK>
+0x8327 # <CJK>
+0x8328 # <CJK>
+0x832B # <CJK>
+0x832C # <CJK>
+0x832D # <CJK>
+0x832F # <CJK>
+0x8331 # <CJK>
+0x8333 # <CJK>
+0x8334 # <CJK>
+0x8335 # <CJK>
+0x8336 # <CJK>
+0x8338 # <CJK>
+0x8339 # <CJK>
+0x833A # <CJK>
+0x833C # <CJK>
+0x8340 # <CJK>
+0x8343 # <CJK>
+0x8346 # <CJK>
+0x8347 # <CJK>
+0x8349 # <CJK>
+0x834F # <CJK>
+0x8350 # <CJK>
+0x8351 # <CJK>
+0x8352 # <CJK>
+0x8354 # <CJK>
+0x835A # <CJK>
+0x835B # <CJK>
+0x835C # <CJK>
+0x835E # <CJK>
+0x835F # <CJK>
+0x8360 # <CJK>
+0x8361 # <CJK>
+0x8363 # <CJK>
+0x8364 # <CJK>
+0x8365 # <CJK>
+0x8366 # <CJK>
+0x8367 # <CJK>
+0x8368 # <CJK>
+0x8369 # <CJK>
+0x836A # <CJK>
+0x836B # <CJK>
+0x836C # <CJK>
+0x836D # <CJK>
+0x836E # <CJK>
+0x836F # <CJK>
+0x8377 # <CJK>
+0x8378 # <CJK>
+0x837B # <CJK>
+0x837C # <CJK>
+0x837D # <CJK>
+0x8385 # <CJK>
+0x8386 # <CJK>
+0x8389 # <CJK>
+0x838E # <CJK>
+0x8392 # <CJK>
+0x8393 # <CJK>
+0x8398 # <CJK>
+0x839B # <CJK>
+0x839C # <CJK>
+0x839E # <CJK>
+0x83A0 # <CJK>
+0x83A8 # <CJK>
+0x83A9 # <CJK>
+0x83AA # <CJK>
+0x83AB # <CJK>
+0x83B0 # <CJK>
+0x83B1 # <CJK>
+0x83B2 # <CJK>
+0x83B3 # <CJK>
+0x83B4 # <CJK>
+0x83B6 # <CJK>
+0x83B7 # <CJK>
+0x83B8 # <CJK>
+0x83B9 # <CJK>
+0x83BA # <CJK>
+0x83BC # <CJK>
+0x83BD # <CJK>
+0x83C0 # <CJK>
+0x83C1 # <CJK>
+0x83C5 # <CJK>
+0x83C7 # <CJK>
+0x83CA # <CJK>
+0x83CC # <CJK>
+0x83CF # <CJK>
+0x83D4 # <CJK>
+0x83D6 # <CJK>
+0x83D8 # <CJK>
+0x83DC # <CJK>
+0x83DD # <CJK>
+0x83DF # <CJK>
+0x83E0 # <CJK>
+0x83E1 # <CJK>
+0x83E5 # <CJK>
+0x83E9 # <CJK>
+0x83EA # <CJK>
+0x83F0 # <CJK>
+0x83F1 # <CJK>
+0x83F2 # <CJK>
+0x83F8 # <CJK>
+0x83F9 # <CJK>
+0x83FD # <CJK>
+0x8401 # <CJK>
+0x8403 # <CJK>
+0x8404 # <CJK>
+0x8406 # <CJK>
+0x840B # <CJK>
+0x840C # <CJK>
+0x840D # <CJK>
+0x840E # <CJK>
+0x840F # <CJK>
+0x8411 # <CJK>
+0x8418 # <CJK>
+0x841C # <CJK>
+0x841D # <CJK>
+0x8424 # <CJK>
+0x8425 # <CJK>
+0x8426 # <CJK>
+0x8427 # <CJK>
+0x8428 # <CJK>
+0x8431 # <CJK>
+0x8438 # <CJK>
+0x843C # <CJK>
+0x843D # <CJK>
+0x8446 # <CJK>
+0x8451 # <CJK>
+0x8457 # <CJK>
+0x8459 # <CJK>
+0x845A # <CJK>
+0x845B # <CJK>
+0x845C # <CJK>
+0x8461 # <CJK>
+0x8463 # <CJK>
+0x8469 # <CJK>
+0x846B # <CJK>
+0x846C # <CJK>
+0x846D # <CJK>
+0x8471 # <CJK>
+0x8473 # <CJK>
+0x8475 # <CJK>
+0x8476 # <CJK>
+0x8478 # <CJK>
+0x847A # <CJK>
+0x8482 # <CJK>
+0x8487 # <CJK>
+0x8488 # <CJK>
+0x8489 # <CJK>
+0x848B # <CJK>
+0x848C # <CJK>
+0x848E # <CJK>
+0x8497 # <CJK>
+0x8499 # <CJK>
+0x849C # <CJK>
+0x84A1 # <CJK>
+0x84AF # <CJK>
+0x84B2 # <CJK>
+0x84B4 # <CJK>
+0x84B8 # <CJK>
+0x84B9 # <CJK>
+0x84BA # <CJK>
+0x84BD # <CJK>
+0x84BF # <CJK>
+0x84C1 # <CJK>
+0x84C4 # <CJK>
+0x84C9 # <CJK>
+0x84CA # <CJK>
+0x84CD # <CJK>
+0x84D0 # <CJK>
+0x84D1 # <CJK>
+0x84D3 # <CJK>
+0x84D6 # <CJK>
+0x84DD # <CJK>
+0x84DF # <CJK>
+0x84E0 # <CJK>
+0x84E3 # <CJK>
+0x84E5 # <CJK>
+0x84E6 # <CJK>
+0x84EC # <CJK>
+0x84F0 # <CJK>
+0x84FC # <CJK>
+0x84FF # <CJK>
+0x850C # <CJK>
+0x8511 # <CJK>
+0x8513 # <CJK>
+0x8517 # <CJK>
+0x851A # <CJK>
+0x851F # <CJK>
+0x8521 # <CJK>
+0x852B # <CJK>
+0x852C # <CJK>
+0x8537 # <CJK>
+0x8538 # <CJK>
+0x8539 # <CJK>
+0x853A # <CJK>
+0x853B # <CJK>
+0x853C # <CJK>
+0x853D # <CJK>
+0x8543 # <CJK>
+0x8548 # <CJK>
+0x8549 # <CJK>
+0x854A # <CJK>
+0x8556 # <CJK>
+0x8559 # <CJK>
+0x855E # <CJK>
+0x8564 # <CJK>
+0x8568 # <CJK>
+0x8572 # <CJK>
+0x8574 # <CJK>
+0x8579 # <CJK>
+0x857A # <CJK>
+0x857B # <CJK>
+0x857E # <CJK>
+0x8584 # <CJK>
+0x8585 # <CJK>
+0x8587 # <CJK>
+0x858F # <CJK>
+0x859B # <CJK>
+0x859C # <CJK>
+0x85A4 # <CJK>
+0x85A8 # <CJK>
+0x85AA # <CJK>
+0x85AE # <CJK>
+0x85AF # <CJK>
+0x85B0 # <CJK>
+0x85B7 # <CJK>
+0x85B9 # <CJK>
+0x85C1 # <CJK>
+0x85C9 # <CJK>
+0x85CF # <CJK>
+0x85D0 # <CJK>
+0x85D3 # <CJK>
+0x85D5 # <CJK>
+0x85DC # <CJK>
+0x85E4 # <CJK>
+0x85E9 # <CJK>
+0x85FB # <CJK>
+0x85FF # <CJK>
+0x8605 # <CJK>
+0x8611 # <CJK>
+0x8616 # <CJK>
+0x8627 # <CJK>
+0x8629 # <CJK>
+0x8638 # <CJK>
+0x863C # <CJK>
+0x864D # <CJK>
+0x864E # <CJK>
+0x864F # <CJK>
+0x8650 # <CJK>
+0x8651 # <CJK>
+0x8654 # <CJK>
+0x865A # <CJK>
+0x865E # <CJK>
+0x8662 # <CJK>
+0x866B # <CJK>
+0x866C # <CJK>
+0x866E # <CJK>
+0x8671 # <CJK>
+0x8679 # <CJK>
+0x867A # <CJK>
+0x867B # <CJK>
+0x867C # <CJK>
+0x867D # <CJK>
+0x867E # <CJK>
+0x867F # <CJK>
+0x8680 # <CJK>
+0x8681 # <CJK>
+0x8682 # <CJK>
+0x868A # <CJK>
+0x868B # <CJK>
+0x868C # <CJK>
+0x868D # <CJK>
+0x8693 # <CJK>
+0x8695 # <CJK>
+0x869C # <CJK>
+0x869D # <CJK>
+0x86A3 # <CJK>
+0x86A4 # <CJK>
+0x86A7 # <CJK>
+0x86A8 # <CJK>
+0x86A9 # <CJK>
+0x86AA # <CJK>
+0x86AC # <CJK>
+0x86AF # <CJK>
+0x86B0 # <CJK>
+0x86B1 # <CJK>
+0x86B4 # <CJK>
+0x86B5 # <CJK>
+0x86B6 # <CJK>
+0x86BA # <CJK>
+0x86C0 # <CJK>
+0x86C4 # <CJK>
+0x86C6 # <CJK>
+0x86C7 # <CJK>
+0x86C9 # <CJK>
+0x86CA # <CJK>
+0x86CB # <CJK>
+0x86CE # <CJK>
+0x86CF # <CJK>
+0x86D0 # <CJK>
+0x86D1 # <CJK>
+0x86D4 # <CJK>
+0x86D8 # <CJK>
+0x86D9 # <CJK>
+0x86DB # <CJK>
+0x86DE # <CJK>
+0x86DF # <CJK>
+0x86E4 # <CJK>
+0x86E9 # <CJK>
+0x86ED # <CJK>
+0x86EE # <CJK>
+0x86F0 # <CJK>
+0x86F1 # <CJK>
+0x86F2 # <CJK>
+0x86F3 # <CJK>
+0x86F4 # <CJK>
+0x86F8 # <CJK>
+0x86F9 # <CJK>
+0x86FE # <CJK>
+0x8700 # <CJK>
+0x8702 # <CJK>
+0x8703 # <CJK>
+0x8707 # <CJK>
+0x8708 # <CJK>
+0x8709 # <CJK>
+0x870A # <CJK>
+0x870D # <CJK>
+0x8712 # <CJK>
+0x8713 # <CJK>
+0x8715 # <CJK>
+0x8717 # <CJK>
+0x8718 # <CJK>
+0x871A # <CJK>
+0x871C # <CJK>
+0x871E # <CJK>
+0x8721 # <CJK>
+0x8722 # <CJK>
+0x8723 # <CJK>
+0x8725 # <CJK>
+0x8729 # <CJK>
+0x872E # <CJK>
+0x8731 # <CJK>
+0x8734 # <CJK>
+0x8737 # <CJK>
+0x873B # <CJK>
+0x873E # <CJK>
+0x873F # <CJK>
+0x8747 # <CJK>
+0x8748 # <CJK>
+0x8749 # <CJK>
+0x874C # <CJK>
+0x874E # <CJK>
+0x8753 # <CJK>
+0x8757 # <CJK>
+0x8759 # <CJK>
+0x8760 # <CJK>
+0x8763 # <CJK>
+0x8764 # <CJK>
+0x8765 # <CJK>
+0x876E # <CJK>
+0x8770 # <CJK>
+0x8774 # <CJK>
+0x8776 # <CJK>
+0x877B # <CJK>
+0x877C # <CJK>
+0x877D # <CJK>
+0x877E # <CJK>
+0x8782 # <CJK>
+0x8783 # <CJK>
+0x8785 # <CJK>
+0x8788 # <CJK>
+0x878B # <CJK>
+0x878D # <CJK>
+0x8793 # <CJK>
+0x8797 # <CJK>
+0x879F # <CJK>
+0x87A8 # <CJK>
+0x87AB # <CJK>
+0x87AC # <CJK>
+0x87AD # <CJK>
+0x87AF # <CJK>
+0x87B3 # <CJK>
+0x87B5 # <CJK>
+0x87BA # <CJK>
+0x87BD # <CJK>
+0x87C0 # <CJK>
+0x87C6 # <CJK>
+0x87CA # <CJK>
+0x87CB # <CJK>
+0x87D1 # <CJK>
+0x87D2 # <CJK>
+0x87D3 # <CJK>
+0x87DB # <CJK>
+0x87E0 # <CJK>
+0x87E5 # <CJK>
+0x87EA # <CJK>
+0x87EE # <CJK>
+0x87F9 # <CJK>
+0x87FE # <CJK>
+0x8803 # <CJK>
+0x880A # <CJK>
+0x8813 # <CJK>
+0x8815 # <CJK>
+0x8816 # <CJK>
+0x881B # <CJK>
+0x8821 # <CJK>
+0x8822 # <CJK>
+0x8832 # <CJK>
+0x8839 # <CJK>
+0x883C # <CJK>
+0x8840 # <CJK>
+0x8844 # <CJK>
+0x8845 # <CJK>
+0x884C # <CJK>
+0x884D # <CJK>
+0x8854 # <CJK>
+0x8857 # <CJK>
+0x8859 # <CJK>
+0x8861 # <CJK>
+0x8862 # <CJK>
+0x8863 # <CJK>
+0x8864 # <CJK>
+0x8865 # <CJK>
+0x8868 # <CJK>
+0x8869 # <CJK>
+0x886B # <CJK>
+0x886C # <CJK>
+0x886E # <CJK>
+0x8870 # <CJK>
+0x8872 # <CJK>
+0x8877 # <CJK>
+0x887D # <CJK>
+0x887E # <CJK>
+0x887F # <CJK>
+0x8881 # <CJK>
+0x8882 # <CJK>
+0x8884 # <CJK>
+0x8885 # <CJK>
+0x8888 # <CJK>
+0x888B # <CJK>
+0x888D # <CJK>
+0x8892 # <CJK>
+0x8896 # <CJK>
+0x889C # <CJK>
+0x88A2 # <CJK>
+0x88A4 # <CJK>
+0x88AB # <CJK>
+0x88AD # <CJK>
+0x88B1 # <CJK>
+0x88B7 # <CJK>
+0x88BC # <CJK>
+0x88C1 # <CJK>
+0x88C2 # <CJK>
+0x88C5 # <CJK>
+0x88C6 # <CJK>
+0x88C9 # <CJK>
+0x88CE # <CJK>
+0x88D2 # <CJK>
+0x88D4 # <CJK>
+0x88D5 # <CJK>
+0x88D8 # <CJK>
+0x88D9 # <CJK>
+0x88DF # <CJK>
+0x88E2 # <CJK>
+0x88E3 # <CJK>
+0x88E4 # <CJK>
+0x88E5 # <CJK>
+0x88E8 # <CJK>
+0x88F0 # <CJK>
+0x88F1 # <CJK>
+0x88F3 # <CJK>
+0x88F4 # <CJK>
+0x88F8 # <CJK>
+0x88F9 # <CJK>
+0x88FC # <CJK>
+0x88FE # <CJK>
+0x8902 # <CJK>
+0x890A # <CJK>
+0x8910 # <CJK>
+0x8912 # <CJK>
+0x8913 # <CJK>
+0x8919 # <CJK>
+0x891A # <CJK>
+0x891B # <CJK>
+0x8921 # <CJK>
+0x8925 # <CJK>
+0x892A # <CJK>
+0x892B # <CJK>
+0x8930 # <CJK>
+0x8934 # <CJK>
+0x8936 # <CJK>
+0x8941 # <CJK>
+0x8944 # <CJK>
+0x895E # <CJK>
+0x895F # <CJK>
+0x8966 # <CJK>
+0x897B # <CJK>
+0x897F # <CJK>
+0x8981 # <CJK>
+0x8983 # <CJK>
+0x8986 # <CJK>
+0x89C1 # <CJK>
+0x89C2 # <CJK>
+0x89C4 # <CJK>
+0x89C5 # <CJK>
+0x89C6 # <CJK>
+0x89C7 # <CJK>
+0x89C8 # <CJK>
+0x89C9 # <CJK>
+0x89CA # <CJK>
+0x89CB # <CJK>
+0x89CC # <CJK>
+0x89CE # <CJK>
+0x89CF # <CJK>
+0x89D0 # <CJK>
+0x89D1 # <CJK>
+0x89D2 # <CJK>
+0x89D6 # <CJK>
+0x89DA # <CJK>
+0x89DC # <CJK>
+0x89DE # <CJK>
+0x89E3 # <CJK>
+0x89E5 # <CJK>
+0x89E6 # <CJK>
+0x89EB # <CJK>
+0x89EF # <CJK>
+0x89F3 # <CJK>
+0x8A00 # <CJK>
+0x8A07 # <CJK>
+0x8A3E # <CJK>
+0x8A48 # <CJK>
+0x8A79 # <CJK>
+0x8A89 # <CJK>
+0x8A8A # <CJK>
+0x8A93 # <CJK>
+0x8B07 # <CJK>
+0x8B26 # <CJK>
+0x8B66 # <CJK>
+0x8B6C # <CJK>
+0x8BA0 # <CJK>
+0x8BA1 # <CJK>
+0x8BA2 # <CJK>
+0x8BA3 # <CJK>
+0x8BA4 # <CJK>
+0x8BA5 # <CJK>
+0x8BA6 # <CJK>
+0x8BA7 # <CJK>
+0x8BA8 # <CJK>
+0x8BA9 # <CJK>
+0x8BAA # <CJK>
+0x8BAB # <CJK>
+0x8BAD # <CJK>
+0x8BAE # <CJK>
+0x8BAF # <CJK>
+0x8BB0 # <CJK>
+0x8BB2 # <CJK>
+0x8BB3 # <CJK>
+0x8BB4 # <CJK>
+0x8BB5 # <CJK>
+0x8BB6 # <CJK>
+0x8BB7 # <CJK>
+0x8BB8 # <CJK>
+0x8BB9 # <CJK>
+0x8BBA # <CJK>
+0x8BBC # <CJK>
+0x8BBD # <CJK>
+0x8BBE # <CJK>
+0x8BBF # <CJK>
+0x8BC0 # <CJK>
+0x8BC1 # <CJK>
+0x8BC2 # <CJK>
+0x8BC3 # <CJK>
+0x8BC4 # <CJK>
+0x8BC5 # <CJK>
+0x8BC6 # <CJK>
+0x8BC8 # <CJK>
+0x8BC9 # <CJK>
+0x8BCA # <CJK>
+0x8BCB # <CJK>
+0x8BCC # <CJK>
+0x8BCD # <CJK>
+0x8BCE # <CJK>
+0x8BCF # <CJK>
+0x8BD1 # <CJK>
+0x8BD2 # <CJK>
+0x8BD3 # <CJK>
+0x8BD4 # <CJK>
+0x8BD5 # <CJK>
+0x8BD6 # <CJK>
+0x8BD7 # <CJK>
+0x8BD8 # <CJK>
+0x8BD9 # <CJK>
+0x8BDA # <CJK>
+0x8BDB # <CJK>
+0x8BDC # <CJK>
+0x8BDD # <CJK>
+0x8BDE # <CJK>
+0x8BDF # <CJK>
+0x8BE0 # <CJK>
+0x8BE1 # <CJK>
+0x8BE2 # <CJK>
+0x8BE3 # <CJK>
+0x8BE4 # <CJK>
+0x8BE5 # <CJK>
+0x8BE6 # <CJK>
+0x8BE7 # <CJK>
+0x8BE8 # <CJK>
+0x8BE9 # <CJK>
+0x8BEB # <CJK>
+0x8BEC # <CJK>
+0x8BED # <CJK>
+0x8BEE # <CJK>
+0x8BEF # <CJK>
+0x8BF0 # <CJK>
+0x8BF1 # <CJK>
+0x8BF2 # <CJK>
+0x8BF3 # <CJK>
+0x8BF4 # <CJK>
+0x8BF5 # <CJK>
+0x8BF6 # <CJK>
+0x8BF7 # <CJK>
+0x8BF8 # <CJK>
+0x8BF9 # <CJK>
+0x8BFA # <CJK>
+0x8BFB # <CJK>
+0x8BFC # <CJK>
+0x8BFD # <CJK>
+0x8BFE # <CJK>
+0x8BFF # <CJK>
+0x8C00 # <CJK>
+0x8C01 # <CJK>
+0x8C02 # <CJK>
+0x8C03 # <CJK>
+0x8C04 # <CJK>
+0x8C05 # <CJK>
+0x8C06 # <CJK>
+0x8C07 # <CJK>
+0x8C08 # <CJK>
+0x8C0A # <CJK>
+0x8C0B # <CJK>
+0x8C0C # <CJK>
+0x8C0D # <CJK>
+0x8C0E # <CJK>
+0x8C0F # <CJK>
+0x8C10 # <CJK>
+0x8C11 # <CJK>
+0x8C12 # <CJK>
+0x8C13 # <CJK>
+0x8C14 # <CJK>
+0x8C15 # <CJK>
+0x8C16 # <CJK>
+0x8C17 # <CJK>
+0x8C18 # <CJK>
+0x8C19 # <CJK>
+0x8C1A # <CJK>
+0x8C1B # <CJK>
+0x8C1C # <CJK>
+0x8C1D # <CJK>
+0x8C1F # <CJK>
+0x8C20 # <CJK>
+0x8C21 # <CJK>
+0x8C22 # <CJK>
+0x8C23 # <CJK>
+0x8C24 # <CJK>
+0x8C25 # <CJK>
+0x8C26 # <CJK>
+0x8C27 # <CJK>
+0x8C28 # <CJK>
+0x8C29 # <CJK>
+0x8C2A # <CJK>
+0x8C2B # <CJK>
+0x8C2C # <CJK>
+0x8C2D # <CJK>
+0x8C2E # <CJK>
+0x8C2F # <CJK>
+0x8C30 # <CJK>
+0x8C31 # <CJK>
+0x8C32 # <CJK>
+0x8C33 # <CJK>
+0x8C34 # <CJK>
+0x8C35 # <CJK>
+0x8C36 # <CJK>
+0x8C37 # <CJK>
+0x8C41 # <CJK>
+0x8C46 # <CJK>
+0x8C47 # <CJK>
+0x8C49 # <CJK>
+0x8C4C # <CJK>
+0x8C55 # <CJK>
+0x8C5A # <CJK>
+0x8C61 # <CJK>
+0x8C62 # <CJK>
+0x8C6A # <CJK>
+0x8C6B # <CJK>
+0x8C73 # <CJK>
+0x8C78 # <CJK>
+0x8C79 # <CJK>
+0x8C7A # <CJK>
+0x8C82 # <CJK>
+0x8C85 # <CJK>
+0x8C89 # <CJK>
+0x8C8A # <CJK>
+0x8C8C # <CJK>
+0x8C94 # <CJK>
+0x8C98 # <CJK>
+0x8D1D # <CJK>
+0x8D1E # <CJK>
+0x8D1F # <CJK>
+0x8D21 # <CJK>
+0x8D22 # <CJK>
+0x8D23 # <CJK>
+0x8D24 # <CJK>
+0x8D25 # <CJK>
+0x8D26 # <CJK>
+0x8D27 # <CJK>
+0x8D28 # <CJK>
+0x8D29 # <CJK>
+0x8D2A # <CJK>
+0x8D2B # <CJK>
+0x8D2C # <CJK>
+0x8D2D # <CJK>
+0x8D2E # <CJK>
+0x8D2F # <CJK>
+0x8D30 # <CJK>
+0x8D31 # <CJK>
+0x8D32 # <CJK>
+0x8D33 # <CJK>
+0x8D34 # <CJK>
+0x8D35 # <CJK>
+0x8D36 # <CJK>
+0x8D37 # <CJK>
+0x8D38 # <CJK>
+0x8D39 # <CJK>
+0x8D3A # <CJK>
+0x8D3B # <CJK>
+0x8D3C # <CJK>
+0x8D3D # <CJK>
+0x8D3E # <CJK>
+0x8D3F # <CJK>
+0x8D40 # <CJK>
+0x8D41 # <CJK>
+0x8D42 # <CJK>
+0x8D43 # <CJK>
+0x8D44 # <CJK>
+0x8D45 # <CJK>
+0x8D46 # <CJK>
+0x8D47 # <CJK>
+0x8D48 # <CJK>
+0x8D49 # <CJK>
+0x8D4A # <CJK>
+0x8D4B # <CJK>
+0x8D4C # <CJK>
+0x8D4D # <CJK>
+0x8D4E # <CJK>
+0x8D4F # <CJK>
+0x8D50 # <CJK>
+0x8D53 # <CJK>
+0x8D54 # <CJK>
+0x8D55 # <CJK>
+0x8D56 # <CJK>
+0x8D58 # <CJK>
+0x8D59 # <CJK>
+0x8D5A # <CJK>
+0x8D5B # <CJK>
+0x8D5C # <CJK>
+0x8D5D # <CJK>
+0x8D5E # <CJK>
+0x8D60 # <CJK>
+0x8D61 # <CJK>
+0x8D62 # <CJK>
+0x8D63 # <CJK>
+0x8D64 # <CJK>
+0x8D66 # <CJK>
+0x8D67 # <CJK>
+0x8D6B # <CJK>
+0x8D6D # <CJK>
+0x8D70 # <CJK>
+0x8D73 # <CJK>
+0x8D74 # <CJK>
+0x8D75 # <CJK>
+0x8D76 # <CJK>
+0x8D77 # <CJK>
+0x8D81 # <CJK>
+0x8D84 # <CJK>
+0x8D85 # <CJK>
+0x8D8A # <CJK>
+0x8D8B # <CJK>
+0x8D91 # <CJK>
+0x8D94 # <CJK>
+0x8D9F # <CJK>
+0x8DA3 # <CJK>
+0x8DB1 # <CJK>
+0x8DB3 # <CJK>
+0x8DB4 # <CJK>
+0x8DB5 # <CJK>
+0x8DB8 # <CJK>
+0x8DBA # <CJK>
+0x8DBC # <CJK>
+0x8DBE # <CJK>
+0x8DBF # <CJK>
+0x8DC3 # <CJK>
+0x8DC4 # <CJK>
+0x8DC6 # <CJK>
+0x8DCB # <CJK>
+0x8DCC # <CJK>
+0x8DCE # <CJK>
+0x8DCF # <CJK>
+0x8DD1 # <CJK>
+0x8DD6 # <CJK>
+0x8DD7 # <CJK>
+0x8DDA # <CJK>
+0x8DDB # <CJK>
+0x8DDD # <CJK>
+0x8DDE # <CJK>
+0x8DDF # <CJK>
+0x8DE3 # <CJK>
+0x8DE4 # <CJK>
+0x8DE8 # <CJK>
+0x8DEA # <CJK>
+0x8DEB # <CJK>
+0x8DEC # <CJK>
+0x8DEF # <CJK>
+0x8DF3 # <CJK>
+0x8DF5 # <CJK>
+0x8DF7 # <CJK>
+0x8DF8 # <CJK>
+0x8DF9 # <CJK>
+0x8DFA # <CJK>
+0x8DFB # <CJK>
+0x8DFD # <CJK>
+0x8E05 # <CJK>
+0x8E09 # <CJK>
+0x8E0A # <CJK>
+0x8E0C # <CJK>
+0x8E0F # <CJK>
+0x8E14 # <CJK>
+0x8E1D # <CJK>
+0x8E1E # <CJK>
+0x8E1F # <CJK>
+0x8E22 # <CJK>
+0x8E23 # <CJK>
+0x8E29 # <CJK>
+0x8E2A # <CJK>
+0x8E2C # <CJK>
+0x8E2E # <CJK>
+0x8E2F # <CJK>
+0x8E31 # <CJK>
+0x8E35 # <CJK>
+0x8E39 # <CJK>
+0x8E3A # <CJK>
+0x8E3D # <CJK>
+0x8E40 # <CJK>
+0x8E41 # <CJK>
+0x8E42 # <CJK>
+0x8E44 # <CJK>
+0x8E47 # <CJK>
+0x8E48 # <CJK>
+0x8E49 # <CJK>
+0x8E4A # <CJK>
+0x8E4B # <CJK>
+0x8E51 # <CJK>
+0x8E52 # <CJK>
+0x8E59 # <CJK>
+0x8E66 # <CJK>
+0x8E69 # <CJK>
+0x8E6C # <CJK>
+0x8E6D # <CJK>
+0x8E6F # <CJK>
+0x8E70 # <CJK>
+0x8E72 # <CJK>
+0x8E74 # <CJK>
+0x8E76 # <CJK>
+0x8E7C # <CJK>
+0x8E7F # <CJK>
+0x8E81 # <CJK>
+0x8E85 # <CJK>
+0x8E87 # <CJK>
+0x8E8F # <CJK>
+0x8E90 # <CJK>
+0x8E94 # <CJK>
+0x8E9C # <CJK>
+0x8E9E # <CJK>
+0x8EAB # <CJK>
+0x8EAC # <CJK>
+0x8EAF # <CJK>
+0x8EB2 # <CJK>
+0x8EBA # <CJK>
+0x8ECE # <CJK>
+0x8F66 # <CJK>
+0x8F67 # <CJK>
+0x8F68 # <CJK>
+0x8F69 # <CJK>
+0x8F6B # <CJK>
+0x8F6C # <CJK>
+0x8F6D # <CJK>
+0x8F6E # <CJK>
+0x8F6F # <CJK>
+0x8F70 # <CJK>
+0x8F71 # <CJK>
+0x8F72 # <CJK>
+0x8F73 # <CJK>
+0x8F74 # <CJK>
+0x8F75 # <CJK>
+0x8F76 # <CJK>
+0x8F77 # <CJK>
+0x8F78 # <CJK>
+0x8F79 # <CJK>
+0x8F7A # <CJK>
+0x8F7B # <CJK>
+0x8F7C # <CJK>
+0x8F7D # <CJK>
+0x8F7E # <CJK>
+0x8F7F # <CJK>
+0x8F81 # <CJK>
+0x8F82 # <CJK>
+0x8F83 # <CJK>
+0x8F84 # <CJK>
+0x8F85 # <CJK>
+0x8F86 # <CJK>
+0x8F87 # <CJK>
+0x8F88 # <CJK>
+0x8F89 # <CJK>
+0x8F8A # <CJK>
+0x8F8B # <CJK>
+0x8F8D # <CJK>
+0x8F8E # <CJK>
+0x8F8F # <CJK>
+0x8F90 # <CJK>
+0x8F91 # <CJK>
+0x8F93 # <CJK>
+0x8F94 # <CJK>
+0x8F95 # <CJK>
+0x8F96 # <CJK>
+0x8F97 # <CJK>
+0x8F98 # <CJK>
+0x8F99 # <CJK>
+0x8F9A # <CJK>
+0x8F9B # <CJK>
+0x8F9C # <CJK>
+0x8F9E # <CJK>
+0x8F9F # <CJK>
+0x8FA3 # <CJK>
+0x8FA8 # <CJK>
+0x8FA9 # <CJK>
+0x8FAB # <CJK>
+0x8FB0 # <CJK>
+0x8FB1 # <CJK>
+0x8FB6 # <CJK>
+0x8FB9 # <CJK>
+0x8FBD # <CJK>
+0x8FBE # <CJK>
+0x8FC1 # <CJK>
+0x8FC2 # <CJK>
+0x8FC4 # <CJK>
+0x8FC5 # <CJK>
+0x8FC7 # <CJK>
+0x8FC8 # <CJK>
+0x8FCE # <CJK>
+0x8FD0 # <CJK>
+0x8FD1 # <CJK>
+0x8FD3 # <CJK>
+0x8FD4 # <CJK>
+0x8FD5 # <CJK>
+0x8FD8 # <CJK>
+0x8FD9 # <CJK>
+0x8FDB # <CJK>
+0x8FDC # <CJK>
+0x8FDD # <CJK>
+0x8FDE # <CJK>
+0x8FDF # <CJK>
+0x8FE2 # <CJK>
+0x8FE4 # <CJK>
+0x8FE5 # <CJK>
+0x8FE6 # <CJK>
+0x8FE8 # <CJK>
+0x8FE9 # <CJK>
+0x8FEA # <CJK>
+0x8FEB # <CJK>
+0x8FED # <CJK>
+0x8FEE # <CJK>
+0x8FF0 # <CJK>
+0x8FF3 # <CJK>
+0x8FF7 # <CJK>
+0x8FF8 # <CJK>
+0x8FF9 # <CJK>
+0x8FFD # <CJK>
+0x9000 # <CJK>
+0x9001 # <CJK>
+0x9002 # <CJK>
+0x9003 # <CJK>
+0x9004 # <CJK>
+0x9005 # <CJK>
+0x9006 # <CJK>
+0x9009 # <CJK>
+0x900A # <CJK>
+0x900B # <CJK>
+0x900D # <CJK>
+0x900F # <CJK>
+0x9010 # <CJK>
+0x9011 # <CJK>
+0x9012 # <CJK>
+0x9014 # <CJK>
+0x9016 # <CJK>
+0x9017 # <CJK>
+0x901A # <CJK>
+0x901B # <CJK>
+0x901D # <CJK>
+0x901E # <CJK>
+0x901F # <CJK>
+0x9020 # <CJK>
+0x9021 # <CJK>
+0x9022 # <CJK>
+0x9026 # <CJK>
+0x902D # <CJK>
+0x902E # <CJK>
+0x902F # <CJK>
+0x9035 # <CJK>
+0x9036 # <CJK>
+0x9038 # <CJK>
+0x903B # <CJK>
+0x903C # <CJK>
+0x903E # <CJK>
+0x9041 # <CJK>
+0x9042 # <CJK>
+0x9044 # <CJK>
+0x9047 # <CJK>
+0x904D # <CJK>
+0x904F # <CJK>
+0x9050 # <CJK>
+0x9051 # <CJK>
+0x9052 # <CJK>
+0x9053 # <CJK>
+0x9057 # <CJK>
+0x9058 # <CJK>
+0x905B # <CJK>
+0x9062 # <CJK>
+0x9063 # <CJK>
+0x9065 # <CJK>
+0x9068 # <CJK>
+0x906D # <CJK>
+0x906E # <CJK>
+0x9074 # <CJK>
+0x9075 # <CJK>
+0x907D # <CJK>
+0x907F # <CJK>
+0x9080 # <CJK>
+0x9082 # <CJK>
+0x9083 # <CJK>
+0x9088 # <CJK>
+0x908B # <CJK>
+0x9091 # <CJK>
+0x9093 # <CJK>
+0x9095 # <CJK>
+0x9097 # <CJK>
+0x9099 # <CJK>
+0x909B # <CJK>
+0x909D # <CJK>
+0x90A1 # <CJK>
+0x90A2 # <CJK>
+0x90A3 # <CJK>
+0x90A6 # <CJK>
+0x90AA # <CJK>
+0x90AC # <CJK>
+0x90AE # <CJK>
+0x90AF # <CJK>
+0x90B0 # <CJK>
+0x90B1 # <CJK>
+0x90B3 # <CJK>
+0x90B4 # <CJK>
+0x90B5 # <CJK>
+0x90B6 # <CJK>
+0x90B8 # <CJK>
+0x90B9 # <CJK>
+0x90BA # <CJK>
+0x90BB # <CJK>
+0x90BE # <CJK>
+0x90C1 # <CJK>
+0x90C4 # <CJK>
+0x90C5 # <CJK>
+0x90C7 # <CJK>
+0x90CA # <CJK>
+0x90CE # <CJK>
+0x90CF # <CJK>
+0x90D0 # <CJK>
+0x90D1 # <CJK>
+0x90D3 # <CJK>
+0x90D7 # <CJK>
+0x90DB # <CJK>
+0x90DC # <CJK>
+0x90DD # <CJK>
+0x90E1 # <CJK>
+0x90E2 # <CJK>
+0x90E6 # <CJK>
+0x90E7 # <CJK>
+0x90E8 # <CJK>
+0x90EB # <CJK>
+0x90ED # <CJK>
+0x90EF # <CJK>
+0x90F4 # <CJK>
+0x90F8 # <CJK>
+0x90FD # <CJK>
+0x90FE # <CJK>
+0x9102 # <CJK>
+0x9104 # <CJK>
+0x9119 # <CJK>
+0x911E # <CJK>
+0x9122 # <CJK>
+0x9123 # <CJK>
+0x912F # <CJK>
+0x9131 # <CJK>
+0x9139 # <CJK>
+0x9143 # <CJK>
+0x9146 # <CJK>
+0x9149 # <CJK>
+0x914A # <CJK>
+0x914B # <CJK>
+0x914C # <CJK>
+0x914D # <CJK>
+0x914E # <CJK>
+0x914F # <CJK>
+0x9150 # <CJK>
+0x9152 # <CJK>
+0x9157 # <CJK>
+0x915A # <CJK>
+0x915D # <CJK>
+0x915E # <CJK>
+0x9161 # <CJK>
+0x9162 # <CJK>
+0x9163 # <CJK>
+0x9164 # <CJK>
+0x9165 # <CJK>
+0x9169 # <CJK>
+0x916A # <CJK>
+0x916C # <CJK>
+0x916E # <CJK>
+0x916F # <CJK>
+0x9170 # <CJK>
+0x9171 # <CJK>
+0x9172 # <CJK>
+0x9174 # <CJK>
+0x9175 # <CJK>
+0x9176 # <CJK>
+0x9177 # <CJK>
+0x9178 # <CJK>
+0x9179 # <CJK>
+0x917D # <CJK>
+0x917E # <CJK>
+0x917F # <CJK>
+0x9185 # <CJK>
+0x9187 # <CJK>
+0x9189 # <CJK>
+0x918B # <CJK>
+0x918C # <CJK>
+0x918D # <CJK>
+0x9190 # <CJK>
+0x9191 # <CJK>
+0x9192 # <CJK>
+0x919A # <CJK>
+0x919B # <CJK>
+0x91A2 # <CJK>
+0x91A3 # <CJK>
+0x91AA # <CJK>
+0x91AD # <CJK>
+0x91AE # <CJK>
+0x91AF # <CJK>
+0x91B4 # <CJK>
+0x91B5 # <CJK>
+0x91BA # <CJK>
+0x91C7 # <CJK>
+0x91C9 # <CJK>
+0x91CA # <CJK>
+0x91CC # <CJK>
+0x91CD # <CJK>
+0x91CE # <CJK>
+0x91CF # <CJK>
+0x91D1 # <CJK>
+0x91DC # <CJK>
+0x9274 # <CJK>
+0x928E # <CJK>
+0x92AE # <CJK>
+0x92C8 # <CJK>
+0x933E # <CJK>
+0x936A # <CJK>
+0x938F # <CJK>
+0x93CA # <CJK>
+0x93D6 # <CJK>
+0x943E # <CJK>
+0x946B # <CJK>
+0x9485 # <CJK>
+0x9486 # <CJK>
+0x9487 # <CJK>
+0x9488 # <CJK>
+0x9489 # <CJK>
+0x948A # <CJK>
+0x948B # <CJK>
+0x948C # <CJK>
+0x948D # <CJK>
+0x948E # <CJK>
+0x948F # <CJK>
+0x9490 # <CJK>
+0x9492 # <CJK>
+0x9493 # <CJK>
+0x9494 # <CJK>
+0x9495 # <CJK>
+0x9497 # <CJK>
+0x9499 # <CJK>
+0x949A # <CJK>
+0x949B # <CJK>
+0x949C # <CJK>
+0x949D # <CJK>
+0x949E # <CJK>
+0x949F # <CJK>
+0x94A0 # <CJK>
+0x94A1 # <CJK>
+0x94A2 # <CJK>
+0x94A3 # <CJK>
+0x94A4 # <CJK>
+0x94A5 # <CJK>
+0x94A6 # <CJK>
+0x94A7 # <CJK>
+0x94A8 # <CJK>
+0x94A9 # <CJK>
+0x94AA # <CJK>
+0x94AB # <CJK>
+0x94AC # <CJK>
+0x94AD # <CJK>
+0x94AE # <CJK>
+0x94AF # <CJK>
+0x94B0 # <CJK>
+0x94B1 # <CJK>
+0x94B2 # <CJK>
+0x94B3 # <CJK>
+0x94B4 # <CJK>
+0x94B5 # <CJK>
+0x94B6 # <CJK>
+0x94B7 # <CJK>
+0x94B8 # <CJK>
+0x94B9 # <CJK>
+0x94BA # <CJK>
+0x94BB # <CJK>
+0x94BC # <CJK>
+0x94BD # <CJK>
+0x94BE # <CJK>
+0x94BF # <CJK>
+0x94C0 # <CJK>
+0x94C1 # <CJK>
+0x94C2 # <CJK>
+0x94C3 # <CJK>
+0x94C4 # <CJK>
+0x94C5 # <CJK>
+0x94C6 # <CJK>
+0x94C8 # <CJK>
+0x94C9 # <CJK>
+0x94CA # <CJK>
+0x94CB # <CJK>
+0x94CC # <CJK>
+0x94CD # <CJK>
+0x94CE # <CJK>
+0x94D0 # <CJK>
+0x94D1 # <CJK>
+0x94D2 # <CJK>
+0x94D5 # <CJK>
+0x94D6 # <CJK>
+0x94D7 # <CJK>
+0x94D8 # <CJK>
+0x94D9 # <CJK>
+0x94DB # <CJK>
+0x94DC # <CJK>
+0x94DD # <CJK>
+0x94DE # <CJK>
+0x94DF # <CJK>
+0x94E0 # <CJK>
+0x94E1 # <CJK>
+0x94E2 # <CJK>
+0x94E3 # <CJK>
+0x94E4 # <CJK>
+0x94E5 # <CJK>
+0x94E7 # <CJK>
+0x94E8 # <CJK>
+0x94E9 # <CJK>
+0x94EA # <CJK>
+0x94EB # <CJK>
+0x94EC # <CJK>
+0x94ED # <CJK>
+0x94EE # <CJK>
+0x94EF # <CJK>
+0x94F0 # <CJK>
+0x94F1 # <CJK>
+0x94F2 # <CJK>
+0x94F3 # <CJK>
+0x94F4 # <CJK>
+0x94F5 # <CJK>
+0x94F6 # <CJK>
+0x94F7 # <CJK>
+0x94F8 # <CJK>
+0x94F9 # <CJK>
+0x94FA # <CJK>
+0x94FC # <CJK>
+0x94FD # <CJK>
+0x94FE # <CJK>
+0x94FF # <CJK>
+0x9500 # <CJK>
+0x9501 # <CJK>
+0x9502 # <CJK>
+0x9503 # <CJK>
+0x9504 # <CJK>
+0x9505 # <CJK>
+0x9506 # <CJK>
+0x9507 # <CJK>
+0x9508 # <CJK>
+0x9509 # <CJK>
+0x950A # <CJK>
+0x950B # <CJK>
+0x950C # <CJK>
+0x950D # <CJK>
+0x950E # <CJK>
+0x950F # <CJK>
+0x9510 # <CJK>
+0x9511 # <CJK>
+0x9512 # <CJK>
+0x9513 # <CJK>
+0x9514 # <CJK>
+0x9515 # <CJK>
+0x9516 # <CJK>
+0x9517 # <CJK>
+0x9518 # <CJK>
+0x9519 # <CJK>
+0x951A # <CJK>
+0x951B # <CJK>
+0x951D # <CJK>
+0x951E # <CJK>
+0x951F # <CJK>
+0x9521 # <CJK>
+0x9522 # <CJK>
+0x9523 # <CJK>
+0x9524 # <CJK>
+0x9525 # <CJK>
+0x9526 # <CJK>
+0x9528 # <CJK>
+0x9529 # <CJK>
+0x952A # <CJK>
+0x952B # <CJK>
+0x952C # <CJK>
+0x952D # <CJK>
+0x952E # <CJK>
+0x952F # <CJK>
+0x9530 # <CJK>
+0x9531 # <CJK>
+0x9532 # <CJK>
+0x9534 # <CJK>
+0x9535 # <CJK>
+0x9536 # <CJK>
+0x9537 # <CJK>
+0x9538 # <CJK>
+0x9539 # <CJK>
+0x953A # <CJK>
+0x953B # <CJK>
+0x953C # <CJK>
+0x953E # <CJK>
+0x953F # <CJK>
+0x9540 # <CJK>
+0x9541 # <CJK>
+0x9542 # <CJK>
+0x9544 # <CJK>
+0x9545 # <CJK>
+0x9546 # <CJK>
+0x9547 # <CJK>
+0x9549 # <CJK>
+0x954A # <CJK>
+0x954C # <CJK>
+0x954D # <CJK>
+0x954E # <CJK>
+0x954F # <CJK>
+0x9550 # <CJK>
+0x9551 # <CJK>
+0x9552 # <CJK>
+0x9553 # <CJK>
+0x9554 # <CJK>
+0x9556 # <CJK>
+0x9557 # <CJK>
+0x9558 # <CJK>
+0x9559 # <CJK>
+0x955B # <CJK>
+0x955C # <CJK>
+0x955D # <CJK>
+0x955E # <CJK>
+0x955F # <CJK>
+0x9561 # <CJK>
+0x9562 # <CJK>
+0x9563 # <CJK>
+0x9564 # <CJK>
+0x9565 # <CJK>
+0x9566 # <CJK>
+0x9567 # <CJK>
+0x9568 # <CJK>
+0x9569 # <CJK>
+0x956A # <CJK>
+0x956B # <CJK>
+0x956C # <CJK>
+0x956D # <CJK>
+0x956F # <CJK>
+0x9570 # <CJK>
+0x9571 # <CJK>
+0x9572 # <CJK>
+0x9573 # <CJK>
+0x9576 # <CJK>
+0x957F # <CJK>
+0x95E8 # <CJK>
+0x95E9 # <CJK>
+0x95EA # <CJK>
+0x95EB # <CJK>
+0x95ED # <CJK>
+0x95EE # <CJK>
+0x95EF # <CJK>
+0x95F0 # <CJK>
+0x95F1 # <CJK>
+0x95F2 # <CJK>
+0x95F3 # <CJK>
+0x95F4 # <CJK>
+0x95F5 # <CJK>
+0x95F6 # <CJK>
+0x95F7 # <CJK>
+0x95F8 # <CJK>
+0x95F9 # <CJK>
+0x95FA # <CJK>
+0x95FB # <CJK>
+0x95FC # <CJK>
+0x95FD # <CJK>
+0x95FE # <CJK>
+0x9600 # <CJK>
+0x9601 # <CJK>
+0x9602 # <CJK>
+0x9603 # <CJK>
+0x9604 # <CJK>
+0x9605 # <CJK>
+0x9606 # <CJK>
+0x9608 # <CJK>
+0x9609 # <CJK>
+0x960A # <CJK>
+0x960B # <CJK>
+0x960C # <CJK>
+0x960D # <CJK>
+0x960E # <CJK>
+0x960F # <CJK>
+0x9610 # <CJK>
+0x9611 # <CJK>
+0x9612 # <CJK>
+0x9614 # <CJK>
+0x9615 # <CJK>
+0x9616 # <CJK>
+0x9617 # <CJK>
+0x9619 # <CJK>
+0x961A # <CJK>
+0x961C # <CJK>
+0x961D # <CJK>
+0x961F # <CJK>
+0x9621 # <CJK>
+0x9622 # <CJK>
+0x962A # <CJK>
+0x962E # <CJK>
+0x9631 # <CJK>
+0x9632 # <CJK>
+0x9633 # <CJK>
+0x9634 # <CJK>
+0x9635 # <CJK>
+0x9636 # <CJK>
+0x963B # <CJK>
+0x963C # <CJK>
+0x963D # <CJK>
+0x963F # <CJK>
+0x9640 # <CJK>
+0x9642 # <CJK>
+0x9644 # <CJK>
+0x9645 # <CJK>
+0x9646 # <CJK>
+0x9647 # <CJK>
+0x9648 # <CJK>
+0x9649 # <CJK>
+0x964B # <CJK>
+0x964C # <CJK>
+0x964D # <CJK>
+0x9650 # <CJK>
+0x9654 # <CJK>
+0x9655 # <CJK>
+0x965B # <CJK>
+0x965F # <CJK>
+0x9661 # <CJK>
+0x9662 # <CJK>
+0x9664 # <CJK>
+0x9667 # <CJK>
+0x9668 # <CJK>
+0x9669 # <CJK>
+0x966A # <CJK>
+0x966C # <CJK>
+0x9672 # <CJK>
+0x9674 # <CJK>
+0x9675 # <CJK>
+0x9676 # <CJK>
+0x9677 # <CJK>
+0x9685 # <CJK>
+0x9686 # <CJK>
+0x9688 # <CJK>
+0x968B # <CJK>
+0x968D # <CJK>
+0x968F # <CJK>
+0x9690 # <CJK>
+0x9694 # <CJK>
+0x9697 # <CJK>
+0x9698 # <CJK>
+0x9699 # <CJK>
+0x969C # <CJK>
+0x96A7 # <CJK>
+0x96B0 # <CJK>
+0x96B3 # <CJK>
+0x96B6 # <CJK>
+0x96B9 # <CJK>
+0x96BC # <CJK>
+0x96BD # <CJK>
+0x96BE # <CJK>
+0x96C0 # <CJK>
+0x96C1 # <CJK>
+0x96C4 # <CJK>
+0x96C5 # <CJK>
+0x96C6 # <CJK>
+0x96C7 # <CJK>
+0x96C9 # <CJK>
+0x96CC # <CJK>
+0x96CD # <CJK>
+0x96CE # <CJK>
+0x96CF # <CJK>
+0x96D2 # <CJK>
+0x96D5 # <CJK>
+0x96E0 # <CJK>
+0x96E8 # <CJK>
+0x96E9 # <CJK>
+0x96EA # <CJK>
+0x96EF # <CJK>
+0x96F3 # <CJK>
+0x96F6 # <CJK>
+0x96F7 # <CJK>
+0x96F9 # <CJK>
+0x96FE # <CJK>
+0x9700 # <CJK>
+0x9701 # <CJK>
+0x9704 # <CJK>
+0x9706 # <CJK>
+0x9707 # <CJK>
+0x9708 # <CJK>
+0x9709 # <CJK>
+0x970D # <CJK>
+0x970E # <CJK>
+0x970F # <CJK>
+0x9713 # <CJK>
+0x9716 # <CJK>
+0x971C # <CJK>
+0x971E # <CJK>
+0x972A # <CJK>
+0x972D # <CJK>
+0x9730 # <CJK>
+0x9732 # <CJK>
+0x9738 # <CJK>
+0x9739 # <CJK>
+0x973E # <CJK>
+0x9752 # <CJK>
+0x9753 # <CJK>
+0x9756 # <CJK>
+0x9759 # <CJK>
+0x975B # <CJK>
+0x975E # <CJK>
+0x9760 # <CJK>
+0x9761 # <CJK>
+0x9762 # <CJK>
+0x9765 # <CJK>
+0x9769 # <CJK>
+0x9773 # <CJK>
+0x9774 # <CJK>
+0x9776 # <CJK>
+0x977C # <CJK>
+0x9785 # <CJK>
+0x978B # <CJK>
+0x978D # <CJK>
+0x9791 # <CJK>
+0x9792 # <CJK>
+0x9794 # <CJK>
+0x9798 # <CJK>
+0x97A0 # <CJK>
+0x97A3 # <CJK>
+0x97AB # <CJK>
+0x97AD # <CJK>
+0x97AF # <CJK>
+0x97B2 # <CJK>
+0x97B4 # <CJK>
+0x97E6 # <CJK>
+0x97E7 # <CJK>
+0x97E9 # <CJK>
+0x97EA # <CJK>
+0x97EB # <CJK>
+0x97EC # <CJK>
+0x97ED # <CJK>
+0x97F3 # <CJK>
+0x97F5 # <CJK>
+0x97F6 # <CJK>
+0x9875 # <CJK>
+0x9876 # <CJK>
+0x9877 # <CJK>
+0x9878 # <CJK>
+0x9879 # <CJK>
+0x987A # <CJK>
+0x987B # <CJK>
+0x987C # <CJK>
+0x987D # <CJK>
+0x987E # <CJK>
+0x987F # <CJK>
+0x9880 # <CJK>
+0x9881 # <CJK>
+0x9882 # <CJK>
+0x9883 # <CJK>
+0x9884 # <CJK>
+0x9885 # <CJK>
+0x9886 # <CJK>
+0x9887 # <CJK>
+0x9888 # <CJK>
+0x9889 # <CJK>
+0x988A # <CJK>
+0x988C # <CJK>
+0x988D # <CJK>
+0x988F # <CJK>
+0x9890 # <CJK>
+0x9891 # <CJK>
+0x9893 # <CJK>
+0x9894 # <CJK>
+0x9896 # <CJK>
+0x9897 # <CJK>
+0x9898 # <CJK>
+0x989A # <CJK>
+0x989B # <CJK>
+0x989C # <CJK>
+0x989D # <CJK>
+0x989E # <CJK>
+0x989F # <CJK>
+0x98A0 # <CJK>
+0x98A1 # <CJK>
+0x98A2 # <CJK>
+0x98A4 # <CJK>
+0x98A5 # <CJK>
+0x98A6 # <CJK>
+0x98A7 # <CJK>
+0x98CE # <CJK>
+0x98D1 # <CJK>
+0x98D2 # <CJK>
+0x98D3 # <CJK>
+0x98D5 # <CJK>
+0x98D8 # <CJK>
+0x98D9 # <CJK>
+0x98DA # <CJK>
+0x98DE # <CJK>
+0x98DF # <CJK>
+0x98E7 # <CJK>
+0x98E8 # <CJK>
+0x990D # <CJK>
+0x9910 # <CJK>
+0x992E # <CJK>
+0x9954 # <CJK>
+0x9955 # <CJK>
+0x9963 # <CJK>
+0x9965 # <CJK>
+0x9967 # <CJK>
+0x9968 # <CJK>
+0x9969 # <CJK>
+0x996A # <CJK>
+0x996B # <CJK>
+0x996C # <CJK>
+0x996D # <CJK>
+0x996E # <CJK>
+0x996F # <CJK>
+0x9970 # <CJK>
+0x9971 # <CJK>
+0x9972 # <CJK>
+0x9974 # <CJK>
+0x9975 # <CJK>
+0x9976 # <CJK>
+0x9977 # <CJK>
+0x997A # <CJK>
+0x997C # <CJK>
+0x997D # <CJK>
+0x997F # <CJK>
+0x9980 # <CJK>
+0x9981 # <CJK>
+0x9984 # <CJK>
+0x9985 # <CJK>
+0x9986 # <CJK>
+0x9987 # <CJK>
+0x9988 # <CJK>
+0x998A # <CJK>
+0x998B # <CJK>
+0x998D # <CJK>
+0x998F # <CJK>
+0x9990 # <CJK>
+0x9991 # <CJK>
+0x9992 # <CJK>
+0x9993 # <CJK>
+0x9994 # <CJK>
+0x9995 # <CJK>
+0x9996 # <CJK>
+0x9997 # <CJK>
+0x9998 # <CJK>
+0x9999 # <CJK>
+0x99A5 # <CJK>
+0x99A8 # <CJK>
+0x9A6C # <CJK>
+0x9A6D # <CJK>
+0x9A6E # <CJK>
+0x9A6F # <CJK>
+0x9A70 # <CJK>
+0x9A71 # <CJK>
+0x9A73 # <CJK>
+0x9A74 # <CJK>
+0x9A75 # <CJK>
+0x9A76 # <CJK>
+0x9A77 # <CJK>
+0x9A78 # <CJK>
+0x9A79 # <CJK>
+0x9A7A # <CJK>
+0x9A7B # <CJK>
+0x9A7C # <CJK>
+0x9A7D # <CJK>
+0x9A7E # <CJK>
+0x9A7F # <CJK>
+0x9A80 # <CJK>
+0x9A81 # <CJK>
+0x9A82 # <CJK>
+0x9A84 # <CJK>
+0x9A85 # <CJK>
+0x9A86 # <CJK>
+0x9A87 # <CJK>
+0x9A88 # <CJK>
+0x9A8A # <CJK>
+0x9A8B # <CJK>
+0x9A8C # <CJK>
+0x9A8F # <CJK>
+0x9A90 # <CJK>
+0x9A91 # <CJK>
+0x9A92 # <CJK>
+0x9A93 # <CJK>
+0x9A96 # <CJK>
+0x9A97 # <CJK>
+0x9A98 # <CJK>
+0x9A9A # <CJK>
+0x9A9B # <CJK>
+0x9A9C # <CJK>
+0x9A9D # <CJK>
+0x9A9E # <CJK>
+0x9A9F # <CJK>
+0x9AA0 # <CJK>
+0x9AA1 # <CJK>
+0x9AA2 # <CJK>
+0x9AA3 # <CJK>
+0x9AA4 # <CJK>
+0x9AA5 # <CJK>
+0x9AA7 # <CJK>
+0x9AA8 # <CJK>
+0x9AB0 # <CJK>
+0x9AB1 # <CJK>
+0x9AB6 # <CJK>
+0x9AB7 # <CJK>
+0x9AB8 # <CJK>
+0x9ABA # <CJK>
+0x9ABC # <CJK>
+0x9AC0 # <CJK>
+0x9AC1 # <CJK>
+0x9AC2 # <CJK>
+0x9AC5 # <CJK>
+0x9ACB # <CJK>
+0x9ACC # <CJK>
+0x9AD1 # <CJK>
+0x9AD3 # <CJK>
+0x9AD8 # <CJK>
+0x9ADF # <CJK>
+0x9AE1 # <CJK>
+0x9AE6 # <CJK>
+0x9AEB # <CJK>
+0x9AED # <CJK>
+0x9AEF # <CJK>
+0x9AF9 # <CJK>
+0x9AFB # <CJK>
+0x9B03 # <CJK>
+0x9B08 # <CJK>
+0x9B0F # <CJK>
+0x9B13 # <CJK>
+0x9B1F # <CJK>
+0x9B23 # <CJK>
+0x9B2F # <CJK>
+0x9B32 # <CJK>
+0x9B3B # <CJK>
+0x9B3C # <CJK>
+0x9B41 # <CJK>
+0x9B42 # <CJK>
+0x9B43 # <CJK>
+0x9B44 # <CJK>
+0x9B45 # <CJK>
+0x9B47 # <CJK>
+0x9B48 # <CJK>
+0x9B49 # <CJK>
+0x9B4D # <CJK>
+0x9B4F # <CJK>
+0x9B51 # <CJK>
+0x9B54 # <CJK>
+0x9C7C # <CJK>
+0x9C7F # <CJK>
+0x9C81 # <CJK>
+0x9C82 # <CJK>
+0x9C85 # <CJK>
+0x9C86 # <CJK>
+0x9C87 # <CJK>
+0x9C88 # <CJK>
+0x9C8B # <CJK>
+0x9C8D # <CJK>
+0x9C8E # <CJK>
+0x9C90 # <CJK>
+0x9C91 # <CJK>
+0x9C92 # <CJK>
+0x9C94 # <CJK>
+0x9C95 # <CJK>
+0x9C9A # <CJK>
+0x9C9B # <CJK>
+0x9C9C # <CJK>
+0x9C9E # <CJK>
+0x9C9F # <CJK>
+0x9CA0 # <CJK>
+0x9CA1 # <CJK>
+0x9CA2 # <CJK>
+0x9CA3 # <CJK>
+0x9CA4 # <CJK>
+0x9CA5 # <CJK>
+0x9CA6 # <CJK>
+0x9CA7 # <CJK>
+0x9CA8 # <CJK>
+0x9CA9 # <CJK>
+0x9CAB # <CJK>
+0x9CAD # <CJK>
+0x9CAE # <CJK>
+0x9CB0 # <CJK>
+0x9CB1 # <CJK>
+0x9CB2 # <CJK>
+0x9CB3 # <CJK>
+0x9CB4 # <CJK>
+0x9CB5 # <CJK>
+0x9CB6 # <CJK>
+0x9CB7 # <CJK>
+0x9CB8 # <CJK>
+0x9CBA # <CJK>
+0x9CBB # <CJK>
+0x9CBC # <CJK>
+0x9CBD # <CJK>
+0x9CC3 # <CJK>
+0x9CC4 # <CJK>
+0x9CC5 # <CJK>
+0x9CC6 # <CJK>
+0x9CC7 # <CJK>
+0x9CCA # <CJK>
+0x9CCB # <CJK>
+0x9CCC # <CJK>
+0x9CCD # <CJK>
+0x9CCE # <CJK>
+0x9CCF # <CJK>
+0x9CD0 # <CJK>
+0x9CD3 # <CJK>
+0x9CD4 # <CJK>
+0x9CD5 # <CJK>
+0x9CD6 # <CJK>
+0x9CD7 # <CJK>
+0x9CD8 # <CJK>
+0x9CD9 # <CJK>
+0x9CDC # <CJK>
+0x9CDD # <CJK>
+0x9CDE # <CJK>
+0x9CDF # <CJK>
+0x9CE2 # <CJK>
+0x9E1F # <CJK>
+0x9E20 # <CJK>
+0x9E21 # <CJK>
+0x9E22 # <CJK>
+0x9E23 # <CJK>
+0x9E25 # <CJK>
+0x9E26 # <CJK>
+0x9E28 # <CJK>
+0x9E29 # <CJK>
+0x9E2A # <CJK>
+0x9E2B # <CJK>
+0x9E2C # <CJK>
+0x9E2D # <CJK>
+0x9E2F # <CJK>
+0x9E31 # <CJK>
+0x9E32 # <CJK>
+0x9E33 # <CJK>
+0x9E35 # <CJK>
+0x9E36 # <CJK>
+0x9E37 # <CJK>
+0x9E38 # <CJK>
+0x9E39 # <CJK>
+0x9E3A # <CJK>
+0x9E3D # <CJK>
+0x9E3E # <CJK>
+0x9E3F # <CJK>
+0x9E41 # <CJK>
+0x9E42 # <CJK>
+0x9E43 # <CJK>
+0x9E44 # <CJK>
+0x9E45 # <CJK>
+0x9E46 # <CJK>
+0x9E47 # <CJK>
+0x9E48 # <CJK>
+0x9E49 # <CJK>
+0x9E4A # <CJK>
+0x9E4B # <CJK>
+0x9E4C # <CJK>
+0x9E4E # <CJK>
+0x9E4F # <CJK>
+0x9E51 # <CJK>
+0x9E55 # <CJK>
+0x9E57 # <CJK>
+0x9E58 # <CJK>
+0x9E5A # <CJK>
+0x9E5B # <CJK>
+0x9E5C # <CJK>
+0x9E5E # <CJK>
+0x9E63 # <CJK>
+0x9E64 # <CJK>
+0x9E66 # <CJK>
+0x9E67 # <CJK>
+0x9E68 # <CJK>
+0x9E69 # <CJK>
+0x9E6A # <CJK>
+0x9E6B # <CJK>
+0x9E6C # <CJK>
+0x9E6D # <CJK>
+0x9E70 # <CJK>
+0x9E71 # <CJK>
+0x9E73 # <CJK>
+0x9E7E # <CJK>
+0x9E7F # <CJK>
+0x9E82 # <CJK>
+0x9E87 # <CJK>
+0x9E88 # <CJK>
+0x9E8B # <CJK>
+0x9E92 # <CJK>
+0x9E93 # <CJK>
+0x9E9D # <CJK>
+0x9E9F # <CJK>
+0x9EA6 # <CJK>
+0x9EB4 # <CJK>
+0x9EB8 # <CJK>
+0x9EBB # <CJK>
+0x9EBD # <CJK>
+0x9EBE # <CJK>
+0x9EC4 # <CJK>
+0x9EC9 # <CJK>
+0x9ECD # <CJK>
+0x9ECE # <CJK>
+0x9ECF # <CJK>
+0x9ED1 # <CJK>
+0x9ED4 # <CJK>
+0x9ED8 # <CJK>
+0x9EDB # <CJK>
+0x9EDC # <CJK>
+0x9EDD # <CJK>
+0x9EDF # <CJK>
+0x9EE0 # <CJK>
+0x9EE2 # <CJK>
+0x9EE5 # <CJK>
+0x9EE7 # <CJK>
+0x9EE9 # <CJK>
+0x9EEA # <CJK>
+0x9EEF # <CJK>
+0x9EF9 # <CJK>
+0x9EFB # <CJK>
+0x9EFC # <CJK>
+0x9EFE # <CJK>
+0x9F0B # <CJK>
+0x9F0D # <CJK>
+0x9F0E # <CJK>
+0x9F10 # <CJK>
+0x9F13 # <CJK>
+0x9F17 # <CJK>
+0x9F19 # <CJK>
+0x9F20 # <CJK>
+0x9F22 # <CJK>
+0x9F2C # <CJK>
+0x9F2F # <CJK>
+0x9F37 # <CJK>
+0x9F39 # <CJK>
+0x9F3B # <CJK>
+0x9F3D # <CJK>
+0x9F3E # <CJK>
+0x9F44 # <CJK>
+0x9F50 # <CJK>
+0x9F51 # <CJK>
+0x9F7F # <CJK>
+0x9F80 # <CJK>
+0x9F83 # <CJK>
+0x9F84 # <CJK>
+0x9F85 # <CJK>
+0x9F86 # <CJK>
+0x9F87 # <CJK>
+0x9F88 # <CJK>
+0x9F89 # <CJK>
+0x9F8A # <CJK>
+0x9F8B # <CJK>
+0x9F8C # <CJK>
+0x9F99 # <CJK>
+0x9F9A # <CJK>
+0x9F9B # <CJK>
+0x9F9F # <CJK>
+0x9FA0 # <CJK>
diff --git a/fontconfig/fc-lang/zh_hk.orth b/fontconfig/fc-lang/zh_hk.orth
index d280179bf..b4a67ebb4 100644
--- a/fontconfig/fc-lang/zh_hk.orth
+++ b/fontconfig/fc-lang/zh_hk.orth
@@ -1,2240 +1,2240 @@
-#
-# fontconfig/fc-lang/zh_hk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese Hong Kong Supplementary Character Set (ZH-HK)
-#
-# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs
-# as encoded in ISO/IEC 10646-1:2000
-4E04
-4E1A
-4E1C
-4E21
-4E24
-4E28
-4E2A
-4E2C
-4E2F
-4E36
-4E37
-4E3D
-4E3F
-4E49
-4E5A
-4E5B
-4E6A
-4E78
-4E80
-4E81
-4E85
-4E87
-4E89
-4E98
-4E9A
-4EA0
-4EA3
-4EB7
-4EBB
-4EBC
-4EBF
-4ECE
-4EEA
-4EEB
-4EEE
-4EF8
-4F03
-4F17
-4F1A
-4F28
-4F29
-4F32
-4F37
-4F39
-4F42
-4F45
-4F4B
-4F72
-4F8A
-4FA2
-4FA8
-4FAB
-4FB0
-4FBD
-4FC8
-4FCC
-4FE4
-4FE5
-4FF0
-4FF2
-4FF9
-4FFD
-5003
-5008
-502E
-5034
-503B
-5056
-5058
-5066
-506C
-5081
-5088
-5090
-50A6
-50BC
-50CD
-50D0
-50D9
-50DF
-50E1
-50F4
-50FC
-5101
-510D
-510E
-512B
-5156
-5160
-516A
-5174
-5179
-5182
-5186
-5188
-5196
-519A
-519C
-51A7
-51A8
-51AB
-51AE
-51B2
-51B3
-51B4
-51B5
-51B8
-51C3
-51C7
-51C9
-51CF
-51D1
-51D2
-51D3
-51DB
-51DF
-51E2
-51E4
-51ED
-51F4
-51FC
-51FE
-5202
-5205
-520B
-521F
-5220
-5226
-5227
-5234
-523C
-5257
-5259
-5260
-5268
-5273
-5279
-528F
-5290
-5294
-529A
-52A1
-52A4
-52A8
-52B5
-52B9
-52C5
-52CC
-52D0
-52D1
-52E0
-52E1
-52F9
-5301
-5324
-5327
-532C
-5332
-5333
-5338
-533B
-5342
-534E
-535D
-535F
-5364
-5367
-5369
-536D
-5374
-537D
-537E
-5393
-53A0
-53A2
-53A6
-53A8
-53A9
-53AA
-53AB
-53AE
-53B0
-53B6
-53C1
-53C2
-53C5
-53CC
-53D0
-53D1
-53D2
-53D8
-53D9
-53DA
-53E0
-53F6
-53F7
-53FE
-5413
-5414
-5416
-541A
-5421
-5423
-542F
-5432
-5434
-544B
-544D
-5469
-546A
-546D
-5485
-548F
-5493
-5494
-5497
-549C
-549E
-54A3
-54A4
-54B2
-54B4
-54B9
-54CB
-54CC
-54CD
-54D0
-54DA
-54E3
-54EF
-5502
-550D
-5513
-5518
-551E
-5523
-5525
-5528
-552B
-553F
-5547
-5549
-5553
-555D
-5569
-556B
-5571
-5572
-5573
-5579
-5586
-5590
-55A9
-55B0
-55B4
-55B9
-55BA
-55BC
-55C1
-55D7
-55D8
-55DE
-55EA
-55EC
-55F0
-55F1
-55F5
-55FB
-5605
-5611
-561E
-5620
-5621
-5622
-5623
-5625
-562D
-5637
-5643
-564D
-564F
-5650
-5652
-5654
-565D
-5661
-567A
-567B
-567C
-5689
-568A
-568B
-5692
-569E
-569F
-56A1
-56A4
-56AF
-56B1
-56B9
-56BF
-56D6
-56E2
-56ED
-56EF
-56F1
-56FD
-5700
-5715
-571D
-5732
-573D
-573F
-5742
-5743
-5746
-5754
-5757
-575B
-575F
-5767
-577A
-577E
-577F
-5788
-578A
-578D
-5790
-579C
-57A1
-57A7
-57AA
-57B4
-57BB
-57BE
-57C4
-57C8
-57D7
-57DD
-57DE
-57E6
-57EF
-57FE
-5803
-5812
-5822
-5826
-583A
-5840
-5844
-5847
-585C
-585F
-5869
-586C
-5872
-5873
-5892
-5899
-589A
-58A7
-58AA
-58B0
-58B5
-58B6
-58BB
-58CB
-58D0
-58DC
-58E0
-58F0
-58F2
-58F3
-58FB
-5902
-5904
-5905
-5907
-590A
-5911
-591F
-5932
-5934
-5965
-5975
-5989
-5994
-599A
-599F
-59AC
-59B0
-59B7
-59B8
-59C4
-59C9
-59D9
-59EB
-59EF
-59F0
-59F8
-59F9
-5A02
-5A0B
-5A0D
-5A12
-5A1A
-5A21
-5A24
-5A27
-5A2A
-5A2B
-5A2C
-5A3D
-5A45
-5A54
-5A59
-5A61
-5A63
-5A68
-5A6B
-5A6E
-5A71
-5A79
-5A7E
-5A81
-5A82
-5A86
-5A88
-5A91
-5A96
-5A99
-5AA0
-5AA1
-5AAB
-5AC3
-5ACE
-5ACF
-5AD3
-5AE4
-5AF0
-5AF2
-5AFA
-5AFE
-5B0D
-5B11
-5B15
-5B1F
-5B2B
-5B41
-5B44
-5B46
-5B4A
-5B4F
-5B66
-5B68
-5B6D
-5B74
-5B76
-5B7C
-5B80
-5B82
-5B90
-5B96
-5B9D
-5B9E
-5B9F
-5BAA
-5BC3
-5BD5
-5BD7
-5BF3
-5BFF
-5C05
-5C13
-5C14
-5C1C
-5C1E
-5C20
-5C23
-5C49
-5C4A
-5C53
-5C5E
-5C85
-5C99
-5C9A
-5C9C
-5C9E
-5CBA
-5CC1
-5CC2
-5CD1
-5CE5
-5CE9
-5CEF
-5CF5
-5D10
-5D15
-5D18
-5D2C
-5D2F
-5D3E
-5D46
-5D48
-5D56
-5D57
-5D5B
-5D70
-5D74
-5D7B
-5D85
-5D8B
-5D8E
-5DA4
-5DAB
-5DB6
-5DB9
-5DC1
-5DD7
-5DDB
-5DF5
-5E09
-5E0B
-5E12
-5E2E
-5E42
-5E48
-5E5E
-5E7A
-5E7F
-5E83
-5E86
-5E92
-5E99
-5EBD
-5ECD
-5ED0
-5EF4
-5EF8
-5EF9
-5EFB
-5EFC
-5F0C
-5F0D
-5F0E
-5F25
-5F3A
-5F4D
-5F50
-5F51
-5F5C
-5F61
-5F63
-5F72
-5F7B
-5F83
-5FA4
-5FA7
-5FB1
-5FBA
-5FC2
-5FC4
-5FDB
-5FDF
-6023
-6031
-603B
-604A
-6052
-6075
-6077
-607E
-609E
-60A4
-60A7
-60B3
-60D7
-60DE
-60E3
-60E7
-60E8
-60E9
-60FD
-6107
-610C
-6119
-6122
-6130
-613D
-6142
-6150
-6159
-615C
-6160
-6164
-616F
-617D
-6181
-6187
-6195
-6198
-6199
-619C
-61B7
-61B9
-61C0
-61CF
-61D0
-61D3
-61DA
-61E2
-622C
-6237
-6239
-624C
-6268
-6282
-6285
-6290
-629D
-62A4
-62A6
-62C3
-62C5
-62D5
-62DF
-62E5
-6318
-632E
-6331
-6335
-6337
-6364
-636C
-6379
-637F
-638B
-63B9
-63C1
-63D1
-63DE
-63E2
-63E6
-63F8
-63FB
-63FC
-63FE
-6407
-6432
-6438
-643A
-643B
-645A
-6471
-647C
-648D
-6491
-64AF
-64B4
-64B6
-64C0
-64D3
-64DD
-64E1
-64E5
-64E7
-64EA
-650A
-6511
-651E
-651F
-6530
-6534
-6535
-654D
-655F
-656B
-656D
-6585
-6586
-6588
-6589
-658B
-65B5
-65BE
-65D1
-65D4
-65E0
-65E3
-65FF
-6618
-661E
-6623
-6630
-6644
-6648
-664B
-6653
-6657
-6663
-6667
-666B
-6673
-667D
-6685
-668E
-6692
-669A
-66A4
-66AD
-66B3
-66B6
-66BF
-66CD
-66CE
-66F1
-6702
-670C
-670E
-6716
-6719
-671E
-6725
-6736
-6744
-6761
-6762
-6767
-676B
-678F
-67A0
-67A4
-67AC
-67B1
-67BF
-67D6
-67D7
-67F9
-67FE
-6800
-6801
-6802
-6803
-6804
-680D
-6810
-681B
-681E
-6822
-6836
-6837
-683E
-6847
-684A
-6855
-6856
-685D
-6865
-6884
-6888
-6898
-68A6
-68B6
-68B9
-68BD
-68C3
-68C5
-68CA
-6900
-6901
-6902
-6903
-6909
-6918
-6919
-691A
-691B
-692C
-6936
-693E
-6943
-6946
-6955
-6961
-6964
-6967
-6972
-6973
-6980
-6985
-698A
-6998
-699F
-69A2
-69B2
-69C0
-69D1
-69D5
-69D6
-69E1
-69E9
-69F9
-69FA
-6A03
-6A0B
-6A0C
-6A1A
-6A1C
-6A2B
-6A2C
-6A2D
-6A33
-6A43
-6A45
-6A4C
-6A52
-6A53
-6A57
-6A63
-6A65
-6A71
-6A74
-6A7A
-6A82
-6A8A
-6A8F
-6A99
-6A9D
-6AA7
-6AAB
-6AB1
-6AB2
-6AB5
-6ABE
-6AC8
-6AC9
-6ACA
-6AD4
-6AD8
-6AF6
-6B05
-6B1D
-6B35
-6B52
-6B57
-6B6F
-6B74
-6B7A
-6B81
-6BC1
-6BDC
-6BE1
-6BEA
-6BFA
-6C1C
-6C31
-6C35
-6C37
-6C39
-6C3A
-6C3D
-6C49
-6C58
-6C5A
-6C6E
-6C75
-6C79
-6C7F
-6C9F
-6CA2
-6CAA
-6CAF
-6CB2
-6CCB
-6CCE
-6CDF
-6CEA
-6CFF
-6D02
-6D05
-6D06
-6D24
-6D26
-6D4E
-6D57
-6D5B
-6D5C
-6D71
-6D72
-6D81
-6D8F
-6D96
-6DA4
-6DA5
-6DB1
-6DB9
-6DFE
-6E02
-6E04
-6E0A
-6E0F
-6E15
-6E18
-6E29
-6E2A
-6E4F
-6E50
-6E59
-6E76
-6E7C
-6E86
-6E8B
-6E9A
-6EB5
-6EB8
-6EBB
-6ED9
-6EDA
-6EDB
-6EDD
-6EE2
-6EE8
-6EE9
-6EFA
-6F04
-6F0B
-6F0C
-6F16
-6F17
-6F24
-6F34
-6F3D
-6F44
-6F56
-6F5C
-6F74
-6F79
-6F81
-6F8A
-6F9D
-6F9F
-6FB5
-6FBB
-6FBE
-6FD3
-6FD9
-6FDA
-6FF6
-6FF8
-7003
-701E
-702C
-704B
-704D
-7050
-7054
-705C
-7067
-706C
-706F
-7075
-7077
-7079
-707E
-707F
-7081
-7089
-708B
-708F
-70A0
-70A3
-70A5
-70A6
-70A7
-70B9
-70BB
-70BC
-70BD
-70C0
-70C4
-70CC
-70D0
-70D5
-70D6
-70DF
-70F1
-70F5
-70FE
-7105
-711D
-7129
-712B
-712C
-7133
-7134
-7135
-713B
-713E
-7140
-7145
-714A
-714F
-7151
-716B
-7171
-7173
-7175
-7176
-7177
-717A
-717C
-717E
-7188
-718C
-718E
-7191
-7196
-7198
-71A2
-71A3
-71AD
-71B4
-71B7
-71BA
-71D1
-71DD
-71EB
-71F5
-71F6
-7200
-7209
-720E
-720F
-7215
-7216
-7217
-7224
-722B
-722E
-7240
-7250
-7255
-7257
-725C
-7266
-7282
-7287
-728F
-7294
-729F
-72AD
-72B2
-72CD
-72E2
-7302
-7304
-7310
-7328
-732A
-732B
-732C
-732E
-7338
-7339
-7341
-7348
-734F
-7371
-7374
-738C
-738F
-7398
-739C
-739E
-73A7
-73AA
-73BA
-73C9
-73CE
-73CF
-73D0
-73D5
-73E1
-73E2
-73E4
-73E6
-73EF
-73F3
-73F7
-73F9
-73FB
-7402
-7411
-7412
-7414
-7415
-7417
-7419
-741C
-741E
-741F
-7437
-7438
-7439
-743C
-7443
-7445
-7447
-7448
-7449
-7453
-7456
-745D
-7460
-7465
-7468
-746B
-746C
-7474
-7476
-747A
-7482
-748C
-748D
-7499
-749B
-74A4
-74B4
-74B9
-74C8
-74CC
-74D0
-74D3
-74E7
-74F0
-74F1
-74F2
-74F8
-7505
-750E
-7519
-751E
-7534
-7535
-753B
-7542
-7546
-754A
-754D
-7551
-7553
-7555
-7560
-7567
-756D
-756E
-7572
-757A
-7583
-758D
-758E
-7592
-759E
-75B1
-75B4
-75C3
-75C8
-75DC
-7602
-7607
-762C
-763B
-7640
-764D
-764E
-764F
-7651
-7654
-7666
-7667
-766F
-7673
-7674
-7676
-767A
-7690
-76A1
-76A5
-76B7
-76CC
-76D6
-76D9
-770C
-770E
-770F
-771E
-7724
-7726
-772B
-7740
-7743
-7758
-7772
-7777
-7778
-777A
-777B
-7793
-7798
-77AF
-77B9
-77BE
-77C3
-77C5
-77CB
-77DD
-77E6
-77F4
-77FE
-7808
-7818
-781C
-781E
-7839
-783C
-783D
-7842
-7844
-7847
-784B
-7851
-7853
-7854
-7866
-787A
-7881
-7888
-788D
-78AF
-78B1
-78B6
-78B8
-78B9
-78C7
-78D2
-78D3
-78D7
-78D8
-78E4
-78EE
-78F0
-78F1
-78F5
-7906
-792E
-7932
-7933
-7934
-7936
-793B
-793C
-7958
-7959
-7962
-7971
-797E
-7980
-7983
-7986
-7987
-7991
-7999
-799D
-799F
-79A5
-79A9
-79C4
-79C6
-79CC
-79D4
-79E2
-79F1
-79F4
-7A06
-7A2A
-7A2D
-7A3A
-7A3E
-7A43
-7A45
-7A49
-7A65
-7A7D
-7A83
-7A91
-7A93
-7AB0
-7ABB
-7ABC
-7AC2
-7AC3
-7AC8
-7AC9
-7ACF
-7AD3
-7ADA
-7ADB
-7ADC
-7ADD
-7AE2
-7AE7
-7AE9
-7AEA
-7AFE
-7B0B
-7B0C
-7B14
-7B1F
-7B27
-7B29
-7B39
-7B42
-7B43
-7B55
-7B62
-7B6C
-7B6F
-7B7B
-7B92
-7BA2
-7BA3
-7BB2
-7BCF
-7BD0
-7BEC
-7BFA
-7BFC
-7C12
-7C15
-7C1B
-7C35
-7C42
-7C44
-7C51
-7C56
-7C5D
-7C6D
-7C70
-7C74
-7C7B
-7C7C
-7C7E
-7C83
-7C86
-7C8E
-7C9C
-7CA6
-7CA7
-7CAC
-7CAE
-7CB8
-7CC2
-7CC3
-7CC7
-7CC9
-7CCD
-7CD3
-7CDA
-7CE6
-7CED
-7CF3
-7CF5
-7CF9
-7CFC
-7D25
-7D4D
-7D5A
-7D5D
-7D89
-7D8B
-7D97
-7DA4
-7DA8
-7DAB
-7DB3
-7DCD
-7DCF
-7DD0
-7DD3
-7DD4
-7DDC
-7DE4
-7DE5
-7DF5
-7DFD
-7DFE
-7E07
-7E27
-7E5B
-7E65
-7E67
-7E6C
-7E6E
-7E7F
-7E8E
-7E92
-7E9F
-7EA4
-7EAC
-7EBA
-7EC7
-7ECF
-7EDF
-7F06
-7F37
-7F40
-7F41
-7F47
-7F49
-7F4E
-7F52
-7F53
-7F71
-7F78
-7F8F
-7F93
-7F97
-7FA3
-7FAE
-7FB4
-7FDD
-7FE7
-7FFA
-8002
-8008
-801D
-8020
-8025
-802E
-802F
-8031
-803B
-803C
-8054
-805B
-8061
-8062
-8063
-8066
-8080
-809F
-80A7
-80B6
-80B7
-80BC
-80BD
-80C6
-80E9
-80EC
-80F6
-8103
-8107
-8109
-810C
-810E
-8112
-8114
-8117
-811A
-812A
-8132
-8134
-8137
-8142
-8148
-8156
-8159
-815A
-816D
-817C
-8184
-8193
-81A5
-81AA
-81B6
-81C1
-81C8
-81E4
-81EF
-81F6
-8218
-821A
-8226
-8229
-822D
-823E
-8254
-8262
-8265
-8276
-8279
-827A
-827B
-8287
-82A6
-82AA
-82BF
-82C4
-82CA
-82CF
-82D0
-82D8
-82E2
-82EE
-82F7
-82F8
-82FC
-82FD
-82FF
-830B
-8318
-831A
-831D
-833D
-8357
-8362
-8363
-8366
-836F
-8385
-8391
-839C
-83AC
-83B9
-83BE
-83CD
-83D3
-83ED
-8405
-8414
-8416
-8418
-841C
-8420
-8421
-8424
-8426
-842E
-843E
-8448
-844A
-8453
-8455
-8458
-845C
-8462
-8464
-8471
-8472
-847F
-8480
-8488
-8492
-8493
-8496
-84A3
-84AD
-84BD
-84BE
-84DA
-84DE
-84E1
-84E2
-84E4
-84E5
-84F8
-8503
-8505
-8510
-8533
-8534
-8538
-8542
-854B
-854C
-8552
-855A
-855F
-856F
-8570
-8573
-8597
-85C1
-85D6
-85E0
-85EE
-85FC
-8602
-860D
-860F
-8610
-8614
-8616
-8628
-862F
-8642
-8645
-866C
-8672
-867E
-8692
-86A0
-86AD
-86B2
-86EF
-8770
-8771
-877D
-8786
-878B
-878C
-87A5
-87A9
-87B1
-87C1
-87CE
-87D6
-87DA
-87EE
-87F5
-8804
-880F
-8818
-8827
-882D
-8842
-8845
-8846
-884F
-885E
-8860
-8864
-8865
-886E
-8884
-8887
-888F
-8890
-889C
-88A0
-88AE
-88B4
-88B5
-88BF
-88C5
-88C7
-88CF
-88E6
-88F5
-88FF
-8900
-8924
-8943
-8947
-894D
-8954
-8965
-8977
-8980
-8987
-8989
-898A
-8991
-8994
-89A5
-89A7
-89A9
-89BC
-89C1
-89C6
-89E7
-8A1C
-8A29
-8A2B
-8A38
-8A3D
-8A49
-8A67
-8A7E
-8A90
-8A94
-8A9C
-8AA9
-8AAF
-8AB4
-8ADA
-8AEA
-8B0C
-8B1F
-8B2D
-8B3F
-8B43
-8B4C
-8B4D
-8B5E
-8B62
-8B69
-8B81
-8B83
-8B90
-8B9B
-8BA0
-8BBE
-8BE2
-8C51
-8C9B
-8C9F
-8CAD
-8CCD
-8CD4
-8CD6
-8CDB
-8CE9
-8CEB
-8CF2
-8CF7
-8D03
-8D0B
-8D0C
-8D11
-8D12
-8D18
-8D1C
-8D1D
-8D7A
-8D82
-8DA6
-8DA9
-8DC0
-8DC3
-8DD4
-8E01
-8E0E
-8E28
-8E2A
-8E2D
-8E3A
-8E46
-8E4F
-8E68
-8E71
-8E75
-8E77
-8E7E
-8E80
-8EA7
-8EAD
-8EB0
-8EB6
-8EB9
-8EBC
-8EC3
-8ECE
-8EDA
-8EE2
-8EE4
-8EED
-8EF2
-8F19
-8F2D
-8F30
-8F41
-8F4A
-8F5C
-8F66
-8F67
-8F6E
-8F93
-8FA0
-8FA5
-8FA7
-8FB3
-8FB5
-8FB6
-8FB7
-8FB8
-8FB9
-8FBA
-8FBB
-8FBC
-8FBE
-8FC1
-8FCA
-8FCC
-8FCF
-8FD0
-8FDA
-8FF9
-9008
-9012
-9033
-9037
-904C
-9056
-9061
-9064
-906C
-90A8
-90AE
-90BB
-90C4
-9151
-9159
-915C
-915E
-9167
-9170
-9176
-917C
-918C
-918E
-91A9
-91B6
-91BB
-91C4
-91D6
-91DF
-91E5
-91F6
-91FA
-91FE
-9208
-920E
-9213
-9221
-9228
-922A
-922B
-9235
-923C
-9241
-9244
-9255
-9258
-925D
-925F
-9262
-926B
-926E
-9277
-9281
-9284
-9289
-928F
-92AE
-92B1
-92B9
-92BA
-92BE
-92BF
-92D4
-92DB
-92E3
-92E5
-92EB
-92EC
-92F2
-92F3
-92F4
-92F6
-92FD
-9303
-9307
-932C
-9330
-9331
-9340
-9341
-9342
-9343
-9344
-9345
-9348
-935F
-9362
-9366
-9368
-9369
-936B
-936E
-9373
-9374
-9378
-937D
-9381
-9384
-9385
-9386
-9387
-9390
-939C
-93A0
-93AD
-93B8
-93BB
-93BD
-93BF
-93C6
-93CB
-93D3
-93DB
-93E0
-93F0
-93F1
-93F3
-93F4
-9401
-9404
-9408
-9417
-941B
-941D
-9424
-9425
-9426
-9427
-942D
-943E
-9442
-9443
-944D
-9454
-9458
-945B
-9465
-9467
-946C
-9479
-947B
-9485
-949F
-94A2
-94C1
-94C3
-94DC
-94F6
-952D
-9547
-9578
-957F
-9585
-9596
-9597
-9599
-95A0
-95A2
-95A6
-95A7
-95AA
-95E8
-95F4
-961D
-9633
-9638
-9641
-9645
-9656
-9669
-967B
-9681
-968F
-9696
-96A3
-96A5
-96B6
-96BD
-96F4
-9703
-971B
-9721
-9731
-9736
-9740
-9741
-9751
-9755
-9757
-975D
-975F
-976D
-9771
-9787
-9789
-979B
-979F
-97B1
-97B2
-97B4
-97B8
-97BA
-97BD
-97BE
-97C0
-97C2
-97C8
-97D2
-97E0
-97E6
-97EE
-97F2
-97F5
-9814
-9815
-981F
-9823
-982E
-9833
-9834
-9847
-984B
-9866
-9868
-986C
-9875
-98B4
-98B7
-98B9
-98C3
-98C7
-98C8
-98CA
-98CE
-98DC
-98DE
-98E0
-98E1
-98E6
-98EC
-98F1
-98F5
-990E
-9919
-991C
-9937
-9938
-9939
-993B
-9940
-9942
-994A
-994D
-995D
-9962
-9963
-999B
-99A4
-99AA
-99B8
-99BC
-99C4
-99C5
-99DA
-99E0
-99E1
-99E6
-99F5
-9A0C
-9A10
-9A1F
-9A21
-9A26
-9A2F
-9A3B
-9A3C
-9A58
-9A5C
-9A63
-9A6C
-9A8F
-9AB2
-9AB6
-9ABA
-9ABD
-9AD7
-9AE0
-9AE2
-9AF4
-9AFF
-9B02
-9B09
-9B0F
-9B14
-9B2A
-9B2D
-9B34
-9B39
-9B40
-9B50
-9B69
-9B7F
-9B81
-9B83
-9B8B
-9B8D
-9B8E
-9B8F
-9B97
-9B9D
-9B9F
-9BB0
-9BCF
-9BDD
-9BE9
-9BED
-9BF1
-9BF4
-9BFF
-9C02
-9C0A
-9C0C
-9C10
-9C15
-9C1B
-9C1F
-9C20
-9C26
-9C2F
-9C35
-9C3A
-9C45
-9C4F
-9C53
-9C5D
-9C72
-9C7B
-9C7C
-9D02
-9D0C
-9D16
-9D21
-9D34
-9D39
-9D44
-9D49
-9D4E
-9D50
-9D5E
-9D6D
-9D6E
-9D7C
-9D7E
-9D83
-9D93
-9DA5
-9DAB
-9DBD
-9DC0
-9DC4
-9DC9
-9DD4
-9DFC
-9E0A
-9E0C
-9E0E
-9E18
-9E1C
-9E1F
-9E7B
-9E81
-9E84
-9E85
-9E90
-9E95
-9E96
-9E98
-9E9E
-9EA2
-9EA6
-9EA8
-9EAA
-9EAB
-9EAC
-9EAF
-9EB1
-9EBD
-9EBF
-9EC1
-9EC4
-9EC6
-9EC7
-9EE2
-9EF1
-9EF8
-9EFE
-9F02
-9F08
-9F17
-9F26
-9F27
-9F39
-9F44
-9F45
-9F50
-9F53
-9F5A
-9F62
-9F69
-9F7F
-9F8E
-9F99
-9F9F
-9FA5
-20547
+#
+# fontconfig/fc-lang/zh_hk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese Hong Kong Supplementary Character Set (ZH-HK)
+#
+# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs
+# as encoded in ISO/IEC 10646-1:2000
+4E04
+4E1A
+4E1C
+4E21
+4E24
+4E28
+4E2A
+4E2C
+4E2F
+4E36
+4E37
+4E3D
+4E3F
+4E49
+4E5A
+4E5B
+4E6A
+4E78
+4E80
+4E81
+4E85
+4E87
+4E89
+4E98
+4E9A
+4EA0
+4EA3
+4EB7
+4EBB
+4EBC
+4EBF
+4ECE
+4EEA
+4EEB
+4EEE
+4EF8
+4F03
+4F17
+4F1A
+4F28
+4F29
+4F32
+4F37
+4F39
+4F42
+4F45
+4F4B
+4F72
+4F8A
+4FA2
+4FA8
+4FAB
+4FB0
+4FBD
+4FC8
+4FCC
+4FE4
+4FE5
+4FF0
+4FF2
+4FF9
+4FFD
+5003
+5008
+502E
+5034
+503B
+5056
+5058
+5066
+506C
+5081
+5088
+5090
+50A6
+50BC
+50CD
+50D0
+50D9
+50DF
+50E1
+50F4
+50FC
+5101
+510D
+510E
+512B
+5156
+5160
+516A
+5174
+5179
+5182
+5186
+5188
+5196
+519A
+519C
+51A7
+51A8
+51AB
+51AE
+51B2
+51B3
+51B4
+51B5
+51B8
+51C3
+51C7
+51C9
+51CF
+51D1
+51D2
+51D3
+51DB
+51DF
+51E2
+51E4
+51ED
+51F4
+51FC
+51FE
+5202
+5205
+520B
+521F
+5220
+5226
+5227
+5234
+523C
+5257
+5259
+5260
+5268
+5273
+5279
+528F
+5290
+5294
+529A
+52A1
+52A4
+52A8
+52B5
+52B9
+52C5
+52CC
+52D0
+52D1
+52E0
+52E1
+52F9
+5301
+5324
+5327
+532C
+5332
+5333
+5338
+533B
+5342
+534E
+535D
+535F
+5364
+5367
+5369
+536D
+5374
+537D
+537E
+5393
+53A0
+53A2
+53A6
+53A8
+53A9
+53AA
+53AB
+53AE
+53B0
+53B6
+53C1
+53C2
+53C5
+53CC
+53D0
+53D1
+53D2
+53D8
+53D9
+53DA
+53E0
+53F6
+53F7
+53FE
+5413
+5414
+5416
+541A
+5421
+5423
+542F
+5432
+5434
+544B
+544D
+5469
+546A
+546D
+5485
+548F
+5493
+5494
+5497
+549C
+549E
+54A3
+54A4
+54B2
+54B4
+54B9
+54CB
+54CC
+54CD
+54D0
+54DA
+54E3
+54EF
+5502
+550D
+5513
+5518
+551E
+5523
+5525
+5528
+552B
+553F
+5547
+5549
+5553
+555D
+5569
+556B
+5571
+5572
+5573
+5579
+5586
+5590
+55A9
+55B0
+55B4
+55B9
+55BA
+55BC
+55C1
+55D7
+55D8
+55DE
+55EA
+55EC
+55F0
+55F1
+55F5
+55FB
+5605
+5611
+561E
+5620
+5621
+5622
+5623
+5625
+562D
+5637
+5643
+564D
+564F
+5650
+5652
+5654
+565D
+5661
+567A
+567B
+567C
+5689
+568A
+568B
+5692
+569E
+569F
+56A1
+56A4
+56AF
+56B1
+56B9
+56BF
+56D6
+56E2
+56ED
+56EF
+56F1
+56FD
+5700
+5715
+571D
+5732
+573D
+573F
+5742
+5743
+5746
+5754
+5757
+575B
+575F
+5767
+577A
+577E
+577F
+5788
+578A
+578D
+5790
+579C
+57A1
+57A7
+57AA
+57B4
+57BB
+57BE
+57C4
+57C8
+57D7
+57DD
+57DE
+57E6
+57EF
+57FE
+5803
+5812
+5822
+5826
+583A
+5840
+5844
+5847
+585C
+585F
+5869
+586C
+5872
+5873
+5892
+5899
+589A
+58A7
+58AA
+58B0
+58B5
+58B6
+58BB
+58CB
+58D0
+58DC
+58E0
+58F0
+58F2
+58F3
+58FB
+5902
+5904
+5905
+5907
+590A
+5911
+591F
+5932
+5934
+5965
+5975
+5989
+5994
+599A
+599F
+59AC
+59B0
+59B7
+59B8
+59C4
+59C9
+59D9
+59EB
+59EF
+59F0
+59F8
+59F9
+5A02
+5A0B
+5A0D
+5A12
+5A1A
+5A21
+5A24
+5A27
+5A2A
+5A2B
+5A2C
+5A3D
+5A45
+5A54
+5A59
+5A61
+5A63
+5A68
+5A6B
+5A6E
+5A71
+5A79
+5A7E
+5A81
+5A82
+5A86
+5A88
+5A91
+5A96
+5A99
+5AA0
+5AA1
+5AAB
+5AC3
+5ACE
+5ACF
+5AD3
+5AE4
+5AF0
+5AF2
+5AFA
+5AFE
+5B0D
+5B11
+5B15
+5B1F
+5B2B
+5B41
+5B44
+5B46
+5B4A
+5B4F
+5B66
+5B68
+5B6D
+5B74
+5B76
+5B7C
+5B80
+5B82
+5B90
+5B96
+5B9D
+5B9E
+5B9F
+5BAA
+5BC3
+5BD5
+5BD7
+5BF3
+5BFF
+5C05
+5C13
+5C14
+5C1C
+5C1E
+5C20
+5C23
+5C49
+5C4A
+5C53
+5C5E
+5C85
+5C99
+5C9A
+5C9C
+5C9E
+5CBA
+5CC1
+5CC2
+5CD1
+5CE5
+5CE9
+5CEF
+5CF5
+5D10
+5D15
+5D18
+5D2C
+5D2F
+5D3E
+5D46
+5D48
+5D56
+5D57
+5D5B
+5D70
+5D74
+5D7B
+5D85
+5D8B
+5D8E
+5DA4
+5DAB
+5DB6
+5DB9
+5DC1
+5DD7
+5DDB
+5DF5
+5E09
+5E0B
+5E12
+5E2E
+5E42
+5E48
+5E5E
+5E7A
+5E7F
+5E83
+5E86
+5E92
+5E99
+5EBD
+5ECD
+5ED0
+5EF4
+5EF8
+5EF9
+5EFB
+5EFC
+5F0C
+5F0D
+5F0E
+5F25
+5F3A
+5F4D
+5F50
+5F51
+5F5C
+5F61
+5F63
+5F72
+5F7B
+5F83
+5FA4
+5FA7
+5FB1
+5FBA
+5FC2
+5FC4
+5FDB
+5FDF
+6023
+6031
+603B
+604A
+6052
+6075
+6077
+607E
+609E
+60A4
+60A7
+60B3
+60D7
+60DE
+60E3
+60E7
+60E8
+60E9
+60FD
+6107
+610C
+6119
+6122
+6130
+613D
+6142
+6150
+6159
+615C
+6160
+6164
+616F
+617D
+6181
+6187
+6195
+6198
+6199
+619C
+61B7
+61B9
+61C0
+61CF
+61D0
+61D3
+61DA
+61E2
+622C
+6237
+6239
+624C
+6268
+6282
+6285
+6290
+629D
+62A4
+62A6
+62C3
+62C5
+62D5
+62DF
+62E5
+6318
+632E
+6331
+6335
+6337
+6364
+636C
+6379
+637F
+638B
+63B9
+63C1
+63D1
+63DE
+63E2
+63E6
+63F8
+63FB
+63FC
+63FE
+6407
+6432
+6438
+643A
+643B
+645A
+6471
+647C
+648D
+6491
+64AF
+64B4
+64B6
+64C0
+64D3
+64DD
+64E1
+64E5
+64E7
+64EA
+650A
+6511
+651E
+651F
+6530
+6534
+6535
+654D
+655F
+656B
+656D
+6585
+6586
+6588
+6589
+658B
+65B5
+65BE
+65D1
+65D4
+65E0
+65E3
+65FF
+6618
+661E
+6623
+6630
+6644
+6648
+664B
+6653
+6657
+6663
+6667
+666B
+6673
+667D
+6685
+668E
+6692
+669A
+66A4
+66AD
+66B3
+66B6
+66BF
+66CD
+66CE
+66F1
+6702
+670C
+670E
+6716
+6719
+671E
+6725
+6736
+6744
+6761
+6762
+6767
+676B
+678F
+67A0
+67A4
+67AC
+67B1
+67BF
+67D6
+67D7
+67F9
+67FE
+6800
+6801
+6802
+6803
+6804
+680D
+6810
+681B
+681E
+6822
+6836
+6837
+683E
+6847
+684A
+6855
+6856
+685D
+6865
+6884
+6888
+6898
+68A6
+68B6
+68B9
+68BD
+68C3
+68C5
+68CA
+6900
+6901
+6902
+6903
+6909
+6918
+6919
+691A
+691B
+692C
+6936
+693E
+6943
+6946
+6955
+6961
+6964
+6967
+6972
+6973
+6980
+6985
+698A
+6998
+699F
+69A2
+69B2
+69C0
+69D1
+69D5
+69D6
+69E1
+69E9
+69F9
+69FA
+6A03
+6A0B
+6A0C
+6A1A
+6A1C
+6A2B
+6A2C
+6A2D
+6A33
+6A43
+6A45
+6A4C
+6A52
+6A53
+6A57
+6A63
+6A65
+6A71
+6A74
+6A7A
+6A82
+6A8A
+6A8F
+6A99
+6A9D
+6AA7
+6AAB
+6AB1
+6AB2
+6AB5
+6ABE
+6AC8
+6AC9
+6ACA
+6AD4
+6AD8
+6AF6
+6B05
+6B1D
+6B35
+6B52
+6B57
+6B6F
+6B74
+6B7A
+6B81
+6BC1
+6BDC
+6BE1
+6BEA
+6BFA
+6C1C
+6C31
+6C35
+6C37
+6C39
+6C3A
+6C3D
+6C49
+6C58
+6C5A
+6C6E
+6C75
+6C79
+6C7F
+6C9F
+6CA2
+6CAA
+6CAF
+6CB2
+6CCB
+6CCE
+6CDF
+6CEA
+6CFF
+6D02
+6D05
+6D06
+6D24
+6D26
+6D4E
+6D57
+6D5B
+6D5C
+6D71
+6D72
+6D81
+6D8F
+6D96
+6DA4
+6DA5
+6DB1
+6DB9
+6DFE
+6E02
+6E04
+6E0A
+6E0F
+6E15
+6E18
+6E29
+6E2A
+6E4F
+6E50
+6E59
+6E76
+6E7C
+6E86
+6E8B
+6E9A
+6EB5
+6EB8
+6EBB
+6ED9
+6EDA
+6EDB
+6EDD
+6EE2
+6EE8
+6EE9
+6EFA
+6F04
+6F0B
+6F0C
+6F16
+6F17
+6F24
+6F34
+6F3D
+6F44
+6F56
+6F5C
+6F74
+6F79
+6F81
+6F8A
+6F9D
+6F9F
+6FB5
+6FBB
+6FBE
+6FD3
+6FD9
+6FDA
+6FF6
+6FF8
+7003
+701E
+702C
+704B
+704D
+7050
+7054
+705C
+7067
+706C
+706F
+7075
+7077
+7079
+707E
+707F
+7081
+7089
+708B
+708F
+70A0
+70A3
+70A5
+70A6
+70A7
+70B9
+70BB
+70BC
+70BD
+70C0
+70C4
+70CC
+70D0
+70D5
+70D6
+70DF
+70F1
+70F5
+70FE
+7105
+711D
+7129
+712B
+712C
+7133
+7134
+7135
+713B
+713E
+7140
+7145
+714A
+714F
+7151
+716B
+7171
+7173
+7175
+7176
+7177
+717A
+717C
+717E
+7188
+718C
+718E
+7191
+7196
+7198
+71A2
+71A3
+71AD
+71B4
+71B7
+71BA
+71D1
+71DD
+71EB
+71F5
+71F6
+7200
+7209
+720E
+720F
+7215
+7216
+7217
+7224
+722B
+722E
+7240
+7250
+7255
+7257
+725C
+7266
+7282
+7287
+728F
+7294
+729F
+72AD
+72B2
+72CD
+72E2
+7302
+7304
+7310
+7328
+732A
+732B
+732C
+732E
+7338
+7339
+7341
+7348
+734F
+7371
+7374
+738C
+738F
+7398
+739C
+739E
+73A7
+73AA
+73BA
+73C9
+73CE
+73CF
+73D0
+73D5
+73E1
+73E2
+73E4
+73E6
+73EF
+73F3
+73F7
+73F9
+73FB
+7402
+7411
+7412
+7414
+7415
+7417
+7419
+741C
+741E
+741F
+7437
+7438
+7439
+743C
+7443
+7445
+7447
+7448
+7449
+7453
+7456
+745D
+7460
+7465
+7468
+746B
+746C
+7474
+7476
+747A
+7482
+748C
+748D
+7499
+749B
+74A4
+74B4
+74B9
+74C8
+74CC
+74D0
+74D3
+74E7
+74F0
+74F1
+74F2
+74F8
+7505
+750E
+7519
+751E
+7534
+7535
+753B
+7542
+7546
+754A
+754D
+7551
+7553
+7555
+7560
+7567
+756D
+756E
+7572
+757A
+7583
+758D
+758E
+7592
+759E
+75B1
+75B4
+75C3
+75C8
+75DC
+7602
+7607
+762C
+763B
+7640
+764D
+764E
+764F
+7651
+7654
+7666
+7667
+766F
+7673
+7674
+7676
+767A
+7690
+76A1
+76A5
+76B7
+76CC
+76D6
+76D9
+770C
+770E
+770F
+771E
+7724
+7726
+772B
+7740
+7743
+7758
+7772
+7777
+7778
+777A
+777B
+7793
+7798
+77AF
+77B9
+77BE
+77C3
+77C5
+77CB
+77DD
+77E6
+77F4
+77FE
+7808
+7818
+781C
+781E
+7839
+783C
+783D
+7842
+7844
+7847
+784B
+7851
+7853
+7854
+7866
+787A
+7881
+7888
+788D
+78AF
+78B1
+78B6
+78B8
+78B9
+78C7
+78D2
+78D3
+78D7
+78D8
+78E4
+78EE
+78F0
+78F1
+78F5
+7906
+792E
+7932
+7933
+7934
+7936
+793B
+793C
+7958
+7959
+7962
+7971
+797E
+7980
+7983
+7986
+7987
+7991
+7999
+799D
+799F
+79A5
+79A9
+79C4
+79C6
+79CC
+79D4
+79E2
+79F1
+79F4
+7A06
+7A2A
+7A2D
+7A3A
+7A3E
+7A43
+7A45
+7A49
+7A65
+7A7D
+7A83
+7A91
+7A93
+7AB0
+7ABB
+7ABC
+7AC2
+7AC3
+7AC8
+7AC9
+7ACF
+7AD3
+7ADA
+7ADB
+7ADC
+7ADD
+7AE2
+7AE7
+7AE9
+7AEA
+7AFE
+7B0B
+7B0C
+7B14
+7B1F
+7B27
+7B29
+7B39
+7B42
+7B43
+7B55
+7B62
+7B6C
+7B6F
+7B7B
+7B92
+7BA2
+7BA3
+7BB2
+7BCF
+7BD0
+7BEC
+7BFA
+7BFC
+7C12
+7C15
+7C1B
+7C35
+7C42
+7C44
+7C51
+7C56
+7C5D
+7C6D
+7C70
+7C74
+7C7B
+7C7C
+7C7E
+7C83
+7C86
+7C8E
+7C9C
+7CA6
+7CA7
+7CAC
+7CAE
+7CB8
+7CC2
+7CC3
+7CC7
+7CC9
+7CCD
+7CD3
+7CDA
+7CE6
+7CED
+7CF3
+7CF5
+7CF9
+7CFC
+7D25
+7D4D
+7D5A
+7D5D
+7D89
+7D8B
+7D97
+7DA4
+7DA8
+7DAB
+7DB3
+7DCD
+7DCF
+7DD0
+7DD3
+7DD4
+7DDC
+7DE4
+7DE5
+7DF5
+7DFD
+7DFE
+7E07
+7E27
+7E5B
+7E65
+7E67
+7E6C
+7E6E
+7E7F
+7E8E
+7E92
+7E9F
+7EA4
+7EAC
+7EBA
+7EC7
+7ECF
+7EDF
+7F06
+7F37
+7F40
+7F41
+7F47
+7F49
+7F4E
+7F52
+7F53
+7F71
+7F78
+7F8F
+7F93
+7F97
+7FA3
+7FAE
+7FB4
+7FDD
+7FE7
+7FFA
+8002
+8008
+801D
+8020
+8025
+802E
+802F
+8031
+803B
+803C
+8054
+805B
+8061
+8062
+8063
+8066
+8080
+809F
+80A7
+80B6
+80B7
+80BC
+80BD
+80C6
+80E9
+80EC
+80F6
+8103
+8107
+8109
+810C
+810E
+8112
+8114
+8117
+811A
+812A
+8132
+8134
+8137
+8142
+8148
+8156
+8159
+815A
+816D
+817C
+8184
+8193
+81A5
+81AA
+81B6
+81C1
+81C8
+81E4
+81EF
+81F6
+8218
+821A
+8226
+8229
+822D
+823E
+8254
+8262
+8265
+8276
+8279
+827A
+827B
+8287
+82A6
+82AA
+82BF
+82C4
+82CA
+82CF
+82D0
+82D8
+82E2
+82EE
+82F7
+82F8
+82FC
+82FD
+82FF
+830B
+8318
+831A
+831D
+833D
+8357
+8362
+8363
+8366
+836F
+8385
+8391
+839C
+83AC
+83B9
+83BE
+83CD
+83D3
+83ED
+8405
+8414
+8416
+8418
+841C
+8420
+8421
+8424
+8426
+842E
+843E
+8448
+844A
+8453
+8455
+8458
+845C
+8462
+8464
+8471
+8472
+847F
+8480
+8488
+8492
+8493
+8496
+84A3
+84AD
+84BD
+84BE
+84DA
+84DE
+84E1
+84E2
+84E4
+84E5
+84F8
+8503
+8505
+8510
+8533
+8534
+8538
+8542
+854B
+854C
+8552
+855A
+855F
+856F
+8570
+8573
+8597
+85C1
+85D6
+85E0
+85EE
+85FC
+8602
+860D
+860F
+8610
+8614
+8616
+8628
+862F
+8642
+8645
+866C
+8672
+867E
+8692
+86A0
+86AD
+86B2
+86EF
+8770
+8771
+877D
+8786
+878B
+878C
+87A5
+87A9
+87B1
+87C1
+87CE
+87D6
+87DA
+87EE
+87F5
+8804
+880F
+8818
+8827
+882D
+8842
+8845
+8846
+884F
+885E
+8860
+8864
+8865
+886E
+8884
+8887
+888F
+8890
+889C
+88A0
+88AE
+88B4
+88B5
+88BF
+88C5
+88C7
+88CF
+88E6
+88F5
+88FF
+8900
+8924
+8943
+8947
+894D
+8954
+8965
+8977
+8980
+8987
+8989
+898A
+8991
+8994
+89A5
+89A7
+89A9
+89BC
+89C1
+89C6
+89E7
+8A1C
+8A29
+8A2B
+8A38
+8A3D
+8A49
+8A67
+8A7E
+8A90
+8A94
+8A9C
+8AA9
+8AAF
+8AB4
+8ADA
+8AEA
+8B0C
+8B1F
+8B2D
+8B3F
+8B43
+8B4C
+8B4D
+8B5E
+8B62
+8B69
+8B81
+8B83
+8B90
+8B9B
+8BA0
+8BBE
+8BE2
+8C51
+8C9B
+8C9F
+8CAD
+8CCD
+8CD4
+8CD6
+8CDB
+8CE9
+8CEB
+8CF2
+8CF7
+8D03
+8D0B
+8D0C
+8D11
+8D12
+8D18
+8D1C
+8D1D
+8D7A
+8D82
+8DA6
+8DA9
+8DC0
+8DC3
+8DD4
+8E01
+8E0E
+8E28
+8E2A
+8E2D
+8E3A
+8E46
+8E4F
+8E68
+8E71
+8E75
+8E77
+8E7E
+8E80
+8EA7
+8EAD
+8EB0
+8EB6
+8EB9
+8EBC
+8EC3
+8ECE
+8EDA
+8EE2
+8EE4
+8EED
+8EF2
+8F19
+8F2D
+8F30
+8F41
+8F4A
+8F5C
+8F66
+8F67
+8F6E
+8F93
+8FA0
+8FA5
+8FA7
+8FB3
+8FB5
+8FB6
+8FB7
+8FB8
+8FB9
+8FBA
+8FBB
+8FBC
+8FBE
+8FC1
+8FCA
+8FCC
+8FCF
+8FD0
+8FDA
+8FF9
+9008
+9012
+9033
+9037
+904C
+9056
+9061
+9064
+906C
+90A8
+90AE
+90BB
+90C4
+9151
+9159
+915C
+915E
+9167
+9170
+9176
+917C
+918C
+918E
+91A9
+91B6
+91BB
+91C4
+91D6
+91DF
+91E5
+91F6
+91FA
+91FE
+9208
+920E
+9213
+9221
+9228
+922A
+922B
+9235
+923C
+9241
+9244
+9255
+9258
+925D
+925F
+9262
+926B
+926E
+9277
+9281
+9284
+9289
+928F
+92AE
+92B1
+92B9
+92BA
+92BE
+92BF
+92D4
+92DB
+92E3
+92E5
+92EB
+92EC
+92F2
+92F3
+92F4
+92F6
+92FD
+9303
+9307
+932C
+9330
+9331
+9340
+9341
+9342
+9343
+9344
+9345
+9348
+935F
+9362
+9366
+9368
+9369
+936B
+936E
+9373
+9374
+9378
+937D
+9381
+9384
+9385
+9386
+9387
+9390
+939C
+93A0
+93AD
+93B8
+93BB
+93BD
+93BF
+93C6
+93CB
+93D3
+93DB
+93E0
+93F0
+93F1
+93F3
+93F4
+9401
+9404
+9408
+9417
+941B
+941D
+9424
+9425
+9426
+9427
+942D
+943E
+9442
+9443
+944D
+9454
+9458
+945B
+9465
+9467
+946C
+9479
+947B
+9485
+949F
+94A2
+94C1
+94C3
+94DC
+94F6
+952D
+9547
+9578
+957F
+9585
+9596
+9597
+9599
+95A0
+95A2
+95A6
+95A7
+95AA
+95E8
+95F4
+961D
+9633
+9638
+9641
+9645
+9656
+9669
+967B
+9681
+968F
+9696
+96A3
+96A5
+96B6
+96BD
+96F4
+9703
+971B
+9721
+9731
+9736
+9740
+9741
+9751
+9755
+9757
+975D
+975F
+976D
+9771
+9787
+9789
+979B
+979F
+97B1
+97B2
+97B4
+97B8
+97BA
+97BD
+97BE
+97C0
+97C2
+97C8
+97D2
+97E0
+97E6
+97EE
+97F2
+97F5
+9814
+9815
+981F
+9823
+982E
+9833
+9834
+9847
+984B
+9866
+9868
+986C
+9875
+98B4
+98B7
+98B9
+98C3
+98C7
+98C8
+98CA
+98CE
+98DC
+98DE
+98E0
+98E1
+98E6
+98EC
+98F1
+98F5
+990E
+9919
+991C
+9937
+9938
+9939
+993B
+9940
+9942
+994A
+994D
+995D
+9962
+9963
+999B
+99A4
+99AA
+99B8
+99BC
+99C4
+99C5
+99DA
+99E0
+99E1
+99E6
+99F5
+9A0C
+9A10
+9A1F
+9A21
+9A26
+9A2F
+9A3B
+9A3C
+9A58
+9A5C
+9A63
+9A6C
+9A8F
+9AB2
+9AB6
+9ABA
+9ABD
+9AD7
+9AE0
+9AE2
+9AF4
+9AFF
+9B02
+9B09
+9B0F
+9B14
+9B2A
+9B2D
+9B34
+9B39
+9B40
+9B50
+9B69
+9B7F
+9B81
+9B83
+9B8B
+9B8D
+9B8E
+9B8F
+9B97
+9B9D
+9B9F
+9BB0
+9BCF
+9BDD
+9BE9
+9BED
+9BF1
+9BF4
+9BFF
+9C02
+9C0A
+9C0C
+9C10
+9C15
+9C1B
+9C1F
+9C20
+9C26
+9C2F
+9C35
+9C3A
+9C45
+9C4F
+9C53
+9C5D
+9C72
+9C7B
+9C7C
+9D02
+9D0C
+9D16
+9D21
+9D34
+9D39
+9D44
+9D49
+9D4E
+9D50
+9D5E
+9D6D
+9D6E
+9D7C
+9D7E
+9D83
+9D93
+9DA5
+9DAB
+9DBD
+9DC0
+9DC4
+9DC9
+9DD4
+9DFC
+9E0A
+9E0C
+9E0E
+9E18
+9E1C
+9E1F
+9E7B
+9E81
+9E84
+9E85
+9E90
+9E95
+9E96
+9E98
+9E9E
+9EA2
+9EA6
+9EA8
+9EAA
+9EAB
+9EAC
+9EAF
+9EB1
+9EBD
+9EBF
+9EC1
+9EC4
+9EC6
+9EC7
+9EE2
+9EF1
+9EF8
+9EFE
+9F02
+9F08
+9F17
+9F26
+9F27
+9F39
+9F44
+9F45
+9F50
+9F53
+9F5A
+9F62
+9F69
+9F7F
+9F8E
+9F99
+9F9F
+9FA5
+20547
diff --git a/fontconfig/fc-lang/zh_mo.orth b/fontconfig/fc-lang/zh_mo.orth
index fe70977d7..1b68dc0e8 100644
--- a/fontconfig/fc-lang/zh_mo.orth
+++ b/fontconfig/fc-lang/zh_mo.orth
@@ -1,32 +1,32 @@
-#
-# fontconfig/fc-lang/zh_mo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese in Macau (ZH-MO)
-#
-# from Abel Cheung:
-#
-# a majority of Macau people speak Cantonese too, and also uses additional
-# traditional Chinese chars from Hong Kong (there are already some place names
-# that can't be represented in just chars used in Taiwan).
-#
-include zh_hk.orth
+#
+# fontconfig/fc-lang/zh_mo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese in Macau (ZH-MO)
+#
+# from Abel Cheung:
+#
+# a majority of Macau people speak Cantonese too, and also uses additional
+# traditional Chinese chars from Hong Kong (there are already some place names
+# that can't be represented in just chars used in Taiwan).
+#
+include zh_hk.orth
diff --git a/fontconfig/fc-lang/zh_sg.orth b/fontconfig/fc-lang/zh_sg.orth
index 01919158f..e69c38023 100644
--- a/fontconfig/fc-lang/zh_sg.orth
+++ b/fontconfig/fc-lang/zh_sg.orth
@@ -1,27 +1,27 @@
-#
-# fontconfig/fc-lang/zh_sg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese in Singapore (ZH-SG)
-#
-# Just use GB2312 as for ZH-CN
-include zh_cn.orth
+#
+# fontconfig/fc-lang/zh_sg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese in Singapore (ZH-SG)
+#
+# Just use GB2312 as for ZH-CN
+include zh_cn.orth
diff --git a/fontconfig/fc-lang/zh_tw.orth b/fontconfig/fc-lang/zh_tw.orth
index a052bfde1..8b88b03ce 100644
--- a/fontconfig/fc-lang/zh_tw.orth
+++ b/fontconfig/fc-lang/zh_tw.orth
@@ -1,13105 +1,13105 @@
-#
-# fontconfig/fc-lang/zh_tw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese (traditional) ZH-TW
-#
-# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs
-#
-#0x3000 # ideographic space
-#0x3001 # ideographic comma
-#0x3002 # ideographic full stop
-#0x3003 # ditto mark
-#0x3005 # ideographic iteration mark
-#0x3021 # Suzhou numeral 1
-#0x3022 # Suzhou numeral 2
-#0x3023 # Suzhou numeral 3
-#0x3024 # Suzhou numeral 4
-#0x3025 # Suzhou numeral 5
-#0x3026 # Suzhou numeral 6
-#0x3027 # Suzhou numeral 7
-#0x3028 # Suzhou numeral 8
-#0x3029 # Suzhou numeral 9
-# Han
-0x4E00
-0x4E01
-0x4E03
-0x4E07
-0x4E08
-0x4E09
-0x4E0A
-0x4E0B
-0x4E0C
-0x4E0D
-0x4E0E
-0x4E0F
-0x4E10
-0x4E11
-0x4E14
-0x4E15
-0x4E16
-0x4E18
-0x4E19
-0x4E1E
-0x4E1F
-0x4E26
-0x4E2B
-0x4E2D
-0x4E2E
-0x4E30
-0x4E31
-0x4E32
-0x4E33
-0x4E38
-0x4E39
-0x4E3B
-0x4E3C
-0x4E42
-0x4E43
-0x4E45
-0x4E47
-0x4E48
-0x4E4B
-0x4E4D
-0x4E4E
-0x4E4F
-0x4E52
-0x4E53
-0x4E56
-0x4E58
-0x4E59
-0x4E5C
-0x4E5D
-0x4E5E
-0x4E5F
-0x4E69
-0x4E73
-0x4E7E
-0x4E7F
-0x4E82
-0x4E83
-0x4E84
-0x4E86
-0x4E88
-0x4E8B
-0x4E8C
-0x4E8D
-0x4E8E
-0x4E91
-0x4E92
-0x4E93
-0x4E94
-0x4E95
-0x4E99
-0x4E9B
-0x4E9E
-0x4E9F
-0x4EA1
-0x4EA2
-0x4EA4
-0x4EA5
-0x4EA6
-0x4EA8
-0x4EAB
-0x4EAC
-0x4EAD
-0x4EAE
-0x4EB3
-0x4EB6
-0x4EB9
-0x4EBA
-0x4EC0
-0x4EC1
-0x4EC2
-0x4EC3
-0x4EC4
-0x4EC6
-0x4EC7
-0x4EC8
-0x4EC9
-0x4ECA
-0x4ECB
-0x4ECD
-0x4ED4
-0x4ED5
-0x4ED6
-0x4ED7
-0x4ED8
-0x4ED9
-0x4EDA
-0x4EDC
-0x4EDD
-0x4EDE
-0x4EDF
-0x4EE1
-0x4EE3
-0x4EE4
-0x4EE5
-0x4EE8
-0x4EE9
-0x4EF0
-0x4EF1
-0x4EF2
-0x4EF3
-0x4EF4
-0x4EF5
-0x4EF6
-0x4EF7
-0x4EFB
-0x4EFD
-0x4EFF
-0x4F00
-0x4F01
-0x4F02
-0x4F04
-0x4F05
-0x4F08
-0x4F09
-0x4F0A
-0x4F0B
-0x4F0D
-0x4F0E
-0x4F0F
-0x4F10
-0x4F11
-0x4F12
-0x4F13
-0x4F14
-0x4F15
-0x4F18
-0x4F19
-0x4F1D
-0x4F22
-0x4F2C
-0x4F2D
-0x4F2F
-0x4F30
-0x4F33
-0x4F34
-0x4F36
-0x4F38
-0x4F3A
-0x4F3B
-0x4F3C
-0x4F3D
-0x4F3E
-0x4F3F
-0x4F41
-0x4F43
-0x4F46
-0x4F47
-0x4F48
-0x4F49
-0x4F4C
-0x4F4D
-0x4F4E
-0x4F4F
-0x4F50
-0x4F51
-0x4F52
-0x4F53
-0x4F54
-0x4F55
-0x4F56
-0x4F57
-0x4F58
-0x4F59
-0x4F5A
-0x4F5B
-0x4F5C
-0x4F5D
-0x4F5E
-0x4F5F
-0x4F60
-0x4F61
-0x4F62
-0x4F63
-0x4F64
-0x4F67
-0x4F69
-0x4F6A
-0x4F6B
-0x4F6C
-0x4F6E
-0x4F6F
-0x4F70
-0x4F73
-0x4F74
-0x4F75
-0x4F76
-0x4F77
-0x4F78
-0x4F79
-0x4F7A
-0x4F7B
-0x4F7C
-0x4F7D
-0x4F7E
-0x4F7F
-0x4F80
-0x4F81
-0x4F82
-0x4F83
-0x4F84
-0x4F85
-0x4F86
-0x4F87
-0x4F88
-0x4F89
-0x4F8B
-0x4F8D
-0x4F8F
-0x4F90
-0x4F91
-0x4F92
-0x4F94
-0x4F95
-0x4F96
-0x4F97
-0x4F98
-0x4F9A
-0x4F9B
-0x4F9C
-0x4F9D
-0x4F9E
-0x4FAE
-0x4FAF
-0x4FB2
-0x4FB3
-0x4FB5
-0x4FB6
-0x4FB7
-0x4FB9
-0x4FBA
-0x4FBB
-0x4FBF
-0x4FC0
-0x4FC1
-0x4FC2
-0x4FC3
-0x4FC4
-0x4FC5
-0x4FC7
-0x4FC9
-0x4FCA
-0x4FCB
-0x4FCD
-0x4FCE
-0x4FCF
-0x4FD0
-0x4FD1
-0x4FD3
-0x4FD4
-0x4FD6
-0x4FD7
-0x4FD8
-0x4FD9
-0x4FDA
-0x4FDB
-0x4FDC
-0x4FDD
-0x4FDE
-0x4FDF
-0x4FE0
-0x4FE1
-0x4FEC
-0x4FEE
-0x4FEF
-0x4FF1
-0x4FF3
-0x4FF4
-0x4FF5
-0x4FF6
-0x4FF7
-0x4FF8
-0x4FFA
-0x4FFE
-0x5000
-0x5005
-0x5006
-0x5007
-0x5009
-0x500B
-0x500C
-0x500D
-0x500E
-0x500F
-0x5011
-0x5012
-0x5013
-0x5014
-0x5015
-0x5016
-0x5017
-0x5018
-0x5019
-0x501A
-0x501B
-0x501C
-0x501E
-0x501F
-0x5020
-0x5021
-0x5022
-0x5023
-0x5025
-0x5026
-0x5027
-0x5028
-0x5029
-0x502A
-0x502B
-0x502C
-0x502D
-0x502F
-0x5030
-0x5031
-0x5033
-0x5035
-0x5037
-0x503C
-0x5040
-0x5041
-0x5043
-0x5045
-0x5046
-0x5047
-0x5048
-0x5049
-0x504A
-0x504B
-0x504C
-0x504D
-0x504E
-0x504F
-0x5051
-0x5053
-0x5055
-0x5057
-0x505A
-0x505B
-0x505C
-0x505D
-0x505E
-0x505F
-0x5060
-0x5061
-0x5062
-0x5063
-0x5064
-0x5065
-0x5068
-0x5069
-0x506A
-0x506B
-0x506D
-0x506E
-0x506F
-0x5070
-0x5072
-0x5073
-0x5074
-0x5075
-0x5076
-0x5077
-0x507A
-0x507D
-0x5080
-0x5082
-0x5083
-0x5085
-0x5087
-0x508B
-0x508C
-0x508D
-0x508E
-0x5091
-0x5092
-0x5094
-0x5095
-0x5096
-0x5098
-0x5099
-0x509A
-0x509B
-0x509C
-0x509D
-0x509E
-0x50A2
-0x50A3
-0x50AC
-0x50AD
-0x50AE
-0x50AF
-0x50B0
-0x50B1
-0x50B2
-0x50B3
-0x50B4
-0x50B5
-0x50B6
-0x50B7
-0x50B8
-0x50BA
-0x50BB
-0x50BD
-0x50BE
-0x50BF
-0x50C1
-0x50C2
-0x50C4
-0x50C5
-0x50C6
-0x50C7
-0x50C8
-0x50C9
-0x50CA
-0x50CB
-0x50CE
-0x50CF
-0x50D1
-0x50D3
-0x50D4
-0x50D5
-0x50D6
-0x50D7
-0x50DA
-0x50DB
-0x50DD
-0x50E0
-0x50E3
-0x50E4
-0x50E5
-0x50E6
-0x50E7
-0x50E8
-0x50E9
-0x50EA
-0x50EC
-0x50ED
-0x50EE
-0x50EF
-0x50F0
-0x50F1
-0x50F3
-0x50F5
-0x50F6
-0x50F8
-0x50F9
-0x50FB
-0x50FD
-0x50FE
-0x50FF
-0x5100
-0x5102
-0x5103
-0x5104
-0x5105
-0x5106
-0x5107
-0x5108
-0x5109
-0x510A
-0x510B
-0x510C
-0x5110
-0x5111
-0x5112
-0x5113
-0x5114
-0x5115
-0x5117
-0x5118
-0x511A
-0x511C
-0x511F
-0x5120
-0x5121
-0x5122
-0x5124
-0x5125
-0x5126
-0x5129
-0x512A
-0x512D
-0x512E
-0x5130
-0x5131
-0x5132
-0x5133
-0x5134
-0x5135
-0x5137
-0x5138
-0x5139
-0x513A
-0x513B
-0x513C
-0x513D
-0x513F
-0x5140
-0x5141
-0x5143
-0x5144
-0x5145
-0x5146
-0x5147
-0x5148
-0x5149
-0x514B
-0x514C
-0x514D
-0x5152
-0x5154
-0x5155
-0x5157
-0x5159
-0x515A
-0x515B
-0x515C
-0x515D
-0x515E
-0x515F
-0x5161
-0x5162
-0x5163
-0x5165
-0x5167
-0x5168
-0x5169
-0x516B
-0x516C
-0x516D
-0x516E
-0x5171
-0x5175
-0x5176
-0x5177
-0x5178
-0x517C
-0x5180
-0x5187
-0x5189
-0x518A
-0x518D
-0x518F
-0x5191
-0x5192
-0x5193
-0x5194
-0x5195
-0x5197
-0x5198
-0x519E
-0x51A0
-0x51A2
-0x51A4
-0x51A5
-0x51AA
-0x51AC
-0x51B0
-0x51B1
-0x51B6
-0x51B7
-0x51B9
-0x51BC
-0x51BD
-0x51BE
-0x51C4
-0x51C5
-0x51C6
-0x51C8
-0x51CA
-0x51CB
-0x51CC
-0x51CD
-0x51CE
-0x51D0
-0x51D4
-0x51D7
-0x51D8
-0x51DC
-0x51DD
-0x51DE
-0x51E0
-0x51E1
-0x51F0
-0x51F1
-0x51F3
-0x51F5
-0x51F6
-0x51F8
-0x51F9
-0x51FA
-0x51FD
-0x5200
-0x5201
-0x5203
-0x5206
-0x5207
-0x5208
-0x5209
-0x520A
-0x520C
-0x520E
-0x5210
-0x5211
-0x5212
-0x5213
-0x5216
-0x5217
-0x521C
-0x521D
-0x521E
-0x5221
-0x5224
-0x5225
-0x5228
-0x5229
-0x522A
-0x522E
-0x5230
-0x5231
-0x5232
-0x5233
-0x5235
-0x5236
-0x5237
-0x5238
-0x523A
-0x523B
-0x5241
-0x5243
-0x5244
-0x5246
-0x5247
-0x5249
-0x524A
-0x524B
-0x524C
-0x524D
-0x524E
-0x5252
-0x5254
-0x5255
-0x5256
-0x525A
-0x525B
-0x525C
-0x525D
-0x525E
-0x525F
-0x5261
-0x5262
-0x5269
-0x526A
-0x526B
-0x526C
-0x526D
-0x526E
-0x526F
-0x5272
-0x5274
-0x5275
-0x5277
-0x5278
-0x527A
-0x527B
-0x527C
-0x527D
-0x527F
-0x5280
-0x5281
-0x5282
-0x5283
-0x5284
-0x5287
-0x5288
-0x5289
-0x528A
-0x528B
-0x528C
-0x528D
-0x5291
-0x5293
-0x5296
-0x5297
-0x5298
-0x5299
-0x529B
-0x529F
-0x52A0
-0x52A3
-0x52A6
-0x52A9
-0x52AA
-0x52AB
-0x52AC
-0x52AD
-0x52AE
-0x52BB
-0x52BC
-0x52BE
-0x52C0
-0x52C1
-0x52C2
-0x52C3
-0x52C7
-0x52C9
-0x52CD
-0x52D2
-0x52D3
-0x52D5
-0x52D6
-0x52D7
-0x52D8
-0x52D9
-0x52DB
-0x52DD
-0x52DE
-0x52DF
-0x52E2
-0x52E3
-0x52E4
-0x52E6
-0x52E9
-0x52EB
-0x52EF
-0x52F0
-0x52F1
-0x52F3
-0x52F4
-0x52F5
-0x52F7
-0x52F8
-0x52FA
-0x52FB
-0x52FC
-0x52FE
-0x52FF
-0x5305
-0x5306
-0x5308
-0x5309
-0x530A
-0x530B
-0x530D
-0x530E
-0x530F
-0x5310
-0x5311
-0x5312
-0x5315
-0x5316
-0x5317
-0x5319
-0x531A
-0x531C
-0x531D
-0x531F
-0x5320
-0x5321
-0x5322
-0x5323
-0x532A
-0x532D
-0x532F
-0x5330
-0x5331
-0x5334
-0x5337
-0x5339
-0x533C
-0x533D
-0x533E
-0x533F
-0x5340
-0x5341
-0x5343
-0x5344
-0x5345
-0x5347
-0x5348
-0x5349
-0x534A
-0x534C
-0x534D
-0x5351
-0x5352
-0x5353
-0x5354
-0x5357
-0x535A
-0x535C
-0x535E
-0x5360
-0x5361
-0x5363
-0x5366
-0x536C
-0x536E
-0x536F
-0x5370
-0x5371
-0x5372
-0x5373
-0x5375
-0x5377
-0x5378
-0x5379
-0x537B
-0x537C
-0x537F
-0x5382
-0x5384
-0x538A
-0x538E
-0x538F
-0x5392
-0x5394
-0x5396
-0x5397
-0x5398
-0x5399
-0x539A
-0x539C
-0x539D
-0x539E
-0x539F
-0x53A4
-0x53A5
-0x53A7
-0x53AC
-0x53AD
-0x53B2
-0x53B4
-0x53B9
-0x53BB
-0x53C3
-0x53C8
-0x53C9
-0x53CA
-0x53CB
-0x53CD
-0x53D4
-0x53D6
-0x53D7
-0x53DB
-0x53DF
-0x53E1
-0x53E2
-0x53E3
-0x53E4
-0x53E5
-0x53E6
-0x53E8
-0x53E9
-0x53EA
-0x53EB
-0x53EC
-0x53ED
-0x53EE
-0x53EF
-0x53F0
-0x53F1
-0x53F2
-0x53F3
-0x53F5
-0x53F8
-0x53FB
-0x53FC
-0x5401
-0x5403
-0x5404
-0x5406
-0x5407
-0x5408
-0x5409
-0x540A
-0x540B
-0x540C
-0x540D
-0x540E
-0x540F
-0x5410
-0x5411
-0x5412
-0x5418
-0x5419
-0x541B
-0x541C
-0x541D
-0x541E
-0x541F
-0x5420
-0x5424
-0x5425
-0x5426
-0x5427
-0x5428
-0x5429
-0x542A
-0x542B
-0x542C
-0x542D
-0x542E
-0x5430
-0x5431
-0x5433
-0x5435
-0x5436
-0x5437
-0x5438
-0x5439
-0x543B
-0x543C
-0x543D
-0x543E
-0x5440
-0x5441
-0x5442
-0x5443
-0x5445
-0x5446
-0x5447
-0x5448
-0x544A
-0x544E
-0x544F
-0x5454
-0x5460
-0x5461
-0x5462
-0x5463
-0x5464
-0x5465
-0x5466
-0x5467
-0x5468
-0x546B
-0x546C
-0x546F
-0x5470
-0x5471
-0x5472
-0x5473
-0x5474
-0x5475
-0x5476
-0x5477
-0x5478
-0x547A
-0x547B
-0x547C
-0x547D
-0x547E
-0x547F
-0x5480
-0x5481
-0x5482
-0x5484
-0x5486
-0x5487
-0x5488
-0x548B
-0x548C
-0x548D
-0x548E
-0x5490
-0x5491
-0x5492
-0x5495
-0x5496
-0x5498
-0x549A
-0x54A0
-0x54A1
-0x54A2
-0x54A5
-0x54A6
-0x54A7
-0x54A8
-0x54A9
-0x54AA
-0x54AB
-0x54AC
-0x54AD
-0x54AE
-0x54AF
-0x54B0
-0x54B1
-0x54B3
-0x54B6
-0x54B7
-0x54B8
-0x54BA
-0x54BB
-0x54BC
-0x54BD
-0x54BE
-0x54BF
-0x54C0
-0x54C1
-0x54C2
-0x54C3
-0x54C4
-0x54C5
-0x54C6
-0x54C7
-0x54C8
-0x54C9
-0x54CE
-0x54CF
-0x54D6
-0x54DE
-0x54E0
-0x54E1
-0x54E2
-0x54E4
-0x54E5
-0x54E6
-0x54E7
-0x54E8
-0x54E9
-0x54EA
-0x54EB
-0x54ED
-0x54EE
-0x54F1
-0x54F2
-0x54F3
-0x54F7
-0x54F8
-0x54FA
-0x54FB
-0x54FC
-0x54FD
-0x54FF
-0x5501
-0x5503
-0x5504
-0x5505
-0x5506
-0x5507
-0x5508
-0x5509
-0x550A
-0x550B
-0x550C
-0x550E
-0x550F
-0x5510
-0x5511
-0x5512
-0x5514
-0x5517
-0x551A
-0x5526
-0x5527
-0x552A
-0x552C
-0x552D
-0x552E
-0x552F
-0x5530
-0x5531
-0x5532
-0x5533
-0x5534
-0x5535
-0x5536
-0x5537
-0x5538
-0x5539
-0x553B
-0x553C
-0x553E
-0x5540
-0x5541
-0x5543
-0x5544
-0x5545
-0x5546
-0x5548
-0x554A
-0x554B
-0x554D
-0x554E
-0x554F
-0x5550
-0x5551
-0x5552
-0x5555
-0x5556
-0x5557
-0x555C
-0x555E
-0x555F
-0x5561
-0x5562
-0x5563
-0x5564
-0x5565
-0x5566
-0x556A
-0x5575
-0x5576
-0x5577
-0x557B
-0x557C
-0x557D
-0x557E
-0x557F
-0x5580
-0x5581
-0x5582
-0x5583
-0x5584
-0x5587
-0x5588
-0x5589
-0x558A
-0x558B
-0x558C
-0x558D
-0x558E
-0x558F
-0x5591
-0x5592
-0x5593
-0x5594
-0x5595
-0x5598
-0x5599
-0x559A
-0x559C
-0x559D
-0x559F
-0x55A1
-0x55A2
-0x55A3
-0x55A4
-0x55A5
-0x55A6
-0x55A7
-0x55A8
-0x55AA
-0x55AB
-0x55AC
-0x55AD
-0x55AE
-0x55B1
-0x55B2
-0x55B3
-0x55B5
-0x55BB
-0x55BF
-0x55C0
-0x55C2
-0x55C3
-0x55C4
-0x55C5
-0x55C6
-0x55C7
-0x55C8
-0x55C9
-0x55CA
-0x55CB
-0x55CC
-0x55CD
-0x55CE
-0x55CF
-0x55D0
-0x55D1
-0x55D2
-0x55D3
-0x55D4
-0x55D5
-0x55D6
-0x55D9
-0x55DA
-0x55DB
-0x55DC
-0x55DD
-0x55DF
-0x55E1
-0x55E2
-0x55E3
-0x55E4
-0x55E5
-0x55E6
-0x55E7
-0x55E8
-0x55E9
-0x55EF
-0x55F2
-0x55F6
-0x55F7
-0x55F9
-0x55FA
-0x55FC
-0x55FD
-0x55FE
-0x55FF
-0x5600
-0x5601
-0x5602
-0x5604
-0x5606
-0x5608
-0x5609
-0x560C
-0x560D
-0x560E
-0x560F
-0x5610
-0x5612
-0x5613
-0x5614
-0x5615
-0x5616
-0x5617
-0x561B
-0x561C
-0x561D
-0x561F
-0x5627
-0x5629
-0x562A
-0x562C
-0x562E
-0x562F
-0x5630
-0x5632
-0x5633
-0x5634
-0x5635
-0x5636
-0x5638
-0x5639
-0x563A
-0x563B
-0x563D
-0x563E
-0x563F
-0x5640
-0x5641
-0x5642
-0x5645
-0x5646
-0x5648
-0x5649
-0x564A
-0x564C
-0x564E
-0x5653
-0x5657
-0x5658
-0x5659
-0x565A
-0x565E
-0x5660
-0x5662
-0x5663
-0x5664
-0x5665
-0x5666
-0x5668
-0x5669
-0x566A
-0x566B
-0x566C
-0x566D
-0x566E
-0x566F
-0x5670
-0x5671
-0x5672
-0x5673
-0x5674
-0x5676
-0x5677
-0x5678
-0x5679
-0x567E
-0x567F
-0x5680
-0x5681
-0x5682
-0x5683
-0x5684
-0x5685
-0x5686
-0x5687
-0x568C
-0x568D
-0x568E
-0x568F
-0x5690
-0x5693
-0x5695
-0x5697
-0x5698
-0x5699
-0x569A
-0x569C
-0x569D
-0x56A5
-0x56A6
-0x56A7
-0x56A8
-0x56AA
-0x56AB
-0x56AC
-0x56AD
-0x56AE
-0x56B2
-0x56B3
-0x56B4
-0x56B5
-0x56B6
-0x56B7
-0x56BC
-0x56BD
-0x56BE
-0x56C0
-0x56C1
-0x56C2
-0x56C3
-0x56C5
-0x56C6
-0x56C8
-0x56C9
-0x56CA
-0x56CB
-0x56CC
-0x56CD
-0x56D1
-0x56D3
-0x56D4
-0x56D7
-0x56DA
-0x56DB
-0x56DD
-0x56DE
-0x56DF
-0x56E0
-0x56E1
-0x56E4
-0x56E5
-0x56E7
-0x56EA
-0x56EB
-0x56EE
-0x56F0
-0x56F7
-0x56F9
-0x56FA
-0x56FF
-0x5701
-0x5702
-0x5703
-0x5704
-0x5707
-0x5708
-0x5709
-0x570A
-0x570B
-0x570C
-0x570D
-0x5712
-0x5713
-0x5714
-0x5716
-0x5718
-0x571A
-0x571B
-0x571C
-0x571E
-0x571F
-0x5720
-0x5722
-0x5723
-0x5728
-0x5729
-0x572A
-0x572C
-0x572D
-0x572E
-0x572F
-0x5730
-0x5733
-0x5734
-0x573B
-0x573E
-0x5740
-0x5741
-0x5745
-0x5747
-0x5749
-0x574A
-0x574B
-0x574C
-0x574D
-0x574E
-0x574F
-0x5750
-0x5751
-0x5752
-0x5761
-0x5762
-0x5764
-0x5766
-0x5768
-0x5769
-0x576A
-0x576B
-0x576D
-0x576F
-0x5770
-0x5771
-0x5772
-0x5773
-0x5774
-0x5775
-0x5776
-0x5777
-0x577B
-0x577C
-0x577D
-0x5780
-0x5782
-0x5783
-0x578B
-0x578C
-0x578F
-0x5793
-0x5794
-0x5795
-0x5797
-0x5798
-0x5799
-0x579A
-0x579B
-0x579D
-0x579E
-0x579F
-0x57A0
-0x57A2
-0x57A3
-0x57A4
-0x57A5
-0x57AE
-0x57B5
-0x57B6
-0x57B8
-0x57B9
-0x57BA
-0x57BC
-0x57BD
-0x57BF
-0x57C1
-0x57C2
-0x57C3
-0x57C6
-0x57C7
-0x57CB
-0x57CC
-0x57CE
-0x57CF
-0x57D0
-0x57D2
-0x57D4
-0x57D5
-0x57DC
-0x57DF
-0x57E0
-0x57E1
-0x57E2
-0x57E3
-0x57E4
-0x57E5
-0x57E7
-0x57E9
-0x57EC
-0x57ED
-0x57EE
-0x57F0
-0x57F1
-0x57F2
-0x57F3
-0x57F4
-0x57F5
-0x57F6
-0x57F7
-0x57F8
-0x57F9
-0x57FA
-0x57FB
-0x57FC
-0x57FD
-0x5800
-0x5801
-0x5802
-0x5804
-0x5805
-0x5806
-0x5807
-0x5808
-0x5809
-0x580A
-0x580B
-0x580C
-0x580D
-0x580E
-0x5810
-0x5814
-0x5819
-0x581B
-0x581C
-0x581D
-0x581E
-0x5820
-0x5821
-0x5823
-0x5824
-0x5825
-0x5827
-0x5828
-0x5829
-0x582A
-0x582C
-0x582D
-0x582E
-0x582F
-0x5830
-0x5831
-0x5832
-0x5833
-0x5834
-0x5835
-0x5836
-0x5837
-0x5838
-0x5839
-0x583B
-0x583D
-0x583F
-0x5848
-0x5849
-0x584A
-0x584B
-0x584C
-0x584D
-0x584E
-0x584F
-0x5851
-0x5852
-0x5853
-0x5854
-0x5855
-0x5857
-0x5858
-0x5859
-0x585A
-0x585B
-0x585D
-0x585E
-0x5862
-0x5863
-0x5864
-0x5865
-0x5868
-0x586B
-0x586D
-0x586F
-0x5871
-0x5874
-0x5875
-0x5876
-0x5879
-0x587A
-0x587B
-0x587C
-0x587D
-0x587E
-0x587F
-0x5880
-0x5881
-0x5882
-0x5883
-0x5885
-0x5886
-0x5887
-0x5888
-0x5889
-0x588A
-0x588B
-0x588E
-0x588F
-0x5890
-0x5891
-0x5893
-0x5894
-0x5898
-0x589C
-0x589D
-0x589E
-0x589F
-0x58A0
-0x58A1
-0x58A3
-0x58A5
-0x58A6
-0x58A8
-0x58A9
-0x58AB
-0x58AC
-0x58AE
-0x58AF
-0x58B1
-0x58B3
-0x58BA
-0x58BC
-0x58BD
-0x58BE
-0x58BF
-0x58C1
-0x58C2
-0x58C5
-0x58C6
-0x58C7
-0x58C8
-0x58C9
-0x58CE
-0x58CF
-0x58D1
-0x58D2
-0x58D3
-0x58D4
-0x58D5
-0x58D6
-0x58D8
-0x58D9
-0x58DA
-0x58DB
-0x58DD
-0x58DE
-0x58DF
-0x58E2
-0x58E3
-0x58E4
-0x58E7
-0x58E8
-0x58E9
-0x58EB
-0x58EC
-0x58EF
-0x58F4
-0x58F9
-0x58FA
-0x58FC
-0x58FD
-0x58FE
-0x58FF
-0x5903
-0x5906
-0x590C
-0x590D
-0x590E
-0x590F
-0x5912
-0x5914
-0x5915
-0x5916
-0x5917
-0x5919
-0x591A
-0x591C
-0x5920
-0x5922
-0x5924
-0x5925
-0x5927
-0x5929
-0x592A
-0x592B
-0x592C
-0x592D
-0x592E
-0x592F
-0x5931
-0x5937
-0x5938
-0x593C
-0x593E
-0x5940
-0x5944
-0x5945
-0x5947
-0x5948
-0x5949
-0x594A
-0x594E
-0x594F
-0x5950
-0x5951
-0x5953
-0x5954
-0x5955
-0x5957
-0x5958
-0x595A
-0x595C
-0x5960
-0x5961
-0x5962
-0x5967
-0x5969
-0x596A
-0x596B
-0x596D
-0x596E
-0x5970
-0x5971
-0x5972
-0x5973
-0x5974
-0x5976
-0x5977
-0x5978
-0x5979
-0x597B
-0x597C
-0x597D
-0x597E
-0x597F
-0x5980
-0x5981
-0x5982
-0x5983
-0x5984
-0x5985
-0x598A
-0x598D
-0x598E
-0x598F
-0x5990
-0x5992
-0x5993
-0x5996
-0x5997
-0x5998
-0x5999
-0x599D
-0x599E
-0x59A0
-0x59A1
-0x59A2
-0x59A3
-0x59A4
-0x59A5
-0x59A6
-0x59A7
-0x59A8
-0x59AE
-0x59AF
-0x59B1
-0x59B2
-0x59B3
-0x59B4
-0x59B5
-0x59B6
-0x59B9
-0x59BA
-0x59BB
-0x59BC
-0x59BD
-0x59BE
-0x59C0
-0x59C1
-0x59C3
-0x59C5
-0x59C6
-0x59C7
-0x59C8
-0x59CA
-0x59CB
-0x59CC
-0x59CD
-0x59CE
-0x59CF
-0x59D0
-0x59D1
-0x59D2
-0x59D3
-0x59D4
-0x59D6
-0x59D8
-0x59DA
-0x59DB
-0x59DC
-0x59DD
-0x59DE
-0x59E0
-0x59E1
-0x59E3
-0x59E4
-0x59E5
-0x59E6
-0x59E8
-0x59E9
-0x59EA
-0x59EC
-0x59ED
-0x59EE
-0x59F1
-0x59F2
-0x59F3
-0x59F4
-0x59F5
-0x59F6
-0x59F7
-0x59FA
-0x59FB
-0x59FC
-0x59FD
-0x59FE
-0x59FF
-0x5A00
-0x5A01
-0x5A03
-0x5A09
-0x5A0A
-0x5A0C
-0x5A0F
-0x5A11
-0x5A13
-0x5A15
-0x5A16
-0x5A17
-0x5A18
-0x5A19
-0x5A1B
-0x5A1C
-0x5A1E
-0x5A1F
-0x5A20
-0x5A23
-0x5A25
-0x5A29
-0x5A2D
-0x5A2E
-0x5A33
-0x5A35
-0x5A36
-0x5A37
-0x5A38
-0x5A39
-0x5A3C
-0x5A3E
-0x5A40
-0x5A41
-0x5A42
-0x5A43
-0x5A44
-0x5A46
-0x5A47
-0x5A48
-0x5A49
-0x5A4A
-0x5A4C
-0x5A4D
-0x5A50
-0x5A51
-0x5A52
-0x5A53
-0x5A55
-0x5A56
-0x5A57
-0x5A58
-0x5A5A
-0x5A5B
-0x5A5C
-0x5A5D
-0x5A5E
-0x5A5F
-0x5A60
-0x5A62
-0x5A64
-0x5A65
-0x5A66
-0x5A67
-0x5A69
-0x5A6A
-0x5A6C
-0x5A6D
-0x5A70
-0x5A77
-0x5A78
-0x5A7A
-0x5A7B
-0x5A7C
-0x5A7D
-0x5A7F
-0x5A83
-0x5A84
-0x5A8A
-0x5A8B
-0x5A8C
-0x5A8E
-0x5A8F
-0x5A90
-0x5A92
-0x5A93
-0x5A94
-0x5A95
-0x5A97
-0x5A9A
-0x5A9B
-0x5A9C
-0x5A9D
-0x5A9E
-0x5A9F
-0x5AA2
-0x5AA5
-0x5AA6
-0x5AA7
-0x5AA9
-0x5AAC
-0x5AAE
-0x5AAF
-0x5AB0
-0x5AB1
-0x5AB2
-0x5AB3
-0x5AB4
-0x5AB5
-0x5AB6
-0x5AB7
-0x5AB8
-0x5AB9
-0x5ABA
-0x5ABB
-0x5ABC
-0x5ABD
-0x5ABE
-0x5ABF
-0x5AC0
-0x5AC1
-0x5AC2
-0x5AC4
-0x5AC6
-0x5AC7
-0x5AC8
-0x5AC9
-0x5ACA
-0x5ACB
-0x5ACC
-0x5ACD
-0x5AD5
-0x5AD6
-0x5AD7
-0x5AD8
-0x5AD9
-0x5ADA
-0x5ADB
-0x5ADC
-0x5ADD
-0x5ADE
-0x5ADF
-0x5AE0
-0x5AE1
-0x5AE2
-0x5AE3
-0x5AE5
-0x5AE6
-0x5AE8
-0x5AE9
-0x5AEA
-0x5AEB
-0x5AEC
-0x5AED
-0x5AEE
-0x5AF3
-0x5AF4
-0x5AF5
-0x5AF6
-0x5AF7
-0x5AF8
-0x5AF9
-0x5AFB
-0x5AFD
-0x5AFF
-0x5B01
-0x5B02
-0x5B03
-0x5B05
-0x5B07
-0x5B08
-0x5B09
-0x5B0B
-0x5B0C
-0x5B0F
-0x5B10
-0x5B13
-0x5B14
-0x5B16
-0x5B17
-0x5B19
-0x5B1A
-0x5B1B
-0x5B1D
-0x5B1E
-0x5B20
-0x5B21
-0x5B23
-0x5B24
-0x5B25
-0x5B26
-0x5B27
-0x5B28
-0x5B2A
-0x5B2C
-0x5B2D
-0x5B2E
-0x5B2F
-0x5B30
-0x5B32
-0x5B34
-0x5B38
-0x5B3C
-0x5B3D
-0x5B3E
-0x5B3F
-0x5B40
-0x5B43
-0x5B45
-0x5B47
-0x5B48
-0x5B4B
-0x5B4C
-0x5B4D
-0x5B4E
-0x5B50
-0x5B51
-0x5B53
-0x5B54
-0x5B55
-0x5B56
-0x5B57
-0x5B58
-0x5B5A
-0x5B5B
-0x5B5C
-0x5B5D
-0x5B5F
-0x5B62
-0x5B63
-0x5B64
-0x5B65
-0x5B69
-0x5B6B
-0x5B6C
-0x5B6E
-0x5B70
-0x5B71
-0x5B72
-0x5B73
-0x5B75
-0x5B77
-0x5B78
-0x5B7A
-0x5B7B
-0x5B7D
-0x5B7F
-0x5B81
-0x5B83
-0x5B84
-0x5B85
-0x5B87
-0x5B88
-0x5B89
-0x5B8B
-0x5B8C
-0x5B8E
-0x5B8F
-0x5B92
-0x5B93
-0x5B95
-0x5B97
-0x5B98
-0x5B99
-0x5B9A
-0x5B9B
-0x5B9C
-0x5BA2
-0x5BA3
-0x5BA4
-0x5BA5
-0x5BA6
-0x5BA7
-0x5BA8
-0x5BAC
-0x5BAD
-0x5BAE
-0x5BB0
-0x5BB3
-0x5BB4
-0x5BB5
-0x5BB6
-0x5BB8
-0x5BB9
-0x5BBF
-0x5BC0
-0x5BC1
-0x5BC2
-0x5BC4
-0x5BC5
-0x5BC6
-0x5BC7
-0x5BCA
-0x5BCB
-0x5BCC
-0x5BCD
-0x5BCE
-0x5BD0
-0x5BD1
-0x5BD2
-0x5BD3
-0x5BD4
-0x5BD6
-0x5BD8
-0x5BD9
-0x5BDE
-0x5BDF
-0x5BE0
-0x5BE1
-0x5BE2
-0x5BE3
-0x5BE4
-0x5BE5
-0x5BE6
-0x5BE7
-0x5BE8
-0x5BE9
-0x5BEA
-0x5BEB
-0x5BEC
-0x5BEE
-0x5BEF
-0x5BF0
-0x5BF1
-0x5BF2
-0x5BF5
-0x5BF6
-0x5BF8
-0x5BFA
-0x5C01
-0x5C03
-0x5C04
-0x5C07
-0x5C08
-0x5C09
-0x5C0A
-0x5C0B
-0x5C0C
-0x5C0D
-0x5C0E
-0x5C0F
-0x5C10
-0x5C11
-0x5C12
-0x5C15
-0x5C16
-0x5C1A
-0x5C1F
-0x5C22
-0x5C24
-0x5C25
-0x5C28
-0x5C2A
-0x5C2C
-0x5C30
-0x5C31
-0x5C33
-0x5C37
-0x5C38
-0x5C39
-0x5C3A
-0x5C3B
-0x5C3C
-0x5C3E
-0x5C3F
-0x5C40
-0x5C41
-0x5C44
-0x5C45
-0x5C46
-0x5C47
-0x5C48
-0x5C4B
-0x5C4C
-0x5C4D
-0x5C4E
-0x5C4F
-0x5C50
-0x5C51
-0x5C54
-0x5C55
-0x5C56
-0x5C58
-0x5C59
-0x5C5C
-0x5C5D
-0x5C60
-0x5C62
-0x5C63
-0x5C64
-0x5C65
-0x5C67
-0x5C68
-0x5C69
-0x5C6A
-0x5C6C
-0x5C6D
-0x5C6E
-0x5C6F
-0x5C71
-0x5C73
-0x5C74
-0x5C79
-0x5C7A
-0x5C7B
-0x5C7C
-0x5C7E
-0x5C86
-0x5C88
-0x5C89
-0x5C8A
-0x5C8B
-0x5C8C
-0x5C8D
-0x5C8F
-0x5C90
-0x5C91
-0x5C92
-0x5C93
-0x5C94
-0x5C95
-0x5C9D
-0x5C9F
-0x5CA0
-0x5CA1
-0x5CA2
-0x5CA3
-0x5CA4
-0x5CA5
-0x5CA6
-0x5CA7
-0x5CA8
-0x5CA9
-0x5CAA
-0x5CAB
-0x5CAC
-0x5CAD
-0x5CAE
-0x5CAF
-0x5CB0
-0x5CB1
-0x5CB3
-0x5CB5
-0x5CB6
-0x5CB7
-0x5CB8
-0x5CC6
-0x5CC7
-0x5CC8
-0x5CC9
-0x5CCA
-0x5CCB
-0x5CCC
-0x5CCE
-0x5CCF
-0x5CD0
-0x5CD2
-0x5CD3
-0x5CD4
-0x5CD6
-0x5CD7
-0x5CD8
-0x5CD9
-0x5CDA
-0x5CDB
-0x5CDE
-0x5CDF
-0x5CE8
-0x5CEA
-0x5CEC
-0x5CED
-0x5CEE
-0x5CF0
-0x5CF1
-0x5CF4
-0x5CF6
-0x5CF7
-0x5CF8
-0x5CF9
-0x5CFB
-0x5CFD
-0x5CFF
-0x5D00
-0x5D01
-0x5D06
-0x5D07
-0x5D0B
-0x5D0C
-0x5D0D
-0x5D0E
-0x5D0F
-0x5D11
-0x5D12
-0x5D14
-0x5D16
-0x5D17
-0x5D19
-0x5D1A
-0x5D1B
-0x5D1D
-0x5D1E
-0x5D1F
-0x5D20
-0x5D22
-0x5D23
-0x5D24
-0x5D25
-0x5D26
-0x5D27
-0x5D28
-0x5D29
-0x5D2E
-0x5D30
-0x5D31
-0x5D32
-0x5D33
-0x5D34
-0x5D35
-0x5D36
-0x5D37
-0x5D38
-0x5D39
-0x5D3A
-0x5D3C
-0x5D3D
-0x5D3F
-0x5D40
-0x5D41
-0x5D42
-0x5D43
-0x5D45
-0x5D47
-0x5D49
-0x5D4A
-0x5D4B
-0x5D4C
-0x5D4E
-0x5D50
-0x5D51
-0x5D52
-0x5D55
-0x5D59
-0x5D5E
-0x5D62
-0x5D63
-0x5D65
-0x5D67
-0x5D68
-0x5D69
-0x5D6B
-0x5D6C
-0x5D6F
-0x5D71
-0x5D72
-0x5D77
-0x5D79
-0x5D7A
-0x5D7C
-0x5D7D
-0x5D7E
-0x5D7F
-0x5D80
-0x5D81
-0x5D82
-0x5D84
-0x5D86
-0x5D87
-0x5D88
-0x5D89
-0x5D8A
-0x5D8D
-0x5D92
-0x5D93
-0x5D94
-0x5D95
-0x5D97
-0x5D99
-0x5D9A
-0x5D9C
-0x5D9D
-0x5D9E
-0x5D9F
-0x5DA0
-0x5DA1
-0x5DA2
-0x5DA7
-0x5DA8
-0x5DA9
-0x5DAA
-0x5DAC
-0x5DAD
-0x5DAE
-0x5DAF
-0x5DB0
-0x5DB1
-0x5DB2
-0x5DB4
-0x5DB5
-0x5DB7
-0x5DB8
-0x5DBA
-0x5DBC
-0x5DBD
-0x5DC0
-0x5DC2
-0x5DC3
-0x5DC6
-0x5DC7
-0x5DC9
-0x5DCB
-0x5DCD
-0x5DCF
-0x5DD1
-0x5DD2
-0x5DD4
-0x5DD5
-0x5DD6
-0x5DD8
-0x5DDD
-0x5DDE
-0x5DDF
-0x5DE0
-0x5DE1
-0x5DE2
-0x5DE5
-0x5DE6
-0x5DE7
-0x5DE8
-0x5DEB
-0x5DEE
-0x5DF0
-0x5DF1
-0x5DF2
-0x5DF3
-0x5DF4
-0x5DF7
-0x5DF9
-0x5DFD
-0x5DFE
-0x5DFF
-0x5E02
-0x5E03
-0x5E04
-0x5E06
-0x5E0A
-0x5E0C
-0x5E0E
-0x5E11
-0x5E14
-0x5E15
-0x5E16
-0x5E17
-0x5E18
-0x5E19
-0x5E1A
-0x5E1B
-0x5E1D
-0x5E1F
-0x5E20
-0x5E21
-0x5E22
-0x5E23
-0x5E24
-0x5E25
-0x5E28
-0x5E29
-0x5E2B
-0x5E2D
-0x5E33
-0x5E34
-0x5E36
-0x5E37
-0x5E38
-0x5E3D
-0x5E3E
-0x5E40
-0x5E41
-0x5E43
-0x5E44
-0x5E45
-0x5E4A
-0x5E4B
-0x5E4C
-0x5E4D
-0x5E4E
-0x5E4F
-0x5E53
-0x5E54
-0x5E55
-0x5E57
-0x5E58
-0x5E59
-0x5E5B
-0x5E5C
-0x5E5D
-0x5E5F
-0x5E60
-0x5E61
-0x5E62
-0x5E63
-0x5E66
-0x5E67
-0x5E68
-0x5E69
-0x5E6A
-0x5E6B
-0x5E6C
-0x5E6D
-0x5E6E
-0x5E6F
-0x5E70
-0x5E72
-0x5E73
-0x5E74
-0x5E75
-0x5E76
-0x5E78
-0x5E79
-0x5E7B
-0x5E7C
-0x5E7D
-0x5E7E
-0x5E80
-0x5E82
-0x5E84
-0x5E87
-0x5E88
-0x5E89
-0x5E8A
-0x5E8B
-0x5E8C
-0x5E8D
-0x5E8F
-0x5E95
-0x5E96
-0x5E97
-0x5E9A
-0x5E9B
-0x5E9C
-0x5EA0
-0x5EA2
-0x5EA3
-0x5EA4
-0x5EA5
-0x5EA6
-0x5EA7
-0x5EA8
-0x5EAA
-0x5EAB
-0x5EAC
-0x5EAD
-0x5EAE
-0x5EB0
-0x5EB1
-0x5EB2
-0x5EB3
-0x5EB4
-0x5EB5
-0x5EB6
-0x5EB7
-0x5EB8
-0x5EB9
-0x5EBE
-0x5EC1
-0x5EC2
-0x5EC4
-0x5EC5
-0x5EC6
-0x5EC7
-0x5EC8
-0x5EC9
-0x5ECA
-0x5ECB
-0x5ECC
-0x5ECE
-0x5ED1
-0x5ED2
-0x5ED3
-0x5ED4
-0x5ED5
-0x5ED6
-0x5ED7
-0x5ED8
-0x5ED9
-0x5EDA
-0x5EDB
-0x5EDC
-0x5EDD
-0x5EDE
-0x5EDF
-0x5EE0
-0x5EE1
-0x5EE2
-0x5EE3
-0x5EE5
-0x5EE6
-0x5EE7
-0x5EE8
-0x5EE9
-0x5EEC
-0x5EEE
-0x5EEF
-0x5EF1
-0x5EF2
-0x5EF3
-0x5EF6
-0x5EF7
-0x5EFA
-0x5EFE
-0x5EFF
-0x5F01
-0x5F02
-0x5F04
-0x5F05
-0x5F07
-0x5F08
-0x5F0A
-0x5F0B
-0x5F0F
-0x5F12
-0x5F13
-0x5F14
-0x5F15
-0x5F17
-0x5F18
-0x5F1A
-0x5F1B
-0x5F1D
-0x5F1F
-0x5F22
-0x5F23
-0x5F24
-0x5F26
-0x5F27
-0x5F28
-0x5F29
-0x5F2D
-0x5F2E
-0x5F30
-0x5F31
-0x5F33
-0x5F35
-0x5F36
-0x5F37
-0x5F38
-0x5F3C
-0x5F40
-0x5F43
-0x5F44
-0x5F46
-0x5F48
-0x5F49
-0x5F4A
-0x5F4B
-0x5F4C
-0x5F4E
-0x5F4F
-0x5F54
-0x5F56
-0x5F57
-0x5F58
-0x5F59
-0x5F5D
-0x5F62
-0x5F64
-0x5F65
-0x5F67
-0x5F69
-0x5F6A
-0x5F6B
-0x5F6C
-0x5F6D
-0x5F6F
-0x5F70
-0x5F71
-0x5F73
-0x5F74
-0x5F76
-0x5F77
-0x5F78
-0x5F79
-0x5F7C
-0x5F7D
-0x5F7E
-0x5F7F
-0x5F80
-0x5F81
-0x5F82
-0x5F85
-0x5F86
-0x5F87
-0x5F88
-0x5F89
-0x5F8A
-0x5F8B
-0x5F8C
-0x5F90
-0x5F91
-0x5F92
-0x5F96
-0x5F97
-0x5F98
-0x5F99
-0x5F9B
-0x5F9C
-0x5F9E
-0x5F9F
-0x5FA0
-0x5FA1
-0x5FA5
-0x5FA6
-0x5FA8
-0x5FA9
-0x5FAA
-0x5FAB
-0x5FAC
-0x5FAD
-0x5FAE
-0x5FAF
-0x5FB2
-0x5FB5
-0x5FB6
-0x5FB7
-0x5FB9
-0x5FBB
-0x5FBC
-0x5FBD
-0x5FBE
-0x5FBF
-0x5FC0
-0x5FC1
-0x5FC3
-0x5FC5
-0x5FC9
-0x5FCC
-0x5FCD
-0x5FCF
-0x5FD0
-0x5FD1
-0x5FD2
-0x5FD4
-0x5FD5
-0x5FD6
-0x5FD7
-0x5FD8
-0x5FD9
-0x5FDD
-0x5FDE
-0x5FE0
-0x5FE1
-0x5FE3
-0x5FE4
-0x5FE5
-0x5FE8
-0x5FEA
-0x5FEB
-0x5FED
-0x5FEE
-0x5FEF
-0x5FF1
-0x5FF3
-0x5FF4
-0x5FF5
-0x5FF7
-0x5FF8
-0x5FFA
-0x5FFB
-0x5FFD
-0x5FFF
-0x6000
-0x6009
-0x600A
-0x600B
-0x600C
-0x600D
-0x600E
-0x600F
-0x6010
-0x6011
-0x6012
-0x6013
-0x6014
-0x6015
-0x6016
-0x6017
-0x6019
-0x601A
-0x601B
-0x601C
-0x601D
-0x601E
-0x6020
-0x6021
-0x6022
-0x6024
-0x6025
-0x6026
-0x6027
-0x6028
-0x6029
-0x602A
-0x602B
-0x602C
-0x602D
-0x602E
-0x602F
-0x6032
-0x6033
-0x6034
-0x6035
-0x6037
-0x6039
-0x6040
-0x6041
-0x6042
-0x6043
-0x6044
-0x6045
-0x6046
-0x6047
-0x6049
-0x604C
-0x604D
-0x6050
-0x6053
-0x6054
-0x6055
-0x6058
-0x6059
-0x605A
-0x605B
-0x605D
-0x605E
-0x605F
-0x6062
-0x6063
-0x6064
-0x6065
-0x6066
-0x6067
-0x6068
-0x6069
-0x606A
-0x606B
-0x606C
-0x606D
-0x606E
-0x606F
-0x6070
-0x6072
-0x607F
-0x6080
-0x6081
-0x6083
-0x6084
-0x6085
-0x6086
-0x6087
-0x6088
-0x6089
-0x608A
-0x608C
-0x608D
-0x608E
-0x6090
-0x6092
-0x6094
-0x6095
-0x6096
-0x6097
-0x609A
-0x609B
-0x609C
-0x609D
-0x609F
-0x60A0
-0x60A2
-0x60A3
-0x60A8
-0x60B0
-0x60B1
-0x60B2
-0x60B4
-0x60B5
-0x60B6
-0x60B7
-0x60B8
-0x60B9
-0x60BA
-0x60BB
-0x60BC
-0x60BD
-0x60BE
-0x60BF
-0x60C0
-0x60C1
-0x60C3
-0x60C4
-0x60C5
-0x60C6
-0x60C7
-0x60C8
-0x60C9
-0x60CA
-0x60CB
-0x60CC
-0x60CD
-0x60CE
-0x60CF
-0x60D1
-0x60D3
-0x60D4
-0x60D5
-0x60D8
-0x60D9
-0x60DA
-0x60DB
-0x60DC
-0x60DD
-0x60DF
-0x60E0
-0x60E1
-0x60E2
-0x60E4
-0x60E6
-0x60F0
-0x60F1
-0x60F2
-0x60F3
-0x60F4
-0x60F5
-0x60F6
-0x60F7
-0x60F8
-0x60F9
-0x60FA
-0x60FB
-0x60FC
-0x60FE
-0x60FF
-0x6100
-0x6101
-0x6103
-0x6104
-0x6105
-0x6106
-0x6108
-0x6109
-0x610A
-0x610B
-0x610D
-0x610E
-0x610F
-0x6110
-0x6112
-0x6113
-0x6114
-0x6115
-0x6116
-0x6118
-0x611A
-0x611B
-0x611C
-0x611D
-0x611F
-0x6123
-0x6127
-0x6128
-0x6129
-0x612B
-0x612C
-0x612E
-0x612F
-0x6132
-0x6134
-0x6136
-0x6137
-0x613B
-0x613E
-0x613F
-0x6140
-0x6141
-0x6144
-0x6145
-0x6146
-0x6147
-0x6148
-0x6149
-0x614A
-0x614B
-0x614C
-0x614D
-0x614E
-0x614F
-0x6152
-0x6153
-0x6154
-0x6155
-0x6156
-0x6158
-0x615A
-0x615B
-0x615D
-0x615E
-0x615F
-0x6161
-0x6162
-0x6163
-0x6165
-0x6166
-0x6167
-0x6168
-0x616A
-0x616B
-0x616C
-0x616E
-0x6170
-0x6171
-0x6172
-0x6173
-0x6174
-0x6175
-0x6176
-0x6177
-0x6179
-0x617A
-0x617C
-0x617E
-0x6180
-0x6182
-0x6183
-0x6189
-0x618A
-0x618B
-0x618C
-0x618D
-0x618E
-0x6190
-0x6191
-0x6192
-0x6193
-0x6194
-0x6196
-0x619A
-0x619B
-0x619D
-0x619F
-0x61A1
-0x61A2
-0x61A4
-0x61A7
-0x61A8
-0x61A9
-0x61AA
-0x61AB
-0x61AC
-0x61AD
-0x61AE
-0x61AF
-0x61B0
-0x61B1
-0x61B2
-0x61B3
-0x61B4
-0x61B5
-0x61B6
-0x61B8
-0x61BA
-0x61BC
-0x61BE
-0x61BF
-0x61C1
-0x61C2
-0x61C3
-0x61C5
-0x61C6
-0x61C7
-0x61C8
-0x61C9
-0x61CA
-0x61CB
-0x61CC
-0x61CD
-0x61D6
-0x61D8
-0x61DE
-0x61DF
-0x61E0
-0x61E3
-0x61E4
-0x61E5
-0x61E6
-0x61E7
-0x61E8
-0x61E9
-0x61EA
-0x61EB
-0x61ED
-0x61EE
-0x61F0
-0x61F1
-0x61F2
-0x61F5
-0x61F6
-0x61F7
-0x61F8
-0x61F9
-0x61FA
-0x61FB
-0x61FC
-0x61FD
-0x61FE
-0x61FF
-0x6200
-0x6201
-0x6203
-0x6204
-0x6207
-0x6208
-0x6209
-0x620A
-0x620C
-0x620D
-0x620E
-0x6210
-0x6211
-0x6212
-0x6214
-0x6215
-0x6216
-0x6219
-0x621A
-0x621B
-0x621F
-0x6220
-0x6221
-0x6222
-0x6223
-0x6224
-0x6225
-0x6227
-0x6229
-0x622A
-0x622B
-0x622D
-0x622E
-0x6230
-0x6232
-0x6233
-0x6234
-0x6236
-0x623A
-0x623D
-0x623E
-0x623F
-0x6240
-0x6241
-0x6242
-0x6243
-0x6246
-0x6247
-0x6248
-0x6249
-0x624A
-0x624B
-0x624D
-0x624E
-0x6250
-0x6251
-0x6252
-0x6253
-0x6254
-0x6258
-0x6259
-0x625A
-0x625B
-0x625C
-0x625E
-0x6260
-0x6261
-0x6262
-0x6263
-0x6264
-0x6265
-0x6266
-0x626D
-0x626E
-0x626F
-0x6270
-0x6271
-0x6272
-0x6273
-0x6274
-0x6276
-0x6277
-0x6279
-0x627A
-0x627B
-0x627C
-0x627D
-0x627E
-0x627F
-0x6280
-0x6281
-0x6283
-0x6284
-0x6286
-0x6287
-0x6288
-0x6289
-0x628A
-0x628C
-0x628E
-0x628F
-0x6291
-0x6292
-0x6293
-0x6294
-0x6295
-0x6296
-0x6297
-0x6298
-0x62A8
-0x62A9
-0x62AA
-0x62AB
-0x62AC
-0x62AD
-0x62AE
-0x62AF
-0x62B0
-0x62B1
-0x62B3
-0x62B4
-0x62B5
-0x62B6
-0x62B8
-0x62B9
-0x62BB
-0x62BC
-0x62BD
-0x62BE
-0x62BF
-0x62C2
-0x62C4
-0x62C6
-0x62C7
-0x62C8
-0x62C9
-0x62CA
-0x62CB
-0x62CC
-0x62CD
-0x62CE
-0x62CF
-0x62D0
-0x62D1
-0x62D2
-0x62D3
-0x62D4
-0x62D6
-0x62D7
-0x62D8
-0x62D9
-0x62DA
-0x62DB
-0x62DC
-0x62EB
-0x62EC
-0x62ED
-0x62EE
-0x62EF
-0x62F0
-0x62F1
-0x62F2
-0x62F3
-0x62F4
-0x62F5
-0x62F6
-0x62F7
-0x62F8
-0x62F9
-0x62FA
-0x62FB
-0x62FC
-0x62FD
-0x62FE
-0x62FF
-0x6300
-0x6301
-0x6302
-0x6303
-0x6307
-0x6308
-0x6309
-0x630B
-0x630C
-0x630D
-0x630E
-0x630F
-0x6310
-0x6311
-0x6313
-0x6314
-0x6315
-0x6316
-0x6328
-0x6329
-0x632A
-0x632B
-0x632C
-0x632D
-0x632F
-0x6332
-0x6333
-0x6334
-0x6336
-0x6338
-0x6339
-0x633A
-0x633B
-0x633C
-0x633D
-0x633E
-0x6340
-0x6341
-0x6342
-0x6343
-0x6344
-0x6345
-0x6346
-0x6347
-0x6348
-0x6349
-0x634A
-0x634B
-0x634C
-0x634D
-0x634E
-0x634F
-0x6350
-0x6351
-0x6354
-0x6355
-0x6356
-0x6357
-0x6358
-0x6359
-0x635A
-0x6365
-0x6367
-0x6368
-0x6369
-0x636B
-0x636D
-0x636E
-0x636F
-0x6370
-0x6371
-0x6372
-0x6375
-0x6376
-0x6377
-0x6378
-0x637A
-0x637B
-0x637C
-0x637D
-0x6380
-0x6381
-0x6382
-0x6383
-0x6384
-0x6385
-0x6387
-0x6388
-0x6389
-0x638A
-0x638C
-0x638D
-0x638E
-0x638F
-0x6390
-0x6391
-0x6392
-0x6394
-0x6396
-0x6397
-0x6398
-0x6399
-0x639B
-0x639C
-0x639D
-0x639E
-0x639F
-0x63A0
-0x63A1
-0x63A2
-0x63A3
-0x63A4
-0x63A5
-0x63A7
-0x63A8
-0x63A9
-0x63AA
-0x63AB
-0x63AC
-0x63AD
-0x63AE
-0x63AF
-0x63B0
-0x63B1
-0x63BD
-0x63BE
-0x63C0
-0x63C2
-0x63C3
-0x63C4
-0x63C5
-0x63C6
-0x63C7
-0x63C8
-0x63C9
-0x63CA
-0x63CB
-0x63CC
-0x63CD
-0x63CE
-0x63CF
-0x63D0
-0x63D2
-0x63D3
-0x63D5
-0x63D6
-0x63D7
-0x63D8
-0x63D9
-0x63DA
-0x63DB
-0x63DC
-0x63DD
-0x63DF
-0x63E0
-0x63E1
-0x63E3
-0x63E4
-0x63E5
-0x63E7
-0x63E8
-0x63E9
-0x63EA
-0x63EB
-0x63ED
-0x63EE
-0x63EF
-0x63F0
-0x63F1
-0x63F2
-0x63F3
-0x63F4
-0x63F5
-0x63F6
-0x63F9
-0x6406
-0x6409
-0x640A
-0x640B
-0x640C
-0x640D
-0x640E
-0x640F
-0x6410
-0x6412
-0x6413
-0x6414
-0x6415
-0x6416
-0x6417
-0x6418
-0x641A
-0x641B
-0x641C
-0x641E
-0x641F
-0x6420
-0x6421
-0x6422
-0x6423
-0x6424
-0x6425
-0x6426
-0x6427
-0x6428
-0x642A
-0x642B
-0x642C
-0x642D
-0x642E
-0x642F
-0x6430
-0x6433
-0x6434
-0x6435
-0x6436
-0x6437
-0x6439
-0x643D
-0x643E
-0x643F
-0x6440
-0x6441
-0x6443
-0x644B
-0x644D
-0x644E
-0x6450
-0x6451
-0x6452
-0x6453
-0x6454
-0x6458
-0x6459
-0x645B
-0x645C
-0x645D
-0x645E
-0x645F
-0x6460
-0x6461
-0x6465
-0x6466
-0x6467
-0x6468
-0x6469
-0x646B
-0x646C
-0x646D
-0x646E
-0x646F
-0x6470
-0x6472
-0x6473
-0x6474
-0x6475
-0x6476
-0x6477
-0x6478
-0x6479
-0x647A
-0x647B
-0x647D
-0x647F
-0x6482
-0x6485
-0x6487
-0x6488
-0x6489
-0x648A
-0x648B
-0x648C
-0x648F
-0x6490
-0x6492
-0x6493
-0x6495
-0x6496
-0x6497
-0x6498
-0x6499
-0x649A
-0x649C
-0x649D
-0x649E
-0x649F
-0x64A0
-0x64A2
-0x64A3
-0x64A4
-0x64A5
-0x64A6
-0x64A9
-0x64AB
-0x64AC
-0x64AD
-0x64AE
-0x64B0
-0x64B1
-0x64B2
-0x64B3
-0x64BB
-0x64BC
-0x64BD
-0x64BE
-0x64BF
-0x64C1
-0x64C2
-0x64C3
-0x64C4
-0x64C5
-0x64C7
-0x64C9
-0x64CA
-0x64CB
-0x64CD
-0x64CE
-0x64CF
-0x64D0
-0x64D2
-0x64D4
-0x64D6
-0x64D7
-0x64D8
-0x64D9
-0x64DA
-0x64DB
-0x64E0
-0x64E2
-0x64E3
-0x64E4
-0x64E6
-0x64E8
-0x64E9
-0x64EB
-0x64EC
-0x64ED
-0x64EF
-0x64F0
-0x64F1
-0x64F2
-0x64F3
-0x64F4
-0x64F7
-0x64F8
-0x64FA
-0x64FB
-0x64FC
-0x64FD
-0x64FE
-0x64FF
-0x6500
-0x6501
-0x6503
-0x6504
-0x6506
-0x6507
-0x6509
-0x650C
-0x650D
-0x650E
-0x650F
-0x6510
-0x6513
-0x6514
-0x6515
-0x6516
-0x6517
-0x6518
-0x6519
-0x651B
-0x651C
-0x651D
-0x6520
-0x6521
-0x6522
-0x6523
-0x6524
-0x6525
-0x6526
-0x6529
-0x652A
-0x652B
-0x652C
-0x652D
-0x652E
-0x652F
-0x6532
-0x6533
-0x6536
-0x6537
-0x6538
-0x6539
-0x653B
-0x653D
-0x653E
-0x653F
-0x6541
-0x6543
-0x6545
-0x6546
-0x6548
-0x6549
-0x654A
-0x654F
-0x6551
-0x6553
-0x6554
-0x6555
-0x6556
-0x6557
-0x6558
-0x6559
-0x655C
-0x655D
-0x655E
-0x6562
-0x6563
-0x6564
-0x6565
-0x6566
-0x6567
-0x6568
-0x656A
-0x656C
-0x656F
-0x6572
-0x6573
-0x6574
-0x6575
-0x6576
-0x6577
-0x6578
-0x6579
-0x657A
-0x657B
-0x657C
-0x657F
-0x6580
-0x6581
-0x6582
-0x6583
-0x6584
-0x6587
-0x658C
-0x6590
-0x6591
-0x6592
-0x6594
-0x6595
-0x6596
-0x6597
-0x6599
-0x659B
-0x659C
-0x659D
-0x659E
-0x659F
-0x65A0
-0x65A1
-0x65A2
-0x65A4
-0x65A5
-0x65A7
-0x65A8
-0x65AA
-0x65AB
-0x65AC
-0x65AE
-0x65AF
-0x65B0
-0x65B2
-0x65B3
-0x65B6
-0x65B7
-0x65B8
-0x65B9
-0x65BB
-0x65BC
-0x65BD
-0x65BF
-0x65C1
-0x65C2
-0x65C3
-0x65C4
-0x65C5
-0x65C6
-0x65CB
-0x65CC
-0x65CD
-0x65CE
-0x65CF
-0x65D0
-0x65D2
-0x65D3
-0x65D6
-0x65D7
-0x65DA
-0x65DB
-0x65DD
-0x65DE
-0x65DF
-0x65E1
-0x65E2
-0x65E5
-0x65E6
-0x65E8
-0x65E9
-0x65EC
-0x65ED
-0x65EE
-0x65EF
-0x65F0
-0x65F1
-0x65F2
-0x65F3
-0x65F4
-0x65F5
-0x65FA
-0x65FB
-0x65FC
-0x65FD
-0x6600
-0x6602
-0x6603
-0x6604
-0x6605
-0x6606
-0x6607
-0x6608
-0x6609
-0x660A
-0x660B
-0x660C
-0x660D
-0x660E
-0x660F
-0x6610
-0x6611
-0x6612
-0x6613
-0x6614
-0x6615
-0x661C
-0x661D
-0x661F
-0x6620
-0x6621
-0x6622
-0x6624
-0x6625
-0x6626
-0x6627
-0x6628
-0x662B
-0x662D
-0x662E
-0x662F
-0x6631
-0x6632
-0x6633
-0x6634
-0x6635
-0x6636
-0x6639
-0x663A
-0x6641
-0x6642
-0x6643
-0x6645
-0x6647
-0x6649
-0x664A
-0x664C
-0x664F
-0x6651
-0x6652
-0x6659
-0x665A
-0x665B
-0x665C
-0x665D
-0x665E
-0x665F
-0x6661
-0x6662
-0x6664
-0x6665
-0x6666
-0x6668
-0x666A
-0x666C
-0x666E
-0x666F
-0x6670
-0x6671
-0x6672
-0x6674
-0x6676
-0x6677
-0x6678
-0x6679
-0x667A
-0x667B
-0x667C
-0x667E
-0x6680
-0x6684
-0x6686
-0x6687
-0x6688
-0x6689
-0x668A
-0x668B
-0x668C
-0x668D
-0x6690
-0x6691
-0x6694
-0x6695
-0x6696
-0x6697
-0x6698
-0x6699
-0x669D
-0x669F
-0x66A0
-0x66A1
-0x66A2
-0x66A8
-0x66A9
-0x66AA
-0x66AB
-0x66AE
-0x66AF
-0x66B0
-0x66B1
-0x66B2
-0x66B4
-0x66B5
-0x66B7
-0x66B8
-0x66B9
-0x66BA
-0x66BB
-0x66BD
-0x66BE
-0x66C0
-0x66C4
-0x66C6
-0x66C7
-0x66C8
-0x66C9
-0x66CA
-0x66CB
-0x66CC
-0x66CF
-0x66D2
-0x66D6
-0x66D8
-0x66D9
-0x66DA
-0x66DB
-0x66DC
-0x66DD
-0x66DE
-0x66E0
-0x66E3
-0x66E4
-0x66E6
-0x66E8
-0x66E9
-0x66EB
-0x66EC
-0x66ED
-0x66EE
-0x66F0
-0x66F2
-0x66F3
-0x66F4
-0x66F6
-0x66F7
-0x66F8
-0x66F9
-0x66FC
-0x66FE
-0x66FF
-0x6700
-0x6701
-0x6703
-0x6704
-0x6705
-0x6708
-0x6709
-0x670A
-0x670B
-0x670D
-0x670F
-0x6710
-0x6712
-0x6713
-0x6714
-0x6715
-0x6717
-0x6718
-0x671B
-0x671D
-0x671F
-0x6720
-0x6721
-0x6722
-0x6723
-0x6726
-0x6727
-0x6728
-0x672A
-0x672B
-0x672C
-0x672D
-0x672E
-0x6731
-0x6733
-0x6734
-0x6735
-0x6738
-0x6739
-0x673A
-0x673B
-0x673C
-0x673D
-0x673E
-0x673F
-0x6745
-0x6746
-0x6747
-0x6748
-0x6749
-0x674B
-0x674C
-0x674D
-0x674E
-0x674F
-0x6750
-0x6751
-0x6753
-0x6755
-0x6756
-0x6757
-0x6759
-0x675A
-0x675C
-0x675D
-0x675E
-0x675F
-0x6760
-0x676A
-0x676C
-0x676D
-0x676F
-0x6770
-0x6771
-0x6772
-0x6773
-0x6774
-0x6775
-0x6776
-0x6777
-0x6778
-0x6779
-0x677A
-0x677B
-0x677C
-0x677D
-0x677E
-0x677F
-0x6781
-0x6783
-0x6784
-0x6785
-0x6786
-0x6787
-0x6789
-0x678B
-0x678C
-0x678D
-0x678E
-0x6790
-0x6791
-0x6792
-0x6793
-0x6794
-0x6795
-0x6797
-0x6798
-0x6799
-0x679A
-0x679C
-0x679D
-0x679F
-0x67AE
-0x67AF
-0x67B0
-0x67B2
-0x67B3
-0x67B4
-0x67B5
-0x67B6
-0x67B7
-0x67B8
-0x67B9
-0x67BA
-0x67BB
-0x67C0
-0x67C1
-0x67C2
-0x67C3
-0x67C4
-0x67C5
-0x67C6
-0x67C8
-0x67C9
-0x67CA
-0x67CB
-0x67CC
-0x67CD
-0x67CE
-0x67CF
-0x67D0
-0x67D1
-0x67D2
-0x67D3
-0x67D4
-0x67D8
-0x67D9
-0x67DA
-0x67DB
-0x67DC
-0x67DD
-0x67DE
-0x67DF
-0x67E2
-0x67E3
-0x67E4
-0x67E5
-0x67E6
-0x67E7
-0x67E9
-0x67EA
-0x67EB
-0x67EC
-0x67ED
-0x67EE
-0x67EF
-0x67F0
-0x67F1
-0x67F2
-0x67F3
-0x67F4
-0x67F5
-0x67F6
-0x67F7
-0x67F8
-0x67FA
-0x67FC
-0x67FF
-0x6812
-0x6813
-0x6814
-0x6816
-0x6817
-0x6818
-0x681A
-0x681C
-0x681D
-0x681F
-0x6820
-0x6821
-0x6825
-0x6826
-0x6828
-0x6829
-0x682A
-0x682B
-0x682D
-0x682E
-0x682F
-0x6831
-0x6832
-0x6833
-0x6834
-0x6835
-0x6838
-0x6839
-0x683A
-0x683B
-0x683C
-0x683D
-0x6840
-0x6841
-0x6842
-0x6843
-0x6844
-0x6845
-0x6846
-0x6848
-0x6849
-0x684B
-0x684C
-0x684D
-0x684E
-0x684F
-0x6850
-0x6851
-0x6853
-0x6854
-0x686B
-0x686D
-0x686E
-0x686F
-0x6871
-0x6872
-0x6874
-0x6875
-0x6876
-0x6877
-0x6878
-0x6879
-0x687B
-0x687C
-0x687D
-0x687E
-0x687F
-0x6880
-0x6881
-0x6882
-0x6883
-0x6885
-0x6886
-0x6887
-0x6889
-0x688A
-0x688B
-0x688C
-0x688F
-0x6890
-0x6891
-0x6892
-0x6893
-0x6894
-0x6896
-0x6897
-0x689B
-0x689C
-0x689D
-0x689F
-0x68A0
-0x68A1
-0x68A2
-0x68A3
-0x68A4
-0x68A7
-0x68A8
-0x68A9
-0x68AA
-0x68AB
-0x68AC
-0x68AD
-0x68AE
-0x68AF
-0x68B0
-0x68B1
-0x68B2
-0x68B3
-0x68B4
-0x68B5
-0x68C4
-0x68C6
-0x68C7
-0x68C8
-0x68C9
-0x68CB
-0x68CC
-0x68CD
-0x68CE
-0x68D0
-0x68D1
-0x68D2
-0x68D3
-0x68D4
-0x68D5
-0x68D6
-0x68D7
-0x68D8
-0x68DA
-0x68DC
-0x68DD
-0x68DE
-0x68DF
-0x68E0
-0x68E1
-0x68E3
-0x68E4
-0x68E6
-0x68E7
-0x68E8
-0x68E9
-0x68EA
-0x68EB
-0x68EC
-0x68EE
-0x68EF
-0x68F0
-0x68F1
-0x68F2
-0x68F3
-0x68F4
-0x68F5
-0x68F6
-0x68F7
-0x68F8
-0x68F9
-0x68FA
-0x68FB
-0x68FC
-0x68FD
-0x6904
-0x6905
-0x6906
-0x6907
-0x6908
-0x690A
-0x690B
-0x690C
-0x690D
-0x690E
-0x690F
-0x6910
-0x6911
-0x6912
-0x6913
-0x6914
-0x6915
-0x6917
-0x6925
-0x692A
-0x692F
-0x6930
-0x6932
-0x6933
-0x6934
-0x6935
-0x6937
-0x6938
-0x6939
-0x693B
-0x693C
-0x693D
-0x693F
-0x6940
-0x6941
-0x6942
-0x6944
-0x6945
-0x6948
-0x6949
-0x694A
-0x694B
-0x694C
-0x694E
-0x694F
-0x6951
-0x6952
-0x6953
-0x6954
-0x6956
-0x6957
-0x6958
-0x6959
-0x695A
-0x695B
-0x695C
-0x695D
-0x695E
-0x695F
-0x6960
-0x6962
-0x6963
-0x6965
-0x6966
-0x6968
-0x6969
-0x696A
-0x696B
-0x696C
-0x696D
-0x696E
-0x696F
-0x6970
-0x6971
-0x6974
-0x6975
-0x6976
-0x6977
-0x6978
-0x6979
-0x697A
-0x697B
-0x6982
-0x6983
-0x6986
-0x698D
-0x698E
-0x6990
-0x6991
-0x6993
-0x6994
-0x6995
-0x6996
-0x6997
-0x6999
-0x699A
-0x699B
-0x699C
-0x699E
-0x69A0
-0x69A1
-0x69A3
-0x69A4
-0x69A5
-0x69A6
-0x69A7
-0x69A8
-0x69A9
-0x69AA
-0x69AB
-0x69AC
-0x69AD
-0x69AE
-0x69AF
-0x69B0
-0x69B1
-0x69B3
-0x69B4
-0x69B5
-0x69B6
-0x69B7
-0x69B9
-0x69BB
-0x69BC
-0x69BD
-0x69BE
-0x69BF
-0x69C1
-0x69C2
-0x69C3
-0x69C4
-0x69C6
-0x69C9
-0x69CA
-0x69CB
-0x69CC
-0x69CD
-0x69CE
-0x69CF
-0x69D0
-0x69D3
-0x69D4
-0x69D9
-0x69E2
-0x69E4
-0x69E5
-0x69E6
-0x69E7
-0x69E8
-0x69EB
-0x69EC
-0x69ED
-0x69EE
-0x69F1
-0x69F2
-0x69F3
-0x69F4
-0x69F6
-0x69F7
-0x69F8
-0x69FB
-0x69FC
-0x69FD
-0x69FE
-0x69FF
-0x6A00
-0x6A01
-0x6A02
-0x6A04
-0x6A05
-0x6A06
-0x6A07
-0x6A08
-0x6A09
-0x6A0A
-0x6A0D
-0x6A0F
-0x6A11
-0x6A13
-0x6A14
-0x6A15
-0x6A16
-0x6A17
-0x6A18
-0x6A19
-0x6A1B
-0x6A1D
-0x6A1E
-0x6A1F
-0x6A20
-0x6A21
-0x6A23
-0x6A25
-0x6A26
-0x6A27
-0x6A28
-0x6A32
-0x6A34
-0x6A35
-0x6A38
-0x6A39
-0x6A3A
-0x6A3B
-0x6A3C
-0x6A3D
-0x6A3E
-0x6A3F
-0x6A40
-0x6A41
-0x6A44
-0x6A46
-0x6A47
-0x6A48
-0x6A49
-0x6A4B
-0x6A4D
-0x6A4E
-0x6A4F
-0x6A50
-0x6A51
-0x6A54
-0x6A55
-0x6A56
-0x6A58
-0x6A59
-0x6A5A
-0x6A5B
-0x6A5D
-0x6A5E
-0x6A5F
-0x6A60
-0x6A61
-0x6A62
-0x6A64
-0x6A66
-0x6A67
-0x6A68
-0x6A69
-0x6A6A
-0x6A6B
-0x6A6D
-0x6A6F
-0x6A76
-0x6A7E
-0x6A7F
-0x6A80
-0x6A81
-0x6A83
-0x6A84
-0x6A85
-0x6A87
-0x6A89
-0x6A8C
-0x6A8D
-0x6A8E
-0x6A90
-0x6A91
-0x6A92
-0x6A93
-0x6A94
-0x6A95
-0x6A96
-0x6A97
-0x6A9A
-0x6A9B
-0x6A9C
-0x6A9E
-0x6A9F
-0x6AA0
-0x6AA1
-0x6AA2
-0x6AA3
-0x6AA4
-0x6AA5
-0x6AA6
-0x6AA8
-0x6AAC
-0x6AAD
-0x6AAE
-0x6AAF
-0x6AB3
-0x6AB4
-0x6AB6
-0x6AB7
-0x6AB8
-0x6AB9
-0x6ABA
-0x6ABB
-0x6ABD
-0x6AC2
-0x6AC3
-0x6AC5
-0x6AC6
-0x6AC7
-0x6ACB
-0x6ACC
-0x6ACD
-0x6ACF
-0x6AD0
-0x6AD1
-0x6AD3
-0x6AD9
-0x6ADA
-0x6ADB
-0x6ADC
-0x6ADD
-0x6ADE
-0x6ADF
-0x6AE0
-0x6AE1
-0x6AE5
-0x6AE7
-0x6AE8
-0x6AEA
-0x6AEB
-0x6AEC
-0x6AEE
-0x6AEF
-0x6AF0
-0x6AF1
-0x6AF3
-0x6AF8
-0x6AF9
-0x6AFA
-0x6AFB
-0x6AFC
-0x6B00
-0x6B02
-0x6B03
-0x6B04
-0x6B08
-0x6B09
-0x6B0A
-0x6B0B
-0x6B0F
-0x6B10
-0x6B11
-0x6B12
-0x6B13
-0x6B16
-0x6B17
-0x6B18
-0x6B19
-0x6B1A
-0x6B1E
-0x6B20
-0x6B21
-0x6B23
-0x6B25
-0x6B28
-0x6B2C
-0x6B2D
-0x6B2F
-0x6B31
-0x6B32
-0x6B33
-0x6B34
-0x6B36
-0x6B37
-0x6B38
-0x6B39
-0x6B3A
-0x6B3B
-0x6B3C
-0x6B3D
-0x6B3E
-0x6B3F
-0x6B41
-0x6B42
-0x6B43
-0x6B45
-0x6B46
-0x6B47
-0x6B48
-0x6B49
-0x6B4A
-0x6B4B
-0x6B4C
-0x6B4D
-0x6B4E
-0x6B50
-0x6B51
-0x6B54
-0x6B55
-0x6B56
-0x6B59
-0x6B5B
-0x6B5C
-0x6B5E
-0x6B5F
-0x6B60
-0x6B61
-0x6B62
-0x6B63
-0x6B64
-0x6B65
-0x6B66
-0x6B67
-0x6B6A
-0x6B6D
-0x6B72
-0x6B76
-0x6B77
-0x6B78
-0x6B79
-0x6B7B
-0x6B7E
-0x6B7F
-0x6B80
-0x6B82
-0x6B83
-0x6B84
-0x6B86
-0x6B88
-0x6B89
-0x6B8A
-0x6B8C
-0x6B8D
-0x6B8E
-0x6B8F
-0x6B91
-0x6B94
-0x6B95
-0x6B96
-0x6B97
-0x6B98
-0x6B99
-0x6B9B
-0x6B9E
-0x6B9F
-0x6BA0
-0x6BA2
-0x6BA3
-0x6BA4
-0x6BA5
-0x6BA6
-0x6BA7
-0x6BAA
-0x6BAB
-0x6BAD
-0x6BAE
-0x6BAF
-0x6BB0
-0x6BB2
-0x6BB3
-0x6BB5
-0x6BB6
-0x6BB7
-0x6BBA
-0x6BBC
-0x6BBD
-0x6BBF
-0x6BC0
-0x6BC3
-0x6BC4
-0x6BC5
-0x6BC6
-0x6BC7
-0x6BC8
-0x6BC9
-0x6BCA
-0x6BCB
-0x6BCC
-0x6BCD
-0x6BCF
-0x6BD0
-0x6BD2
-0x6BD3
-0x6BD4
-0x6BD6
-0x6BD7
-0x6BD8
-0x6BDA
-0x6BDB
-0x6BDE
-0x6BE0
-0x6BE2
-0x6BE3
-0x6BE4
-0x6BE6
-0x6BE7
-0x6BE8
-0x6BEB
-0x6BEC
-0x6BEF
-0x6BF0
-0x6BF2
-0x6BF3
-0x6BF7
-0x6BF8
-0x6BF9
-0x6BFB
-0x6BFC
-0x6BFD
-0x6BFE
-0x6BFF
-0x6C00
-0x6C01
-0x6C02
-0x6C03
-0x6C04
-0x6C05
-0x6C06
-0x6C08
-0x6C09
-0x6C0B
-0x6C0C
-0x6C0D
-0x6C0F
-0x6C10
-0x6C11
-0x6C13
-0x6C14
-0x6C15
-0x6C16
-0x6C18
-0x6C19
-0x6C1A
-0x6C1B
-0x6C1D
-0x6C1F
-0x6C20
-0x6C21
-0x6C23
-0x6C24
-0x6C25
-0x6C26
-0x6C27
-0x6C28
-0x6C2A
-0x6C2B
-0x6C2C
-0x6C2E
-0x6C2F
-0x6C30
-0x6C33
-0x6C34
-0x6C36
-0x6C38
-0x6C3B
-0x6C3E
-0x6C3F
-0x6C40
-0x6C41
-0x6C42
-0x6C43
-0x6C46
-0x6C4A
-0x6C4B
-0x6C4C
-0x6C4D
-0x6C4E
-0x6C4F
-0x6C50
-0x6C52
-0x6C54
-0x6C55
-0x6C57
-0x6C59
-0x6C5B
-0x6C5C
-0x6C5D
-0x6C5E
-0x6C5F
-0x6C60
-0x6C61
-0x6C65
-0x6C66
-0x6C67
-0x6C68
-0x6C69
-0x6C6A
-0x6C6B
-0x6C6D
-0x6C6F
-0x6C70
-0x6C71
-0x6C72
-0x6C73
-0x6C74
-0x6C76
-0x6C78
-0x6C7A
-0x6C7B
-0x6C7D
-0x6C7E
-0x6C80
-0x6C81
-0x6C82
-0x6C83
-0x6C84
-0x6C85
-0x6C86
-0x6C87
-0x6C88
-0x6C89
-0x6C8A
-0x6C8B
-0x6C8C
-0x6C8D
-0x6C8E
-0x6C8F
-0x6C90
-0x6C92
-0x6C93
-0x6C94
-0x6C95
-0x6C96
-0x6C98
-0x6C99
-0x6C9A
-0x6C9B
-0x6C9C
-0x6C9D
-0x6CAB
-0x6CAC
-0x6CAD
-0x6CAE
-0x6CB0
-0x6CB1
-0x6CB3
-0x6CB4
-0x6CB6
-0x6CB7
-0x6CB8
-0x6CB9
-0x6CBA
-0x6CBB
-0x6CBC
-0x6CBD
-0x6CBE
-0x6CBF
-0x6CC0
-0x6CC1
-0x6CC2
-0x6CC3
-0x6CC4
-0x6CC5
-0x6CC6
-0x6CC7
-0x6CC9
-0x6CCA
-0x6CCC
-0x6CCD
-0x6CCF
-0x6CD0
-0x6CD1
-0x6CD2
-0x6CD3
-0x6CD4
-0x6CD5
-0x6CD6
-0x6CD7
-0x6CD9
-0x6CDA
-0x6CDB
-0x6CDC
-0x6CDD
-0x6CDE
-0x6CE0
-0x6CE1
-0x6CE2
-0x6CE3
-0x6CE5
-0x6CE7
-0x6CE8
-0x6CE9
-0x6CEB
-0x6CEC
-0x6CED
-0x6CEE
-0x6CEF
-0x6CF0
-0x6CF1
-0x6CF2
-0x6CF3
-0x6CF5
-0x6CF9
-0x6D00
-0x6D01
-0x6D03
-0x6D04
-0x6D07
-0x6D08
-0x6D09
-0x6D0A
-0x6D0B
-0x6D0C
-0x6D0D
-0x6D0E
-0x6D0F
-0x6D10
-0x6D11
-0x6D12
-0x6D16
-0x6D17
-0x6D18
-0x6D19
-0x6D1A
-0x6D1B
-0x6D1D
-0x6D1E
-0x6D1F
-0x6D20
-0x6D22
-0x6D25
-0x6D27
-0x6D28
-0x6D29
-0x6D2A
-0x6D2B
-0x6D2C
-0x6D2D
-0x6D2E
-0x6D2F
-0x6D30
-0x6D31
-0x6D32
-0x6D33
-0x6D34
-0x6D35
-0x6D36
-0x6D37
-0x6D38
-0x6D39
-0x6D3A
-0x6D3B
-0x6D3C
-0x6D3D
-0x6D3E
-0x6D3F
-0x6D40
-0x6D41
-0x6D42
-0x6D58
-0x6D59
-0x6D5A
-0x6D5E
-0x6D5F
-0x6D60
-0x6D61
-0x6D62
-0x6D63
-0x6D64
-0x6D65
-0x6D66
-0x6D67
-0x6D68
-0x6D69
-0x6D6A
-0x6D6C
-0x6D6D
-0x6D6E
-0x6D6F
-0x6D70
-0x6D74
-0x6D75
-0x6D76
-0x6D77
-0x6D78
-0x6D79
-0x6D7A
-0x6D7B
-0x6D7C
-0x6D7D
-0x6D7E
-0x6D7F
-0x6D80
-0x6D82
-0x6D83
-0x6D84
-0x6D85
-0x6D86
-0x6D87
-0x6D88
-0x6D89
-0x6D8A
-0x6D8B
-0x6D8C
-0x6D8D
-0x6D8E
-0x6D90
-0x6D91
-0x6D92
-0x6D93
-0x6D94
-0x6D95
-0x6D97
-0x6D98
-0x6DAA
-0x6DAB
-0x6DAC
-0x6DAE
-0x6DAF
-0x6DB2
-0x6DB3
-0x6DB4
-0x6DB5
-0x6DB7
-0x6DB8
-0x6DBA
-0x6DBB
-0x6DBC
-0x6DBD
-0x6DBE
-0x6DBF
-0x6DC0
-0x6DC2
-0x6DC4
-0x6DC5
-0x6DC6
-0x6DC7
-0x6DC8
-0x6DC9
-0x6DCA
-0x6DCB
-0x6DCC
-0x6DCD
-0x6DCF
-0x6DD0
-0x6DD1
-0x6DD2
-0x6DD3
-0x6DD4
-0x6DD5
-0x6DD6
-0x6DD7
-0x6DD8
-0x6DD9
-0x6DDA
-0x6DDB
-0x6DDC
-0x6DDD
-0x6DDE
-0x6DDF
-0x6DE0
-0x6DE1
-0x6DE2
-0x6DE3
-0x6DE4
-0x6DE5
-0x6DE6
-0x6DE8
-0x6DE9
-0x6DEA
-0x6DEB
-0x6DEC
-0x6DED
-0x6DEE
-0x6DEF
-0x6DF0
-0x6DF1
-0x6DF2
-0x6DF3
-0x6DF4
-0x6DF5
-0x6DF6
-0x6DF7
-0x6DF9
-0x6DFA
-0x6DFB
-0x6DFC
-0x6DFD
-0x6E00
-0x6E03
-0x6E05
-0x6E19
-0x6E1A
-0x6E1B
-0x6E1C
-0x6E1D
-0x6E1F
-0x6E20
-0x6E21
-0x6E22
-0x6E23
-0x6E24
-0x6E25
-0x6E26
-0x6E27
-0x6E28
-0x6E2B
-0x6E2C
-0x6E2D
-0x6E2E
-0x6E2F
-0x6E30
-0x6E31
-0x6E32
-0x6E33
-0x6E34
-0x6E35
-0x6E36
-0x6E38
-0x6E39
-0x6E3A
-0x6E3B
-0x6E3C
-0x6E3D
-0x6E3E
-0x6E3F
-0x6E40
-0x6E41
-0x6E43
-0x6E44
-0x6E45
-0x6E46
-0x6E47
-0x6E49
-0x6E4A
-0x6E4B
-0x6E4D
-0x6E4E
-0x6E51
-0x6E52
-0x6E53
-0x6E54
-0x6E55
-0x6E56
-0x6E58
-0x6E5A
-0x6E5B
-0x6E5C
-0x6E5D
-0x6E5E
-0x6E5F
-0x6E60
-0x6E61
-0x6E62
-0x6E63
-0x6E64
-0x6E65
-0x6E66
-0x6E67
-0x6E68
-0x6E69
-0x6E6B
-0x6E6E
-0x6E6F
-0x6E71
-0x6E72
-0x6E73
-0x6E74
-0x6E77
-0x6E78
-0x6E79
-0x6E88
-0x6E89
-0x6E8D
-0x6E8E
-0x6E8F
-0x6E90
-0x6E92
-0x6E93
-0x6E94
-0x6E96
-0x6E97
-0x6E98
-0x6E99
-0x6E9B
-0x6E9C
-0x6E9D
-0x6E9E
-0x6E9F
-0x6EA0
-0x6EA1
-0x6EA2
-0x6EA3
-0x6EA4
-0x6EA5
-0x6EA6
-0x6EA7
-0x6EAA
-0x6EAB
-0x6EAE
-0x6EAF
-0x6EB0
-0x6EB1
-0x6EB2
-0x6EB3
-0x6EB4
-0x6EB6
-0x6EB7
-0x6EB9
-0x6EBA
-0x6EBC
-0x6EBD
-0x6EBE
-0x6EBF
-0x6EC0
-0x6EC1
-0x6EC2
-0x6EC3
-0x6EC4
-0x6EC5
-0x6EC6
-0x6EC7
-0x6EC8
-0x6EC9
-0x6ECA
-0x6ECB
-0x6ECC
-0x6ECD
-0x6ECE
-0x6ECF
-0x6ED0
-0x6ED1
-0x6ED2
-0x6ED3
-0x6ED4
-0x6ED5
-0x6ED6
-0x6ED8
-0x6EDC
-0x6EEB
-0x6EEC
-0x6EED
-0x6EEE
-0x6EEF
-0x6EF1
-0x6EF2
-0x6EF4
-0x6EF5
-0x6EF6
-0x6EF7
-0x6EF8
-0x6EF9
-0x6EFB
-0x6EFC
-0x6EFD
-0x6EFE
-0x6EFF
-0x6F00
-0x6F01
-0x6F02
-0x6F03
-0x6F05
-0x6F06
-0x6F07
-0x6F08
-0x6F09
-0x6F0A
-0x6F0D
-0x6F0E
-0x6F0F
-0x6F12
-0x6F13
-0x6F14
-0x6F15
-0x6F18
-0x6F19
-0x6F1A
-0x6F1C
-0x6F1E
-0x6F1F
-0x6F20
-0x6F21
-0x6F22
-0x6F23
-0x6F25
-0x6F26
-0x6F27
-0x6F29
-0x6F2A
-0x6F2B
-0x6F2C
-0x6F2D
-0x6F2E
-0x6F2F
-0x6F30
-0x6F31
-0x6F32
-0x6F33
-0x6F35
-0x6F36
-0x6F37
-0x6F38
-0x6F39
-0x6F3A
-0x6F3B
-0x6F3C
-0x6F3E
-0x6F3F
-0x6F40
-0x6F41
-0x6F43
-0x6F4E
-0x6F4F
-0x6F50
-0x6F51
-0x6F52
-0x6F53
-0x6F54
-0x6F55
-0x6F57
-0x6F58
-0x6F5A
-0x6F5B
-0x6F5D
-0x6F5E
-0x6F5F
-0x6F60
-0x6F61
-0x6F62
-0x6F63
-0x6F64
-0x6F66
-0x6F67
-0x6F69
-0x6F6A
-0x6F6B
-0x6F6C
-0x6F6D
-0x6F6E
-0x6F6F
-0x6F70
-0x6F72
-0x6F73
-0x6F76
-0x6F77
-0x6F78
-0x6F7A
-0x6F7B
-0x6F7C
-0x6F7D
-0x6F7E
-0x6F7F
-0x6F80
-0x6F82
-0x6F84
-0x6F85
-0x6F86
-0x6F87
-0x6F88
-0x6F89
-0x6F8B
-0x6F8C
-0x6F8D
-0x6F8E
-0x6F90
-0x6F92
-0x6F93
-0x6F94
-0x6F95
-0x6F96
-0x6F97
-0x6F9E
-0x6FA0
-0x6FA1
-0x6FA2
-0x6FA3
-0x6FA4
-0x6FA5
-0x6FA6
-0x6FA7
-0x6FA8
-0x6FA9
-0x6FAA
-0x6FAB
-0x6FAC
-0x6FAD
-0x6FAE
-0x6FAF
-0x6FB0
-0x6FB1
-0x6FB2
-0x6FB3
-0x6FB4
-0x6FB6
-0x6FB8
-0x6FB9
-0x6FBA
-0x6FBC
-0x6FBD
-0x6FBF
-0x6FC0
-0x6FC1
-0x6FC2
-0x6FC3
-0x6FC4
-0x6FC6
-0x6FC7
-0x6FC8
-0x6FC9
-0x6FCA
-0x6FCB
-0x6FCC
-0x6FCD
-0x6FCE
-0x6FCF
-0x6FD4
-0x6FD5
-0x6FD8
-0x6FDB
-0x6FDC
-0x6FDD
-0x6FDE
-0x6FDF
-0x6FE0
-0x6FE1
-0x6FE2
-0x6FE3
-0x6FE4
-0x6FE6
-0x6FE7
-0x6FE8
-0x6FE9
-0x6FEB
-0x6FEC
-0x6FED
-0x6FEE
-0x6FEF
-0x6FF0
-0x6FF1
-0x6FF2
-0x6FF4
-0x6FF7
-0x6FFA
-0x6FFB
-0x6FFC
-0x6FFE
-0x6FFF
-0x7000
-0x7001
-0x7004
-0x7005
-0x7006
-0x7007
-0x7009
-0x700A
-0x700B
-0x700C
-0x700D
-0x700E
-0x700F
-0x7011
-0x7014
-0x7015
-0x7016
-0x7017
-0x7018
-0x7019
-0x701A
-0x701B
-0x701C
-0x701D
-0x701F
-0x7020
-0x7021
-0x7022
-0x7023
-0x7024
-0x7026
-0x7027
-0x7028
-0x7029
-0x702A
-0x702B
-0x702F
-0x7030
-0x7031
-0x7032
-0x7033
-0x7034
-0x7035
-0x7037
-0x7038
-0x7039
-0x703A
-0x703B
-0x703C
-0x703E
-0x703F
-0x7040
-0x7041
-0x7042
-0x7043
-0x7044
-0x7045
-0x7046
-0x7048
-0x7049
-0x704A
-0x704C
-0x7051
-0x7052
-0x7055
-0x7056
-0x7057
-0x7058
-0x705A
-0x705B
-0x705D
-0x705E
-0x705F
-0x7060
-0x7061
-0x7062
-0x7063
-0x7064
-0x7065
-0x7066
-0x7068
-0x7069
-0x706A
-0x706B
-0x7070
-0x7071
-0x7074
-0x7076
-0x7078
-0x707A
-0x707C
-0x707D
-0x7082
-0x7083
-0x7084
-0x7085
-0x7086
-0x708A
-0x708E
-0x7091
-0x7092
-0x7093
-0x7094
-0x7095
-0x7096
-0x7098
-0x7099
-0x709A
-0x709F
-0x70A1
-0x70A4
-0x70A9
-0x70AB
-0x70AC
-0x70AD
-0x70AE
-0x70AF
-0x70B0
-0x70B1
-0x70B3
-0x70B4
-0x70B5
-0x70B7
-0x70B8
-0x70BA
-0x70BE
-0x70C5
-0x70C6
-0x70C7
-0x70C8
-0x70CA
-0x70CB
-0x70CD
-0x70CE
-0x70CF
-0x70D1
-0x70D2
-0x70D3
-0x70D4
-0x70D7
-0x70D8
-0x70D9
-0x70DA
-0x70DC
-0x70DD
-0x70DE
-0x70E0
-0x70E1
-0x70E2
-0x70E4
-0x70EF
-0x70F0
-0x70F3
-0x70F4
-0x70F6
-0x70F7
-0x70F8
-0x70F9
-0x70FA
-0x70FB
-0x70FC
-0x70FD
-0x70FF
-0x7100
-0x7102
-0x7104
-0x7106
-0x7109
-0x710A
-0x710B
-0x710C
-0x710D
-0x710E
-0x7110
-0x7113
-0x7117
-0x7119
-0x711A
-0x711B
-0x711C
-0x711E
-0x711F
-0x7120
-0x7121
-0x7122
-0x7123
-0x7125
-0x7126
-0x7128
-0x712E
-0x712F
-0x7130
-0x7131
-0x7132
-0x7136
-0x713A
-0x7141
-0x7142
-0x7143
-0x7144
-0x7146
-0x7147
-0x7149
-0x714B
-0x714C
-0x714D
-0x714E
-0x7150
-0x7152
-0x7153
-0x7154
-0x7156
-0x7158
-0x7159
-0x715A
-0x715C
-0x715D
-0x715E
-0x715F
-0x7160
-0x7161
-0x7162
-0x7163
-0x7164
-0x7165
-0x7166
-0x7167
-0x7168
-0x7169
-0x716A
-0x716C
-0x716E
-0x7170
-0x7172
-0x7178
-0x717B
-0x717D
-0x7180
-0x7181
-0x7182
-0x7184
-0x7185
-0x7186
-0x7187
-0x7189
-0x718A
-0x718F
-0x7190
-0x7192
-0x7194
-0x7197
-0x7199
-0x719A
-0x719B
-0x719C
-0x719D
-0x719E
-0x719F
-0x71A0
-0x71A1
-0x71A4
-0x71A5
-0x71A7
-0x71A8
-0x71A9
-0x71AA
-0x71AC
-0x71AF
-0x71B0
-0x71B1
-0x71B2
-0x71B3
-0x71B5
-0x71B8
-0x71B9
-0x71BC
-0x71BD
-0x71BE
-0x71BF
-0x71C0
-0x71C1
-0x71C2
-0x71C3
-0x71C4
-0x71C5
-0x71C6
-0x71C7
-0x71C8
-0x71C9
-0x71CA
-0x71CB
-0x71CE
-0x71CF
-0x71D0
-0x71D2
-0x71D4
-0x71D5
-0x71D6
-0x71D8
-0x71D9
-0x71DA
-0x71DB
-0x71DC
-0x71DF
-0x71E0
-0x71E1
-0x71E2
-0x71E4
-0x71E5
-0x71E6
-0x71E7
-0x71E8
-0x71EC
-0x71ED
-0x71EE
-0x71F0
-0x71F1
-0x71F2
-0x71F4
-0x71F8
-0x71F9
-0x71FB
-0x71FC
-0x71FD
-0x71FE
-0x71FF
-0x7201
-0x7202
-0x7203
-0x7205
-0x7206
-0x7207
-0x720A
-0x720C
-0x720D
-0x7210
-0x7213
-0x7214
-0x7219
-0x721A
-0x721B
-0x721D
-0x721E
-0x721F
-0x7222
-0x7223
-0x7226
-0x7227
-0x7228
-0x7229
-0x722A
-0x722C
-0x722D
-0x7230
-0x7235
-0x7236
-0x7238
-0x7239
-0x723A
-0x723B
-0x723D
-0x723E
-0x723F
-0x7241
-0x7242
-0x7244
-0x7246
-0x7247
-0x7248
-0x7249
-0x724A
-0x724B
-0x724C
-0x724F
-0x7252
-0x7253
-0x7256
-0x7258
-0x7259
-0x725A
-0x725B
-0x725D
-0x725E
-0x725F
-0x7260
-0x7261
-0x7262
-0x7263
-0x7267
-0x7269
-0x726A
-0x726C
-0x726E
-0x726F
-0x7270
-0x7272
-0x7273
-0x7274
-0x7276
-0x7277
-0x7278
-0x7279
-0x727B
-0x727C
-0x727D
-0x727E
-0x727F
-0x7280
-0x7281
-0x7284
-0x7285
-0x7286
-0x7288
-0x7289
-0x728B
-0x728C
-0x728D
-0x728E
-0x7290
-0x7291
-0x7292
-0x7293
-0x7295
-0x7296
-0x7297
-0x7298
-0x729A
-0x729B
-0x729D
-0x729E
-0x72A1
-0x72A2
-0x72A3
-0x72A4
-0x72A5
-0x72A6
-0x72A7
-0x72A8
-0x72A9
-0x72AA
-0x72AC
-0x72AE
-0x72AF
-0x72B0
-0x72B4
-0x72B5
-0x72BA
-0x72BD
-0x72BF
-0x72C0
-0x72C1
-0x72C2
-0x72C3
-0x72C4
-0x72C5
-0x72C6
-0x72C9
-0x72CA
-0x72CB
-0x72CC
-0x72CE
-0x72D0
-0x72D1
-0x72D2
-0x72D4
-0x72D6
-0x72D7
-0x72D8
-0x72D9
-0x72DA
-0x72DC
-0x72DF
-0x72E0
-0x72E1
-0x72E3
-0x72E4
-0x72E6
-0x72E8
-0x72E9
-0x72EA
-0x72EB
-0x72F3
-0x72F4
-0x72F6
-0x72F7
-0x72F8
-0x72F9
-0x72FA
-0x72FB
-0x72FC
-0x72FD
-0x72FE
-0x72FF
-0x7300
-0x7301
-0x7307
-0x7308
-0x730A
-0x730B
-0x730C
-0x730F
-0x7311
-0x7312
-0x7313
-0x7316
-0x7317
-0x7318
-0x7319
-0x731B
-0x731C
-0x731D
-0x731E
-0x7322
-0x7323
-0x7325
-0x7326
-0x7327
-0x7329
-0x732D
-0x7330
-0x7331
-0x7332
-0x7333
-0x7334
-0x7335
-0x7336
-0x7337
-0x733A
-0x733B
-0x733C
-0x733E
-0x733F
-0x7340
-0x7342
-0x7343
-0x7344
-0x7345
-0x7349
-0x734A
-0x734C
-0x734D
-0x734E
-0x7350
-0x7351
-0x7352
-0x7357
-0x7358
-0x7359
-0x735A
-0x735B
-0x735D
-0x735E
-0x735F
-0x7360
-0x7361
-0x7362
-0x7365
-0x7366
-0x7367
-0x7368
-0x7369
-0x736A
-0x736B
-0x736C
-0x736E
-0x736F
-0x7370
-0x7372
-0x7373
-0x7375
-0x7376
-0x7377
-0x7378
-0x737A
-0x737B
-0x737C
-0x737D
-0x737E
-0x737F
-0x7380
-0x7381
-0x7382
-0x7383
-0x7384
-0x7385
-0x7386
-0x7387
-0x7388
-0x7389
-0x738A
-0x738B
-0x738E
-0x7392
-0x7393
-0x7394
-0x7395
-0x7396
-0x7397
-0x739D
-0x739F
-0x73A0
-0x73A1
-0x73A2
-0x73A4
-0x73A5
-0x73A6
-0x73A8
-0x73A9
-0x73AB
-0x73AC
-0x73AD
-0x73B2
-0x73B3
-0x73B4
-0x73B5
-0x73B6
-0x73B7
-0x73B8
-0x73B9
-0x73BB
-0x73BC
-0x73BE
-0x73BF
-0x73C0
-0x73C2
-0x73C3
-0x73C5
-0x73C6
-0x73C7
-0x73C8
-0x73CA
-0x73CB
-0x73CC
-0x73CD
-0x73D2
-0x73D3
-0x73D4
-0x73D6
-0x73D7
-0x73D8
-0x73D9
-0x73DA
-0x73DB
-0x73DC
-0x73DD
-0x73DE
-0x73E0
-0x73E3
-0x73E5
-0x73E7
-0x73E8
-0x73E9
-0x73EA
-0x73EB
-0x73ED
-0x73EE
-0x73F4
-0x73F5
-0x73F6
-0x73F8
-0x73FA
-0x73FC
-0x73FD
-0x73FE
-0x73FF
-0x7400
-0x7401
-0x7403
-0x7404
-0x7405
-0x7406
-0x7407
-0x7408
-0x7409
-0x740A
-0x740B
-0x740C
-0x740D
-0x7416
-0x741A
-0x741B
-0x741D
-0x7420
-0x7421
-0x7422
-0x7423
-0x7424
-0x7425
-0x7426
-0x7428
-0x7429
-0x742A
-0x742B
-0x742C
-0x742D
-0x742E
-0x742F
-0x7430
-0x7431
-0x7432
-0x7433
-0x7434
-0x7435
-0x7436
-0x743A
-0x743F
-0x7440
-0x7441
-0x7442
-0x7444
-0x7446
-0x744A
-0x744B
-0x744D
-0x744E
-0x744F
-0x7450
-0x7451
-0x7452
-0x7454
-0x7455
-0x7457
-0x7459
-0x745A
-0x745B
-0x745C
-0x745E
-0x745F
-0x7462
-0x7463
-0x7464
-0x7467
-0x7469
-0x746A
-0x746D
-0x746E
-0x746F
-0x7470
-0x7471
-0x7472
-0x7473
-0x7475
-0x7479
-0x747C
-0x747D
-0x747E
-0x747F
-0x7480
-0x7481
-0x7483
-0x7485
-0x7486
-0x7487
-0x7488
-0x7489
-0x748A
-0x748B
-0x7490
-0x7492
-0x7494
-0x7495
-0x7497
-0x7498
-0x749A
-0x749C
-0x749E
-0x749F
-0x74A0
-0x74A1
-0x74A3
-0x74A5
-0x74A6
-0x74A7
-0x74A8
-0x74A9
-0x74AA
-0x74AB
-0x74AD
-0x74AF
-0x74B0
-0x74B1
-0x74B2
-0x74B5
-0x74B6
-0x74B7
-0x74B8
-0x74BA
-0x74BB
-0x74BD
-0x74BE
-0x74BF
-0x74C0
-0x74C1
-0x74C2
-0x74C3
-0x74C5
-0x74CA
-0x74CB
-0x74CF
-0x74D4
-0x74D5
-0x74D6
-0x74D7
-0x74D8
-0x74D9
-0x74DA
-0x74DB
-0x74DC
-0x74DD
-0x74DE
-0x74DF
-0x74E0
-0x74E1
-0x74E2
-0x74E3
-0x74E4
-0x74E5
-0x74E6
-0x74E8
-0x74E9
-0x74EC
-0x74EE
-0x74F4
-0x74F5
-0x74F6
-0x74F7
-0x74FB
-0x74FD
-0x74FE
-0x74FF
-0x7500
-0x7502
-0x7503
-0x7504
-0x7507
-0x7508
-0x750B
-0x750C
-0x750D
-0x750F
-0x7510
-0x7511
-0x7512
-0x7513
-0x7514
-0x7515
-0x7516
-0x7517
-0x7518
-0x751A
-0x751C
-0x751D
-0x751F
-0x7521
-0x7522
-0x7525
-0x7526
-0x7528
-0x7529
-0x752A
-0x752B
-0x752C
-0x752D
-0x752E
-0x752F
-0x7530
-0x7531
-0x7532
-0x7533
-0x7537
-0x7538
-0x7539
-0x753A
-0x753D
-0x753E
-0x753F
-0x7540
-0x7547
-0x7548
-0x754B
-0x754C
-0x754E
-0x754F
-0x7554
-0x7559
-0x755A
-0x755B
-0x755C
-0x755D
-0x755F
-0x7562
-0x7563
-0x7564
-0x7565
-0x7566
-0x756A
-0x756B
-0x756C
-0x756F
-0x7570
-0x7576
-0x7577
-0x7578
-0x7579
-0x757D
-0x757E
-0x757F
-0x7580
-0x7584
-0x7586
-0x7587
-0x758A
-0x758B
-0x758C
-0x758F
-0x7590
-0x7591
-0x7594
-0x7595
-0x7598
-0x7599
-0x759A
-0x759D
-0x75A2
-0x75A3
-0x75A4
-0x75A5
-0x75A7
-0x75AA
-0x75AB
-0x75B0
-0x75B2
-0x75B3
-0x75B5
-0x75B6
-0x75B8
-0x75B9
-0x75BA
-0x75BB
-0x75BC
-0x75BD
-0x75BE
-0x75BF
-0x75C0
-0x75C1
-0x75C2
-0x75C4
-0x75C5
-0x75C7
-0x75CA
-0x75CB
-0x75CC
-0x75CD
-0x75CE
-0x75CF
-0x75D0
-0x75D1
-0x75D2
-0x75D4
-0x75D5
-0x75D7
-0x75D8
-0x75D9
-0x75DA
-0x75DB
-0x75DD
-0x75DE
-0x75DF
-0x75E0
-0x75E1
-0x75E2
-0x75E3
-0x75E4
-0x75E6
-0x75E7
-0x75ED
-0x75EF
-0x75F0
-0x75F1
-0x75F2
-0x75F3
-0x75F4
-0x75F5
-0x75F6
-0x75F7
-0x75F8
-0x75F9
-0x75FA
-0x75FB
-0x75FC
-0x75FD
-0x75FE
-0x75FF
-0x7600
-0x7601
-0x7603
-0x7608
-0x7609
-0x760A
-0x760B
-0x760C
-0x760D
-0x760F
-0x7610
-0x7611
-0x7613
-0x7614
-0x7615
-0x7616
-0x7619
-0x761A
-0x761B
-0x761C
-0x761D
-0x761E
-0x761F
-0x7620
-0x7621
-0x7622
-0x7623
-0x7624
-0x7625
-0x7626
-0x7627
-0x7628
-0x7629
-0x762D
-0x762F
-0x7630
-0x7631
-0x7632
-0x7633
-0x7634
-0x7635
-0x7638
-0x763A
-0x763C
-0x763D
-0x7642
-0x7643
-0x7646
-0x7647
-0x7648
-0x7649
-0x764C
-0x7650
-0x7652
-0x7653
-0x7656
-0x7657
-0x7658
-0x7659
-0x765A
-0x765C
-0x765F
-0x7660
-0x7661
-0x7662
-0x7664
-0x7665
-0x7669
-0x766A
-0x766C
-0x766D
-0x766E
-0x7670
-0x7671
-0x7672
-0x7675
-0x7678
-0x7679
-0x767B
-0x767C
-0x767D
-0x767E
-0x767F
-0x7681
-0x7682
-0x7684
-0x7686
-0x7687
-0x7688
-0x7689
-0x768A
-0x768B
-0x768E
-0x768F
-0x7692
-0x7693
-0x7695
-0x7696
-0x7699
-0x769A
-0x769B
-0x769C
-0x769D
-0x769E
-0x76A4
-0x76A6
-0x76AA
-0x76AB
-0x76AD
-0x76AE
-0x76AF
-0x76B0
-0x76B4
-0x76B5
-0x76B8
-0x76BA
-0x76BB
-0x76BD
-0x76BE
-0x76BF
-0x76C2
-0x76C3
-0x76C4
-0x76C5
-0x76C6
-0x76C8
-0x76C9
-0x76CA
-0x76CD
-0x76CE
-0x76D2
-0x76D3
-0x76D4
-0x76DA
-0x76DB
-0x76DC
-0x76DD
-0x76DE
-0x76DF
-0x76E1
-0x76E3
-0x76E4
-0x76E5
-0x76E6
-0x76E7
-0x76E9
-0x76EA
-0x76EC
-0x76ED
-0x76EE
-0x76EF
-0x76F0
-0x76F1
-0x76F2
-0x76F3
-0x76F4
-0x76F5
-0x76F7
-0x76F8
-0x76F9
-0x76FA
-0x76FB
-0x76FC
-0x76FE
-0x7701
-0x7703
-0x7704
-0x7705
-0x7707
-0x7708
-0x7709
-0x770A
-0x770B
-0x7710
-0x7711
-0x7712
-0x7713
-0x7715
-0x7719
-0x771A
-0x771B
-0x771D
-0x771F
-0x7720
-0x7722
-0x7723
-0x7725
-0x7727
-0x7728
-0x7729
-0x772D
-0x772F
-0x7731
-0x7732
-0x7733
-0x7734
-0x7735
-0x7736
-0x7737
-0x7738
-0x7739
-0x773A
-0x773B
-0x773C
-0x773D
-0x773E
-0x7744
-0x7745
-0x7746
-0x7747
-0x774A
-0x774B
-0x774C
-0x774D
-0x774E
-0x774F
-0x7752
-0x7754
-0x7755
-0x7756
-0x7759
-0x775A
-0x775B
-0x775C
-0x775E
-0x775F
-0x7760
-0x7761
-0x7762
-0x7763
-0x7765
-0x7766
-0x7767
-0x7768
-0x7769
-0x776A
-0x776B
-0x776C
-0x776D
-0x776E
-0x776F
-0x7779
-0x777C
-0x777D
-0x777E
-0x777F
-0x7780
-0x7781
-0x7782
-0x7783
-0x7784
-0x7785
-0x7787
-0x7788
-0x7789
-0x778B
-0x778C
-0x778D
-0x778E
-0x778F
-0x7791
-0x7795
-0x7797
-0x7799
-0x779A
-0x779B
-0x779C
-0x779D
-0x779E
-0x779F
-0x77A0
-0x77A1
-0x77A2
-0x77A3
-0x77A5
-0x77A7
-0x77A8
-0x77AA
-0x77AB
-0x77AC
-0x77AD
-0x77B0
-0x77B1
-0x77B2
-0x77B3
-0x77B4
-0x77B5
-0x77B6
-0x77B7
-0x77BA
-0x77BB
-0x77BC
-0x77BD
-0x77BF
-0x77C2
-0x77C4
-0x77C7
-0x77C9
-0x77CA
-0x77CC
-0x77CD
-0x77CE
-0x77CF
-0x77D0
-0x77D3
-0x77D4
-0x77D5
-0x77D7
-0x77D8
-0x77D9
-0x77DA
-0x77DB
-0x77DC
-0x77DE
-0x77E0
-0x77E2
-0x77E3
-0x77E5
-0x77E7
-0x77E8
-0x77E9
-0x77EC
-0x77ED
-0x77EE
-0x77EF
-0x77F0
-0x77F1
-0x77F2
-0x77F3
-0x77F7
-0x77F8
-0x77F9
-0x77FA
-0x77FB
-0x77FC
-0x77FD
-0x7802
-0x7803
-0x7805
-0x7806
-0x7809
-0x780C
-0x780D
-0x780E
-0x780F
-0x7810
-0x7811
-0x7812
-0x7813
-0x7814
-0x781D
-0x781F
-0x7820
-0x7821
-0x7822
-0x7823
-0x7825
-0x7826
-0x7827
-0x7828
-0x7829
-0x782A
-0x782B
-0x782C
-0x782D
-0x782E
-0x782F
-0x7830
-0x7831
-0x7832
-0x7833
-0x7834
-0x7835
-0x7837
-0x7838
-0x7843
-0x7845
-0x7848
-0x7849
-0x784A
-0x784C
-0x784D
-0x784E
-0x7850
-0x7852
-0x785C
-0x785D
-0x785E
-0x7860
-0x7862
-0x7864
-0x7865
-0x7868
-0x7869
-0x786A
-0x786B
-0x786C
-0x786D
-0x786E
-0x786F
-0x7870
-0x7871
-0x7879
-0x787B
-0x787C
-0x787E
-0x787F
-0x7880
-0x7883
-0x7884
-0x7885
-0x7886
-0x7887
-0x7889
-0x788C
-0x788E
-0x788F
-0x7891
-0x7893
-0x7894
-0x7895
-0x7896
-0x7897
-0x7898
-0x7899
-0x789A
-0x789E
-0x789F
-0x78A0
-0x78A1
-0x78A2
-0x78A3
-0x78A4
-0x78A5
-0x78A7
-0x78A8
-0x78A9
-0x78AA
-0x78AB
-0x78AC
-0x78AD
-0x78B0
-0x78B2
-0x78B3
-0x78B4
-0x78BA
-0x78BB
-0x78BC
-0x78BE
-0x78C1
-0x78C3
-0x78C4
-0x78C5
-0x78C8
-0x78C9
-0x78CA
-0x78CB
-0x78CC
-0x78CD
-0x78CE
-0x78CF
-0x78D0
-0x78D1
-0x78D4
-0x78D5
-0x78DA
-0x78DB
-0x78DD
-0x78DE
-0x78DF
-0x78E0
-0x78E1
-0x78E2
-0x78E3
-0x78E5
-0x78E7
-0x78E8
-0x78E9
-0x78EA
-0x78EC
-0x78ED
-0x78EF
-0x78F2
-0x78F3
-0x78F4
-0x78F7
-0x78F9
-0x78FA
-0x78FB
-0x78FC
-0x78FD
-0x78FE
-0x78FF
-0x7901
-0x7902
-0x7904
-0x7905
-0x7909
-0x790C
-0x790E
-0x7910
-0x7911
-0x7912
-0x7913
-0x7914
-0x7917
-0x7919
-0x791B
-0x791C
-0x791D
-0x791E
-0x7921
-0x7923
-0x7924
-0x7925
-0x7926
-0x7927
-0x7928
-0x7929
-0x792A
-0x792B
-0x792C
-0x792D
-0x792F
-0x7931
-0x7935
-0x7938
-0x7939
-0x793A
-0x793D
-0x793E
-0x793F
-0x7940
-0x7941
-0x7942
-0x7944
-0x7945
-0x7946
-0x7947
-0x7948
-0x7949
-0x794A
-0x794B
-0x794C
-0x794F
-0x7950
-0x7951
-0x7952
-0x7953
-0x7954
-0x7955
-0x7956
-0x7957
-0x795A
-0x795B
-0x795C
-0x795D
-0x795E
-0x795F
-0x7960
-0x7961
-0x7963
-0x7964
-0x7965
-0x7967
-0x7968
-0x7969
-0x796A
-0x796B
-0x796D
-0x7970
-0x7972
-0x7973
-0x7974
-0x7979
-0x797A
-0x797C
-0x797D
-0x797F
-0x7981
-0x7982
-0x7988
-0x798A
-0x798B
-0x798D
-0x798E
-0x798F
-0x7990
-0x7992
-0x7993
-0x7994
-0x7995
-0x7996
-0x7997
-0x7998
-0x799A
-0x799B
-0x799C
-0x79A0
-0x79A1
-0x79A2
-0x79A4
-0x79A6
-0x79A7
-0x79A8
-0x79AA
-0x79AB
-0x79AC
-0x79AD
-0x79AE
-0x79B0
-0x79B1
-0x79B2
-0x79B3
-0x79B4
-0x79B6
-0x79B7
-0x79B8
-0x79B9
-0x79BA
-0x79BB
-0x79BD
-0x79BE
-0x79BF
-0x79C0
-0x79C1
-0x79C5
-0x79C8
-0x79C9
-0x79CB
-0x79CD
-0x79CE
-0x79CF
-0x79D1
-0x79D2
-0x79D5
-0x79D6
-0x79D8
-0x79DC
-0x79DD
-0x79DE
-0x79DF
-0x79E0
-0x79E3
-0x79E4
-0x79E6
-0x79E7
-0x79E9
-0x79EA
-0x79EB
-0x79EC
-0x79ED
-0x79EE
-0x79F6
-0x79F7
-0x79F8
-0x79FA
-0x79FB
-0x7A00
-0x7A02
-0x7A03
-0x7A04
-0x7A05
-0x7A08
-0x7A0A
-0x7A0B
-0x7A0C
-0x7A0D
-0x7A10
-0x7A11
-0x7A12
-0x7A13
-0x7A14
-0x7A15
-0x7A17
-0x7A18
-0x7A19
-0x7A1A
-0x7A1B
-0x7A1C
-0x7A1E
-0x7A1F
-0x7A20
-0x7A22
-0x7A26
-0x7A28
-0x7A2B
-0x7A2E
-0x7A2F
-0x7A30
-0x7A31
-0x7A37
-0x7A39
-0x7A3B
-0x7A3C
-0x7A3D
-0x7A3F
-0x7A40
-0x7A44
-0x7A46
-0x7A47
-0x7A48
-0x7A4A
-0x7A4B
-0x7A4C
-0x7A4D
-0x7A4E
-0x7A54
-0x7A56
-0x7A57
-0x7A58
-0x7A5A
-0x7A5B
-0x7A5C
-0x7A5F
-0x7A60
-0x7A61
-0x7A62
-0x7A67
-0x7A68
-0x7A69
-0x7A6B
-0x7A6C
-0x7A6D
-0x7A6E
-0x7A70
-0x7A71
-0x7A74
-0x7A75
-0x7A76
-0x7A78
-0x7A79
-0x7A7A
-0x7A7B
-0x7A7E
-0x7A7F
-0x7A80
-0x7A81
-0x7A84
-0x7A85
-0x7A86
-0x7A87
-0x7A88
-0x7A89
-0x7A8A
-0x7A8B
-0x7A8C
-0x7A8F
-0x7A90
-0x7A92
-0x7A94
-0x7A95
-0x7A96
-0x7A97
-0x7A98
-0x7A99
-0x7A9E
-0x7A9F
-0x7AA0
-0x7AA2
-0x7AA3
-0x7AA8
-0x7AA9
-0x7AAA
-0x7AAB
-0x7AAC
-0x7AAE
-0x7AAF
-0x7AB1
-0x7AB2
-0x7AB3
-0x7AB4
-0x7AB5
-0x7AB6
-0x7AB7
-0x7AB8
-0x7ABA
-0x7ABE
-0x7ABF
-0x7AC0
-0x7AC1
-0x7AC4
-0x7AC5
-0x7AC7
-0x7ACA
-0x7ACB
-0x7AD1
-0x7AD8
-0x7AD9
-0x7ADF
-0x7AE0
-0x7AE3
-0x7AE4
-0x7AE5
-0x7AE6
-0x7AEB
-0x7AED
-0x7AEE
-0x7AEF
-0x7AF6
-0x7AF7
-0x7AF9
-0x7AFA
-0x7AFB
-0x7AFD
-0x7AFF
-0x7B00
-0x7B01
-0x7B04
-0x7B05
-0x7B06
-0x7B08
-0x7B09
-0x7B0A
-0x7B0E
-0x7B0F
-0x7B10
-0x7B11
-0x7B12
-0x7B13
-0x7B18
-0x7B19
-0x7B1A
-0x7B1B
-0x7B1D
-0x7B1E
-0x7B20
-0x7B22
-0x7B23
-0x7B24
-0x7B25
-0x7B26
-0x7B28
-0x7B2A
-0x7B2B
-0x7B2C
-0x7B2D
-0x7B2E
-0x7B2F
-0x7B30
-0x7B31
-0x7B32
-0x7B33
-0x7B34
-0x7B35
-0x7B38
-0x7B3B
-0x7B40
-0x7B44
-0x7B45
-0x7B46
-0x7B47
-0x7B48
-0x7B49
-0x7B4A
-0x7B4B
-0x7B4C
-0x7B4D
-0x7B4E
-0x7B4F
-0x7B50
-0x7B51
-0x7B52
-0x7B54
-0x7B56
-0x7B58
-0x7B60
-0x7B61
-0x7B63
-0x7B64
-0x7B65
-0x7B66
-0x7B67
-0x7B69
-0x7B6D
-0x7B6E
-0x7B70
-0x7B71
-0x7B72
-0x7B73
-0x7B74
-0x7B75
-0x7B76
-0x7B77
-0x7B78
-0x7B82
-0x7B84
-0x7B85
-0x7B87
-0x7B88
-0x7B8A
-0x7B8B
-0x7B8C
-0x7B8D
-0x7B8E
-0x7B8F
-0x7B90
-0x7B91
-0x7B94
-0x7B95
-0x7B96
-0x7B97
-0x7B98
-0x7B99
-0x7B9B
-0x7B9C
-0x7B9D
-0x7BA0
-0x7BA1
-0x7BA4
-0x7BAC
-0x7BAD
-0x7BAF
-0x7BB1
-0x7BB4
-0x7BB5
-0x7BB7
-0x7BB8
-0x7BB9
-0x7BBE
-0x7BC0
-0x7BC1
-0x7BC4
-0x7BC6
-0x7BC7
-0x7BC9
-0x7BCA
-0x7BCB
-0x7BCC
-0x7BCE
-0x7BD4
-0x7BD5
-0x7BD8
-0x7BD9
-0x7BDA
-0x7BDB
-0x7BDC
-0x7BDD
-0x7BDE
-0x7BDF
-0x7BE0
-0x7BE1
-0x7BE2
-0x7BE3
-0x7BE4
-0x7BE5
-0x7BE6
-0x7BE7
-0x7BE8
-0x7BE9
-0x7BEA
-0x7BEB
-0x7BF0
-0x7BF1
-0x7BF2
-0x7BF3
-0x7BF4
-0x7BF7
-0x7BF8
-0x7BF9
-0x7BFB
-0x7BFD
-0x7BFE
-0x7BFF
-0x7C00
-0x7C01
-0x7C02
-0x7C03
-0x7C05
-0x7C06
-0x7C07
-0x7C09
-0x7C0A
-0x7C0B
-0x7C0C
-0x7C0D
-0x7C0E
-0x7C0F
-0x7C10
-0x7C11
-0x7C19
-0x7C1C
-0x7C1D
-0x7C1E
-0x7C1F
-0x7C20
-0x7C21
-0x7C22
-0x7C23
-0x7C25
-0x7C26
-0x7C27
-0x7C28
-0x7C29
-0x7C2A
-0x7C2B
-0x7C2C
-0x7C2D
-0x7C30
-0x7C33
-0x7C37
-0x7C38
-0x7C39
-0x7C3B
-0x7C3C
-0x7C3D
-0x7C3E
-0x7C3F
-0x7C40
-0x7C43
-0x7C45
-0x7C47
-0x7C48
-0x7C49
-0x7C4A
-0x7C4C
-0x7C4D
-0x7C50
-0x7C53
-0x7C54
-0x7C57
-0x7C59
-0x7C5A
-0x7C5B
-0x7C5C
-0x7C5F
-0x7C60
-0x7C63
-0x7C64
-0x7C65
-0x7C66
-0x7C67
-0x7C69
-0x7C6A
-0x7C6B
-0x7C6C
-0x7C6E
-0x7C6F
-0x7C72
-0x7C73
-0x7C75
-0x7C78
-0x7C79
-0x7C7A
-0x7C7D
-0x7C7F
-0x7C80
-0x7C81
-0x7C84
-0x7C85
-0x7C88
-0x7C89
-0x7C8A
-0x7C8C
-0x7C8D
-0x7C91
-0x7C92
-0x7C94
-0x7C95
-0x7C96
-0x7C97
-0x7C98
-0x7C9E
-0x7C9F
-0x7CA1
-0x7CA2
-0x7CA3
-0x7CA5
-0x7CA8
-0x7CAF
-0x7CB1
-0x7CB2
-0x7CB3
-0x7CB4
-0x7CB5
-0x7CB9
-0x7CBA
-0x7CBB
-0x7CBC
-0x7CBD
-0x7CBE
-0x7CBF
-0x7CC5
-0x7CC8
-0x7CCA
-0x7CCB
-0x7CCC
-0x7CCE
-0x7CD0
-0x7CD1
-0x7CD2
-0x7CD4
-0x7CD5
-0x7CD6
-0x7CD7
-0x7CD9
-0x7CDC
-0x7CDD
-0x7CDE
-0x7CDF
-0x7CE0
-0x7CE2
-0x7CE7
-0x7CE8
-0x7CEA
-0x7CEC
-0x7CEE
-0x7CEF
-0x7CF0
-0x7CF1
-0x7CF2
-0x7CF4
-0x7CF6
-0x7CF7
-0x7CF8
-0x7CFB
-0x7CFD
-0x7CFE
-0x7D00
-0x7D01
-0x7D02
-0x7D03
-0x7D04
-0x7D05
-0x7D06
-0x7D07
-0x7D08
-0x7D09
-0x7D0A
-0x7D0B
-0x7D0C
-0x7D0D
-0x7D0E
-0x7D0F
-0x7D10
-0x7D11
-0x7D12
-0x7D13
-0x7D14
-0x7D15
-0x7D16
-0x7D17
-0x7D18
-0x7D19
-0x7D1A
-0x7D1B
-0x7D1C
-0x7D1D
-0x7D1E
-0x7D1F
-0x7D20
-0x7D21
-0x7D22
-0x7D28
-0x7D29
-0x7D2B
-0x7D2C
-0x7D2E
-0x7D2F
-0x7D30
-0x7D31
-0x7D32
-0x7D33
-0x7D35
-0x7D36
-0x7D38
-0x7D39
-0x7D3A
-0x7D3B
-0x7D3C
-0x7D3D
-0x7D3E
-0x7D3F
-0x7D40
-0x7D41
-0x7D42
-0x7D43
-0x7D44
-0x7D45
-0x7D46
-0x7D47
-0x7D4A
-0x7D4E
-0x7D4F
-0x7D50
-0x7D51
-0x7D52
-0x7D53
-0x7D54
-0x7D55
-0x7D56
-0x7D58
-0x7D5B
-0x7D5C
-0x7D5E
-0x7D5F
-0x7D61
-0x7D62
-0x7D63
-0x7D66
-0x7D67
-0x7D68
-0x7D69
-0x7D6A
-0x7D6B
-0x7D6D
-0x7D6E
-0x7D6F
-0x7D70
-0x7D71
-0x7D72
-0x7D73
-0x7D79
-0x7D7A
-0x7D7B
-0x7D7C
-0x7D7D
-0x7D7F
-0x7D80
-0x7D81
-0x7D83
-0x7D84
-0x7D85
-0x7D86
-0x7D88
-0x7D8C
-0x7D8D
-0x7D8E
-0x7D8F
-0x7D91
-0x7D92
-0x7D93
-0x7D94
-0x7D96
-0x7D9C
-0x7D9D
-0x7D9E
-0x7D9F
-0x7DA0
-0x7DA1
-0x7DA2
-0x7DA3
-0x7DA6
-0x7DA7
-0x7DA9
-0x7DAA
-0x7DAC
-0x7DAD
-0x7DAE
-0x7DAF
-0x7DB0
-0x7DB1
-0x7DB2
-0x7DB4
-0x7DB5
-0x7DB7
-0x7DB8
-0x7DB9
-0x7DBA
-0x7DBB
-0x7DBC
-0x7DBD
-0x7DBE
-0x7DBF
-0x7DC0
-0x7DC1
-0x7DC2
-0x7DC4
-0x7DC5
-0x7DC6
-0x7DC7
-0x7DC9
-0x7DCA
-0x7DCB
-0x7DCC
-0x7DCE
-0x7DD2
-0x7DD7
-0x7DD8
-0x7DD9
-0x7DDA
-0x7DDB
-0x7DDD
-0x7DDE
-0x7DDF
-0x7DE0
-0x7DE1
-0x7DE3
-0x7DE6
-0x7DE7
-0x7DE8
-0x7DE9
-0x7DEA
-0x7DEC
-0x7DEE
-0x7DEF
-0x7DF0
-0x7DF1
-0x7DF2
-0x7DF3
-0x7DF4
-0x7DF6
-0x7DF7
-0x7DF9
-0x7DFA
-0x7DFB
-0x7E03
-0x7E08
-0x7E09
-0x7E0A
-0x7E0B
-0x7E0C
-0x7E0D
-0x7E0E
-0x7E0F
-0x7E10
-0x7E11
-0x7E12
-0x7E13
-0x7E14
-0x7E15
-0x7E16
-0x7E17
-0x7E1A
-0x7E1B
-0x7E1C
-0x7E1D
-0x7E1E
-0x7E1F
-0x7E20
-0x7E21
-0x7E22
-0x7E23
-0x7E24
-0x7E25
-0x7E29
-0x7E2A
-0x7E2B
-0x7E2D
-0x7E2E
-0x7E2F
-0x7E30
-0x7E31
-0x7E32
-0x7E33
-0x7E34
-0x7E35
-0x7E36
-0x7E37
-0x7E38
-0x7E39
-0x7E3A
-0x7E3B
-0x7E3C
-0x7E3D
-0x7E3E
-0x7E3F
-0x7E40
-0x7E41
-0x7E42
-0x7E43
-0x7E44
-0x7E45
-0x7E46
-0x7E47
-0x7E48
-0x7E49
-0x7E4C
-0x7E50
-0x7E51
-0x7E52
-0x7E53
-0x7E54
-0x7E55
-0x7E56
-0x7E57
-0x7E58
-0x7E59
-0x7E5A
-0x7E5C
-0x7E5E
-0x7E5F
-0x7E60
-0x7E61
-0x7E62
-0x7E63
-0x7E68
-0x7E69
-0x7E6A
-0x7E6B
-0x7E6D
-0x7E6F
-0x7E70
-0x7E72
-0x7E73
-0x7E74
-0x7E75
-0x7E76
-0x7E77
-0x7E78
-0x7E79
-0x7E7A
-0x7E7B
-0x7E7C
-0x7E7D
-0x7E7E
-0x7E80
-0x7E81
-0x7E82
-0x7E86
-0x7E87
-0x7E88
-0x7E8A
-0x7E8B
-0x7E8C
-0x7E8D
-0x7E8F
-0x7E91
-0x7E93
-0x7E94
-0x7E95
-0x7E96
-0x7E97
-0x7E98
-0x7E99
-0x7E9A
-0x7E9B
-0x7E9C
-0x7F36
-0x7F38
-0x7F39
-0x7F3A
-0x7F3D
-0x7F3E
-0x7F3F
-0x7F43
-0x7F44
-0x7F45
-0x7F48
-0x7F4A
-0x7F4B
-0x7F4C
-0x7F4D
-0x7F4F
-0x7F50
-0x7F51
-0x7F54
-0x7F55
-0x7F58
-0x7F5B
-0x7F5C
-0x7F5D
-0x7F5E
-0x7F5F
-0x7F60
-0x7F61
-0x7F63
-0x7F65
-0x7F66
-0x7F67
-0x7F68
-0x7F69
-0x7F6A
-0x7F6B
-0x7F6C
-0x7F6D
-0x7F6E
-0x7F70
-0x7F72
-0x7F73
-0x7F75
-0x7F76
-0x7F77
-0x7F79
-0x7F7A
-0x7F7B
-0x7F7C
-0x7F7D
-0x7F7E
-0x7F7F
-0x7F83
-0x7F85
-0x7F86
-0x7F87
-0x7F88
-0x7F89
-0x7F8A
-0x7F8B
-0x7F8C
-0x7F8D
-0x7F8E
-0x7F91
-0x7F92
-0x7F94
-0x7F95
-0x7F96
-0x7F9A
-0x7F9B
-0x7F9C
-0x7F9D
-0x7F9E
-0x7FA0
-0x7FA1
-0x7FA2
-0x7FA4
-0x7FA5
-0x7FA6
-0x7FA7
-0x7FA8
-0x7FA9
-0x7FAC
-0x7FAD
-0x7FAF
-0x7FB0
-0x7FB1
-0x7FB2
-0x7FB3
-0x7FB5
-0x7FB6
-0x7FB7
-0x7FB8
-0x7FB9
-0x7FBA
-0x7FBB
-0x7FBC
-0x7FBD
-0x7FBE
-0x7FBF
-0x7FC0
-0x7FC1
-0x7FC2
-0x7FC3
-0x7FC5
-0x7FC7
-0x7FC9
-0x7FCA
-0x7FCB
-0x7FCC
-0x7FCD
-0x7FCE
-0x7FCF
-0x7FD0
-0x7FD1
-0x7FD2
-0x7FD4
-0x7FD5
-0x7FD7
-0x7FDB
-0x7FDC
-0x7FDE
-0x7FDF
-0x7FE0
-0x7FE1
-0x7FE2
-0x7FE3
-0x7FE5
-0x7FE6
-0x7FE8
-0x7FE9
-0x7FEA
-0x7FEB
-0x7FEC
-0x7FED
-0x7FEE
-0x7FEF
-0x7FF0
-0x7FF1
-0x7FF2
-0x7FF3
-0x7FF4
-0x7FF5
-0x7FF7
-0x7FF8
-0x7FF9
-0x7FFB
-0x7FFC
-0x7FFD
-0x7FFE
-0x7FFF
-0x8000
-0x8001
-0x8003
-0x8004
-0x8005
-0x8006
-0x8007
-0x800B
-0x800C
-0x800D
-0x800E
-0x800F
-0x8010
-0x8011
-0x8012
-0x8014
-0x8015
-0x8016
-0x8017
-0x8018
-0x8019
-0x801B
-0x801C
-0x801E
-0x801F
-0x8021
-0x8024
-0x8026
-0x8028
-0x8029
-0x802A
-0x802C
-0x8030
-0x8033
-0x8034
-0x8035
-0x8036
-0x8037
-0x8039
-0x803D
-0x803E
-0x803F
-0x8043
-0x8046
-0x8047
-0x8048
-0x804A
-0x804F
-0x8050
-0x8051
-0x8052
-0x8056
-0x8058
-0x805A
-0x805C
-0x805D
-0x805E
-0x8064
-0x8067
-0x806C
-0x806F
-0x8070
-0x8071
-0x8072
-0x8073
-0x8075
-0x8076
-0x8077
-0x8078
-0x8079
-0x807D
-0x807E
-0x807F
-0x8082
-0x8084
-0x8085
-0x8086
-0x8087
-0x8089
-0x808A
-0x808B
-0x808C
-0x808F
-0x8090
-0x8092
-0x8093
-0x8095
-0x8096
-0x8098
-0x8099
-0x809A
-0x809B
-0x809C
-0x809D
-0x80A1
-0x80A2
-0x80A3
-0x80A5
-0x80A9
-0x80AA
-0x80AB
-0x80AD
-0x80AE
-0x80AF
-0x80B1
-0x80B2
-0x80B4
-0x80B5
-0x80B8
-0x80BA
-0x80C2
-0x80C3
-0x80C4
-0x80C5
-0x80C7
-0x80C8
-0x80C9
-0x80CA
-0x80CC
-0x80CD
-0x80CE
-0x80CF
-0x80D0
-0x80D1
-0x80D4
-0x80D5
-0x80D6
-0x80D7
-0x80D8
-0x80D9
-0x80DA
-0x80DB
-0x80DC
-0x80DD
-0x80DE
-0x80E0
-0x80E1
-0x80E3
-0x80E4
-0x80E5
-0x80E6
-0x80ED
-0x80EF
-0x80F0
-0x80F1
-0x80F2
-0x80F3
-0x80F4
-0x80F5
-0x80F8
-0x80F9
-0x80FA
-0x80FB
-0x80FC
-0x80FD
-0x80FE
-0x8100
-0x8101
-0x8102
-0x8105
-0x8106
-0x8108
-0x810A
-0x8115
-0x8116
-0x8118
-0x8119
-0x811B
-0x811D
-0x811E
-0x811F
-0x8121
-0x8122
-0x8123
-0x8124
-0x8125
-0x8127
-0x8129
-0x812B
-0x812C
-0x812D
-0x812F
-0x8130
-0x8139
-0x813A
-0x813D
-0x813E
-0x8143
-0x8144
-0x8146
-0x8147
-0x814A
-0x814B
-0x814C
-0x814D
-0x814E
-0x814F
-0x8150
-0x8151
-0x8152
-0x8153
-0x8154
-0x8155
-0x815B
-0x815C
-0x815E
-0x8160
-0x8161
-0x8162
-0x8164
-0x8165
-0x8166
-0x8167
-0x8169
-0x816B
-0x816E
-0x816F
-0x8170
-0x8171
-0x8172
-0x8173
-0x8174
-0x8176
-0x8177
-0x8178
-0x8179
-0x817A
-0x817F
-0x8180
-0x8182
-0x8183
-0x8186
-0x8187
-0x8188
-0x8189
-0x818A
-0x818B
-0x818C
-0x818D
-0x818F
-0x8195
-0x8197
-0x8198
-0x8199
-0x819A
-0x819B
-0x819C
-0x819D
-0x819E
-0x819F
-0x81A0
-0x81A2
-0x81A3
-0x81A6
-0x81A7
-0x81A8
-0x81A9
-0x81AB
-0x81AC
-0x81AE
-0x81B0
-0x81B1
-0x81B2
-0x81B3
-0x81B4
-0x81B5
-0x81B7
-0x81B9
-0x81BA
-0x81BB
-0x81BC
-0x81BD
-0x81BE
-0x81BF
-0x81C0
-0x81C2
-0x81C3
-0x81C4
-0x81C5
-0x81C6
-0x81C7
-0x81C9
-0x81CA
-0x81CC
-0x81CD
-0x81CF
-0x81D0
-0x81D1
-0x81D2
-0x81D5
-0x81D7
-0x81D8
-0x81D9
-0x81DA
-0x81DB
-0x81DD
-0x81DE
-0x81DF
-0x81E0
-0x81E1
-0x81E2
-0x81E3
-0x81E5
-0x81E6
-0x81E7
-0x81E8
-0x81E9
-0x81EA
-0x81EC
-0x81ED
-0x81EE
-0x81F2
-0x81F3
-0x81F4
-0x81F7
-0x81F8
-0x81F9
-0x81FA
-0x81FB
-0x81FC
-0x81FE
-0x81FF
-0x8200
-0x8201
-0x8202
-0x8204
-0x8205
-0x8207
-0x8208
-0x8209
-0x820A
-0x820B
-0x820C
-0x820D
-0x8210
-0x8211
-0x8212
-0x8214
-0x8215
-0x8216
-0x821B
-0x821C
-0x821D
-0x821E
-0x821F
-0x8220
-0x8221
-0x8222
-0x8225
-0x8228
-0x822A
-0x822B
-0x822C
-0x822F
-0x8232
-0x8233
-0x8234
-0x8235
-0x8236
-0x8237
-0x8238
-0x8239
-0x823A
-0x823C
-0x823D
-0x823F
-0x8240
-0x8242
-0x8244
-0x8245
-0x8247
-0x8249
-0x824B
-0x824E
-0x824F
-0x8250
-0x8251
-0x8252
-0x8253
-0x8255
-0x8256
-0x8257
-0x8258
-0x8259
-0x825A
-0x825B
-0x825C
-0x825E
-0x825F
-0x8261
-0x8263
-0x8264
-0x8266
-0x8268
-0x8269
-0x826B
-0x826C
-0x826D
-0x826E
-0x826F
-0x8271
-0x8272
-0x8274
-0x8275
-0x8277
-0x8278
-0x827C
-0x827D
-0x827E
-0x827F
-0x8280
-0x8283
-0x8284
-0x8285
-0x828A
-0x828B
-0x828D
-0x828E
-0x828F
-0x8290
-0x8291
-0x8292
-0x8293
-0x8294
-0x8298
-0x8299
-0x829A
-0x829B
-0x829D
-0x829E
-0x829F
-0x82A0
-0x82A1
-0x82A2
-0x82A3
-0x82A4
-0x82A5
-0x82A7
-0x82A8
-0x82A9
-0x82AB
-0x82AC
-0x82AD
-0x82AE
-0x82AF
-0x82B0
-0x82B1
-0x82B3
-0x82B4
-0x82B5
-0x82B6
-0x82B7
-0x82B8
-0x82B9
-0x82BA
-0x82BB
-0x82BC
-0x82BD
-0x82BE
-0x82C0
-0x82C2
-0x82C3
-0x82D1
-0x82D2
-0x82D3
-0x82D4
-0x82D5
-0x82D6
-0x82D7
-0x82D9
-0x82DB
-0x82DC
-0x82DE
-0x82DF
-0x82E0
-0x82E1
-0x82E3
-0x82E4
-0x82E5
-0x82E6
-0x82E7
-0x82E8
-0x82EA
-0x82EB
-0x82EC
-0x82ED
-0x82EF
-0x82F0
-0x82F1
-0x82F2
-0x82F3
-0x82F4
-0x82F5
-0x82F6
-0x82F9
-0x82FA
-0x82FB
-0x82FE
-0x8300
-0x8301
-0x8302
-0x8303
-0x8304
-0x8305
-0x8306
-0x8307
-0x8308
-0x8309
-0x830C
-0x830D
-0x8316
-0x8317
-0x8319
-0x831B
-0x831C
-0x831E
-0x8320
-0x8322
-0x8324
-0x8325
-0x8326
-0x8327
-0x8328
-0x8329
-0x832A
-0x832B
-0x832C
-0x832D
-0x832F
-0x8331
-0x8332
-0x8333
-0x8334
-0x8335
-0x8336
-0x8337
-0x8338
-0x8339
-0x833A
-0x833B
-0x833C
-0x833F
-0x8340
-0x8341
-0x8342
-0x8343
-0x8344
-0x8345
-0x8347
-0x8348
-0x8349
-0x834A
-0x834B
-0x834C
-0x834D
-0x834E
-0x834F
-0x8350
-0x8351
-0x8352
-0x8353
-0x8354
-0x8356
-0x8373
-0x8374
-0x8375
-0x8376
-0x8377
-0x8378
-0x837A
-0x837B
-0x837C
-0x837D
-0x837E
-0x837F
-0x8381
-0x8383
-0x8386
-0x8387
-0x8388
-0x8389
-0x838A
-0x838B
-0x838C
-0x838D
-0x838E
-0x838F
-0x8390
-0x8392
-0x8393
-0x8394
-0x8395
-0x8396
-0x8397
-0x8398
-0x8399
-0x839A
-0x839B
-0x839D
-0x839E
-0x83A0
-0x83A2
-0x83A3
-0x83A4
-0x83A5
-0x83A6
-0x83A7
-0x83A8
-0x83A9
-0x83AA
-0x83AB
-0x83AE
-0x83AF
-0x83B0
-0x83BD
-0x83BF
-0x83C0
-0x83C1
-0x83C2
-0x83C3
-0x83C4
-0x83C5
-0x83C6
-0x83C7
-0x83C8
-0x83C9
-0x83CA
-0x83CB
-0x83CC
-0x83CE
-0x83CF
-0x83D1
-0x83D4
-0x83D5
-0x83D6
-0x83D7
-0x83D8
-0x83D9
-0x83DB
-0x83DC
-0x83DD
-0x83DE
-0x83DF
-0x83E0
-0x83E1
-0x83E2
-0x83E3
-0x83E4
-0x83E5
-0x83E7
-0x83E8
-0x83E9
-0x83EA
-0x83EB
-0x83EC
-0x83EE
-0x83EF
-0x83F0
-0x83F1
-0x83F2
-0x83F3
-0x83F4
-0x83F5
-0x83F6
-0x83F8
-0x83F9
-0x83FA
-0x83FB
-0x83FC
-0x83FD
-0x83FE
-0x83FF
-0x8401
-0x8403
-0x8404
-0x8406
-0x8407
-0x8409
-0x840A
-0x840B
-0x840C
-0x840D
-0x840E
-0x840F
-0x8410
-0x8411
-0x8412
-0x8413
-0x841B
-0x8423
-0x8429
-0x842B
-0x842C
-0x842D
-0x842F
-0x8430
-0x8431
-0x8432
-0x8433
-0x8434
-0x8435
-0x8436
-0x8437
-0x8438
-0x8439
-0x843A
-0x843B
-0x843C
-0x843D
-0x843F
-0x8440
-0x8442
-0x8443
-0x8444
-0x8445
-0x8446
-0x8447
-0x8449
-0x844B
-0x844C
-0x844D
-0x844E
-0x8450
-0x8451
-0x8452
-0x8454
-0x8456
-0x8457
-0x8459
-0x845A
-0x845B
-0x845D
-0x845E
-0x845F
-0x8460
-0x8461
-0x8463
-0x8465
-0x8466
-0x8467
-0x8468
-0x8469
-0x846B
-0x846C
-0x846D
-0x846E
-0x846F
-0x8470
-0x8473
-0x8474
-0x8475
-0x8476
-0x8477
-0x8478
-0x8479
-0x847A
-0x847D
-0x847E
-0x8482
-0x8486
-0x848D
-0x848E
-0x848F
-0x8490
-0x8491
-0x8494
-0x8497
-0x8498
-0x8499
-0x849A
-0x849B
-0x849C
-0x849D
-0x849E
-0x849F
-0x84A0
-0x84A1
-0x84A2
-0x84A4
-0x84A7
-0x84A8
-0x84A9
-0x84AA
-0x84AB
-0x84AC
-0x84AE
-0x84AF
-0x84B0
-0x84B1
-0x84B2
-0x84B4
-0x84B6
-0x84B8
-0x84B9
-0x84BA
-0x84BB
-0x84BC
-0x84BF
-0x84C0
-0x84C1
-0x84C2
-0x84C4
-0x84C5
-0x84C6
-0x84C7
-0x84C9
-0x84CA
-0x84CB
-0x84CC
-0x84CD
-0x84CE
-0x84CF
-0x84D0
-0x84D1
-0x84D2
-0x84D3
-0x84D4
-0x84D6
-0x84D7
-0x84DB
-0x84E7
-0x84E8
-0x84E9
-0x84EA
-0x84EB
-0x84EC
-0x84EE
-0x84EF
-0x84F0
-0x84F1
-0x84F2
-0x84F3
-0x84F4
-0x84F6
-0x84F7
-0x84F9
-0x84FA
-0x84FB
-0x84FC
-0x84FD
-0x84FE
-0x84FF
-0x8500
-0x8502
-0x8506
-0x8507
-0x8508
-0x8509
-0x850A
-0x850B
-0x850C
-0x850D
-0x850E
-0x850F
-0x8511
-0x8512
-0x8513
-0x8514
-0x8515
-0x8516
-0x8517
-0x8518
-0x8519
-0x851A
-0x851C
-0x851D
-0x851E
-0x851F
-0x8520
-0x8521
-0x8523
-0x8524
-0x8525
-0x8526
-0x8527
-0x8528
-0x8529
-0x852A
-0x852B
-0x852C
-0x852D
-0x852E
-0x852F
-0x8530
-0x8531
-0x853B
-0x853D
-0x853E
-0x8540
-0x8541
-0x8543
-0x8544
-0x8545
-0x8546
-0x8547
-0x8548
-0x8549
-0x854A
-0x854D
-0x854E
-0x8551
-0x8553
-0x8554
-0x8555
-0x8556
-0x8557
-0x8558
-0x8559
-0x855B
-0x855D
-0x855E
-0x8560
-0x8561
-0x8562
-0x8563
-0x8564
-0x8565
-0x8566
-0x8567
-0x8568
-0x8569
-0x856A
-0x856B
-0x856C
-0x856D
-0x856E
-0x8571
-0x8575
-0x8576
-0x8577
-0x8578
-0x8579
-0x857A
-0x857B
-0x857C
-0x857E
-0x8580
-0x8581
-0x8582
-0x8583
-0x8584
-0x8585
-0x8586
-0x8587
-0x8588
-0x8589
-0x858A
-0x858B
-0x858C
-0x858D
-0x858E
-0x858F
-0x8590
-0x8591
-0x8594
-0x8595
-0x8596
-0x8598
-0x8599
-0x859A
-0x859B
-0x859C
-0x859D
-0x859E
-0x859F
-0x85A0
-0x85A1
-0x85A2
-0x85A3
-0x85A4
-0x85A6
-0x85A7
-0x85A8
-0x85A9
-0x85AA
-0x85AF
-0x85B0
-0x85B1
-0x85B3
-0x85B4
-0x85B5
-0x85B6
-0x85B7
-0x85B8
-0x85B9
-0x85BA
-0x85BD
-0x85BE
-0x85BF
-0x85C0
-0x85C2
-0x85C3
-0x85C4
-0x85C5
-0x85C6
-0x85C7
-0x85C8
-0x85C9
-0x85CB
-0x85CD
-0x85CE
-0x85CF
-0x85D0
-0x85D1
-0x85D2
-0x85D5
-0x85D7
-0x85D8
-0x85D9
-0x85DA
-0x85DC
-0x85DD
-0x85DE
-0x85DF
-0x85E1
-0x85E2
-0x85E3
-0x85E4
-0x85E5
-0x85E6
-0x85E8
-0x85E9
-0x85EA
-0x85EB
-0x85EC
-0x85ED
-0x85EF
-0x85F0
-0x85F1
-0x85F2
-0x85F6
-0x85F7
-0x85F8
-0x85F9
-0x85FA
-0x85FB
-0x85FD
-0x85FE
-0x85FF
-0x8600
-0x8601
-0x8604
-0x8605
-0x8606
-0x8607
-0x8609
-0x860A
-0x860B
-0x860C
-0x8611
-0x8617
-0x8618
-0x8619
-0x861A
-0x861B
-0x861C
-0x861E
-0x861F
-0x8620
-0x8621
-0x8622
-0x8623
-0x8624
-0x8625
-0x8626
-0x8627
-0x8629
-0x862A
-0x862C
-0x862D
-0x862E
-0x8631
-0x8632
-0x8633
-0x8634
-0x8635
-0x8636
-0x8638
-0x8639
-0x863A
-0x863B
-0x863C
-0x863E
-0x863F
-0x8640
-0x8643
-0x8646
-0x8647
-0x8648
-0x864B
-0x864C
-0x864D
-0x864E
-0x8650
-0x8652
-0x8653
-0x8654
-0x8655
-0x8656
-0x8659
-0x865B
-0x865C
-0x865E
-0x865F
-0x8661
-0x8662
-0x8663
-0x8664
-0x8665
-0x8667
-0x8668
-0x8669
-0x866A
-0x866B
-0x866D
-0x866E
-0x866F
-0x8670
-0x8671
-0x8673
-0x8674
-0x8677
-0x8679
-0x867A
-0x867B
-0x867C
-0x8685
-0x8686
-0x8687
-0x868A
-0x868B
-0x868C
-0x868D
-0x868E
-0x8690
-0x8691
-0x8693
-0x8694
-0x8695
-0x8696
-0x8697
-0x8698
-0x8699
-0x869A
-0x869C
-0x869D
-0x869E
-0x86A1
-0x86A2
-0x86A3
-0x86A4
-0x86A5
-0x86A7
-0x86A8
-0x86A9
-0x86AA
-0x86AF
-0x86B0
-0x86B1
-0x86B3
-0x86B4
-0x86B5
-0x86B6
-0x86B7
-0x86B8
-0x86B9
-0x86BA
-0x86BB
-0x86BC
-0x86BD
-0x86BE
-0x86BF
-0x86C0
-0x86C1
-0x86C2
-0x86C3
-0x86C4
-0x86C5
-0x86C6
-0x86C7
-0x86C8
-0x86C9
-0x86CB
-0x86CC
-0x86D0
-0x86D1
-0x86D3
-0x86D4
-0x86D6
-0x86D7
-0x86D8
-0x86D9
-0x86DA
-0x86DB
-0x86DC
-0x86DD
-0x86DE
-0x86DF
-0x86E2
-0x86E3
-0x86E4
-0x86E6
-0x86E8
-0x86E9
-0x86EA
-0x86EB
-0x86EC
-0x86ED
-0x86F5
-0x86F6
-0x86F7
-0x86F8
-0x86F9
-0x86FA
-0x86FB
-0x86FE
-0x8700
-0x8701
-0x8702
-0x8703
-0x8704
-0x8705
-0x8706
-0x8707
-0x8708
-0x8709
-0x870A
-0x870B
-0x870C
-0x870D
-0x870E
-0x8711
-0x8712
-0x8713
-0x8718
-0x8719
-0x871A
-0x871B
-0x871C
-0x871E
-0x8720
-0x8721
-0x8722
-0x8723
-0x8724
-0x8725
-0x8726
-0x8727
-0x8728
-0x8729
-0x872A
-0x872C
-0x872D
-0x872E
-0x8730
-0x8731
-0x8732
-0x8733
-0x8734
-0x8735
-0x8737
-0x8738
-0x873A
-0x873B
-0x873C
-0x873E
-0x873F
-0x8740
-0x8741
-0x8742
-0x8743
-0x8746
-0x874C
-0x874D
-0x874E
-0x874F
-0x8750
-0x8751
-0x8752
-0x8753
-0x8754
-0x8755
-0x8756
-0x8757
-0x8758
-0x8759
-0x875A
-0x875B
-0x875C
-0x875D
-0x875E
-0x875F
-0x8760
-0x8761
-0x8762
-0x8763
-0x8764
-0x8765
-0x8766
-0x8767
-0x8768
-0x8769
-0x876A
-0x876B
-0x876C
-0x876D
-0x876E
-0x876F
-0x8773
-0x8774
-0x8775
-0x8776
-0x8777
-0x8778
-0x8779
-0x877A
-0x877B
-0x8781
-0x8782
-0x8783
-0x8784
-0x8785
-0x8787
-0x8788
-0x8789
-0x878D
-0x878F
-0x8790
-0x8791
-0x8792
-0x8793
-0x8794
-0x8796
-0x8797
-0x8798
-0x879A
-0x879B
-0x879C
-0x879D
-0x879E
-0x879F
-0x87A2
-0x87A3
-0x87A4
-0x87AA
-0x87AB
-0x87AC
-0x87AD
-0x87AE
-0x87AF
-0x87B0
-0x87B2
-0x87B3
-0x87B4
-0x87B5
-0x87B6
-0x87B7
-0x87B8
-0x87B9
-0x87BA
-0x87BB
-0x87BC
-0x87BD
-0x87BE
-0x87BF
-0x87C0
-0x87C2
-0x87C3
-0x87C4
-0x87C5
-0x87C6
-0x87C8
-0x87C9
-0x87CA
-0x87CB
-0x87CC
-0x87D1
-0x87D2
-0x87D3
-0x87D4
-0x87D7
-0x87D8
-0x87D9
-0x87DB
-0x87DC
-0x87DD
-0x87DE
-0x87DF
-0x87E0
-0x87E1
-0x87E2
-0x87E3
-0x87E4
-0x87E5
-0x87E6
-0x87E7
-0x87E8
-0x87EA
-0x87EB
-0x87EC
-0x87ED
-0x87EF
-0x87F2
-0x87F3
-0x87F4
-0x87F6
-0x87F7
-0x87F9
-0x87FA
-0x87FB
-0x87FC
-0x87FE
-0x87FF
-0x8800
-0x8801
-0x8802
-0x8803
-0x8805
-0x8806
-0x8808
-0x8809
-0x880A
-0x880B
-0x880C
-0x880D
-0x8810
-0x8811
-0x8813
-0x8814
-0x8815
-0x8816
-0x8817
-0x8819
-0x881B
-0x881C
-0x881D
-0x881F
-0x8820
-0x8821
-0x8822
-0x8823
-0x8824
-0x8825
-0x8826
-0x8828
-0x8829
-0x882A
-0x882B
-0x882C
-0x882E
-0x882F
-0x8830
-0x8831
-0x8832
-0x8833
-0x8835
-0x8836
-0x8837
-0x8838
-0x8839
-0x883B
-0x883C
-0x883D
-0x883E
-0x883F
-0x8840
-0x8841
-0x8843
-0x8844
-0x8848
-0x884A
-0x884B
-0x884C
-0x884D
-0x884E
-0x8852
-0x8853
-0x8855
-0x8856
-0x8857
-0x8859
-0x885A
-0x885B
-0x885D
-0x8861
-0x8862
-0x8863
-0x8867
-0x8868
-0x8869
-0x886A
-0x886B
-0x886D
-0x886F
-0x8870
-0x8871
-0x8872
-0x8874
-0x8875
-0x8876
-0x8877
-0x8879
-0x887C
-0x887D
-0x887E
-0x887F
-0x8880
-0x8881
-0x8882
-0x8883
-0x8888
-0x8889
-0x888B
-0x888C
-0x888D
-0x888E
-0x8891
-0x8892
-0x8893
-0x8895
-0x8896
-0x8897
-0x8898
-0x8899
-0x889A
-0x889B
-0x889E
-0x889F
-0x88A1
-0x88A2
-0x88A4
-0x88A7
-0x88A8
-0x88AA
-0x88AB
-0x88AC
-0x88B1
-0x88B2
-0x88B6
-0x88B7
-0x88B8
-0x88B9
-0x88BA
-0x88BC
-0x88BD
-0x88BE
-0x88C0
-0x88C1
-0x88C2
-0x88C9
-0x88CA
-0x88CB
-0x88CC
-0x88CD
-0x88CE
-0x88D0
-0x88D2
-0x88D4
-0x88D5
-0x88D6
-0x88D7
-0x88D8
-0x88D9
-0x88DA
-0x88DB
-0x88DC
-0x88DD
-0x88DE
-0x88DF
-0x88E1
-0x88E7
-0x88E8
-0x88EB
-0x88EC
-0x88EE
-0x88EF
-0x88F0
-0x88F1
-0x88F2
-0x88F3
-0x88F4
-0x88F6
-0x88F7
-0x88F8
-0x88F9
-0x88FA
-0x88FB
-0x88FC
-0x88FD
-0x88FE
-0x8901
-0x8902
-0x8905
-0x8906
-0x8907
-0x8909
-0x890A
-0x890B
-0x890C
-0x890E
-0x8910
-0x8911
-0x8912
-0x8913
-0x8914
-0x8915
-0x8916
-0x8917
-0x8918
-0x8919
-0x891A
-0x891E
-0x891F
-0x8921
-0x8922
-0x8923
-0x8925
-0x8926
-0x8927
-0x8929
-0x892A
-0x892B
-0x892C
-0x892D
-0x892E
-0x892F
-0x8930
-0x8931
-0x8932
-0x8933
-0x8935
-0x8936
-0x8937
-0x8938
-0x893B
-0x893C
-0x893D
-0x893E
-0x8941
-0x8942
-0x8944
-0x8946
-0x8949
-0x894B
-0x894C
-0x894F
-0x8950
-0x8951
-0x8952
-0x8953
-0x8956
-0x8957
-0x8958
-0x8959
-0x895A
-0x895B
-0x895C
-0x895D
-0x895E
-0x895F
-0x8960
-0x8961
-0x8962
-0x8963
-0x8964
-0x8966
-0x8969
-0x896A
-0x896B
-0x896C
-0x896D
-0x896E
-0x896F
-0x8971
-0x8972
-0x8973
-0x8974
-0x8976
-0x8979
-0x897A
-0x897B
-0x897C
-0x897E
-0x897F
-0x8981
-0x8982
-0x8983
-0x8985
-0x8986
-0x8988
-0x898B
-0x898F
-0x8993
-0x8995
-0x8996
-0x8997
-0x8998
-0x899B
-0x899C
-0x899D
-0x899E
-0x899F
-0x89A1
-0x89A2
-0x89A3
-0x89A4
-0x89A6
-0x89AA
-0x89AC
-0x89AD
-0x89AE
-0x89AF
-0x89B2
-0x89B6
-0x89B7
-0x89B9
-0x89BA
-0x89BD
-0x89BE
-0x89BF
-0x89C0
-0x89D2
-0x89D3
-0x89D4
-0x89D5
-0x89D6
-0x89D9
-0x89DA
-0x89DB
-0x89DC
-0x89DD
-0x89DF
-0x89E0
-0x89E1
-0x89E2
-0x89E3
-0x89E4
-0x89E5
-0x89E6
-0x89E8
-0x89E9
-0x89EB
-0x89EC
-0x89ED
-0x89F0
-0x89F1
-0x89F2
-0x89F3
-0x89F4
-0x89F6
-0x89F7
-0x89F8
-0x89FA
-0x89FB
-0x89FC
-0x89FE
-0x89FF
-0x8A00
-0x8A02
-0x8A03
-0x8A04
-0x8A07
-0x8A08
-0x8A0A
-0x8A0C
-0x8A0E
-0x8A0F
-0x8A10
-0x8A11
-0x8A12
-0x8A13
-0x8A15
-0x8A16
-0x8A17
-0x8A18
-0x8A1B
-0x8A1D
-0x8A1E
-0x8A1F
-0x8A22
-0x8A23
-0x8A25
-0x8A27
-0x8A2A
-0x8A2C
-0x8A2D
-0x8A30
-0x8A31
-0x8A34
-0x8A36
-0x8A39
-0x8A3A
-0x8A3B
-0x8A3C
-0x8A3E
-0x8A3F
-0x8A40
-0x8A41
-0x8A44
-0x8A45
-0x8A46
-0x8A48
-0x8A4A
-0x8A4C
-0x8A4D
-0x8A4E
-0x8A4F
-0x8A50
-0x8A51
-0x8A52
-0x8A54
-0x8A55
-0x8A56
-0x8A57
-0x8A58
-0x8A59
-0x8A5B
-0x8A5E
-0x8A60
-0x8A61
-0x8A62
-0x8A63
-0x8A66
-0x8A68
-0x8A69
-0x8A6B
-0x8A6C
-0x8A6D
-0x8A6E
-0x8A70
-0x8A71
-0x8A72
-0x8A73
-0x8A74
-0x8A75
-0x8A76
-0x8A77
-0x8A79
-0x8A7A
-0x8A7B
-0x8A7C
-0x8A7F
-0x8A81
-0x8A82
-0x8A83
-0x8A84
-0x8A85
-0x8A86
-0x8A87
-0x8A8B
-0x8A8C
-0x8A8D
-0x8A8F
-0x8A91
-0x8A92
-0x8A93
-0x8A95
-0x8A96
-0x8A98
-0x8A99
-0x8A9A
-0x8A9E
-0x8AA0
-0x8AA1
-0x8AA3
-0x8AA4
-0x8AA5
-0x8AA6
-0x8AA7
-0x8AA8
-0x8AAA
-0x8AAB
-0x8AB0
-0x8AB2
-0x8AB6
-0x8AB8
-0x8AB9
-0x8ABA
-0x8ABB
-0x8ABC
-0x8ABD
-0x8ABE
-0x8ABF
-0x8AC0
-0x8AC2
-0x8AC3
-0x8AC4
-0x8AC5
-0x8AC6
-0x8AC7
-0x8AC8
-0x8AC9
-0x8ACB
-0x8ACD
-0x8ACF
-0x8AD1
-0x8AD2
-0x8AD3
-0x8AD4
-0x8AD5
-0x8AD6
-0x8AD7
-0x8AD8
-0x8AD9
-0x8ADB
-0x8ADC
-0x8ADD
-0x8ADE
-0x8ADF
-0x8AE0
-0x8AE1
-0x8AE2
-0x8AE4
-0x8AE6
-0x8AE7
-0x8AE8
-0x8AEB
-0x8AED
-0x8AEE
-0x8AEF
-0x8AF0
-0x8AF1
-0x8AF2
-0x8AF3
-0x8AF4
-0x8AF5
-0x8AF6
-0x8AF7
-0x8AF8
-0x8AFA
-0x8AFB
-0x8AFC
-0x8AFE
-0x8AFF
-0x8B00
-0x8B01
-0x8B02
-0x8B04
-0x8B05
-0x8B06
-0x8B07
-0x8B08
-0x8B0A
-0x8B0B
-0x8B0D
-0x8B0E
-0x8B0F
-0x8B10
-0x8B11
-0x8B12
-0x8B13
-0x8B14
-0x8B15
-0x8B16
-0x8B17
-0x8B18
-0x8B19
-0x8B1A
-0x8B1B
-0x8B1C
-0x8B1D
-0x8B1E
-0x8B20
-0x8B22
-0x8B23
-0x8B24
-0x8B25
-0x8B26
-0x8B27
-0x8B28
-0x8B2A
-0x8B2B
-0x8B2C
-0x8B2E
-0x8B2F
-0x8B30
-0x8B31
-0x8B33
-0x8B35
-0x8B36
-0x8B37
-0x8B39
-0x8B3A
-0x8B3B
-0x8B3C
-0x8B3D
-0x8B3E
-0x8B40
-0x8B41
-0x8B42
-0x8B45
-0x8B46
-0x8B47
-0x8B48
-0x8B49
-0x8B4A
-0x8B4B
-0x8B4E
-0x8B4F
-0x8B50
-0x8B51
-0x8B52
-0x8B53
-0x8B54
-0x8B55
-0x8B56
-0x8B57
-0x8B58
-0x8B59
-0x8B5A
-0x8B5C
-0x8B5D
-0x8B5F
-0x8B60
-0x8B63
-0x8B65
-0x8B66
-0x8B67
-0x8B68
-0x8B6A
-0x8B6B
-0x8B6C
-0x8B6D
-0x8B6F
-0x8B70
-0x8B74
-0x8B77
-0x8B78
-0x8B79
-0x8B7A
-0x8B7B
-0x8B7D
-0x8B7E
-0x8B7F
-0x8B80
-0x8B82
-0x8B84
-0x8B85
-0x8B86
-0x8B88
-0x8B8A
-0x8B8B
-0x8B8C
-0x8B8E
-0x8B92
-0x8B93
-0x8B94
-0x8B95
-0x8B96
-0x8B98
-0x8B99
-0x8B9A
-0x8B9C
-0x8B9E
-0x8B9F
-0x8C37
-0x8C39
-0x8C3B
-0x8C3C
-0x8C3D
-0x8C3E
-0x8C3F
-0x8C41
-0x8C42
-0x8C43
-0x8C45
-0x8C46
-0x8C47
-0x8C48
-0x8C49
-0x8C4A
-0x8C4B
-0x8C4C
-0x8C4D
-0x8C4E
-0x8C4F
-0x8C50
-0x8C54
-0x8C55
-0x8C56
-0x8C57
-0x8C5A
-0x8C5C
-0x8C5D
-0x8C5F
-0x8C61
-0x8C62
-0x8C64
-0x8C65
-0x8C66
-0x8C68
-0x8C69
-0x8C6A
-0x8C6B
-0x8C6C
-0x8C6D
-0x8C6F
-0x8C70
-0x8C71
-0x8C72
-0x8C73
-0x8C75
-0x8C76
-0x8C77
-0x8C78
-0x8C79
-0x8C7A
-0x8C7B
-0x8C7D
-0x8C80
-0x8C81
-0x8C82
-0x8C84
-0x8C85
-0x8C86
-0x8C89
-0x8C8A
-0x8C8C
-0x8C8D
-0x8C8F
-0x8C90
-0x8C91
-0x8C92
-0x8C93
-0x8C94
-0x8C95
-0x8C97
-0x8C98
-0x8C99
-0x8C9A
-0x8C9C
-0x8C9D
-0x8C9E
-0x8CA0
-0x8CA1
-0x8CA2
-0x8CA3
-0x8CA4
-0x8CA5
-0x8CA7
-0x8CA8
-0x8CA9
-0x8CAA
-0x8CAB
-0x8CAC
-0x8CAF
-0x8CB0
-0x8CB2
-0x8CB3
-0x8CB4
-0x8CB5
-0x8CB6
-0x8CB7
-0x8CB8
-0x8CB9
-0x8CBA
-0x8CBB
-0x8CBC
-0x8CBD
-0x8CBE
-0x8CBF
-0x8CC0
-0x8CC1
-0x8CC2
-0x8CC3
-0x8CC4
-0x8CC5
-0x8CC7
-0x8CC8
-0x8CCA
-0x8CCC
-0x8CCF
-0x8CD1
-0x8CD2
-0x8CD3
-0x8CD5
-0x8CD7
-0x8CD9
-0x8CDA
-0x8CDC
-0x8CDD
-0x8CDE
-0x8CDF
-0x8CE0
-0x8CE1
-0x8CE2
-0x8CE3
-0x8CE4
-0x8CE5
-0x8CE6
-0x8CE7
-0x8CE8
-0x8CEA
-0x8CEC
-0x8CED
-0x8CEE
-0x8CF0
-0x8CF1
-0x8CF3
-0x8CF4
-0x8CF5
-0x8CF8
-0x8CF9
-0x8CFA
-0x8CFB
-0x8CFC
-0x8CFD
-0x8CFE
-0x8D00
-0x8D02
-0x8D04
-0x8D05
-0x8D06
-0x8D07
-0x8D08
-0x8D09
-0x8D0A
-0x8D0D
-0x8D0F
-0x8D10
-0x8D13
-0x8D14
-0x8D15
-0x8D16
-0x8D17
-0x8D19
-0x8D1B
-0x8D64
-0x8D66
-0x8D67
-0x8D68
-0x8D69
-0x8D6B
-0x8D6C
-0x8D6D
-0x8D6E
-0x8D6F
-0x8D70
-0x8D72
-0x8D73
-0x8D74
-0x8D76
-0x8D77
-0x8D78
-0x8D79
-0x8D7B
-0x8D7D
-0x8D80
-0x8D81
-0x8D84
-0x8D85
-0x8D89
-0x8D8A
-0x8D8C
-0x8D8D
-0x8D8E
-0x8D8F
-0x8D90
-0x8D91
-0x8D92
-0x8D93
-0x8D94
-0x8D95
-0x8D96
-0x8D99
-0x8D9B
-0x8D9C
-0x8D9F
-0x8DA0
-0x8DA1
-0x8DA3
-0x8DA5
-0x8DA7
-0x8DA8
-0x8DAA
-0x8DAB
-0x8DAC
-0x8DAD
-0x8DAE
-0x8DAF
-0x8DB2
-0x8DB3
-0x8DB4
-0x8DB5
-0x8DB6
-0x8DB7
-0x8DB9
-0x8DBA
-0x8DBC
-0x8DBE
-0x8DBF
-0x8DC1
-0x8DC2
-0x8DC5
-0x8DC6
-0x8DC7
-0x8DC8
-0x8DCB
-0x8DCC
-0x8DCD
-0x8DCE
-0x8DCF
-0x8DD0
-0x8DD1
-0x8DD3
-0x8DD5
-0x8DD6
-0x8DD7
-0x8DD8
-0x8DD9
-0x8DDA
-0x8DDB
-0x8DDC
-0x8DDD
-0x8DDF
-0x8DE0
-0x8DE1
-0x8DE2
-0x8DE3
-0x8DE4
-0x8DE6
-0x8DE7
-0x8DE8
-0x8DE9
-0x8DEA
-0x8DEB
-0x8DEC
-0x8DEE
-0x8DEF
-0x8DF0
-0x8DF1
-0x8DF2
-0x8DF3
-0x8DF4
-0x8DFA
-0x8DFC
-0x8DFD
-0x8DFE
-0x8DFF
-0x8E00
-0x8E02
-0x8E03
-0x8E04
-0x8E05
-0x8E06
-0x8E07
-0x8E09
-0x8E0A
-0x8E0D
-0x8E0F
-0x8E10
-0x8E11
-0x8E12
-0x8E13
-0x8E14
-0x8E15
-0x8E16
-0x8E17
-0x8E18
-0x8E19
-0x8E1A
-0x8E1B
-0x8E1C
-0x8E1D
-0x8E1E
-0x8E1F
-0x8E20
-0x8E21
-0x8E22
-0x8E23
-0x8E24
-0x8E25
-0x8E26
-0x8E27
-0x8E29
-0x8E2B
-0x8E2E
-0x8E30
-0x8E31
-0x8E33
-0x8E34
-0x8E35
-0x8E36
-0x8E38
-0x8E39
-0x8E3C
-0x8E3D
-0x8E3E
-0x8E3F
-0x8E40
-0x8E41
-0x8E42
-0x8E44
-0x8E45
-0x8E47
-0x8E48
-0x8E49
-0x8E4A
-0x8E4B
-0x8E4C
-0x8E4D
-0x8E4E
-0x8E50
-0x8E53
-0x8E54
-0x8E55
-0x8E56
-0x8E57
-0x8E59
-0x8E5A
-0x8E5B
-0x8E5C
-0x8E5D
-0x8E5E
-0x8E5F
-0x8E60
-0x8E61
-0x8E62
-0x8E63
-0x8E64
-0x8E65
-0x8E66
-0x8E67
-0x8E69
-0x8E6A
-0x8E6C
-0x8E6D
-0x8E6F
-0x8E72
-0x8E73
-0x8E74
-0x8E76
-0x8E78
-0x8E7A
-0x8E7B
-0x8E7C
-0x8E81
-0x8E82
-0x8E84
-0x8E85
-0x8E86
-0x8E87
-0x8E88
-0x8E89
-0x8E8A
-0x8E8B
-0x8E8C
-0x8E8D
-0x8E8E
-0x8E90
-0x8E91
-0x8E92
-0x8E93
-0x8E94
-0x8E95
-0x8E96
-0x8E97
-0x8E98
-0x8E9A
-0x8E9D
-0x8E9E
-0x8E9F
-0x8EA0
-0x8EA1
-0x8EA3
-0x8EA4
-0x8EA5
-0x8EA6
-0x8EA8
-0x8EA9
-0x8EAA
-0x8EAB
-0x8EAC
-0x8EB2
-0x8EBA
-0x8EBD
-0x8EC0
-0x8EC2
-0x8EC9
-0x8ECA
-0x8ECB
-0x8ECC
-0x8ECD
-0x8ECF
-0x8ED1
-0x8ED2
-0x8ED3
-0x8ED4
-0x8ED7
-0x8ED8
-0x8EDB
-0x8EDC
-0x8EDD
-0x8EDE
-0x8EDF
-0x8EE0
-0x8EE1
-0x8EE5
-0x8EE6
-0x8EE7
-0x8EE8
-0x8EE9
-0x8EEB
-0x8EEC
-0x8EEE
-0x8EEF
-0x8EF1
-0x8EF4
-0x8EF5
-0x8EF6
-0x8EF7
-0x8EF8
-0x8EF9
-0x8EFA
-0x8EFB
-0x8EFC
-0x8EFE
-0x8EFF
-0x8F00
-0x8F01
-0x8F02
-0x8F03
-0x8F05
-0x8F06
-0x8F07
-0x8F08
-0x8F09
-0x8F0A
-0x8F0B
-0x8F0D
-0x8F0E
-0x8F10
-0x8F11
-0x8F12
-0x8F13
-0x8F14
-0x8F15
-0x8F16
-0x8F17
-0x8F18
-0x8F1A
-0x8F1B
-0x8F1C
-0x8F1D
-0x8F1E
-0x8F1F
-0x8F20
-0x8F23
-0x8F24
-0x8F25
-0x8F26
-0x8F29
-0x8F2A
-0x8F2C
-0x8F2E
-0x8F2F
-0x8F32
-0x8F33
-0x8F34
-0x8F35
-0x8F36
-0x8F37
-0x8F38
-0x8F39
-0x8F3B
-0x8F3E
-0x8F3F
-0x8F40
-0x8F42
-0x8F43
-0x8F44
-0x8F45
-0x8F46
-0x8F47
-0x8F48
-0x8F49
-0x8F4B
-0x8F4D
-0x8F4E
-0x8F4F
-0x8F50
-0x8F51
-0x8F52
-0x8F53
-0x8F54
-0x8F55
-0x8F56
-0x8F57
-0x8F58
-0x8F59
-0x8F5A
-0x8F5B
-0x8F5D
-0x8F5E
-0x8F5F
-0x8F60
-0x8F61
-0x8F62
-0x8F63
-0x8F64
-0x8F9B
-0x8F9C
-0x8F9F
-0x8FA3
-0x8FA6
-0x8FA8
-0x8FAD
-0x8FAE
-0x8FAF
-0x8FB0
-0x8FB1
-0x8FB2
-0x8FB4
-0x8FBF
-0x8FC2
-0x8FC4
-0x8FC5
-0x8FC6
-0x8FC9
-0x8FCB
-0x8FCD
-0x8FCE
-0x8FD1
-0x8FD2
-0x8FD3
-0x8FD4
-0x8FD5
-0x8FD6
-0x8FD7
-0x8FE0
-0x8FE1
-0x8FE2
-0x8FE3
-0x8FE4
-0x8FE5
-0x8FE6
-0x8FE8
-0x8FEA
-0x8FEB
-0x8FED
-0x8FEE
-0x8FF0
-0x8FF4
-0x8FF5
-0x8FF6
-0x8FF7
-0x8FF8
-0x8FFA
-0x8FFB
-0x8FFC
-0x8FFD
-0x8FFE
-0x8FFF
-0x9000
-0x9001
-0x9002
-0x9003
-0x9004
-0x9005
-0x9006
-0x900B
-0x900C
-0x900D
-0x900F
-0x9010
-0x9011
-0x9014
-0x9015
-0x9016
-0x9017
-0x9019
-0x901A
-0x901B
-0x901C
-0x901D
-0x901E
-0x901F
-0x9020
-0x9021
-0x9022
-0x9023
-0x9024
-0x902D
-0x902E
-0x902F
-0x9031
-0x9032
-0x9034
-0x9035
-0x9036
-0x9038
-0x903C
-0x903D
-0x903E
-0x903F
-0x9041
-0x9042
-0x9044
-0x9047
-0x9049
-0x904A
-0x904B
-0x904D
-0x904E
-0x904F
-0x9050
-0x9051
-0x9052
-0x9053
-0x9054
-0x9055
-0x9058
-0x9059
-0x905B
-0x905C
-0x905D
-0x905E
-0x9060
-0x9062
-0x9063
-0x9067
-0x9068
-0x9069
-0x906B
-0x906D
-0x906E
-0x906F
-0x9070
-0x9072
-0x9073
-0x9074
-0x9075
-0x9076
-0x9077
-0x9078
-0x9079
-0x907A
-0x907B
-0x907C
-0x907D
-0x907E
-0x907F
-0x9080
-0x9081
-0x9082
-0x9083
-0x9084
-0x9085
-0x9086
-0x9087
-0x9088
-0x908A
-0x908B
-0x908D
-0x908F
-0x9090
-0x9091
-0x9094
-0x9095
-0x9097
-0x9098
-0x9099
-0x909B
-0x909E
-0x909F
-0x90A0
-0x90A1
-0x90A2
-0x90A3
-0x90A5
-0x90A6
-0x90A7
-0x90AA
-0x90AF
-0x90B0
-0x90B1
-0x90B2
-0x90B3
-0x90B4
-0x90B5
-0x90B6
-0x90B8
-0x90BD
-0x90BE
-0x90BF
-0x90C1
-0x90C3
-0x90C5
-0x90C7
-0x90C8
-0x90CA
-0x90CB
-0x90CE
-0x90D4
-0x90D5
-0x90D6
-0x90D7
-0x90D8
-0x90D9
-0x90DA
-0x90DB
-0x90DC
-0x90DD
-0x90DF
-0x90E0
-0x90E1
-0x90E2
-0x90E3
-0x90E4
-0x90E5
-0x90E8
-0x90E9
-0x90EA
-0x90EB
-0x90EC
-0x90ED
-0x90EF
-0x90F0
-0x90F1
-0x90F2
-0x90F3
-0x90F4
-0x90F5
-0x90F9
-0x90FA
-0x90FB
-0x90FC
-0x90FD
-0x90FE
-0x90FF
-0x9100
-0x9101
-0x9102
-0x9103
-0x9104
-0x9105
-0x9106
-0x9107
-0x9108
-0x9109
-0x910B
-0x910D
-0x910E
-0x910F
-0x9110
-0x9111
-0x9112
-0x9114
-0x9116
-0x9117
-0x9118
-0x9119
-0x911A
-0x911B
-0x911C
-0x911D
-0x911E
-0x911F
-0x9120
-0x9121
-0x9122
-0x9123
-0x9124
-0x9126
-0x9127
-0x9128
-0x9129
-0x912A
-0x912B
-0x912C
-0x912D
-0x912E
-0x912F
-0x9130
-0x9131
-0x9132
-0x9133
-0x9134
-0x9135
-0x9136
-0x9138
-0x9139
-0x913A
-0x913B
-0x913E
-0x913F
-0x9140
-0x9141
-0x9143
-0x9144
-0x9145
-0x9146
-0x9147
-0x9148
-0x9149
-0x914A
-0x914B
-0x914C
-0x914D
-0x914E
-0x914F
-0x9150
-0x9152
-0x9153
-0x9155
-0x9156
-0x9157
-0x9158
-0x915A
-0x915F
-0x9160
-0x9161
-0x9162
-0x9163
-0x9164
-0x9165
-0x9168
-0x9169
-0x916A
-0x916C
-0x916E
-0x916F
-0x9172
-0x9173
-0x9174
-0x9175
-0x9177
-0x9178
-0x9179
-0x917A
-0x9180
-0x9181
-0x9182
-0x9183
-0x9184
-0x9185
-0x9186
-0x9187
-0x9189
-0x918A
-0x918B
-0x918D
-0x918F
-0x9190
-0x9191
-0x9192
-0x9193
-0x9199
-0x919A
-0x919B
-0x919C
-0x919D
-0x919E
-0x919F
-0x91A0
-0x91A1
-0x91A2
-0x91A3
-0x91A5
-0x91A7
-0x91A8
-0x91AA
-0x91AB
-0x91AC
-0x91AD
-0x91AE
-0x91AF
-0x91B0
-0x91B1
-0x91B2
-0x91B3
-0x91B4
-0x91B5
-0x91B7
-0x91B9
-0x91BA
-0x91BC
-0x91BD
-0x91BE
-0x91C0
-0x91C1
-0x91C2
-0x91C3
-0x91C5
-0x91C6
-0x91C7
-0x91C9
-0x91CB
-0x91CC
-0x91CD
-0x91CE
-0x91CF
-0x91D0
-0x91D1
-0x91D3
-0x91D4
-0x91D5
-0x91D7
-0x91D8
-0x91D9
-0x91DA
-0x91DC
-0x91DD
-0x91E2
-0x91E3
-0x91E4
-0x91E6
-0x91E7
-0x91E8
-0x91E9
-0x91EA
-0x91EB
-0x91EC
-0x91ED
-0x91EE
-0x91F1
-0x91F3
-0x91F4
-0x91F5
-0x91F7
-0x91F8
-0x91F9
-0x91FD
-0x91FF
-0x9200
-0x9201
-0x9202
-0x9203
-0x9204
-0x9205
-0x9206
-0x9207
-0x9209
-0x920A
-0x920C
-0x920D
-0x920F
-0x9210
-0x9211
-0x9212
-0x9214
-0x9215
-0x9216
-0x9217
-0x9219
-0x921A
-0x921C
-0x921E
-0x9223
-0x9224
-0x9225
-0x9226
-0x9227
-0x922D
-0x922E
-0x9230
-0x9231
-0x9232
-0x9233
-0x9234
-0x9236
-0x9237
-0x9238
-0x9239
-0x923A
-0x923D
-0x923E
-0x923F
-0x9240
-0x9245
-0x9246
-0x9248
-0x9249
-0x924A
-0x924B
-0x924C
-0x924D
-0x924E
-0x924F
-0x9250
-0x9251
-0x9252
-0x9253
-0x9254
-0x9256
-0x9257
-0x925A
-0x925B
-0x925E
-0x9260
-0x9261
-0x9263
-0x9264
-0x9265
-0x9266
-0x9267
-0x926C
-0x926D
-0x926F
-0x9270
-0x9272
-0x9276
-0x9278
-0x9279
-0x927A
-0x927B
-0x927C
-0x927D
-0x927E
-0x927F
-0x9280
-0x9282
-0x9283
-0x9285
-0x9286
-0x9287
-0x9288
-0x928A
-0x928B
-0x928C
-0x928D
-0x928E
-0x9291
-0x9293
-0x9294
-0x9295
-0x9296
-0x9297
-0x9298
-0x9299
-0x929A
-0x929B
-0x929C
-0x929D
-0x92A0
-0x92A1
-0x92A2
-0x92A3
-0x92A4
-0x92A5
-0x92A6
-0x92A7
-0x92A8
-0x92A9
-0x92AA
-0x92AB
-0x92AC
-0x92B2
-0x92B3
-0x92B4
-0x92B5
-0x92B6
-0x92B7
-0x92BB
-0x92BC
-0x92C0
-0x92C1
-0x92C2
-0x92C3
-0x92C4
-0x92C5
-0x92C6
-0x92C7
-0x92C8
-0x92C9
-0x92CA
-0x92CB
-0x92CC
-0x92CD
-0x92CE
-0x92CF
-0x92D0
-0x92D1
-0x92D2
-0x92D3
-0x92D5
-0x92D7
-0x92D8
-0x92D9
-0x92DD
-0x92DE
-0x92DF
-0x92E0
-0x92E1
-0x92E4
-0x92E6
-0x92E7
-0x92E8
-0x92E9
-0x92EA
-0x92EE
-0x92EF
-0x92F0
-0x92F1
-0x92F7
-0x92F8
-0x92F9
-0x92FA
-0x92FB
-0x92FC
-0x92FE
-0x92FF
-0x9300
-0x9301
-0x9302
-0x9304
-0x9306
-0x9308
-0x9309
-0x930B
-0x930C
-0x930D
-0x930E
-0x930F
-0x9310
-0x9312
-0x9313
-0x9314
-0x9315
-0x9316
-0x9318
-0x9319
-0x931A
-0x931B
-0x931D
-0x931E
-0x931F
-0x9320
-0x9321
-0x9322
-0x9323
-0x9324
-0x9325
-0x9326
-0x9327
-0x9328
-0x9329
-0x932A
-0x932B
-0x932D
-0x932E
-0x932F
-0x9333
-0x9334
-0x9335
-0x9336
-0x9338
-0x9339
-0x933C
-0x9346
-0x9347
-0x9349
-0x934A
-0x934B
-0x934C
-0x934D
-0x934E
-0x934F
-0x9350
-0x9351
-0x9352
-0x9354
-0x9355
-0x9356
-0x9357
-0x9358
-0x9359
-0x935A
-0x935B
-0x935C
-0x935E
-0x9360
-0x9361
-0x9363
-0x9364
-0x9365
-0x9367
-0x936A
-0x936C
-0x936D
-0x9370
-0x9371
-0x9375
-0x9376
-0x9377
-0x9379
-0x937A
-0x937B
-0x937C
-0x937E
-0x9380
-0x9382
-0x9383
-0x9388
-0x9389
-0x938A
-0x938C
-0x938D
-0x938E
-0x938F
-0x9391
-0x9392
-0x9394
-0x9395
-0x9396
-0x9397
-0x9398
-0x9399
-0x939A
-0x939B
-0x939D
-0x939E
-0x939F
-0x93A1
-0x93A2
-0x93A3
-0x93A4
-0x93A5
-0x93A6
-0x93A7
-0x93A8
-0x93A9
-0x93AA
-0x93AC
-0x93AE
-0x93AF
-0x93B0
-0x93B1
-0x93B2
-0x93B3
-0x93B4
-0x93B5
-0x93B7
-0x93C0
-0x93C2
-0x93C3
-0x93C4
-0x93C7
-0x93C8
-0x93CA
-0x93CC
-0x93CD
-0x93CE
-0x93CF
-0x93D0
-0x93D1
-0x93D2
-0x93D4
-0x93D5
-0x93D6
-0x93D7
-0x93D8
-0x93D9
-0x93DA
-0x93DC
-0x93DD
-0x93DE
-0x93DF
-0x93E1
-0x93E2
-0x93E3
-0x93E4
-0x93E6
-0x93E7
-0x93E8
-0x93EC
-0x93EE
-0x93F5
-0x93F6
-0x93F7
-0x93F8
-0x93F9
-0x93FA
-0x93FB
-0x93FC
-0x93FD
-0x93FE
-0x93FF
-0x9400
-0x9403
-0x9406
-0x9407
-0x9409
-0x940A
-0x940B
-0x940C
-0x940D
-0x940E
-0x940F
-0x9410
-0x9411
-0x9412
-0x9413
-0x9414
-0x9415
-0x9416
-0x9418
-0x9419
-0x9420
-0x9428
-0x9429
-0x942A
-0x942B
-0x942C
-0x942E
-0x9430
-0x9431
-0x9432
-0x9433
-0x9435
-0x9436
-0x9437
-0x9438
-0x9439
-0x943A
-0x943B
-0x943C
-0x943D
-0x943F
-0x9440
-0x9444
-0x9445
-0x9446
-0x9447
-0x9448
-0x9449
-0x944A
-0x944B
-0x944C
-0x944F
-0x9450
-0x9451
-0x9452
-0x9455
-0x9457
-0x945D
-0x945E
-0x9460
-0x9462
-0x9463
-0x9464
-0x9468
-0x9469
-0x946A
-0x946B
-0x946D
-0x946E
-0x946F
-0x9470
-0x9471
-0x9472
-0x9473
-0x9474
-0x9475
-0x9476
-0x9477
-0x9478
-0x947C
-0x947D
-0x947E
-0x947F
-0x9480
-0x9481
-0x9482
-0x9483
-0x9577
-0x957A
-0x957B
-0x957C
-0x957D
-0x9580
-0x9582
-0x9583
-0x9586
-0x9588
-0x9589
-0x958B
-0x958C
-0x958D
-0x958E
-0x958F
-0x9590
-0x9591
-0x9592
-0x9593
-0x9594
-0x9598
-0x959B
-0x959C
-0x959E
-0x959F
-0x95A1
-0x95A3
-0x95A4
-0x95A5
-0x95A8
-0x95A9
-0x95AB
-0x95AC
-0x95AD
-0x95AE
-0x95B0
-0x95B1
-0x95B5
-0x95B6
-0x95B7
-0x95B9
-0x95BA
-0x95BB
-0x95BC
-0x95BD
-0x95BE
-0x95BF
-0x95C0
-0x95C3
-0x95C5
-0x95C6
-0x95C7
-0x95C8
-0x95C9
-0x95CA
-0x95CB
-0x95CC
-0x95CD
-0x95D0
-0x95D1
-0x95D2
-0x95D3
-0x95D4
-0x95D5
-0x95D6
-0x95DA
-0x95DB
-0x95DC
-0x95DE
-0x95DF
-0x95E0
-0x95E1
-0x95E2
-0x95E3
-0x95E4
-0x95E5
-0x961C
-0x961E
-0x9620
-0x9621
-0x9622
-0x9623
-0x9624
-0x9628
-0x962A
-0x962C
-0x962D
-0x962E
-0x962F
-0x9630
-0x9631
-0x9632
-0x9639
-0x963A
-0x963B
-0x963C
-0x963D
-0x963F
-0x9640
-0x9642
-0x9643
-0x9644
-0x964A
-0x964B
-0x964C
-0x964D
-0x964E
-0x964F
-0x9650
-0x9651
-0x9653
-0x9654
-0x9658
-0x965B
-0x965C
-0x965D
-0x965E
-0x965F
-0x9661
-0x9662
-0x9663
-0x9664
-0x966A
-0x966B
-0x966C
-0x966D
-0x966F
-0x9670
-0x9671
-0x9672
-0x9673
-0x9674
-0x9675
-0x9676
-0x9677
-0x9678
-0x967C
-0x967D
-0x967E
-0x9680
-0x9683
-0x9684
-0x9685
-0x9686
-0x9687
-0x9688
-0x9689
-0x968A
-0x968B
-0x968D
-0x968E
-0x9691
-0x9692
-0x9693
-0x9694
-0x9695
-0x9697
-0x9698
-0x9699
-0x969B
-0x969C
-0x969E
-0x96A1
-0x96A2
-0x96A4
-0x96A7
-0x96A8
-0x96A9
-0x96AA
-0x96AC
-0x96AE
-0x96B0
-0x96B1
-0x96B3
-0x96B4
-0x96B8
-0x96B9
-0x96BB
-0x96BC
-0x96BF
-0x96C0
-0x96C1
-0x96C2
-0x96C3
-0x96C4
-0x96C5
-0x96C6
-0x96C7
-0x96C8
-0x96C9
-0x96CA
-0x96CB
-0x96CC
-0x96CD
-0x96CE
-0x96D2
-0x96D3
-0x96D4
-0x96D5
-0x96D6
-0x96D7
-0x96D8
-0x96D9
-0x96DA
-0x96DB
-0x96DC
-0x96DD
-0x96DE
-0x96DF
-0x96E1
-0x96E2
-0x96E3
-0x96E5
-0x96E8
-0x96E9
-0x96EA
-0x96EF
-0x96F0
-0x96F1
-0x96F2
-0x96F5
-0x96F6
-0x96F7
-0x96F8
-0x96F9
-0x96FA
-0x96FB
-0x96FD
-0x96FF
-0x9700
-0x9702
-0x9704
-0x9705
-0x9706
-0x9707
-0x9708
-0x9709
-0x970B
-0x970D
-0x970E
-0x970F
-0x9710
-0x9711
-0x9712
-0x9713
-0x9716
-0x9718
-0x9719
-0x971C
-0x971D
-0x971E
-0x971F
-0x9720
-0x9722
-0x9723
-0x9724
-0x9725
-0x9726
-0x9727
-0x9728
-0x9729
-0x972A
-0x972B
-0x972C
-0x972E
-0x972F
-0x9730
-0x9732
-0x9735
-0x9738
-0x9739
-0x973A
-0x973D
-0x973E
-0x973F
-0x9742
-0x9743
-0x9744
-0x9746
-0x9747
-0x9748
-0x9749
-0x974B
-0x9752
-0x9756
-0x9758
-0x975A
-0x975B
-0x975C
-0x975E
-0x9760
-0x9761
-0x9762
-0x9766
-0x9768
-0x9769
-0x976A
-0x976C
-0x976E
-0x9770
-0x9772
-0x9773
-0x9774
-0x9776
-0x9777
-0x9778
-0x977A
-0x977B
-0x977C
-0x977D
-0x977E
-0x977F
-0x9780
-0x9781
-0x9782
-0x9783
-0x9784
-0x9785
-0x9788
-0x978A
-0x978B
-0x978D
-0x978E
-0x978F
-0x9794
-0x9797
-0x9798
-0x9799
-0x979A
-0x979C
-0x979D
-0x979E
-0x97A0
-0x97A1
-0x97A2
-0x97A3
-0x97A4
-0x97A5
-0x97A6
-0x97A8
-0x97AA
-0x97AB
-0x97AC
-0x97AD
-0x97AE
-0x97B3
-0x97B6
-0x97B7
-0x97B9
-0x97BB
-0x97BF
-0x97C1
-0x97C3
-0x97C4
-0x97C5
-0x97C6
-0x97C7
-0x97C9
-0x97CB
-0x97CC
-0x97CD
-0x97CE
-0x97CF
-0x97D0
-0x97D3
-0x97D4
-0x97D5
-0x97D6
-0x97D7
-0x97D8
-0x97D9
-0x97DC
-0x97DD
-0x97DE
-0x97DF
-0x97E1
-0x97E3
-0x97E5
-0x97ED
-0x97F0
-0x97F1
-0x97F3
-0x97F6
-0x97F8
-0x97F9
-0x97FA
-0x97FB
-0x97FD
-0x97FE
-0x97FF
-0x9800
-0x9801
-0x9802
-0x9803
-0x9804
-0x9805
-0x9806
-0x9807
-0x9808
-0x980A
-0x980C
-0x980D
-0x980E
-0x980F
-0x9810
-0x9811
-0x9812
-0x9813
-0x9816
-0x9817
-0x9818
-0x981B
-0x981C
-0x981D
-0x981E
-0x9820
-0x9821
-0x9824
-0x9826
-0x9827
-0x9828
-0x9829
-0x982B
-0x982D
-0x982F
-0x9830
-0x9832
-0x9835
-0x9837
-0x9838
-0x9839
-0x983B
-0x9841
-0x9843
-0x9844
-0x9845
-0x9846
-0x9848
-0x9849
-0x984A
-0x984C
-0x984D
-0x984E
-0x984F
-0x9850
-0x9851
-0x9852
-0x9853
-0x9857
-0x9858
-0x9859
-0x985B
-0x985C
-0x985D
-0x985E
-0x985F
-0x9860
-0x9862
-0x9863
-0x9864
-0x9865
-0x9867
-0x9869
-0x986A
-0x986B
-0x986F
-0x9870
-0x9871
-0x9872
-0x9873
-0x9874
-0x98A8
-0x98A9
-0x98AC
-0x98AD
-0x98AE
-0x98AF
-0x98B1
-0x98B2
-0x98B3
-0x98B6
-0x98B8
-0x98BA
-0x98BB
-0x98BC
-0x98BD
-0x98BE
-0x98BF
-0x98C0
-0x98C1
-0x98C2
-0x98C4
-0x98C6
-0x98C9
-0x98CB
-0x98CC
-0x98DB
-0x98DF
-0x98E2
-0x98E3
-0x98E5
-0x98E7
-0x98E9
-0x98EA
-0x98EB
-0x98ED
-0x98EF
-0x98F2
-0x98F4
-0x98F6
-0x98F9
-0x98FA
-0x98FC
-0x98FD
-0x98FE
-0x9900
-0x9902
-0x9903
-0x9905
-0x9907
-0x9908
-0x9909
-0x990A
-0x990C
-0x9910
-0x9911
-0x9912
-0x9913
-0x9914
-0x9915
-0x9916
-0x9917
-0x9918
-0x991A
-0x991B
-0x991E
-0x991F
-0x9921
-0x9924
-0x9925
-0x9927
-0x9928
-0x9929
-0x992A
-0x992B
-0x992C
-0x992D
-0x992E
-0x992F
-0x9930
-0x9931
-0x9932
-0x9933
-0x9935
-0x993A
-0x993C
-0x993D
-0x993E
-0x993F
-0x9941
-0x9943
-0x9945
-0x9947
-0x9948
-0x9949
-0x994B
-0x994C
-0x994E
-0x9950
-0x9951
-0x9952
-0x9953
-0x9954
-0x9955
-0x9956
-0x9957
-0x9958
-0x9959
-0x995B
-0x995C
-0x995E
-0x995F
-0x9961
-0x9996
-0x9997
-0x9998
-0x9999
-0x999C
-0x999D
-0x999E
-0x99A1
-0x99A3
-0x99A5
-0x99A6
-0x99A7
-0x99A8
-0x99AB
-0x99AC
-0x99AD
-0x99AE
-0x99AF
-0x99B0
-0x99B1
-0x99B2
-0x99B3
-0x99B4
-0x99B5
-0x99B9
-0x99BA
-0x99BB
-0x99BD
-0x99C1
-0x99C2
-0x99C3
-0x99C7
-0x99C9
-0x99CB
-0x99CC
-0x99CD
-0x99CE
-0x99CF
-0x99D0
-0x99D1
-0x99D2
-0x99D3
-0x99D4
-0x99D5
-0x99D6
-0x99D7
-0x99D8
-0x99D9
-0x99DB
-0x99DC
-0x99DD
-0x99DF
-0x99E2
-0x99E3
-0x99E4
-0x99E5
-0x99E7
-0x99E9
-0x99EA
-0x99EC
-0x99ED
-0x99EE
-0x99F0
-0x99F1
-0x99F4
-0x99F6
-0x99F7
-0x99F8
-0x99F9
-0x99FA
-0x99FB
-0x99FC
-0x99FD
-0x99FE
-0x99FF
-0x9A01
-0x9A02
-0x9A03
-0x9A04
-0x9A05
-0x9A06
-0x9A07
-0x9A09
-0x9A0A
-0x9A0B
-0x9A0D
-0x9A0E
-0x9A0F
-0x9A11
-0x9A14
-0x9A15
-0x9A16
-0x9A19
-0x9A1A
-0x9A1B
-0x9A1C
-0x9A1D
-0x9A1E
-0x9A20
-0x9A22
-0x9A23
-0x9A24
-0x9A25
-0x9A27
-0x9A29
-0x9A2A
-0x9A2B
-0x9A2C
-0x9A2D
-0x9A2E
-0x9A30
-0x9A31
-0x9A32
-0x9A34
-0x9A35
-0x9A36
-0x9A37
-0x9A38
-0x9A39
-0x9A3A
-0x9A3D
-0x9A3E
-0x9A3F
-0x9A40
-0x9A41
-0x9A42
-0x9A43
-0x9A44
-0x9A45
-0x9A46
-0x9A48
-0x9A49
-0x9A4A
-0x9A4C
-0x9A4D
-0x9A4E
-0x9A4F
-0x9A50
-0x9A52
-0x9A53
-0x9A54
-0x9A55
-0x9A56
-0x9A57
-0x9A59
-0x9A5A
-0x9A5B
-0x9A5E
-0x9A5F
-0x9A60
-0x9A62
-0x9A64
-0x9A65
-0x9A66
-0x9A67
-0x9A68
-0x9A69
-0x9A6A
-0x9A6B
-0x9AA8
-0x9AAB
-0x9AAD
-0x9AAF
-0x9AB0
-0x9AB1
-0x9AB3
-0x9AB4
-0x9AB7
-0x9AB8
-0x9AB9
-0x9ABB
-0x9ABC
-0x9ABE
-0x9ABF
-0x9AC0
-0x9AC1
-0x9AC2
-0x9AC6
-0x9AC7
-0x9ACA
-0x9ACD
-0x9ACF
-0x9AD0
-0x9AD1
-0x9AD2
-0x9AD3
-0x9AD4
-0x9AD5
-0x9AD6
-0x9AD8
-0x9ADC
-0x9ADF
-0x9AE1
-0x9AE3
-0x9AE6
-0x9AE7
-0x9AEB
-0x9AEC
-0x9AED
-0x9AEE
-0x9AEF
-0x9AF1
-0x9AF2
-0x9AF3
-0x9AF6
-0x9AF7
-0x9AF9
-0x9AFA
-0x9AFB
-0x9AFC
-0x9AFD
-0x9AFE
-0x9B01
-0x9B03
-0x9B04
-0x9B05
-0x9B06
-0x9B08
-0x9B0A
-0x9B0B
-0x9B0C
-0x9B0D
-0x9B0E
-0x9B10
-0x9B11
-0x9B12
-0x9B15
-0x9B16
-0x9B17
-0x9B18
-0x9B19
-0x9B1A
-0x9B1E
-0x9B1F
-0x9B20
-0x9B22
-0x9B23
-0x9B24
-0x9B25
-0x9B27
-0x9B28
-0x9B29
-0x9B2B
-0x9B2E
-0x9B2F
-0x9B31
-0x9B32
-0x9B33
-0x9B35
-0x9B37
-0x9B3A
-0x9B3B
-0x9B3C
-0x9B3E
-0x9B3F
-0x9B41
-0x9B42
-0x9B43
-0x9B44
-0x9B45
-0x9B46
-0x9B48
-0x9B4A
-0x9B4B
-0x9B4C
-0x9B4D
-0x9B4E
-0x9B4F
-0x9B51
-0x9B52
-0x9B54
-0x9B55
-0x9B56
-0x9B58
-0x9B59
-0x9B5A
-0x9B5B
-0x9B5F
-0x9B60
-0x9B61
-0x9B64
-0x9B66
-0x9B67
-0x9B68
-0x9B6C
-0x9B6F
-0x9B70
-0x9B71
-0x9B74
-0x9B75
-0x9B76
-0x9B77
-0x9B7A
-0x9B7B
-0x9B7C
-0x9B7D
-0x9B7E
-0x9B80
-0x9B82
-0x9B85
-0x9B86
-0x9B87
-0x9B88
-0x9B90
-0x9B91
-0x9B92
-0x9B93
-0x9B95
-0x9B9A
-0x9B9B
-0x9B9E
-0x9BA0
-0x9BA1
-0x9BA2
-0x9BA4
-0x9BA5
-0x9BA6
-0x9BA8
-0x9BAA
-0x9BAB
-0x9BAD
-0x9BAE
-0x9BAF
-0x9BB5
-0x9BB6
-0x9BB8
-0x9BB9
-0x9BBD
-0x9BBF
-0x9BC0
-0x9BC1
-0x9BC3
-0x9BC4
-0x9BC6
-0x9BC7
-0x9BC8
-0x9BC9
-0x9BCA
-0x9BD3
-0x9BD4
-0x9BD5
-0x9BD6
-0x9BD7
-0x9BD9
-0x9BDA
-0x9BDB
-0x9BDC
-0x9BDE
-0x9BE0
-0x9BE1
-0x9BE2
-0x9BE4
-0x9BE5
-0x9BE6
-0x9BE7
-0x9BE8
-0x9BEA
-0x9BEB
-0x9BEC
-0x9BF0
-0x9BF7
-0x9BF8
-0x9BFD
-0x9C05
-0x9C06
-0x9C07
-0x9C08
-0x9C09
-0x9C0B
-0x9C0D
-0x9C0E
-0x9C12
-0x9C13
-0x9C14
-0x9C17
-0x9C1C
-0x9C1D
-0x9C21
-0x9C23
-0x9C24
-0x9C25
-0x9C28
-0x9C29
-0x9C2B
-0x9C2C
-0x9C2D
-0x9C31
-0x9C32
-0x9C33
-0x9C34
-0x9C36
-0x9C37
-0x9C39
-0x9C3B
-0x9C3C
-0x9C3D
-0x9C3E
-0x9C3F
-0x9C40
-0x9C41
-0x9C44
-0x9C46
-0x9C48
-0x9C49
-0x9C4A
-0x9C4B
-0x9C4C
-0x9C4D
-0x9C4E
-0x9C50
-0x9C52
-0x9C54
-0x9C55
-0x9C56
-0x9C57
-0x9C58
-0x9C59
-0x9C5E
-0x9C5F
-0x9C60
-0x9C62
-0x9C63
-0x9C66
-0x9C67
-0x9C68
-0x9C6D
-0x9C6E
-0x9C71
-0x9C73
-0x9C74
-0x9C75
-0x9C77
-0x9C78
-0x9C79
-0x9C7A
-0x9CE5
-0x9CE6
-0x9CE7
-0x9CE9
-0x9CEA
-0x9CED
-0x9CF1
-0x9CF2
-0x9CF3
-0x9CF4
-0x9CF5
-0x9CF6
-0x9CF7
-0x9CF9
-0x9CFA
-0x9CFB
-0x9CFC
-0x9CFD
-0x9CFF
-0x9D00
-0x9D03
-0x9D04
-0x9D05
-0x9D06
-0x9D07
-0x9D08
-0x9D09
-0x9D10
-0x9D12
-0x9D14
-0x9D15
-0x9D17
-0x9D18
-0x9D19
-0x9D1B
-0x9D1D
-0x9D1E
-0x9D1F
-0x9D20
-0x9D22
-0x9D23
-0x9D25
-0x9D26
-0x9D28
-0x9D29
-0x9D2D
-0x9D2E
-0x9D2F
-0x9D30
-0x9D31
-0x9D33
-0x9D36
-0x9D37
-0x9D38
-0x9D3B
-0x9D3D
-0x9D3E
-0x9D3F
-0x9D40
-0x9D41
-0x9D42
-0x9D43
-0x9D45
-0x9D4A
-0x9D4B
-0x9D4C
-0x9D4F
-0x9D51
-0x9D52
-0x9D53
-0x9D54
-0x9D56
-0x9D57
-0x9D58
-0x9D59
-0x9D5A
-0x9D5B
-0x9D5C
-0x9D5D
-0x9D5F
-0x9D60
-0x9D61
-0x9D67
-0x9D68
-0x9D69
-0x9D6A
-0x9D6B
-0x9D6C
-0x9D6F
-0x9D70
-0x9D71
-0x9D72
-0x9D73
-0x9D74
-0x9D75
-0x9D77
-0x9D78
-0x9D79
-0x9D7B
-0x9D7D
-0x9D7F
-0x9D80
-0x9D81
-0x9D82
-0x9D84
-0x9D85
-0x9D86
-0x9D87
-0x9D88
-0x9D89
-0x9D8A
-0x9D8B
-0x9D8C
-0x9D90
-0x9D92
-0x9D94
-0x9D96
-0x9D97
-0x9D98
-0x9D99
-0x9D9A
-0x9D9B
-0x9D9C
-0x9D9D
-0x9D9E
-0x9D9F
-0x9DA0
-0x9DA1
-0x9DA2
-0x9DA3
-0x9DA4
-0x9DA6
-0x9DA7
-0x9DA8
-0x9DA9
-0x9DAA
-0x9DAC
-0x9DAD
-0x9DAF
-0x9DB1
-0x9DB2
-0x9DB3
-0x9DB4
-0x9DB5
-0x9DB6
-0x9DB7
-0x9DB8
-0x9DB9
-0x9DBA
-0x9DBB
-0x9DBC
-0x9DBE
-0x9DBF
-0x9DC1
-0x9DC2
-0x9DC3
-0x9DC5
-0x9DC7
-0x9DC8
-0x9DCA
-0x9DCB
-0x9DCC
-0x9DCD
-0x9DCE
-0x9DCF
-0x9DD0
-0x9DD1
-0x9DD2
-0x9DD3
-0x9DD5
-0x9DD6
-0x9DD7
-0x9DD8
-0x9DD9
-0x9DDA
-0x9DDB
-0x9DDC
-0x9DDD
-0x9DDE
-0x9DDF
-0x9DE1
-0x9DE2
-0x9DE3
-0x9DE4
-0x9DE5
-0x9DE6
-0x9DE8
-0x9DE9
-0x9DEB
-0x9DEC
-0x9DED
-0x9DEE
-0x9DEF
-0x9DF0
-0x9DF2
-0x9DF3
-0x9DF4
-0x9DF5
-0x9DF6
-0x9DF7
-0x9DF8
-0x9DF9
-0x9DFA
-0x9DFB
-0x9DFD
-0x9DFE
-0x9DFF
-0x9E00
-0x9E01
-0x9E02
-0x9E03
-0x9E04
-0x9E05
-0x9E06
-0x9E07
-0x9E09
-0x9E0B
-0x9E0D
-0x9E0F
-0x9E10
-0x9E11
-0x9E12
-0x9E13
-0x9E14
-0x9E15
-0x9E17
-0x9E19
-0x9E1A
-0x9E1B
-0x9E1D
-0x9E1E
-0x9E75
-0x9E79
-0x9E7A
-0x9E7C
-0x9E7D
-0x9E7F
-0x9E80
-0x9E82
-0x9E83
-0x9E86
-0x9E87
-0x9E88
-0x9E89
-0x9E8A
-0x9E8B
-0x9E8C
-0x9E8D
-0x9E8E
-0x9E91
-0x9E92
-0x9E93
-0x9E94
-0x9E97
-0x9E99
-0x9E9A
-0x9E9B
-0x9E9C
-0x9E9D
-0x9E9F
-0x9EA0
-0x9EA1
-0x9EA4
-0x9EA5
-0x9EA7
-0x9EA9
-0x9EAD
-0x9EAE
-0x9EB0
-0x9EB4
-0x9EB5
-0x9EB6
-0x9EB7
-0x9EBB
-0x9EBC
-0x9EBE
-0x9EC0
-0x9EC2
-0x9EC3
-0x9EC8
-0x9ECC
-0x9ECD
-0x9ECE
-0x9ECF
-0x9ED0
-0x9ED1
-0x9ED3
-0x9ED4
-0x9ED5
-0x9ED6
-0x9ED8
-0x9EDA
-0x9EDB
-0x9EDC
-0x9EDD
-0x9EDE
-0x9EDF
-0x9EE0
-0x9EE4
-0x9EE5
-0x9EE6
-0x9EE7
-0x9EE8
-0x9EEB
-0x9EED
-0x9EEE
-0x9EEF
-0x9EF0
-0x9EF2
-0x9EF3
-0x9EF4
-0x9EF5
-0x9EF6
-0x9EF7
-0x9EF9
-0x9EFA
-0x9EFB
-0x9EFC
-0x9EFD
-0x9EFF
-0x9F00
-0x9F01
-0x9F06
-0x9F07
-0x9F09
-0x9F0A
-0x9F0E
-0x9F0F
-0x9F10
-0x9F12
-0x9F13
-0x9F15
-0x9F16
-0x9F18
-0x9F19
-0x9F1A
-0x9F1B
-0x9F1C
-0x9F1E
-0x9F20
-0x9F22
-0x9F23
-0x9F24
-0x9F25
-0x9F28
-0x9F29
-0x9F2A
-0x9F2B
-0x9F2C
-0x9F2D
-0x9F2E
-0x9F2F
-0x9F30
-0x9F31
-0x9F32
-0x9F33
-0x9F34
-0x9F35
-0x9F36
-0x9F37
-0x9F38
-0x9F3B
-0x9F3D
-0x9F3E
-0x9F40
-0x9F41
-0x9F42
-0x9F43
-0x9F46
-0x9F47
-0x9F48
-0x9F49
-0x9F4A
-0x9F4B
-0x9F4C
-0x9F4D
-0x9F4E
-0x9F4F
-0x9F52
-0x9F54
-0x9F55
-0x9F56
-0x9F57
-0x9F58
-0x9F59
-0x9F5B
-0x9F5C
-0x9F5D
-0x9F5E
-0x9F5F
-0x9F60
-0x9F61
-0x9F63
-0x9F64
-0x9F65
-0x9F66
-0x9F67
-0x9F6A
-0x9F6B
-0x9F6C
-0x9F6E
-0x9F6F
-0x9F70
-0x9F71
-0x9F72
-0x9F74
-0x9F75
-0x9F76
-0x9F77
-0x9F78
-0x9F79
-0x9F7A
-0x9F7B
-0x9F7E
-0x9F8D
-0x9F90
-0x9F91
-0x9F92
-0x9F94
-0x9F95
-0x9F98
-0x9F9C
-0x9FA0
-0x9FA2
-0x9FA4
-0xFA0C
-0xFA0D
+#
+# fontconfig/fc-lang/zh_tw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese (traditional) ZH-TW
+#
+# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs
+#
+#0x3000 # ideographic space
+#0x3001 # ideographic comma
+#0x3002 # ideographic full stop
+#0x3003 # ditto mark
+#0x3005 # ideographic iteration mark
+#0x3021 # Suzhou numeral 1
+#0x3022 # Suzhou numeral 2
+#0x3023 # Suzhou numeral 3
+#0x3024 # Suzhou numeral 4
+#0x3025 # Suzhou numeral 5
+#0x3026 # Suzhou numeral 6
+#0x3027 # Suzhou numeral 7
+#0x3028 # Suzhou numeral 8
+#0x3029 # Suzhou numeral 9
+# Han
+0x4E00
+0x4E01
+0x4E03
+0x4E07
+0x4E08
+0x4E09
+0x4E0A
+0x4E0B
+0x4E0C
+0x4E0D
+0x4E0E
+0x4E0F
+0x4E10
+0x4E11
+0x4E14
+0x4E15
+0x4E16
+0x4E18
+0x4E19
+0x4E1E
+0x4E1F
+0x4E26
+0x4E2B
+0x4E2D
+0x4E2E
+0x4E30
+0x4E31
+0x4E32
+0x4E33
+0x4E38
+0x4E39
+0x4E3B
+0x4E3C
+0x4E42
+0x4E43
+0x4E45
+0x4E47
+0x4E48
+0x4E4B
+0x4E4D
+0x4E4E
+0x4E4F
+0x4E52
+0x4E53
+0x4E56
+0x4E58
+0x4E59
+0x4E5C
+0x4E5D
+0x4E5E
+0x4E5F
+0x4E69
+0x4E73
+0x4E7E
+0x4E7F
+0x4E82
+0x4E83
+0x4E84
+0x4E86
+0x4E88
+0x4E8B
+0x4E8C
+0x4E8D
+0x4E8E
+0x4E91
+0x4E92
+0x4E93
+0x4E94
+0x4E95
+0x4E99
+0x4E9B
+0x4E9E
+0x4E9F
+0x4EA1
+0x4EA2
+0x4EA4
+0x4EA5
+0x4EA6
+0x4EA8
+0x4EAB
+0x4EAC
+0x4EAD
+0x4EAE
+0x4EB3
+0x4EB6
+0x4EB9
+0x4EBA
+0x4EC0
+0x4EC1
+0x4EC2
+0x4EC3
+0x4EC4
+0x4EC6
+0x4EC7
+0x4EC8
+0x4EC9
+0x4ECA
+0x4ECB
+0x4ECD
+0x4ED4
+0x4ED5
+0x4ED6
+0x4ED7
+0x4ED8
+0x4ED9
+0x4EDA
+0x4EDC
+0x4EDD
+0x4EDE
+0x4EDF
+0x4EE1
+0x4EE3
+0x4EE4
+0x4EE5
+0x4EE8
+0x4EE9
+0x4EF0
+0x4EF1
+0x4EF2
+0x4EF3
+0x4EF4
+0x4EF5
+0x4EF6
+0x4EF7
+0x4EFB
+0x4EFD
+0x4EFF
+0x4F00
+0x4F01
+0x4F02
+0x4F04
+0x4F05
+0x4F08
+0x4F09
+0x4F0A
+0x4F0B
+0x4F0D
+0x4F0E
+0x4F0F
+0x4F10
+0x4F11
+0x4F12
+0x4F13
+0x4F14
+0x4F15
+0x4F18
+0x4F19
+0x4F1D
+0x4F22
+0x4F2C
+0x4F2D
+0x4F2F
+0x4F30
+0x4F33
+0x4F34
+0x4F36
+0x4F38
+0x4F3A
+0x4F3B
+0x4F3C
+0x4F3D
+0x4F3E
+0x4F3F
+0x4F41
+0x4F43
+0x4F46
+0x4F47
+0x4F48
+0x4F49
+0x4F4C
+0x4F4D
+0x4F4E
+0x4F4F
+0x4F50
+0x4F51
+0x4F52
+0x4F53
+0x4F54
+0x4F55
+0x4F56
+0x4F57
+0x4F58
+0x4F59
+0x4F5A
+0x4F5B
+0x4F5C
+0x4F5D
+0x4F5E
+0x4F5F
+0x4F60
+0x4F61
+0x4F62
+0x4F63
+0x4F64
+0x4F67
+0x4F69
+0x4F6A
+0x4F6B
+0x4F6C
+0x4F6E
+0x4F6F
+0x4F70
+0x4F73
+0x4F74
+0x4F75
+0x4F76
+0x4F77
+0x4F78
+0x4F79
+0x4F7A
+0x4F7B
+0x4F7C
+0x4F7D
+0x4F7E
+0x4F7F
+0x4F80
+0x4F81
+0x4F82
+0x4F83
+0x4F84
+0x4F85
+0x4F86
+0x4F87
+0x4F88
+0x4F89
+0x4F8B
+0x4F8D
+0x4F8F
+0x4F90
+0x4F91
+0x4F92
+0x4F94
+0x4F95
+0x4F96
+0x4F97
+0x4F98
+0x4F9A
+0x4F9B
+0x4F9C
+0x4F9D
+0x4F9E
+0x4FAE
+0x4FAF
+0x4FB2
+0x4FB3
+0x4FB5
+0x4FB6
+0x4FB7
+0x4FB9
+0x4FBA
+0x4FBB
+0x4FBF
+0x4FC0
+0x4FC1
+0x4FC2
+0x4FC3
+0x4FC4
+0x4FC5
+0x4FC7
+0x4FC9
+0x4FCA
+0x4FCB
+0x4FCD
+0x4FCE
+0x4FCF
+0x4FD0
+0x4FD1
+0x4FD3
+0x4FD4
+0x4FD6
+0x4FD7
+0x4FD8
+0x4FD9
+0x4FDA
+0x4FDB
+0x4FDC
+0x4FDD
+0x4FDE
+0x4FDF
+0x4FE0
+0x4FE1
+0x4FEC
+0x4FEE
+0x4FEF
+0x4FF1
+0x4FF3
+0x4FF4
+0x4FF5
+0x4FF6
+0x4FF7
+0x4FF8
+0x4FFA
+0x4FFE
+0x5000
+0x5005
+0x5006
+0x5007
+0x5009
+0x500B
+0x500C
+0x500D
+0x500E
+0x500F
+0x5011
+0x5012
+0x5013
+0x5014
+0x5015
+0x5016
+0x5017
+0x5018
+0x5019
+0x501A
+0x501B
+0x501C
+0x501E
+0x501F
+0x5020
+0x5021
+0x5022
+0x5023
+0x5025
+0x5026
+0x5027
+0x5028
+0x5029
+0x502A
+0x502B
+0x502C
+0x502D
+0x502F
+0x5030
+0x5031
+0x5033
+0x5035
+0x5037
+0x503C
+0x5040
+0x5041
+0x5043
+0x5045
+0x5046
+0x5047
+0x5048
+0x5049
+0x504A
+0x504B
+0x504C
+0x504D
+0x504E
+0x504F
+0x5051
+0x5053
+0x5055
+0x5057
+0x505A
+0x505B
+0x505C
+0x505D
+0x505E
+0x505F
+0x5060
+0x5061
+0x5062
+0x5063
+0x5064
+0x5065
+0x5068
+0x5069
+0x506A
+0x506B
+0x506D
+0x506E
+0x506F
+0x5070
+0x5072
+0x5073
+0x5074
+0x5075
+0x5076
+0x5077
+0x507A
+0x507D
+0x5080
+0x5082
+0x5083
+0x5085
+0x5087
+0x508B
+0x508C
+0x508D
+0x508E
+0x5091
+0x5092
+0x5094
+0x5095
+0x5096
+0x5098
+0x5099
+0x509A
+0x509B
+0x509C
+0x509D
+0x509E
+0x50A2
+0x50A3
+0x50AC
+0x50AD
+0x50AE
+0x50AF
+0x50B0
+0x50B1
+0x50B2
+0x50B3
+0x50B4
+0x50B5
+0x50B6
+0x50B7
+0x50B8
+0x50BA
+0x50BB
+0x50BD
+0x50BE
+0x50BF
+0x50C1
+0x50C2
+0x50C4
+0x50C5
+0x50C6
+0x50C7
+0x50C8
+0x50C9
+0x50CA
+0x50CB
+0x50CE
+0x50CF
+0x50D1
+0x50D3
+0x50D4
+0x50D5
+0x50D6
+0x50D7
+0x50DA
+0x50DB
+0x50DD
+0x50E0
+0x50E3
+0x50E4
+0x50E5
+0x50E6
+0x50E7
+0x50E8
+0x50E9
+0x50EA
+0x50EC
+0x50ED
+0x50EE
+0x50EF
+0x50F0
+0x50F1
+0x50F3
+0x50F5
+0x50F6
+0x50F8
+0x50F9
+0x50FB
+0x50FD
+0x50FE
+0x50FF
+0x5100
+0x5102
+0x5103
+0x5104
+0x5105
+0x5106
+0x5107
+0x5108
+0x5109
+0x510A
+0x510B
+0x510C
+0x5110
+0x5111
+0x5112
+0x5113
+0x5114
+0x5115
+0x5117
+0x5118
+0x511A
+0x511C
+0x511F
+0x5120
+0x5121
+0x5122
+0x5124
+0x5125
+0x5126
+0x5129
+0x512A
+0x512D
+0x512E
+0x5130
+0x5131
+0x5132
+0x5133
+0x5134
+0x5135
+0x5137
+0x5138
+0x5139
+0x513A
+0x513B
+0x513C
+0x513D
+0x513F
+0x5140
+0x5141
+0x5143
+0x5144
+0x5145
+0x5146
+0x5147
+0x5148
+0x5149
+0x514B
+0x514C
+0x514D
+0x5152
+0x5154
+0x5155
+0x5157
+0x5159
+0x515A
+0x515B
+0x515C
+0x515D
+0x515E
+0x515F
+0x5161
+0x5162
+0x5163
+0x5165
+0x5167
+0x5168
+0x5169
+0x516B
+0x516C
+0x516D
+0x516E
+0x5171
+0x5175
+0x5176
+0x5177
+0x5178
+0x517C
+0x5180
+0x5187
+0x5189
+0x518A
+0x518D
+0x518F
+0x5191
+0x5192
+0x5193
+0x5194
+0x5195
+0x5197
+0x5198
+0x519E
+0x51A0
+0x51A2
+0x51A4
+0x51A5
+0x51AA
+0x51AC
+0x51B0
+0x51B1
+0x51B6
+0x51B7
+0x51B9
+0x51BC
+0x51BD
+0x51BE
+0x51C4
+0x51C5
+0x51C6
+0x51C8
+0x51CA
+0x51CB
+0x51CC
+0x51CD
+0x51CE
+0x51D0
+0x51D4
+0x51D7
+0x51D8
+0x51DC
+0x51DD
+0x51DE
+0x51E0
+0x51E1
+0x51F0
+0x51F1
+0x51F3
+0x51F5
+0x51F6
+0x51F8
+0x51F9
+0x51FA
+0x51FD
+0x5200
+0x5201
+0x5203
+0x5206
+0x5207
+0x5208
+0x5209
+0x520A
+0x520C
+0x520E
+0x5210
+0x5211
+0x5212
+0x5213
+0x5216
+0x5217
+0x521C
+0x521D
+0x521E
+0x5221
+0x5224
+0x5225
+0x5228
+0x5229
+0x522A
+0x522E
+0x5230
+0x5231
+0x5232
+0x5233
+0x5235
+0x5236
+0x5237
+0x5238
+0x523A
+0x523B
+0x5241
+0x5243
+0x5244
+0x5246
+0x5247
+0x5249
+0x524A
+0x524B
+0x524C
+0x524D
+0x524E
+0x5252
+0x5254
+0x5255
+0x5256
+0x525A
+0x525B
+0x525C
+0x525D
+0x525E
+0x525F
+0x5261
+0x5262
+0x5269
+0x526A
+0x526B
+0x526C
+0x526D
+0x526E
+0x526F
+0x5272
+0x5274
+0x5275
+0x5277
+0x5278
+0x527A
+0x527B
+0x527C
+0x527D
+0x527F
+0x5280
+0x5281
+0x5282
+0x5283
+0x5284
+0x5287
+0x5288
+0x5289
+0x528A
+0x528B
+0x528C
+0x528D
+0x5291
+0x5293
+0x5296
+0x5297
+0x5298
+0x5299
+0x529B
+0x529F
+0x52A0
+0x52A3
+0x52A6
+0x52A9
+0x52AA
+0x52AB
+0x52AC
+0x52AD
+0x52AE
+0x52BB
+0x52BC
+0x52BE
+0x52C0
+0x52C1
+0x52C2
+0x52C3
+0x52C7
+0x52C9
+0x52CD
+0x52D2
+0x52D3
+0x52D5
+0x52D6
+0x52D7
+0x52D8
+0x52D9
+0x52DB
+0x52DD
+0x52DE
+0x52DF
+0x52E2
+0x52E3
+0x52E4
+0x52E6
+0x52E9
+0x52EB
+0x52EF
+0x52F0
+0x52F1
+0x52F3
+0x52F4
+0x52F5
+0x52F7
+0x52F8
+0x52FA
+0x52FB
+0x52FC
+0x52FE
+0x52FF
+0x5305
+0x5306
+0x5308
+0x5309
+0x530A
+0x530B
+0x530D
+0x530E
+0x530F
+0x5310
+0x5311
+0x5312
+0x5315
+0x5316
+0x5317
+0x5319
+0x531A
+0x531C
+0x531D
+0x531F
+0x5320
+0x5321
+0x5322
+0x5323
+0x532A
+0x532D
+0x532F
+0x5330
+0x5331
+0x5334
+0x5337
+0x5339
+0x533C
+0x533D
+0x533E
+0x533F
+0x5340
+0x5341
+0x5343
+0x5344
+0x5345
+0x5347
+0x5348
+0x5349
+0x534A
+0x534C
+0x534D
+0x5351
+0x5352
+0x5353
+0x5354
+0x5357
+0x535A
+0x535C
+0x535E
+0x5360
+0x5361
+0x5363
+0x5366
+0x536C
+0x536E
+0x536F
+0x5370
+0x5371
+0x5372
+0x5373
+0x5375
+0x5377
+0x5378
+0x5379
+0x537B
+0x537C
+0x537F
+0x5382
+0x5384
+0x538A
+0x538E
+0x538F
+0x5392
+0x5394
+0x5396
+0x5397
+0x5398
+0x5399
+0x539A
+0x539C
+0x539D
+0x539E
+0x539F
+0x53A4
+0x53A5
+0x53A7
+0x53AC
+0x53AD
+0x53B2
+0x53B4
+0x53B9
+0x53BB
+0x53C3
+0x53C8
+0x53C9
+0x53CA
+0x53CB
+0x53CD
+0x53D4
+0x53D6
+0x53D7
+0x53DB
+0x53DF
+0x53E1
+0x53E2
+0x53E3
+0x53E4
+0x53E5
+0x53E6
+0x53E8
+0x53E9
+0x53EA
+0x53EB
+0x53EC
+0x53ED
+0x53EE
+0x53EF
+0x53F0
+0x53F1
+0x53F2
+0x53F3
+0x53F5
+0x53F8
+0x53FB
+0x53FC
+0x5401
+0x5403
+0x5404
+0x5406
+0x5407
+0x5408
+0x5409
+0x540A
+0x540B
+0x540C
+0x540D
+0x540E
+0x540F
+0x5410
+0x5411
+0x5412
+0x5418
+0x5419
+0x541B
+0x541C
+0x541D
+0x541E
+0x541F
+0x5420
+0x5424
+0x5425
+0x5426
+0x5427
+0x5428
+0x5429
+0x542A
+0x542B
+0x542C
+0x542D
+0x542E
+0x5430
+0x5431
+0x5433
+0x5435
+0x5436
+0x5437
+0x5438
+0x5439
+0x543B
+0x543C
+0x543D
+0x543E
+0x5440
+0x5441
+0x5442
+0x5443
+0x5445
+0x5446
+0x5447
+0x5448
+0x544A
+0x544E
+0x544F
+0x5454
+0x5460
+0x5461
+0x5462
+0x5463
+0x5464
+0x5465
+0x5466
+0x5467
+0x5468
+0x546B
+0x546C
+0x546F
+0x5470
+0x5471
+0x5472
+0x5473
+0x5474
+0x5475
+0x5476
+0x5477
+0x5478
+0x547A
+0x547B
+0x547C
+0x547D
+0x547E
+0x547F
+0x5480
+0x5481
+0x5482
+0x5484
+0x5486
+0x5487
+0x5488
+0x548B
+0x548C
+0x548D
+0x548E
+0x5490
+0x5491
+0x5492
+0x5495
+0x5496
+0x5498
+0x549A
+0x54A0
+0x54A1
+0x54A2
+0x54A5
+0x54A6
+0x54A7
+0x54A8
+0x54A9
+0x54AA
+0x54AB
+0x54AC
+0x54AD
+0x54AE
+0x54AF
+0x54B0
+0x54B1
+0x54B3
+0x54B6
+0x54B7
+0x54B8
+0x54BA
+0x54BB
+0x54BC
+0x54BD
+0x54BE
+0x54BF
+0x54C0
+0x54C1
+0x54C2
+0x54C3
+0x54C4
+0x54C5
+0x54C6
+0x54C7
+0x54C8
+0x54C9
+0x54CE
+0x54CF
+0x54D6
+0x54DE
+0x54E0
+0x54E1
+0x54E2
+0x54E4
+0x54E5
+0x54E6
+0x54E7
+0x54E8
+0x54E9
+0x54EA
+0x54EB
+0x54ED
+0x54EE
+0x54F1
+0x54F2
+0x54F3
+0x54F7
+0x54F8
+0x54FA
+0x54FB
+0x54FC
+0x54FD
+0x54FF
+0x5501
+0x5503
+0x5504
+0x5505
+0x5506
+0x5507
+0x5508
+0x5509
+0x550A
+0x550B
+0x550C
+0x550E
+0x550F
+0x5510
+0x5511
+0x5512
+0x5514
+0x5517
+0x551A
+0x5526
+0x5527
+0x552A
+0x552C
+0x552D
+0x552E
+0x552F
+0x5530
+0x5531
+0x5532
+0x5533
+0x5534
+0x5535
+0x5536
+0x5537
+0x5538
+0x5539
+0x553B
+0x553C
+0x553E
+0x5540
+0x5541
+0x5543
+0x5544
+0x5545
+0x5546
+0x5548
+0x554A
+0x554B
+0x554D
+0x554E
+0x554F
+0x5550
+0x5551
+0x5552
+0x5555
+0x5556
+0x5557
+0x555C
+0x555E
+0x555F
+0x5561
+0x5562
+0x5563
+0x5564
+0x5565
+0x5566
+0x556A
+0x5575
+0x5576
+0x5577
+0x557B
+0x557C
+0x557D
+0x557E
+0x557F
+0x5580
+0x5581
+0x5582
+0x5583
+0x5584
+0x5587
+0x5588
+0x5589
+0x558A
+0x558B
+0x558C
+0x558D
+0x558E
+0x558F
+0x5591
+0x5592
+0x5593
+0x5594
+0x5595
+0x5598
+0x5599
+0x559A
+0x559C
+0x559D
+0x559F
+0x55A1
+0x55A2
+0x55A3
+0x55A4
+0x55A5
+0x55A6
+0x55A7
+0x55A8
+0x55AA
+0x55AB
+0x55AC
+0x55AD
+0x55AE
+0x55B1
+0x55B2
+0x55B3
+0x55B5
+0x55BB
+0x55BF
+0x55C0
+0x55C2
+0x55C3
+0x55C4
+0x55C5
+0x55C6
+0x55C7
+0x55C8
+0x55C9
+0x55CA
+0x55CB
+0x55CC
+0x55CD
+0x55CE
+0x55CF
+0x55D0
+0x55D1
+0x55D2
+0x55D3
+0x55D4
+0x55D5
+0x55D6
+0x55D9
+0x55DA
+0x55DB
+0x55DC
+0x55DD
+0x55DF
+0x55E1
+0x55E2
+0x55E3
+0x55E4
+0x55E5
+0x55E6
+0x55E7
+0x55E8
+0x55E9
+0x55EF
+0x55F2
+0x55F6
+0x55F7
+0x55F9
+0x55FA
+0x55FC
+0x55FD
+0x55FE
+0x55FF
+0x5600
+0x5601
+0x5602
+0x5604
+0x5606
+0x5608
+0x5609
+0x560C
+0x560D
+0x560E
+0x560F
+0x5610
+0x5612
+0x5613
+0x5614
+0x5615
+0x5616
+0x5617
+0x561B
+0x561C
+0x561D
+0x561F
+0x5627
+0x5629
+0x562A
+0x562C
+0x562E
+0x562F
+0x5630
+0x5632
+0x5633
+0x5634
+0x5635
+0x5636
+0x5638
+0x5639
+0x563A
+0x563B
+0x563D
+0x563E
+0x563F
+0x5640
+0x5641
+0x5642
+0x5645
+0x5646
+0x5648
+0x5649
+0x564A
+0x564C
+0x564E
+0x5653
+0x5657
+0x5658
+0x5659
+0x565A
+0x565E
+0x5660
+0x5662
+0x5663
+0x5664
+0x5665
+0x5666
+0x5668
+0x5669
+0x566A
+0x566B
+0x566C
+0x566D
+0x566E
+0x566F
+0x5670
+0x5671
+0x5672
+0x5673
+0x5674
+0x5676
+0x5677
+0x5678
+0x5679
+0x567E
+0x567F
+0x5680
+0x5681
+0x5682
+0x5683
+0x5684
+0x5685
+0x5686
+0x5687
+0x568C
+0x568D
+0x568E
+0x568F
+0x5690
+0x5693
+0x5695
+0x5697
+0x5698
+0x5699
+0x569A
+0x569C
+0x569D
+0x56A5
+0x56A6
+0x56A7
+0x56A8
+0x56AA
+0x56AB
+0x56AC
+0x56AD
+0x56AE
+0x56B2
+0x56B3
+0x56B4
+0x56B5
+0x56B6
+0x56B7
+0x56BC
+0x56BD
+0x56BE
+0x56C0
+0x56C1
+0x56C2
+0x56C3
+0x56C5
+0x56C6
+0x56C8
+0x56C9
+0x56CA
+0x56CB
+0x56CC
+0x56CD
+0x56D1
+0x56D3
+0x56D4
+0x56D7
+0x56DA
+0x56DB
+0x56DD
+0x56DE
+0x56DF
+0x56E0
+0x56E1
+0x56E4
+0x56E5
+0x56E7
+0x56EA
+0x56EB
+0x56EE
+0x56F0
+0x56F7
+0x56F9
+0x56FA
+0x56FF
+0x5701
+0x5702
+0x5703
+0x5704
+0x5707
+0x5708
+0x5709
+0x570A
+0x570B
+0x570C
+0x570D
+0x5712
+0x5713
+0x5714
+0x5716
+0x5718
+0x571A
+0x571B
+0x571C
+0x571E
+0x571F
+0x5720
+0x5722
+0x5723
+0x5728
+0x5729
+0x572A
+0x572C
+0x572D
+0x572E
+0x572F
+0x5730
+0x5733
+0x5734
+0x573B
+0x573E
+0x5740
+0x5741
+0x5745
+0x5747
+0x5749
+0x574A
+0x574B
+0x574C
+0x574D
+0x574E
+0x574F
+0x5750
+0x5751
+0x5752
+0x5761
+0x5762
+0x5764
+0x5766
+0x5768
+0x5769
+0x576A
+0x576B
+0x576D
+0x576F
+0x5770
+0x5771
+0x5772
+0x5773
+0x5774
+0x5775
+0x5776
+0x5777
+0x577B
+0x577C
+0x577D
+0x5780
+0x5782
+0x5783
+0x578B
+0x578C
+0x578F
+0x5793
+0x5794
+0x5795
+0x5797
+0x5798
+0x5799
+0x579A
+0x579B
+0x579D
+0x579E
+0x579F
+0x57A0
+0x57A2
+0x57A3
+0x57A4
+0x57A5
+0x57AE
+0x57B5
+0x57B6
+0x57B8
+0x57B9
+0x57BA
+0x57BC
+0x57BD
+0x57BF
+0x57C1
+0x57C2
+0x57C3
+0x57C6
+0x57C7
+0x57CB
+0x57CC
+0x57CE
+0x57CF
+0x57D0
+0x57D2
+0x57D4
+0x57D5
+0x57DC
+0x57DF
+0x57E0
+0x57E1
+0x57E2
+0x57E3
+0x57E4
+0x57E5
+0x57E7
+0x57E9
+0x57EC
+0x57ED
+0x57EE
+0x57F0
+0x57F1
+0x57F2
+0x57F3
+0x57F4
+0x57F5
+0x57F6
+0x57F7
+0x57F8
+0x57F9
+0x57FA
+0x57FB
+0x57FC
+0x57FD
+0x5800
+0x5801
+0x5802
+0x5804
+0x5805
+0x5806
+0x5807
+0x5808
+0x5809
+0x580A
+0x580B
+0x580C
+0x580D
+0x580E
+0x5810
+0x5814
+0x5819
+0x581B
+0x581C
+0x581D
+0x581E
+0x5820
+0x5821
+0x5823
+0x5824
+0x5825
+0x5827
+0x5828
+0x5829
+0x582A
+0x582C
+0x582D
+0x582E
+0x582F
+0x5830
+0x5831
+0x5832
+0x5833
+0x5834
+0x5835
+0x5836
+0x5837
+0x5838
+0x5839
+0x583B
+0x583D
+0x583F
+0x5848
+0x5849
+0x584A
+0x584B
+0x584C
+0x584D
+0x584E
+0x584F
+0x5851
+0x5852
+0x5853
+0x5854
+0x5855
+0x5857
+0x5858
+0x5859
+0x585A
+0x585B
+0x585D
+0x585E
+0x5862
+0x5863
+0x5864
+0x5865
+0x5868
+0x586B
+0x586D
+0x586F
+0x5871
+0x5874
+0x5875
+0x5876
+0x5879
+0x587A
+0x587B
+0x587C
+0x587D
+0x587E
+0x587F
+0x5880
+0x5881
+0x5882
+0x5883
+0x5885
+0x5886
+0x5887
+0x5888
+0x5889
+0x588A
+0x588B
+0x588E
+0x588F
+0x5890
+0x5891
+0x5893
+0x5894
+0x5898
+0x589C
+0x589D
+0x589E
+0x589F
+0x58A0
+0x58A1
+0x58A3
+0x58A5
+0x58A6
+0x58A8
+0x58A9
+0x58AB
+0x58AC
+0x58AE
+0x58AF
+0x58B1
+0x58B3
+0x58BA
+0x58BC
+0x58BD
+0x58BE
+0x58BF
+0x58C1
+0x58C2
+0x58C5
+0x58C6
+0x58C7
+0x58C8
+0x58C9
+0x58CE
+0x58CF
+0x58D1
+0x58D2
+0x58D3
+0x58D4
+0x58D5
+0x58D6
+0x58D8
+0x58D9
+0x58DA
+0x58DB
+0x58DD
+0x58DE
+0x58DF
+0x58E2
+0x58E3
+0x58E4
+0x58E7
+0x58E8
+0x58E9
+0x58EB
+0x58EC
+0x58EF
+0x58F4
+0x58F9
+0x58FA
+0x58FC
+0x58FD
+0x58FE
+0x58FF
+0x5903
+0x5906
+0x590C
+0x590D
+0x590E
+0x590F
+0x5912
+0x5914
+0x5915
+0x5916
+0x5917
+0x5919
+0x591A
+0x591C
+0x5920
+0x5922
+0x5924
+0x5925
+0x5927
+0x5929
+0x592A
+0x592B
+0x592C
+0x592D
+0x592E
+0x592F
+0x5931
+0x5937
+0x5938
+0x593C
+0x593E
+0x5940
+0x5944
+0x5945
+0x5947
+0x5948
+0x5949
+0x594A
+0x594E
+0x594F
+0x5950
+0x5951
+0x5953
+0x5954
+0x5955
+0x5957
+0x5958
+0x595A
+0x595C
+0x5960
+0x5961
+0x5962
+0x5967
+0x5969
+0x596A
+0x596B
+0x596D
+0x596E
+0x5970
+0x5971
+0x5972
+0x5973
+0x5974
+0x5976
+0x5977
+0x5978
+0x5979
+0x597B
+0x597C
+0x597D
+0x597E
+0x597F
+0x5980
+0x5981
+0x5982
+0x5983
+0x5984
+0x5985
+0x598A
+0x598D
+0x598E
+0x598F
+0x5990
+0x5992
+0x5993
+0x5996
+0x5997
+0x5998
+0x5999
+0x599D
+0x599E
+0x59A0
+0x59A1
+0x59A2
+0x59A3
+0x59A4
+0x59A5
+0x59A6
+0x59A7
+0x59A8
+0x59AE
+0x59AF
+0x59B1
+0x59B2
+0x59B3
+0x59B4
+0x59B5
+0x59B6
+0x59B9
+0x59BA
+0x59BB
+0x59BC
+0x59BD
+0x59BE
+0x59C0
+0x59C1
+0x59C3
+0x59C5
+0x59C6
+0x59C7
+0x59C8
+0x59CA
+0x59CB
+0x59CC
+0x59CD
+0x59CE
+0x59CF
+0x59D0
+0x59D1
+0x59D2
+0x59D3
+0x59D4
+0x59D6
+0x59D8
+0x59DA
+0x59DB
+0x59DC
+0x59DD
+0x59DE
+0x59E0
+0x59E1
+0x59E3
+0x59E4
+0x59E5
+0x59E6
+0x59E8
+0x59E9
+0x59EA
+0x59EC
+0x59ED
+0x59EE
+0x59F1
+0x59F2
+0x59F3
+0x59F4
+0x59F5
+0x59F6
+0x59F7
+0x59FA
+0x59FB
+0x59FC
+0x59FD
+0x59FE
+0x59FF
+0x5A00
+0x5A01
+0x5A03
+0x5A09
+0x5A0A
+0x5A0C
+0x5A0F
+0x5A11
+0x5A13
+0x5A15
+0x5A16
+0x5A17
+0x5A18
+0x5A19
+0x5A1B
+0x5A1C
+0x5A1E
+0x5A1F
+0x5A20
+0x5A23
+0x5A25
+0x5A29
+0x5A2D
+0x5A2E
+0x5A33
+0x5A35
+0x5A36
+0x5A37
+0x5A38
+0x5A39
+0x5A3C
+0x5A3E
+0x5A40
+0x5A41
+0x5A42
+0x5A43
+0x5A44
+0x5A46
+0x5A47
+0x5A48
+0x5A49
+0x5A4A
+0x5A4C
+0x5A4D
+0x5A50
+0x5A51
+0x5A52
+0x5A53
+0x5A55
+0x5A56
+0x5A57
+0x5A58
+0x5A5A
+0x5A5B
+0x5A5C
+0x5A5D
+0x5A5E
+0x5A5F
+0x5A60
+0x5A62
+0x5A64
+0x5A65
+0x5A66
+0x5A67
+0x5A69
+0x5A6A
+0x5A6C
+0x5A6D
+0x5A70
+0x5A77
+0x5A78
+0x5A7A
+0x5A7B
+0x5A7C
+0x5A7D
+0x5A7F
+0x5A83
+0x5A84
+0x5A8A
+0x5A8B
+0x5A8C
+0x5A8E
+0x5A8F
+0x5A90
+0x5A92
+0x5A93
+0x5A94
+0x5A95
+0x5A97
+0x5A9A
+0x5A9B
+0x5A9C
+0x5A9D
+0x5A9E
+0x5A9F
+0x5AA2
+0x5AA5
+0x5AA6
+0x5AA7
+0x5AA9
+0x5AAC
+0x5AAE
+0x5AAF
+0x5AB0
+0x5AB1
+0x5AB2
+0x5AB3
+0x5AB4
+0x5AB5
+0x5AB6
+0x5AB7
+0x5AB8
+0x5AB9
+0x5ABA
+0x5ABB
+0x5ABC
+0x5ABD
+0x5ABE
+0x5ABF
+0x5AC0
+0x5AC1
+0x5AC2
+0x5AC4
+0x5AC6
+0x5AC7
+0x5AC8
+0x5AC9
+0x5ACA
+0x5ACB
+0x5ACC
+0x5ACD
+0x5AD5
+0x5AD6
+0x5AD7
+0x5AD8
+0x5AD9
+0x5ADA
+0x5ADB
+0x5ADC
+0x5ADD
+0x5ADE
+0x5ADF
+0x5AE0
+0x5AE1
+0x5AE2
+0x5AE3
+0x5AE5
+0x5AE6
+0x5AE8
+0x5AE9
+0x5AEA
+0x5AEB
+0x5AEC
+0x5AED
+0x5AEE
+0x5AF3
+0x5AF4
+0x5AF5
+0x5AF6
+0x5AF7
+0x5AF8
+0x5AF9
+0x5AFB
+0x5AFD
+0x5AFF
+0x5B01
+0x5B02
+0x5B03
+0x5B05
+0x5B07
+0x5B08
+0x5B09
+0x5B0B
+0x5B0C
+0x5B0F
+0x5B10
+0x5B13
+0x5B14
+0x5B16
+0x5B17
+0x5B19
+0x5B1A
+0x5B1B
+0x5B1D
+0x5B1E
+0x5B20
+0x5B21
+0x5B23
+0x5B24
+0x5B25
+0x5B26
+0x5B27
+0x5B28
+0x5B2A
+0x5B2C
+0x5B2D
+0x5B2E
+0x5B2F
+0x5B30
+0x5B32
+0x5B34
+0x5B38
+0x5B3C
+0x5B3D
+0x5B3E
+0x5B3F
+0x5B40
+0x5B43
+0x5B45
+0x5B47
+0x5B48
+0x5B4B
+0x5B4C
+0x5B4D
+0x5B4E
+0x5B50
+0x5B51
+0x5B53
+0x5B54
+0x5B55
+0x5B56
+0x5B57
+0x5B58
+0x5B5A
+0x5B5B
+0x5B5C
+0x5B5D
+0x5B5F
+0x5B62
+0x5B63
+0x5B64
+0x5B65
+0x5B69
+0x5B6B
+0x5B6C
+0x5B6E
+0x5B70
+0x5B71
+0x5B72
+0x5B73
+0x5B75
+0x5B77
+0x5B78
+0x5B7A
+0x5B7B
+0x5B7D
+0x5B7F
+0x5B81
+0x5B83
+0x5B84
+0x5B85
+0x5B87
+0x5B88
+0x5B89
+0x5B8B
+0x5B8C
+0x5B8E
+0x5B8F
+0x5B92
+0x5B93
+0x5B95
+0x5B97
+0x5B98
+0x5B99
+0x5B9A
+0x5B9B
+0x5B9C
+0x5BA2
+0x5BA3
+0x5BA4
+0x5BA5
+0x5BA6
+0x5BA7
+0x5BA8
+0x5BAC
+0x5BAD
+0x5BAE
+0x5BB0
+0x5BB3
+0x5BB4
+0x5BB5
+0x5BB6
+0x5BB8
+0x5BB9
+0x5BBF
+0x5BC0
+0x5BC1
+0x5BC2
+0x5BC4
+0x5BC5
+0x5BC6
+0x5BC7
+0x5BCA
+0x5BCB
+0x5BCC
+0x5BCD
+0x5BCE
+0x5BD0
+0x5BD1
+0x5BD2
+0x5BD3
+0x5BD4
+0x5BD6
+0x5BD8
+0x5BD9
+0x5BDE
+0x5BDF
+0x5BE0
+0x5BE1
+0x5BE2
+0x5BE3
+0x5BE4
+0x5BE5
+0x5BE6
+0x5BE7
+0x5BE8
+0x5BE9
+0x5BEA
+0x5BEB
+0x5BEC
+0x5BEE
+0x5BEF
+0x5BF0
+0x5BF1
+0x5BF2
+0x5BF5
+0x5BF6
+0x5BF8
+0x5BFA
+0x5C01
+0x5C03
+0x5C04
+0x5C07
+0x5C08
+0x5C09
+0x5C0A
+0x5C0B
+0x5C0C
+0x5C0D
+0x5C0E
+0x5C0F
+0x5C10
+0x5C11
+0x5C12
+0x5C15
+0x5C16
+0x5C1A
+0x5C1F
+0x5C22
+0x5C24
+0x5C25
+0x5C28
+0x5C2A
+0x5C2C
+0x5C30
+0x5C31
+0x5C33
+0x5C37
+0x5C38
+0x5C39
+0x5C3A
+0x5C3B
+0x5C3C
+0x5C3E
+0x5C3F
+0x5C40
+0x5C41
+0x5C44
+0x5C45
+0x5C46
+0x5C47
+0x5C48
+0x5C4B
+0x5C4C
+0x5C4D
+0x5C4E
+0x5C4F
+0x5C50
+0x5C51
+0x5C54
+0x5C55
+0x5C56
+0x5C58
+0x5C59
+0x5C5C
+0x5C5D
+0x5C60
+0x5C62
+0x5C63
+0x5C64
+0x5C65
+0x5C67
+0x5C68
+0x5C69
+0x5C6A
+0x5C6C
+0x5C6D
+0x5C6E
+0x5C6F
+0x5C71
+0x5C73
+0x5C74
+0x5C79
+0x5C7A
+0x5C7B
+0x5C7C
+0x5C7E
+0x5C86
+0x5C88
+0x5C89
+0x5C8A
+0x5C8B
+0x5C8C
+0x5C8D
+0x5C8F
+0x5C90
+0x5C91
+0x5C92
+0x5C93
+0x5C94
+0x5C95
+0x5C9D
+0x5C9F
+0x5CA0
+0x5CA1
+0x5CA2
+0x5CA3
+0x5CA4
+0x5CA5
+0x5CA6
+0x5CA7
+0x5CA8
+0x5CA9
+0x5CAA
+0x5CAB
+0x5CAC
+0x5CAD
+0x5CAE
+0x5CAF
+0x5CB0
+0x5CB1
+0x5CB3
+0x5CB5
+0x5CB6
+0x5CB7
+0x5CB8
+0x5CC6
+0x5CC7
+0x5CC8
+0x5CC9
+0x5CCA
+0x5CCB
+0x5CCC
+0x5CCE
+0x5CCF
+0x5CD0
+0x5CD2
+0x5CD3
+0x5CD4
+0x5CD6
+0x5CD7
+0x5CD8
+0x5CD9
+0x5CDA
+0x5CDB
+0x5CDE
+0x5CDF
+0x5CE8
+0x5CEA
+0x5CEC
+0x5CED
+0x5CEE
+0x5CF0
+0x5CF1
+0x5CF4
+0x5CF6
+0x5CF7
+0x5CF8
+0x5CF9
+0x5CFB
+0x5CFD
+0x5CFF
+0x5D00
+0x5D01
+0x5D06
+0x5D07
+0x5D0B
+0x5D0C
+0x5D0D
+0x5D0E
+0x5D0F
+0x5D11
+0x5D12
+0x5D14
+0x5D16
+0x5D17
+0x5D19
+0x5D1A
+0x5D1B
+0x5D1D
+0x5D1E
+0x5D1F
+0x5D20
+0x5D22
+0x5D23
+0x5D24
+0x5D25
+0x5D26
+0x5D27
+0x5D28
+0x5D29
+0x5D2E
+0x5D30
+0x5D31
+0x5D32
+0x5D33
+0x5D34
+0x5D35
+0x5D36
+0x5D37
+0x5D38
+0x5D39
+0x5D3A
+0x5D3C
+0x5D3D
+0x5D3F
+0x5D40
+0x5D41
+0x5D42
+0x5D43
+0x5D45
+0x5D47
+0x5D49
+0x5D4A
+0x5D4B
+0x5D4C
+0x5D4E
+0x5D50
+0x5D51
+0x5D52
+0x5D55
+0x5D59
+0x5D5E
+0x5D62
+0x5D63
+0x5D65
+0x5D67
+0x5D68
+0x5D69
+0x5D6B
+0x5D6C
+0x5D6F
+0x5D71
+0x5D72
+0x5D77
+0x5D79
+0x5D7A
+0x5D7C
+0x5D7D
+0x5D7E
+0x5D7F
+0x5D80
+0x5D81
+0x5D82
+0x5D84
+0x5D86
+0x5D87
+0x5D88
+0x5D89
+0x5D8A
+0x5D8D
+0x5D92
+0x5D93
+0x5D94
+0x5D95
+0x5D97
+0x5D99
+0x5D9A
+0x5D9C
+0x5D9D
+0x5D9E
+0x5D9F
+0x5DA0
+0x5DA1
+0x5DA2
+0x5DA7
+0x5DA8
+0x5DA9
+0x5DAA
+0x5DAC
+0x5DAD
+0x5DAE
+0x5DAF
+0x5DB0
+0x5DB1
+0x5DB2
+0x5DB4
+0x5DB5
+0x5DB7
+0x5DB8
+0x5DBA
+0x5DBC
+0x5DBD
+0x5DC0
+0x5DC2
+0x5DC3
+0x5DC6
+0x5DC7
+0x5DC9
+0x5DCB
+0x5DCD
+0x5DCF
+0x5DD1
+0x5DD2
+0x5DD4
+0x5DD5
+0x5DD6
+0x5DD8
+0x5DDD
+0x5DDE
+0x5DDF
+0x5DE0
+0x5DE1
+0x5DE2
+0x5DE5
+0x5DE6
+0x5DE7
+0x5DE8
+0x5DEB
+0x5DEE
+0x5DF0
+0x5DF1
+0x5DF2
+0x5DF3
+0x5DF4
+0x5DF7
+0x5DF9
+0x5DFD
+0x5DFE
+0x5DFF
+0x5E02
+0x5E03
+0x5E04
+0x5E06
+0x5E0A
+0x5E0C
+0x5E0E
+0x5E11
+0x5E14
+0x5E15
+0x5E16
+0x5E17
+0x5E18
+0x5E19
+0x5E1A
+0x5E1B
+0x5E1D
+0x5E1F
+0x5E20
+0x5E21
+0x5E22
+0x5E23
+0x5E24
+0x5E25
+0x5E28
+0x5E29
+0x5E2B
+0x5E2D
+0x5E33
+0x5E34
+0x5E36
+0x5E37
+0x5E38
+0x5E3D
+0x5E3E
+0x5E40
+0x5E41
+0x5E43
+0x5E44
+0x5E45
+0x5E4A
+0x5E4B
+0x5E4C
+0x5E4D
+0x5E4E
+0x5E4F
+0x5E53
+0x5E54
+0x5E55
+0x5E57
+0x5E58
+0x5E59
+0x5E5B
+0x5E5C
+0x5E5D
+0x5E5F
+0x5E60
+0x5E61
+0x5E62
+0x5E63
+0x5E66
+0x5E67
+0x5E68
+0x5E69
+0x5E6A
+0x5E6B
+0x5E6C
+0x5E6D
+0x5E6E
+0x5E6F
+0x5E70
+0x5E72
+0x5E73
+0x5E74
+0x5E75
+0x5E76
+0x5E78
+0x5E79
+0x5E7B
+0x5E7C
+0x5E7D
+0x5E7E
+0x5E80
+0x5E82
+0x5E84
+0x5E87
+0x5E88
+0x5E89
+0x5E8A
+0x5E8B
+0x5E8C
+0x5E8D
+0x5E8F
+0x5E95
+0x5E96
+0x5E97
+0x5E9A
+0x5E9B
+0x5E9C
+0x5EA0
+0x5EA2
+0x5EA3
+0x5EA4
+0x5EA5
+0x5EA6
+0x5EA7
+0x5EA8
+0x5EAA
+0x5EAB
+0x5EAC
+0x5EAD
+0x5EAE
+0x5EB0
+0x5EB1
+0x5EB2
+0x5EB3
+0x5EB4
+0x5EB5
+0x5EB6
+0x5EB7
+0x5EB8
+0x5EB9
+0x5EBE
+0x5EC1
+0x5EC2
+0x5EC4
+0x5EC5
+0x5EC6
+0x5EC7
+0x5EC8
+0x5EC9
+0x5ECA
+0x5ECB
+0x5ECC
+0x5ECE
+0x5ED1
+0x5ED2
+0x5ED3
+0x5ED4
+0x5ED5
+0x5ED6
+0x5ED7
+0x5ED8
+0x5ED9
+0x5EDA
+0x5EDB
+0x5EDC
+0x5EDD
+0x5EDE
+0x5EDF
+0x5EE0
+0x5EE1
+0x5EE2
+0x5EE3
+0x5EE5
+0x5EE6
+0x5EE7
+0x5EE8
+0x5EE9
+0x5EEC
+0x5EEE
+0x5EEF
+0x5EF1
+0x5EF2
+0x5EF3
+0x5EF6
+0x5EF7
+0x5EFA
+0x5EFE
+0x5EFF
+0x5F01
+0x5F02
+0x5F04
+0x5F05
+0x5F07
+0x5F08
+0x5F0A
+0x5F0B
+0x5F0F
+0x5F12
+0x5F13
+0x5F14
+0x5F15
+0x5F17
+0x5F18
+0x5F1A
+0x5F1B
+0x5F1D
+0x5F1F
+0x5F22
+0x5F23
+0x5F24
+0x5F26
+0x5F27
+0x5F28
+0x5F29
+0x5F2D
+0x5F2E
+0x5F30
+0x5F31
+0x5F33
+0x5F35
+0x5F36
+0x5F37
+0x5F38
+0x5F3C
+0x5F40
+0x5F43
+0x5F44
+0x5F46
+0x5F48
+0x5F49
+0x5F4A
+0x5F4B
+0x5F4C
+0x5F4E
+0x5F4F
+0x5F54
+0x5F56
+0x5F57
+0x5F58
+0x5F59
+0x5F5D
+0x5F62
+0x5F64
+0x5F65
+0x5F67
+0x5F69
+0x5F6A
+0x5F6B
+0x5F6C
+0x5F6D
+0x5F6F
+0x5F70
+0x5F71
+0x5F73
+0x5F74
+0x5F76
+0x5F77
+0x5F78
+0x5F79
+0x5F7C
+0x5F7D
+0x5F7E
+0x5F7F
+0x5F80
+0x5F81
+0x5F82
+0x5F85
+0x5F86
+0x5F87
+0x5F88
+0x5F89
+0x5F8A
+0x5F8B
+0x5F8C
+0x5F90
+0x5F91
+0x5F92
+0x5F96
+0x5F97
+0x5F98
+0x5F99
+0x5F9B
+0x5F9C
+0x5F9E
+0x5F9F
+0x5FA0
+0x5FA1
+0x5FA5
+0x5FA6
+0x5FA8
+0x5FA9
+0x5FAA
+0x5FAB
+0x5FAC
+0x5FAD
+0x5FAE
+0x5FAF
+0x5FB2
+0x5FB5
+0x5FB6
+0x5FB7
+0x5FB9
+0x5FBB
+0x5FBC
+0x5FBD
+0x5FBE
+0x5FBF
+0x5FC0
+0x5FC1
+0x5FC3
+0x5FC5
+0x5FC9
+0x5FCC
+0x5FCD
+0x5FCF
+0x5FD0
+0x5FD1
+0x5FD2
+0x5FD4
+0x5FD5
+0x5FD6
+0x5FD7
+0x5FD8
+0x5FD9
+0x5FDD
+0x5FDE
+0x5FE0
+0x5FE1
+0x5FE3
+0x5FE4
+0x5FE5
+0x5FE8
+0x5FEA
+0x5FEB
+0x5FED
+0x5FEE
+0x5FEF
+0x5FF1
+0x5FF3
+0x5FF4
+0x5FF5
+0x5FF7
+0x5FF8
+0x5FFA
+0x5FFB
+0x5FFD
+0x5FFF
+0x6000
+0x6009
+0x600A
+0x600B
+0x600C
+0x600D
+0x600E
+0x600F
+0x6010
+0x6011
+0x6012
+0x6013
+0x6014
+0x6015
+0x6016
+0x6017
+0x6019
+0x601A
+0x601B
+0x601C
+0x601D
+0x601E
+0x6020
+0x6021
+0x6022
+0x6024
+0x6025
+0x6026
+0x6027
+0x6028
+0x6029
+0x602A
+0x602B
+0x602C
+0x602D
+0x602E
+0x602F
+0x6032
+0x6033
+0x6034
+0x6035
+0x6037
+0x6039
+0x6040
+0x6041
+0x6042
+0x6043
+0x6044
+0x6045
+0x6046
+0x6047
+0x6049
+0x604C
+0x604D
+0x6050
+0x6053
+0x6054
+0x6055
+0x6058
+0x6059
+0x605A
+0x605B
+0x605D
+0x605E
+0x605F
+0x6062
+0x6063
+0x6064
+0x6065
+0x6066
+0x6067
+0x6068
+0x6069
+0x606A
+0x606B
+0x606C
+0x606D
+0x606E
+0x606F
+0x6070
+0x6072
+0x607F
+0x6080
+0x6081
+0x6083
+0x6084
+0x6085
+0x6086
+0x6087
+0x6088
+0x6089
+0x608A
+0x608C
+0x608D
+0x608E
+0x6090
+0x6092
+0x6094
+0x6095
+0x6096
+0x6097
+0x609A
+0x609B
+0x609C
+0x609D
+0x609F
+0x60A0
+0x60A2
+0x60A3
+0x60A8
+0x60B0
+0x60B1
+0x60B2
+0x60B4
+0x60B5
+0x60B6
+0x60B7
+0x60B8
+0x60B9
+0x60BA
+0x60BB
+0x60BC
+0x60BD
+0x60BE
+0x60BF
+0x60C0
+0x60C1
+0x60C3
+0x60C4
+0x60C5
+0x60C6
+0x60C7
+0x60C8
+0x60C9
+0x60CA
+0x60CB
+0x60CC
+0x60CD
+0x60CE
+0x60CF
+0x60D1
+0x60D3
+0x60D4
+0x60D5
+0x60D8
+0x60D9
+0x60DA
+0x60DB
+0x60DC
+0x60DD
+0x60DF
+0x60E0
+0x60E1
+0x60E2
+0x60E4
+0x60E6
+0x60F0
+0x60F1
+0x60F2
+0x60F3
+0x60F4
+0x60F5
+0x60F6
+0x60F7
+0x60F8
+0x60F9
+0x60FA
+0x60FB
+0x60FC
+0x60FE
+0x60FF
+0x6100
+0x6101
+0x6103
+0x6104
+0x6105
+0x6106
+0x6108
+0x6109
+0x610A
+0x610B
+0x610D
+0x610E
+0x610F
+0x6110
+0x6112
+0x6113
+0x6114
+0x6115
+0x6116
+0x6118
+0x611A
+0x611B
+0x611C
+0x611D
+0x611F
+0x6123
+0x6127
+0x6128
+0x6129
+0x612B
+0x612C
+0x612E
+0x612F
+0x6132
+0x6134
+0x6136
+0x6137
+0x613B
+0x613E
+0x613F
+0x6140
+0x6141
+0x6144
+0x6145
+0x6146
+0x6147
+0x6148
+0x6149
+0x614A
+0x614B
+0x614C
+0x614D
+0x614E
+0x614F
+0x6152
+0x6153
+0x6154
+0x6155
+0x6156
+0x6158
+0x615A
+0x615B
+0x615D
+0x615E
+0x615F
+0x6161
+0x6162
+0x6163
+0x6165
+0x6166
+0x6167
+0x6168
+0x616A
+0x616B
+0x616C
+0x616E
+0x6170
+0x6171
+0x6172
+0x6173
+0x6174
+0x6175
+0x6176
+0x6177
+0x6179
+0x617A
+0x617C
+0x617E
+0x6180
+0x6182
+0x6183
+0x6189
+0x618A
+0x618B
+0x618C
+0x618D
+0x618E
+0x6190
+0x6191
+0x6192
+0x6193
+0x6194
+0x6196
+0x619A
+0x619B
+0x619D
+0x619F
+0x61A1
+0x61A2
+0x61A4
+0x61A7
+0x61A8
+0x61A9
+0x61AA
+0x61AB
+0x61AC
+0x61AD
+0x61AE
+0x61AF
+0x61B0
+0x61B1
+0x61B2
+0x61B3
+0x61B4
+0x61B5
+0x61B6
+0x61B8
+0x61BA
+0x61BC
+0x61BE
+0x61BF
+0x61C1
+0x61C2
+0x61C3
+0x61C5
+0x61C6
+0x61C7
+0x61C8
+0x61C9
+0x61CA
+0x61CB
+0x61CC
+0x61CD
+0x61D6
+0x61D8
+0x61DE
+0x61DF
+0x61E0
+0x61E3
+0x61E4
+0x61E5
+0x61E6
+0x61E7
+0x61E8
+0x61E9
+0x61EA
+0x61EB
+0x61ED
+0x61EE
+0x61F0
+0x61F1
+0x61F2
+0x61F5
+0x61F6
+0x61F7
+0x61F8
+0x61F9
+0x61FA
+0x61FB
+0x61FC
+0x61FD
+0x61FE
+0x61FF
+0x6200
+0x6201
+0x6203
+0x6204
+0x6207
+0x6208
+0x6209
+0x620A
+0x620C
+0x620D
+0x620E
+0x6210
+0x6211
+0x6212
+0x6214
+0x6215
+0x6216
+0x6219
+0x621A
+0x621B
+0x621F
+0x6220
+0x6221
+0x6222
+0x6223
+0x6224
+0x6225
+0x6227
+0x6229
+0x622A
+0x622B
+0x622D
+0x622E
+0x6230
+0x6232
+0x6233
+0x6234
+0x6236
+0x623A
+0x623D
+0x623E
+0x623F
+0x6240
+0x6241
+0x6242
+0x6243
+0x6246
+0x6247
+0x6248
+0x6249
+0x624A
+0x624B
+0x624D
+0x624E
+0x6250
+0x6251
+0x6252
+0x6253
+0x6254
+0x6258
+0x6259
+0x625A
+0x625B
+0x625C
+0x625E
+0x6260
+0x6261
+0x6262
+0x6263
+0x6264
+0x6265
+0x6266
+0x626D
+0x626E
+0x626F
+0x6270
+0x6271
+0x6272
+0x6273
+0x6274
+0x6276
+0x6277
+0x6279
+0x627A
+0x627B
+0x627C
+0x627D
+0x627E
+0x627F
+0x6280
+0x6281
+0x6283
+0x6284
+0x6286
+0x6287
+0x6288
+0x6289
+0x628A
+0x628C
+0x628E
+0x628F
+0x6291
+0x6292
+0x6293
+0x6294
+0x6295
+0x6296
+0x6297
+0x6298
+0x62A8
+0x62A9
+0x62AA
+0x62AB
+0x62AC
+0x62AD
+0x62AE
+0x62AF
+0x62B0
+0x62B1
+0x62B3
+0x62B4
+0x62B5
+0x62B6
+0x62B8
+0x62B9
+0x62BB
+0x62BC
+0x62BD
+0x62BE
+0x62BF
+0x62C2
+0x62C4
+0x62C6
+0x62C7
+0x62C8
+0x62C9
+0x62CA
+0x62CB
+0x62CC
+0x62CD
+0x62CE
+0x62CF
+0x62D0
+0x62D1
+0x62D2
+0x62D3
+0x62D4
+0x62D6
+0x62D7
+0x62D8
+0x62D9
+0x62DA
+0x62DB
+0x62DC
+0x62EB
+0x62EC
+0x62ED
+0x62EE
+0x62EF
+0x62F0
+0x62F1
+0x62F2
+0x62F3
+0x62F4
+0x62F5
+0x62F6
+0x62F7
+0x62F8
+0x62F9
+0x62FA
+0x62FB
+0x62FC
+0x62FD
+0x62FE
+0x62FF
+0x6300
+0x6301
+0x6302
+0x6303
+0x6307
+0x6308
+0x6309
+0x630B
+0x630C
+0x630D
+0x630E
+0x630F
+0x6310
+0x6311
+0x6313
+0x6314
+0x6315
+0x6316
+0x6328
+0x6329
+0x632A
+0x632B
+0x632C
+0x632D
+0x632F
+0x6332
+0x6333
+0x6334
+0x6336
+0x6338
+0x6339
+0x633A
+0x633B
+0x633C
+0x633D
+0x633E
+0x6340
+0x6341
+0x6342
+0x6343
+0x6344
+0x6345
+0x6346
+0x6347
+0x6348
+0x6349
+0x634A
+0x634B
+0x634C
+0x634D
+0x634E
+0x634F
+0x6350
+0x6351
+0x6354
+0x6355
+0x6356
+0x6357
+0x6358
+0x6359
+0x635A
+0x6365
+0x6367
+0x6368
+0x6369
+0x636B
+0x636D
+0x636E
+0x636F
+0x6370
+0x6371
+0x6372
+0x6375
+0x6376
+0x6377
+0x6378
+0x637A
+0x637B
+0x637C
+0x637D
+0x6380
+0x6381
+0x6382
+0x6383
+0x6384
+0x6385
+0x6387
+0x6388
+0x6389
+0x638A
+0x638C
+0x638D
+0x638E
+0x638F
+0x6390
+0x6391
+0x6392
+0x6394
+0x6396
+0x6397
+0x6398
+0x6399
+0x639B
+0x639C
+0x639D
+0x639E
+0x639F
+0x63A0
+0x63A1
+0x63A2
+0x63A3
+0x63A4
+0x63A5
+0x63A7
+0x63A8
+0x63A9
+0x63AA
+0x63AB
+0x63AC
+0x63AD
+0x63AE
+0x63AF
+0x63B0
+0x63B1
+0x63BD
+0x63BE
+0x63C0
+0x63C2
+0x63C3
+0x63C4
+0x63C5
+0x63C6
+0x63C7
+0x63C8
+0x63C9
+0x63CA
+0x63CB
+0x63CC
+0x63CD
+0x63CE
+0x63CF
+0x63D0
+0x63D2
+0x63D3
+0x63D5
+0x63D6
+0x63D7
+0x63D8
+0x63D9
+0x63DA
+0x63DB
+0x63DC
+0x63DD
+0x63DF
+0x63E0
+0x63E1
+0x63E3
+0x63E4
+0x63E5
+0x63E7
+0x63E8
+0x63E9
+0x63EA
+0x63EB
+0x63ED
+0x63EE
+0x63EF
+0x63F0
+0x63F1
+0x63F2
+0x63F3
+0x63F4
+0x63F5
+0x63F6
+0x63F9
+0x6406
+0x6409
+0x640A
+0x640B
+0x640C
+0x640D
+0x640E
+0x640F
+0x6410
+0x6412
+0x6413
+0x6414
+0x6415
+0x6416
+0x6417
+0x6418
+0x641A
+0x641B
+0x641C
+0x641E
+0x641F
+0x6420
+0x6421
+0x6422
+0x6423
+0x6424
+0x6425
+0x6426
+0x6427
+0x6428
+0x642A
+0x642B
+0x642C
+0x642D
+0x642E
+0x642F
+0x6430
+0x6433
+0x6434
+0x6435
+0x6436
+0x6437
+0x6439
+0x643D
+0x643E
+0x643F
+0x6440
+0x6441
+0x6443
+0x644B
+0x644D
+0x644E
+0x6450
+0x6451
+0x6452
+0x6453
+0x6454
+0x6458
+0x6459
+0x645B
+0x645C
+0x645D
+0x645E
+0x645F
+0x6460
+0x6461
+0x6465
+0x6466
+0x6467
+0x6468
+0x6469
+0x646B
+0x646C
+0x646D
+0x646E
+0x646F
+0x6470
+0x6472
+0x6473
+0x6474
+0x6475
+0x6476
+0x6477
+0x6478
+0x6479
+0x647A
+0x647B
+0x647D
+0x647F
+0x6482
+0x6485
+0x6487
+0x6488
+0x6489
+0x648A
+0x648B
+0x648C
+0x648F
+0x6490
+0x6492
+0x6493
+0x6495
+0x6496
+0x6497
+0x6498
+0x6499
+0x649A
+0x649C
+0x649D
+0x649E
+0x649F
+0x64A0
+0x64A2
+0x64A3
+0x64A4
+0x64A5
+0x64A6
+0x64A9
+0x64AB
+0x64AC
+0x64AD
+0x64AE
+0x64B0
+0x64B1
+0x64B2
+0x64B3
+0x64BB
+0x64BC
+0x64BD
+0x64BE
+0x64BF
+0x64C1
+0x64C2
+0x64C3
+0x64C4
+0x64C5
+0x64C7
+0x64C9
+0x64CA
+0x64CB
+0x64CD
+0x64CE
+0x64CF
+0x64D0
+0x64D2
+0x64D4
+0x64D6
+0x64D7
+0x64D8
+0x64D9
+0x64DA
+0x64DB
+0x64E0
+0x64E2
+0x64E3
+0x64E4
+0x64E6
+0x64E8
+0x64E9
+0x64EB
+0x64EC
+0x64ED
+0x64EF
+0x64F0
+0x64F1
+0x64F2
+0x64F3
+0x64F4
+0x64F7
+0x64F8
+0x64FA
+0x64FB
+0x64FC
+0x64FD
+0x64FE
+0x64FF
+0x6500
+0x6501
+0x6503
+0x6504
+0x6506
+0x6507
+0x6509
+0x650C
+0x650D
+0x650E
+0x650F
+0x6510
+0x6513
+0x6514
+0x6515
+0x6516
+0x6517
+0x6518
+0x6519
+0x651B
+0x651C
+0x651D
+0x6520
+0x6521
+0x6522
+0x6523
+0x6524
+0x6525
+0x6526
+0x6529
+0x652A
+0x652B
+0x652C
+0x652D
+0x652E
+0x652F
+0x6532
+0x6533
+0x6536
+0x6537
+0x6538
+0x6539
+0x653B
+0x653D
+0x653E
+0x653F
+0x6541
+0x6543
+0x6545
+0x6546
+0x6548
+0x6549
+0x654A
+0x654F
+0x6551
+0x6553
+0x6554
+0x6555
+0x6556
+0x6557
+0x6558
+0x6559
+0x655C
+0x655D
+0x655E
+0x6562
+0x6563
+0x6564
+0x6565
+0x6566
+0x6567
+0x6568
+0x656A
+0x656C
+0x656F
+0x6572
+0x6573
+0x6574
+0x6575
+0x6576
+0x6577
+0x6578
+0x6579
+0x657A
+0x657B
+0x657C
+0x657F
+0x6580
+0x6581
+0x6582
+0x6583
+0x6584
+0x6587
+0x658C
+0x6590
+0x6591
+0x6592
+0x6594
+0x6595
+0x6596
+0x6597
+0x6599
+0x659B
+0x659C
+0x659D
+0x659E
+0x659F
+0x65A0
+0x65A1
+0x65A2
+0x65A4
+0x65A5
+0x65A7
+0x65A8
+0x65AA
+0x65AB
+0x65AC
+0x65AE
+0x65AF
+0x65B0
+0x65B2
+0x65B3
+0x65B6
+0x65B7
+0x65B8
+0x65B9
+0x65BB
+0x65BC
+0x65BD
+0x65BF
+0x65C1
+0x65C2
+0x65C3
+0x65C4
+0x65C5
+0x65C6
+0x65CB
+0x65CC
+0x65CD
+0x65CE
+0x65CF
+0x65D0
+0x65D2
+0x65D3
+0x65D6
+0x65D7
+0x65DA
+0x65DB
+0x65DD
+0x65DE
+0x65DF
+0x65E1
+0x65E2
+0x65E5
+0x65E6
+0x65E8
+0x65E9
+0x65EC
+0x65ED
+0x65EE
+0x65EF
+0x65F0
+0x65F1
+0x65F2
+0x65F3
+0x65F4
+0x65F5
+0x65FA
+0x65FB
+0x65FC
+0x65FD
+0x6600
+0x6602
+0x6603
+0x6604
+0x6605
+0x6606
+0x6607
+0x6608
+0x6609
+0x660A
+0x660B
+0x660C
+0x660D
+0x660E
+0x660F
+0x6610
+0x6611
+0x6612
+0x6613
+0x6614
+0x6615
+0x661C
+0x661D
+0x661F
+0x6620
+0x6621
+0x6622
+0x6624
+0x6625
+0x6626
+0x6627
+0x6628
+0x662B
+0x662D
+0x662E
+0x662F
+0x6631
+0x6632
+0x6633
+0x6634
+0x6635
+0x6636
+0x6639
+0x663A
+0x6641
+0x6642
+0x6643
+0x6645
+0x6647
+0x6649
+0x664A
+0x664C
+0x664F
+0x6651
+0x6652
+0x6659
+0x665A
+0x665B
+0x665C
+0x665D
+0x665E
+0x665F
+0x6661
+0x6662
+0x6664
+0x6665
+0x6666
+0x6668
+0x666A
+0x666C
+0x666E
+0x666F
+0x6670
+0x6671
+0x6672
+0x6674
+0x6676
+0x6677
+0x6678
+0x6679
+0x667A
+0x667B
+0x667C
+0x667E
+0x6680
+0x6684
+0x6686
+0x6687
+0x6688
+0x6689
+0x668A
+0x668B
+0x668C
+0x668D
+0x6690
+0x6691
+0x6694
+0x6695
+0x6696
+0x6697
+0x6698
+0x6699
+0x669D
+0x669F
+0x66A0
+0x66A1
+0x66A2
+0x66A8
+0x66A9
+0x66AA
+0x66AB
+0x66AE
+0x66AF
+0x66B0
+0x66B1
+0x66B2
+0x66B4
+0x66B5
+0x66B7
+0x66B8
+0x66B9
+0x66BA
+0x66BB
+0x66BD
+0x66BE
+0x66C0
+0x66C4
+0x66C6
+0x66C7
+0x66C8
+0x66C9
+0x66CA
+0x66CB
+0x66CC
+0x66CF
+0x66D2
+0x66D6
+0x66D8
+0x66D9
+0x66DA
+0x66DB
+0x66DC
+0x66DD
+0x66DE
+0x66E0
+0x66E3
+0x66E4
+0x66E6
+0x66E8
+0x66E9
+0x66EB
+0x66EC
+0x66ED
+0x66EE
+0x66F0
+0x66F2
+0x66F3
+0x66F4
+0x66F6
+0x66F7
+0x66F8
+0x66F9
+0x66FC
+0x66FE
+0x66FF
+0x6700
+0x6701
+0x6703
+0x6704
+0x6705
+0x6708
+0x6709
+0x670A
+0x670B
+0x670D
+0x670F
+0x6710
+0x6712
+0x6713
+0x6714
+0x6715
+0x6717
+0x6718
+0x671B
+0x671D
+0x671F
+0x6720
+0x6721
+0x6722
+0x6723
+0x6726
+0x6727
+0x6728
+0x672A
+0x672B
+0x672C
+0x672D
+0x672E
+0x6731
+0x6733
+0x6734
+0x6735
+0x6738
+0x6739
+0x673A
+0x673B
+0x673C
+0x673D
+0x673E
+0x673F
+0x6745
+0x6746
+0x6747
+0x6748
+0x6749
+0x674B
+0x674C
+0x674D
+0x674E
+0x674F
+0x6750
+0x6751
+0x6753
+0x6755
+0x6756
+0x6757
+0x6759
+0x675A
+0x675C
+0x675D
+0x675E
+0x675F
+0x6760
+0x676A
+0x676C
+0x676D
+0x676F
+0x6770
+0x6771
+0x6772
+0x6773
+0x6774
+0x6775
+0x6776
+0x6777
+0x6778
+0x6779
+0x677A
+0x677B
+0x677C
+0x677D
+0x677E
+0x677F
+0x6781
+0x6783
+0x6784
+0x6785
+0x6786
+0x6787
+0x6789
+0x678B
+0x678C
+0x678D
+0x678E
+0x6790
+0x6791
+0x6792
+0x6793
+0x6794
+0x6795
+0x6797
+0x6798
+0x6799
+0x679A
+0x679C
+0x679D
+0x679F
+0x67AE
+0x67AF
+0x67B0
+0x67B2
+0x67B3
+0x67B4
+0x67B5
+0x67B6
+0x67B7
+0x67B8
+0x67B9
+0x67BA
+0x67BB
+0x67C0
+0x67C1
+0x67C2
+0x67C3
+0x67C4
+0x67C5
+0x67C6
+0x67C8
+0x67C9
+0x67CA
+0x67CB
+0x67CC
+0x67CD
+0x67CE
+0x67CF
+0x67D0
+0x67D1
+0x67D2
+0x67D3
+0x67D4
+0x67D8
+0x67D9
+0x67DA
+0x67DB
+0x67DC
+0x67DD
+0x67DE
+0x67DF
+0x67E2
+0x67E3
+0x67E4
+0x67E5
+0x67E6
+0x67E7
+0x67E9
+0x67EA
+0x67EB
+0x67EC
+0x67ED
+0x67EE
+0x67EF
+0x67F0
+0x67F1
+0x67F2
+0x67F3
+0x67F4
+0x67F5
+0x67F6
+0x67F7
+0x67F8
+0x67FA
+0x67FC
+0x67FF
+0x6812
+0x6813
+0x6814
+0x6816
+0x6817
+0x6818
+0x681A
+0x681C
+0x681D
+0x681F
+0x6820
+0x6821
+0x6825
+0x6826
+0x6828
+0x6829
+0x682A
+0x682B
+0x682D
+0x682E
+0x682F
+0x6831
+0x6832
+0x6833
+0x6834
+0x6835
+0x6838
+0x6839
+0x683A
+0x683B
+0x683C
+0x683D
+0x6840
+0x6841
+0x6842
+0x6843
+0x6844
+0x6845
+0x6846
+0x6848
+0x6849
+0x684B
+0x684C
+0x684D
+0x684E
+0x684F
+0x6850
+0x6851
+0x6853
+0x6854
+0x686B
+0x686D
+0x686E
+0x686F
+0x6871
+0x6872
+0x6874
+0x6875
+0x6876
+0x6877
+0x6878
+0x6879
+0x687B
+0x687C
+0x687D
+0x687E
+0x687F
+0x6880
+0x6881
+0x6882
+0x6883
+0x6885
+0x6886
+0x6887
+0x6889
+0x688A
+0x688B
+0x688C
+0x688F
+0x6890
+0x6891
+0x6892
+0x6893
+0x6894
+0x6896
+0x6897
+0x689B
+0x689C
+0x689D
+0x689F
+0x68A0
+0x68A1
+0x68A2
+0x68A3
+0x68A4
+0x68A7
+0x68A8
+0x68A9
+0x68AA
+0x68AB
+0x68AC
+0x68AD
+0x68AE
+0x68AF
+0x68B0
+0x68B1
+0x68B2
+0x68B3
+0x68B4
+0x68B5
+0x68C4
+0x68C6
+0x68C7
+0x68C8
+0x68C9
+0x68CB
+0x68CC
+0x68CD
+0x68CE
+0x68D0
+0x68D1
+0x68D2
+0x68D3
+0x68D4
+0x68D5
+0x68D6
+0x68D7
+0x68D8
+0x68DA
+0x68DC
+0x68DD
+0x68DE
+0x68DF
+0x68E0
+0x68E1
+0x68E3
+0x68E4
+0x68E6
+0x68E7
+0x68E8
+0x68E9
+0x68EA
+0x68EB
+0x68EC
+0x68EE
+0x68EF
+0x68F0
+0x68F1
+0x68F2
+0x68F3
+0x68F4
+0x68F5
+0x68F6
+0x68F7
+0x68F8
+0x68F9
+0x68FA
+0x68FB
+0x68FC
+0x68FD
+0x6904
+0x6905
+0x6906
+0x6907
+0x6908
+0x690A
+0x690B
+0x690C
+0x690D
+0x690E
+0x690F
+0x6910
+0x6911
+0x6912
+0x6913
+0x6914
+0x6915
+0x6917
+0x6925
+0x692A
+0x692F
+0x6930
+0x6932
+0x6933
+0x6934
+0x6935
+0x6937
+0x6938
+0x6939
+0x693B
+0x693C
+0x693D
+0x693F
+0x6940
+0x6941
+0x6942
+0x6944
+0x6945
+0x6948
+0x6949
+0x694A
+0x694B
+0x694C
+0x694E
+0x694F
+0x6951
+0x6952
+0x6953
+0x6954
+0x6956
+0x6957
+0x6958
+0x6959
+0x695A
+0x695B
+0x695C
+0x695D
+0x695E
+0x695F
+0x6960
+0x6962
+0x6963
+0x6965
+0x6966
+0x6968
+0x6969
+0x696A
+0x696B
+0x696C
+0x696D
+0x696E
+0x696F
+0x6970
+0x6971
+0x6974
+0x6975
+0x6976
+0x6977
+0x6978
+0x6979
+0x697A
+0x697B
+0x6982
+0x6983
+0x6986
+0x698D
+0x698E
+0x6990
+0x6991
+0x6993
+0x6994
+0x6995
+0x6996
+0x6997
+0x6999
+0x699A
+0x699B
+0x699C
+0x699E
+0x69A0
+0x69A1
+0x69A3
+0x69A4
+0x69A5
+0x69A6
+0x69A7
+0x69A8
+0x69A9
+0x69AA
+0x69AB
+0x69AC
+0x69AD
+0x69AE
+0x69AF
+0x69B0
+0x69B1
+0x69B3
+0x69B4
+0x69B5
+0x69B6
+0x69B7
+0x69B9
+0x69BB
+0x69BC
+0x69BD
+0x69BE
+0x69BF
+0x69C1
+0x69C2
+0x69C3
+0x69C4
+0x69C6
+0x69C9
+0x69CA
+0x69CB
+0x69CC
+0x69CD
+0x69CE
+0x69CF
+0x69D0
+0x69D3
+0x69D4
+0x69D9
+0x69E2
+0x69E4
+0x69E5
+0x69E6
+0x69E7
+0x69E8
+0x69EB
+0x69EC
+0x69ED
+0x69EE
+0x69F1
+0x69F2
+0x69F3
+0x69F4
+0x69F6
+0x69F7
+0x69F8
+0x69FB
+0x69FC
+0x69FD
+0x69FE
+0x69FF
+0x6A00
+0x6A01
+0x6A02
+0x6A04
+0x6A05
+0x6A06
+0x6A07
+0x6A08
+0x6A09
+0x6A0A
+0x6A0D
+0x6A0F
+0x6A11
+0x6A13
+0x6A14
+0x6A15
+0x6A16
+0x6A17
+0x6A18
+0x6A19
+0x6A1B
+0x6A1D
+0x6A1E
+0x6A1F
+0x6A20
+0x6A21
+0x6A23
+0x6A25
+0x6A26
+0x6A27
+0x6A28
+0x6A32
+0x6A34
+0x6A35
+0x6A38
+0x6A39
+0x6A3A
+0x6A3B
+0x6A3C
+0x6A3D
+0x6A3E
+0x6A3F
+0x6A40
+0x6A41
+0x6A44
+0x6A46
+0x6A47
+0x6A48
+0x6A49
+0x6A4B
+0x6A4D
+0x6A4E
+0x6A4F
+0x6A50
+0x6A51
+0x6A54
+0x6A55
+0x6A56
+0x6A58
+0x6A59
+0x6A5A
+0x6A5B
+0x6A5D
+0x6A5E
+0x6A5F
+0x6A60
+0x6A61
+0x6A62
+0x6A64
+0x6A66
+0x6A67
+0x6A68
+0x6A69
+0x6A6A
+0x6A6B
+0x6A6D
+0x6A6F
+0x6A76
+0x6A7E
+0x6A7F
+0x6A80
+0x6A81
+0x6A83
+0x6A84
+0x6A85
+0x6A87
+0x6A89
+0x6A8C
+0x6A8D
+0x6A8E
+0x6A90
+0x6A91
+0x6A92
+0x6A93
+0x6A94
+0x6A95
+0x6A96
+0x6A97
+0x6A9A
+0x6A9B
+0x6A9C
+0x6A9E
+0x6A9F
+0x6AA0
+0x6AA1
+0x6AA2
+0x6AA3
+0x6AA4
+0x6AA5
+0x6AA6
+0x6AA8
+0x6AAC
+0x6AAD
+0x6AAE
+0x6AAF
+0x6AB3
+0x6AB4
+0x6AB6
+0x6AB7
+0x6AB8
+0x6AB9
+0x6ABA
+0x6ABB
+0x6ABD
+0x6AC2
+0x6AC3
+0x6AC5
+0x6AC6
+0x6AC7
+0x6ACB
+0x6ACC
+0x6ACD
+0x6ACF
+0x6AD0
+0x6AD1
+0x6AD3
+0x6AD9
+0x6ADA
+0x6ADB
+0x6ADC
+0x6ADD
+0x6ADE
+0x6ADF
+0x6AE0
+0x6AE1
+0x6AE5
+0x6AE7
+0x6AE8
+0x6AEA
+0x6AEB
+0x6AEC
+0x6AEE
+0x6AEF
+0x6AF0
+0x6AF1
+0x6AF3
+0x6AF8
+0x6AF9
+0x6AFA
+0x6AFB
+0x6AFC
+0x6B00
+0x6B02
+0x6B03
+0x6B04
+0x6B08
+0x6B09
+0x6B0A
+0x6B0B
+0x6B0F
+0x6B10
+0x6B11
+0x6B12
+0x6B13
+0x6B16
+0x6B17
+0x6B18
+0x6B19
+0x6B1A
+0x6B1E
+0x6B20
+0x6B21
+0x6B23
+0x6B25
+0x6B28
+0x6B2C
+0x6B2D
+0x6B2F
+0x6B31
+0x6B32
+0x6B33
+0x6B34
+0x6B36
+0x6B37
+0x6B38
+0x6B39
+0x6B3A
+0x6B3B
+0x6B3C
+0x6B3D
+0x6B3E
+0x6B3F
+0x6B41
+0x6B42
+0x6B43
+0x6B45
+0x6B46
+0x6B47
+0x6B48
+0x6B49
+0x6B4A
+0x6B4B
+0x6B4C
+0x6B4D
+0x6B4E
+0x6B50
+0x6B51
+0x6B54
+0x6B55
+0x6B56
+0x6B59
+0x6B5B
+0x6B5C
+0x6B5E
+0x6B5F
+0x6B60
+0x6B61
+0x6B62
+0x6B63
+0x6B64
+0x6B65
+0x6B66
+0x6B67
+0x6B6A
+0x6B6D
+0x6B72
+0x6B76
+0x6B77
+0x6B78
+0x6B79
+0x6B7B
+0x6B7E
+0x6B7F
+0x6B80
+0x6B82
+0x6B83
+0x6B84
+0x6B86
+0x6B88
+0x6B89
+0x6B8A
+0x6B8C
+0x6B8D
+0x6B8E
+0x6B8F
+0x6B91
+0x6B94
+0x6B95
+0x6B96
+0x6B97
+0x6B98
+0x6B99
+0x6B9B
+0x6B9E
+0x6B9F
+0x6BA0
+0x6BA2
+0x6BA3
+0x6BA4
+0x6BA5
+0x6BA6
+0x6BA7
+0x6BAA
+0x6BAB
+0x6BAD
+0x6BAE
+0x6BAF
+0x6BB0
+0x6BB2
+0x6BB3
+0x6BB5
+0x6BB6
+0x6BB7
+0x6BBA
+0x6BBC
+0x6BBD
+0x6BBF
+0x6BC0
+0x6BC3
+0x6BC4
+0x6BC5
+0x6BC6
+0x6BC7
+0x6BC8
+0x6BC9
+0x6BCA
+0x6BCB
+0x6BCC
+0x6BCD
+0x6BCF
+0x6BD0
+0x6BD2
+0x6BD3
+0x6BD4
+0x6BD6
+0x6BD7
+0x6BD8
+0x6BDA
+0x6BDB
+0x6BDE
+0x6BE0
+0x6BE2
+0x6BE3
+0x6BE4
+0x6BE6
+0x6BE7
+0x6BE8
+0x6BEB
+0x6BEC
+0x6BEF
+0x6BF0
+0x6BF2
+0x6BF3
+0x6BF7
+0x6BF8
+0x6BF9
+0x6BFB
+0x6BFC
+0x6BFD
+0x6BFE
+0x6BFF
+0x6C00
+0x6C01
+0x6C02
+0x6C03
+0x6C04
+0x6C05
+0x6C06
+0x6C08
+0x6C09
+0x6C0B
+0x6C0C
+0x6C0D
+0x6C0F
+0x6C10
+0x6C11
+0x6C13
+0x6C14
+0x6C15
+0x6C16
+0x6C18
+0x6C19
+0x6C1A
+0x6C1B
+0x6C1D
+0x6C1F
+0x6C20
+0x6C21
+0x6C23
+0x6C24
+0x6C25
+0x6C26
+0x6C27
+0x6C28
+0x6C2A
+0x6C2B
+0x6C2C
+0x6C2E
+0x6C2F
+0x6C30
+0x6C33
+0x6C34
+0x6C36
+0x6C38
+0x6C3B
+0x6C3E
+0x6C3F
+0x6C40
+0x6C41
+0x6C42
+0x6C43
+0x6C46
+0x6C4A
+0x6C4B
+0x6C4C
+0x6C4D
+0x6C4E
+0x6C4F
+0x6C50
+0x6C52
+0x6C54
+0x6C55
+0x6C57
+0x6C59
+0x6C5B
+0x6C5C
+0x6C5D
+0x6C5E
+0x6C5F
+0x6C60
+0x6C61
+0x6C65
+0x6C66
+0x6C67
+0x6C68
+0x6C69
+0x6C6A
+0x6C6B
+0x6C6D
+0x6C6F
+0x6C70
+0x6C71
+0x6C72
+0x6C73
+0x6C74
+0x6C76
+0x6C78
+0x6C7A
+0x6C7B
+0x6C7D
+0x6C7E
+0x6C80
+0x6C81
+0x6C82
+0x6C83
+0x6C84
+0x6C85
+0x6C86
+0x6C87
+0x6C88
+0x6C89
+0x6C8A
+0x6C8B
+0x6C8C
+0x6C8D
+0x6C8E
+0x6C8F
+0x6C90
+0x6C92
+0x6C93
+0x6C94
+0x6C95
+0x6C96
+0x6C98
+0x6C99
+0x6C9A
+0x6C9B
+0x6C9C
+0x6C9D
+0x6CAB
+0x6CAC
+0x6CAD
+0x6CAE
+0x6CB0
+0x6CB1
+0x6CB3
+0x6CB4
+0x6CB6
+0x6CB7
+0x6CB8
+0x6CB9
+0x6CBA
+0x6CBB
+0x6CBC
+0x6CBD
+0x6CBE
+0x6CBF
+0x6CC0
+0x6CC1
+0x6CC2
+0x6CC3
+0x6CC4
+0x6CC5
+0x6CC6
+0x6CC7
+0x6CC9
+0x6CCA
+0x6CCC
+0x6CCD
+0x6CCF
+0x6CD0
+0x6CD1
+0x6CD2
+0x6CD3
+0x6CD4
+0x6CD5
+0x6CD6
+0x6CD7
+0x6CD9
+0x6CDA
+0x6CDB
+0x6CDC
+0x6CDD
+0x6CDE
+0x6CE0
+0x6CE1
+0x6CE2
+0x6CE3
+0x6CE5
+0x6CE7
+0x6CE8
+0x6CE9
+0x6CEB
+0x6CEC
+0x6CED
+0x6CEE
+0x6CEF
+0x6CF0
+0x6CF1
+0x6CF2
+0x6CF3
+0x6CF5
+0x6CF9
+0x6D00
+0x6D01
+0x6D03
+0x6D04
+0x6D07
+0x6D08
+0x6D09
+0x6D0A
+0x6D0B
+0x6D0C
+0x6D0D
+0x6D0E
+0x6D0F
+0x6D10
+0x6D11
+0x6D12
+0x6D16
+0x6D17
+0x6D18
+0x6D19
+0x6D1A
+0x6D1B
+0x6D1D
+0x6D1E
+0x6D1F
+0x6D20
+0x6D22
+0x6D25
+0x6D27
+0x6D28
+0x6D29
+0x6D2A
+0x6D2B
+0x6D2C
+0x6D2D
+0x6D2E
+0x6D2F
+0x6D30
+0x6D31
+0x6D32
+0x6D33
+0x6D34
+0x6D35
+0x6D36
+0x6D37
+0x6D38
+0x6D39
+0x6D3A
+0x6D3B
+0x6D3C
+0x6D3D
+0x6D3E
+0x6D3F
+0x6D40
+0x6D41
+0x6D42
+0x6D58
+0x6D59
+0x6D5A
+0x6D5E
+0x6D5F
+0x6D60
+0x6D61
+0x6D62
+0x6D63
+0x6D64
+0x6D65
+0x6D66
+0x6D67
+0x6D68
+0x6D69
+0x6D6A
+0x6D6C
+0x6D6D
+0x6D6E
+0x6D6F
+0x6D70
+0x6D74
+0x6D75
+0x6D76
+0x6D77
+0x6D78
+0x6D79
+0x6D7A
+0x6D7B
+0x6D7C
+0x6D7D
+0x6D7E
+0x6D7F
+0x6D80
+0x6D82
+0x6D83
+0x6D84
+0x6D85
+0x6D86
+0x6D87
+0x6D88
+0x6D89
+0x6D8A
+0x6D8B
+0x6D8C
+0x6D8D
+0x6D8E
+0x6D90
+0x6D91
+0x6D92
+0x6D93
+0x6D94
+0x6D95
+0x6D97
+0x6D98
+0x6DAA
+0x6DAB
+0x6DAC
+0x6DAE
+0x6DAF
+0x6DB2
+0x6DB3
+0x6DB4
+0x6DB5
+0x6DB7
+0x6DB8
+0x6DBA
+0x6DBB
+0x6DBC
+0x6DBD
+0x6DBE
+0x6DBF
+0x6DC0
+0x6DC2
+0x6DC4
+0x6DC5
+0x6DC6
+0x6DC7
+0x6DC8
+0x6DC9
+0x6DCA
+0x6DCB
+0x6DCC
+0x6DCD
+0x6DCF
+0x6DD0
+0x6DD1
+0x6DD2
+0x6DD3
+0x6DD4
+0x6DD5
+0x6DD6
+0x6DD7
+0x6DD8
+0x6DD9
+0x6DDA
+0x6DDB
+0x6DDC
+0x6DDD
+0x6DDE
+0x6DDF
+0x6DE0
+0x6DE1
+0x6DE2
+0x6DE3
+0x6DE4
+0x6DE5
+0x6DE6
+0x6DE8
+0x6DE9
+0x6DEA
+0x6DEB
+0x6DEC
+0x6DED
+0x6DEE
+0x6DEF
+0x6DF0
+0x6DF1
+0x6DF2
+0x6DF3
+0x6DF4
+0x6DF5
+0x6DF6
+0x6DF7
+0x6DF9
+0x6DFA
+0x6DFB
+0x6DFC
+0x6DFD
+0x6E00
+0x6E03
+0x6E05
+0x6E19
+0x6E1A
+0x6E1B
+0x6E1C
+0x6E1D
+0x6E1F
+0x6E20
+0x6E21
+0x6E22
+0x6E23
+0x6E24
+0x6E25
+0x6E26
+0x6E27
+0x6E28
+0x6E2B
+0x6E2C
+0x6E2D
+0x6E2E
+0x6E2F
+0x6E30
+0x6E31
+0x6E32
+0x6E33
+0x6E34
+0x6E35
+0x6E36
+0x6E38
+0x6E39
+0x6E3A
+0x6E3B
+0x6E3C
+0x6E3D
+0x6E3E
+0x6E3F
+0x6E40
+0x6E41
+0x6E43
+0x6E44
+0x6E45
+0x6E46
+0x6E47
+0x6E49
+0x6E4A
+0x6E4B
+0x6E4D
+0x6E4E
+0x6E51
+0x6E52
+0x6E53
+0x6E54
+0x6E55
+0x6E56
+0x6E58
+0x6E5A
+0x6E5B
+0x6E5C
+0x6E5D
+0x6E5E
+0x6E5F
+0x6E60
+0x6E61
+0x6E62
+0x6E63
+0x6E64
+0x6E65
+0x6E66
+0x6E67
+0x6E68
+0x6E69
+0x6E6B
+0x6E6E
+0x6E6F
+0x6E71
+0x6E72
+0x6E73
+0x6E74
+0x6E77
+0x6E78
+0x6E79
+0x6E88
+0x6E89
+0x6E8D
+0x6E8E
+0x6E8F
+0x6E90
+0x6E92
+0x6E93
+0x6E94
+0x6E96
+0x6E97
+0x6E98
+0x6E99
+0x6E9B
+0x6E9C
+0x6E9D
+0x6E9E
+0x6E9F
+0x6EA0
+0x6EA1
+0x6EA2
+0x6EA3
+0x6EA4
+0x6EA5
+0x6EA6
+0x6EA7
+0x6EAA
+0x6EAB
+0x6EAE
+0x6EAF
+0x6EB0
+0x6EB1
+0x6EB2
+0x6EB3
+0x6EB4
+0x6EB6
+0x6EB7
+0x6EB9
+0x6EBA
+0x6EBC
+0x6EBD
+0x6EBE
+0x6EBF
+0x6EC0
+0x6EC1
+0x6EC2
+0x6EC3
+0x6EC4
+0x6EC5
+0x6EC6
+0x6EC7
+0x6EC8
+0x6EC9
+0x6ECA
+0x6ECB
+0x6ECC
+0x6ECD
+0x6ECE
+0x6ECF
+0x6ED0
+0x6ED1
+0x6ED2
+0x6ED3
+0x6ED4
+0x6ED5
+0x6ED6
+0x6ED8
+0x6EDC
+0x6EEB
+0x6EEC
+0x6EED
+0x6EEE
+0x6EEF
+0x6EF1
+0x6EF2
+0x6EF4
+0x6EF5
+0x6EF6
+0x6EF7
+0x6EF8
+0x6EF9
+0x6EFB
+0x6EFC
+0x6EFD
+0x6EFE
+0x6EFF
+0x6F00
+0x6F01
+0x6F02
+0x6F03
+0x6F05
+0x6F06
+0x6F07
+0x6F08
+0x6F09
+0x6F0A
+0x6F0D
+0x6F0E
+0x6F0F
+0x6F12
+0x6F13
+0x6F14
+0x6F15
+0x6F18
+0x6F19
+0x6F1A
+0x6F1C
+0x6F1E
+0x6F1F
+0x6F20
+0x6F21
+0x6F22
+0x6F23
+0x6F25
+0x6F26
+0x6F27
+0x6F29
+0x6F2A
+0x6F2B
+0x6F2C
+0x6F2D
+0x6F2E
+0x6F2F
+0x6F30
+0x6F31
+0x6F32
+0x6F33
+0x6F35
+0x6F36
+0x6F37
+0x6F38
+0x6F39
+0x6F3A
+0x6F3B
+0x6F3C
+0x6F3E
+0x6F3F
+0x6F40
+0x6F41
+0x6F43
+0x6F4E
+0x6F4F
+0x6F50
+0x6F51
+0x6F52
+0x6F53
+0x6F54
+0x6F55
+0x6F57
+0x6F58
+0x6F5A
+0x6F5B
+0x6F5D
+0x6F5E
+0x6F5F
+0x6F60
+0x6F61
+0x6F62
+0x6F63
+0x6F64
+0x6F66
+0x6F67
+0x6F69
+0x6F6A
+0x6F6B
+0x6F6C
+0x6F6D
+0x6F6E
+0x6F6F
+0x6F70
+0x6F72
+0x6F73
+0x6F76
+0x6F77
+0x6F78
+0x6F7A
+0x6F7B
+0x6F7C
+0x6F7D
+0x6F7E
+0x6F7F
+0x6F80
+0x6F82
+0x6F84
+0x6F85
+0x6F86
+0x6F87
+0x6F88
+0x6F89
+0x6F8B
+0x6F8C
+0x6F8D
+0x6F8E
+0x6F90
+0x6F92
+0x6F93
+0x6F94
+0x6F95
+0x6F96
+0x6F97
+0x6F9E
+0x6FA0
+0x6FA1
+0x6FA2
+0x6FA3
+0x6FA4
+0x6FA5
+0x6FA6
+0x6FA7
+0x6FA8
+0x6FA9
+0x6FAA
+0x6FAB
+0x6FAC
+0x6FAD
+0x6FAE
+0x6FAF
+0x6FB0
+0x6FB1
+0x6FB2
+0x6FB3
+0x6FB4
+0x6FB6
+0x6FB8
+0x6FB9
+0x6FBA
+0x6FBC
+0x6FBD
+0x6FBF
+0x6FC0
+0x6FC1
+0x6FC2
+0x6FC3
+0x6FC4
+0x6FC6
+0x6FC7
+0x6FC8
+0x6FC9
+0x6FCA
+0x6FCB
+0x6FCC
+0x6FCD
+0x6FCE
+0x6FCF
+0x6FD4
+0x6FD5
+0x6FD8
+0x6FDB
+0x6FDC
+0x6FDD
+0x6FDE
+0x6FDF
+0x6FE0
+0x6FE1
+0x6FE2
+0x6FE3
+0x6FE4
+0x6FE6
+0x6FE7
+0x6FE8
+0x6FE9
+0x6FEB
+0x6FEC
+0x6FED
+0x6FEE
+0x6FEF
+0x6FF0
+0x6FF1
+0x6FF2
+0x6FF4
+0x6FF7
+0x6FFA
+0x6FFB
+0x6FFC
+0x6FFE
+0x6FFF
+0x7000
+0x7001
+0x7004
+0x7005
+0x7006
+0x7007
+0x7009
+0x700A
+0x700B
+0x700C
+0x700D
+0x700E
+0x700F
+0x7011
+0x7014
+0x7015
+0x7016
+0x7017
+0x7018
+0x7019
+0x701A
+0x701B
+0x701C
+0x701D
+0x701F
+0x7020
+0x7021
+0x7022
+0x7023
+0x7024
+0x7026
+0x7027
+0x7028
+0x7029
+0x702A
+0x702B
+0x702F
+0x7030
+0x7031
+0x7032
+0x7033
+0x7034
+0x7035
+0x7037
+0x7038
+0x7039
+0x703A
+0x703B
+0x703C
+0x703E
+0x703F
+0x7040
+0x7041
+0x7042
+0x7043
+0x7044
+0x7045
+0x7046
+0x7048
+0x7049
+0x704A
+0x704C
+0x7051
+0x7052
+0x7055
+0x7056
+0x7057
+0x7058
+0x705A
+0x705B
+0x705D
+0x705E
+0x705F
+0x7060
+0x7061
+0x7062
+0x7063
+0x7064
+0x7065
+0x7066
+0x7068
+0x7069
+0x706A
+0x706B
+0x7070
+0x7071
+0x7074
+0x7076
+0x7078
+0x707A
+0x707C
+0x707D
+0x7082
+0x7083
+0x7084
+0x7085
+0x7086
+0x708A
+0x708E
+0x7091
+0x7092
+0x7093
+0x7094
+0x7095
+0x7096
+0x7098
+0x7099
+0x709A
+0x709F
+0x70A1
+0x70A4
+0x70A9
+0x70AB
+0x70AC
+0x70AD
+0x70AE
+0x70AF
+0x70B0
+0x70B1
+0x70B3
+0x70B4
+0x70B5
+0x70B7
+0x70B8
+0x70BA
+0x70BE
+0x70C5
+0x70C6
+0x70C7
+0x70C8
+0x70CA
+0x70CB
+0x70CD
+0x70CE
+0x70CF
+0x70D1
+0x70D2
+0x70D3
+0x70D4
+0x70D7
+0x70D8
+0x70D9
+0x70DA
+0x70DC
+0x70DD
+0x70DE
+0x70E0
+0x70E1
+0x70E2
+0x70E4
+0x70EF
+0x70F0
+0x70F3
+0x70F4
+0x70F6
+0x70F7
+0x70F8
+0x70F9
+0x70FA
+0x70FB
+0x70FC
+0x70FD
+0x70FF
+0x7100
+0x7102
+0x7104
+0x7106
+0x7109
+0x710A
+0x710B
+0x710C
+0x710D
+0x710E
+0x7110
+0x7113
+0x7117
+0x7119
+0x711A
+0x711B
+0x711C
+0x711E
+0x711F
+0x7120
+0x7121
+0x7122
+0x7123
+0x7125
+0x7126
+0x7128
+0x712E
+0x712F
+0x7130
+0x7131
+0x7132
+0x7136
+0x713A
+0x7141
+0x7142
+0x7143
+0x7144
+0x7146
+0x7147
+0x7149
+0x714B
+0x714C
+0x714D
+0x714E
+0x7150
+0x7152
+0x7153
+0x7154
+0x7156
+0x7158
+0x7159
+0x715A
+0x715C
+0x715D
+0x715E
+0x715F
+0x7160
+0x7161
+0x7162
+0x7163
+0x7164
+0x7165
+0x7166
+0x7167
+0x7168
+0x7169
+0x716A
+0x716C
+0x716E
+0x7170
+0x7172
+0x7178
+0x717B
+0x717D
+0x7180
+0x7181
+0x7182
+0x7184
+0x7185
+0x7186
+0x7187
+0x7189
+0x718A
+0x718F
+0x7190
+0x7192
+0x7194
+0x7197
+0x7199
+0x719A
+0x719B
+0x719C
+0x719D
+0x719E
+0x719F
+0x71A0
+0x71A1
+0x71A4
+0x71A5
+0x71A7
+0x71A8
+0x71A9
+0x71AA
+0x71AC
+0x71AF
+0x71B0
+0x71B1
+0x71B2
+0x71B3
+0x71B5
+0x71B8
+0x71B9
+0x71BC
+0x71BD
+0x71BE
+0x71BF
+0x71C0
+0x71C1
+0x71C2
+0x71C3
+0x71C4
+0x71C5
+0x71C6
+0x71C7
+0x71C8
+0x71C9
+0x71CA
+0x71CB
+0x71CE
+0x71CF
+0x71D0
+0x71D2
+0x71D4
+0x71D5
+0x71D6
+0x71D8
+0x71D9
+0x71DA
+0x71DB
+0x71DC
+0x71DF
+0x71E0
+0x71E1
+0x71E2
+0x71E4
+0x71E5
+0x71E6
+0x71E7
+0x71E8
+0x71EC
+0x71ED
+0x71EE
+0x71F0
+0x71F1
+0x71F2
+0x71F4
+0x71F8
+0x71F9
+0x71FB
+0x71FC
+0x71FD
+0x71FE
+0x71FF
+0x7201
+0x7202
+0x7203
+0x7205
+0x7206
+0x7207
+0x720A
+0x720C
+0x720D
+0x7210
+0x7213
+0x7214
+0x7219
+0x721A
+0x721B
+0x721D
+0x721E
+0x721F
+0x7222
+0x7223
+0x7226
+0x7227
+0x7228
+0x7229
+0x722A
+0x722C
+0x722D
+0x7230
+0x7235
+0x7236
+0x7238
+0x7239
+0x723A
+0x723B
+0x723D
+0x723E
+0x723F
+0x7241
+0x7242
+0x7244
+0x7246
+0x7247
+0x7248
+0x7249
+0x724A
+0x724B
+0x724C
+0x724F
+0x7252
+0x7253
+0x7256
+0x7258
+0x7259
+0x725A
+0x725B
+0x725D
+0x725E
+0x725F
+0x7260
+0x7261
+0x7262
+0x7263
+0x7267
+0x7269
+0x726A
+0x726C
+0x726E
+0x726F
+0x7270
+0x7272
+0x7273
+0x7274
+0x7276
+0x7277
+0x7278
+0x7279
+0x727B
+0x727C
+0x727D
+0x727E
+0x727F
+0x7280
+0x7281
+0x7284
+0x7285
+0x7286
+0x7288
+0x7289
+0x728B
+0x728C
+0x728D
+0x728E
+0x7290
+0x7291
+0x7292
+0x7293
+0x7295
+0x7296
+0x7297
+0x7298
+0x729A
+0x729B
+0x729D
+0x729E
+0x72A1
+0x72A2
+0x72A3
+0x72A4
+0x72A5
+0x72A6
+0x72A7
+0x72A8
+0x72A9
+0x72AA
+0x72AC
+0x72AE
+0x72AF
+0x72B0
+0x72B4
+0x72B5
+0x72BA
+0x72BD
+0x72BF
+0x72C0
+0x72C1
+0x72C2
+0x72C3
+0x72C4
+0x72C5
+0x72C6
+0x72C9
+0x72CA
+0x72CB
+0x72CC
+0x72CE
+0x72D0
+0x72D1
+0x72D2
+0x72D4
+0x72D6
+0x72D7
+0x72D8
+0x72D9
+0x72DA
+0x72DC
+0x72DF
+0x72E0
+0x72E1
+0x72E3
+0x72E4
+0x72E6
+0x72E8
+0x72E9
+0x72EA
+0x72EB
+0x72F3
+0x72F4
+0x72F6
+0x72F7
+0x72F8
+0x72F9
+0x72FA
+0x72FB
+0x72FC
+0x72FD
+0x72FE
+0x72FF
+0x7300
+0x7301
+0x7307
+0x7308
+0x730A
+0x730B
+0x730C
+0x730F
+0x7311
+0x7312
+0x7313
+0x7316
+0x7317
+0x7318
+0x7319
+0x731B
+0x731C
+0x731D
+0x731E
+0x7322
+0x7323
+0x7325
+0x7326
+0x7327
+0x7329
+0x732D
+0x7330
+0x7331
+0x7332
+0x7333
+0x7334
+0x7335
+0x7336
+0x7337
+0x733A
+0x733B
+0x733C
+0x733E
+0x733F
+0x7340
+0x7342
+0x7343
+0x7344
+0x7345
+0x7349
+0x734A
+0x734C
+0x734D
+0x734E
+0x7350
+0x7351
+0x7352
+0x7357
+0x7358
+0x7359
+0x735A
+0x735B
+0x735D
+0x735E
+0x735F
+0x7360
+0x7361
+0x7362
+0x7365
+0x7366
+0x7367
+0x7368
+0x7369
+0x736A
+0x736B
+0x736C
+0x736E
+0x736F
+0x7370
+0x7372
+0x7373
+0x7375
+0x7376
+0x7377
+0x7378
+0x737A
+0x737B
+0x737C
+0x737D
+0x737E
+0x737F
+0x7380
+0x7381
+0x7382
+0x7383
+0x7384
+0x7385
+0x7386
+0x7387
+0x7388
+0x7389
+0x738A
+0x738B
+0x738E
+0x7392
+0x7393
+0x7394
+0x7395
+0x7396
+0x7397
+0x739D
+0x739F
+0x73A0
+0x73A1
+0x73A2
+0x73A4
+0x73A5
+0x73A6
+0x73A8
+0x73A9
+0x73AB
+0x73AC
+0x73AD
+0x73B2
+0x73B3
+0x73B4
+0x73B5
+0x73B6
+0x73B7
+0x73B8
+0x73B9
+0x73BB
+0x73BC
+0x73BE
+0x73BF
+0x73C0
+0x73C2
+0x73C3
+0x73C5
+0x73C6
+0x73C7
+0x73C8
+0x73CA
+0x73CB
+0x73CC
+0x73CD
+0x73D2
+0x73D3
+0x73D4
+0x73D6
+0x73D7
+0x73D8
+0x73D9
+0x73DA
+0x73DB
+0x73DC
+0x73DD
+0x73DE
+0x73E0
+0x73E3
+0x73E5
+0x73E7
+0x73E8
+0x73E9
+0x73EA
+0x73EB
+0x73ED
+0x73EE
+0x73F4
+0x73F5
+0x73F6
+0x73F8
+0x73FA
+0x73FC
+0x73FD
+0x73FE
+0x73FF
+0x7400
+0x7401
+0x7403
+0x7404
+0x7405
+0x7406
+0x7407
+0x7408
+0x7409
+0x740A
+0x740B
+0x740C
+0x740D
+0x7416
+0x741A
+0x741B
+0x741D
+0x7420
+0x7421
+0x7422
+0x7423
+0x7424
+0x7425
+0x7426
+0x7428
+0x7429
+0x742A
+0x742B
+0x742C
+0x742D
+0x742E
+0x742F
+0x7430
+0x7431
+0x7432
+0x7433
+0x7434
+0x7435
+0x7436
+0x743A
+0x743F
+0x7440
+0x7441
+0x7442
+0x7444
+0x7446
+0x744A
+0x744B
+0x744D
+0x744E
+0x744F
+0x7450
+0x7451
+0x7452
+0x7454
+0x7455
+0x7457
+0x7459
+0x745A
+0x745B
+0x745C
+0x745E
+0x745F
+0x7462
+0x7463
+0x7464
+0x7467
+0x7469
+0x746A
+0x746D
+0x746E
+0x746F
+0x7470
+0x7471
+0x7472
+0x7473
+0x7475
+0x7479
+0x747C
+0x747D
+0x747E
+0x747F
+0x7480
+0x7481
+0x7483
+0x7485
+0x7486
+0x7487
+0x7488
+0x7489
+0x748A
+0x748B
+0x7490
+0x7492
+0x7494
+0x7495
+0x7497
+0x7498
+0x749A
+0x749C
+0x749E
+0x749F
+0x74A0
+0x74A1
+0x74A3
+0x74A5
+0x74A6
+0x74A7
+0x74A8
+0x74A9
+0x74AA
+0x74AB
+0x74AD
+0x74AF
+0x74B0
+0x74B1
+0x74B2
+0x74B5
+0x74B6
+0x74B7
+0x74B8
+0x74BA
+0x74BB
+0x74BD
+0x74BE
+0x74BF
+0x74C0
+0x74C1
+0x74C2
+0x74C3
+0x74C5
+0x74CA
+0x74CB
+0x74CF
+0x74D4
+0x74D5
+0x74D6
+0x74D7
+0x74D8
+0x74D9
+0x74DA
+0x74DB
+0x74DC
+0x74DD
+0x74DE
+0x74DF
+0x74E0
+0x74E1
+0x74E2
+0x74E3
+0x74E4
+0x74E5
+0x74E6
+0x74E8
+0x74E9
+0x74EC
+0x74EE
+0x74F4
+0x74F5
+0x74F6
+0x74F7
+0x74FB
+0x74FD
+0x74FE
+0x74FF
+0x7500
+0x7502
+0x7503
+0x7504
+0x7507
+0x7508
+0x750B
+0x750C
+0x750D
+0x750F
+0x7510
+0x7511
+0x7512
+0x7513
+0x7514
+0x7515
+0x7516
+0x7517
+0x7518
+0x751A
+0x751C
+0x751D
+0x751F
+0x7521
+0x7522
+0x7525
+0x7526
+0x7528
+0x7529
+0x752A
+0x752B
+0x752C
+0x752D
+0x752E
+0x752F
+0x7530
+0x7531
+0x7532
+0x7533
+0x7537
+0x7538
+0x7539
+0x753A
+0x753D
+0x753E
+0x753F
+0x7540
+0x7547
+0x7548
+0x754B
+0x754C
+0x754E
+0x754F
+0x7554
+0x7559
+0x755A
+0x755B
+0x755C
+0x755D
+0x755F
+0x7562
+0x7563
+0x7564
+0x7565
+0x7566
+0x756A
+0x756B
+0x756C
+0x756F
+0x7570
+0x7576
+0x7577
+0x7578
+0x7579
+0x757D
+0x757E
+0x757F
+0x7580
+0x7584
+0x7586
+0x7587
+0x758A
+0x758B
+0x758C
+0x758F
+0x7590
+0x7591
+0x7594
+0x7595
+0x7598
+0x7599
+0x759A
+0x759D
+0x75A2
+0x75A3
+0x75A4
+0x75A5
+0x75A7
+0x75AA
+0x75AB
+0x75B0
+0x75B2
+0x75B3
+0x75B5
+0x75B6
+0x75B8
+0x75B9
+0x75BA
+0x75BB
+0x75BC
+0x75BD
+0x75BE
+0x75BF
+0x75C0
+0x75C1
+0x75C2
+0x75C4
+0x75C5
+0x75C7
+0x75CA
+0x75CB
+0x75CC
+0x75CD
+0x75CE
+0x75CF
+0x75D0
+0x75D1
+0x75D2
+0x75D4
+0x75D5
+0x75D7
+0x75D8
+0x75D9
+0x75DA
+0x75DB
+0x75DD
+0x75DE
+0x75DF
+0x75E0
+0x75E1
+0x75E2
+0x75E3
+0x75E4
+0x75E6
+0x75E7
+0x75ED
+0x75EF
+0x75F0
+0x75F1
+0x75F2
+0x75F3
+0x75F4
+0x75F5
+0x75F6
+0x75F7
+0x75F8
+0x75F9
+0x75FA
+0x75FB
+0x75FC
+0x75FD
+0x75FE
+0x75FF
+0x7600
+0x7601
+0x7603
+0x7608
+0x7609
+0x760A
+0x760B
+0x760C
+0x760D
+0x760F
+0x7610
+0x7611
+0x7613
+0x7614
+0x7615
+0x7616
+0x7619
+0x761A
+0x761B
+0x761C
+0x761D
+0x761E
+0x761F
+0x7620
+0x7621
+0x7622
+0x7623
+0x7624
+0x7625
+0x7626
+0x7627
+0x7628
+0x7629
+0x762D
+0x762F
+0x7630
+0x7631
+0x7632
+0x7633
+0x7634
+0x7635
+0x7638
+0x763A
+0x763C
+0x763D
+0x7642
+0x7643
+0x7646
+0x7647
+0x7648
+0x7649
+0x764C
+0x7650
+0x7652
+0x7653
+0x7656
+0x7657
+0x7658
+0x7659
+0x765A
+0x765C
+0x765F
+0x7660
+0x7661
+0x7662
+0x7664
+0x7665
+0x7669
+0x766A
+0x766C
+0x766D
+0x766E
+0x7670
+0x7671
+0x7672
+0x7675
+0x7678
+0x7679
+0x767B
+0x767C
+0x767D
+0x767E
+0x767F
+0x7681
+0x7682
+0x7684
+0x7686
+0x7687
+0x7688
+0x7689
+0x768A
+0x768B
+0x768E
+0x768F
+0x7692
+0x7693
+0x7695
+0x7696
+0x7699
+0x769A
+0x769B
+0x769C
+0x769D
+0x769E
+0x76A4
+0x76A6
+0x76AA
+0x76AB
+0x76AD
+0x76AE
+0x76AF
+0x76B0
+0x76B4
+0x76B5
+0x76B8
+0x76BA
+0x76BB
+0x76BD
+0x76BE
+0x76BF
+0x76C2
+0x76C3
+0x76C4
+0x76C5
+0x76C6
+0x76C8
+0x76C9
+0x76CA
+0x76CD
+0x76CE
+0x76D2
+0x76D3
+0x76D4
+0x76DA
+0x76DB
+0x76DC
+0x76DD
+0x76DE
+0x76DF
+0x76E1
+0x76E3
+0x76E4
+0x76E5
+0x76E6
+0x76E7
+0x76E9
+0x76EA
+0x76EC
+0x76ED
+0x76EE
+0x76EF
+0x76F0
+0x76F1
+0x76F2
+0x76F3
+0x76F4
+0x76F5
+0x76F7
+0x76F8
+0x76F9
+0x76FA
+0x76FB
+0x76FC
+0x76FE
+0x7701
+0x7703
+0x7704
+0x7705
+0x7707
+0x7708
+0x7709
+0x770A
+0x770B
+0x7710
+0x7711
+0x7712
+0x7713
+0x7715
+0x7719
+0x771A
+0x771B
+0x771D
+0x771F
+0x7720
+0x7722
+0x7723
+0x7725
+0x7727
+0x7728
+0x7729
+0x772D
+0x772F
+0x7731
+0x7732
+0x7733
+0x7734
+0x7735
+0x7736
+0x7737
+0x7738
+0x7739
+0x773A
+0x773B
+0x773C
+0x773D
+0x773E
+0x7744
+0x7745
+0x7746
+0x7747
+0x774A
+0x774B
+0x774C
+0x774D
+0x774E
+0x774F
+0x7752
+0x7754
+0x7755
+0x7756
+0x7759
+0x775A
+0x775B
+0x775C
+0x775E
+0x775F
+0x7760
+0x7761
+0x7762
+0x7763
+0x7765
+0x7766
+0x7767
+0x7768
+0x7769
+0x776A
+0x776B
+0x776C
+0x776D
+0x776E
+0x776F
+0x7779
+0x777C
+0x777D
+0x777E
+0x777F
+0x7780
+0x7781
+0x7782
+0x7783
+0x7784
+0x7785
+0x7787
+0x7788
+0x7789
+0x778B
+0x778C
+0x778D
+0x778E
+0x778F
+0x7791
+0x7795
+0x7797
+0x7799
+0x779A
+0x779B
+0x779C
+0x779D
+0x779E
+0x779F
+0x77A0
+0x77A1
+0x77A2
+0x77A3
+0x77A5
+0x77A7
+0x77A8
+0x77AA
+0x77AB
+0x77AC
+0x77AD
+0x77B0
+0x77B1
+0x77B2
+0x77B3
+0x77B4
+0x77B5
+0x77B6
+0x77B7
+0x77BA
+0x77BB
+0x77BC
+0x77BD
+0x77BF
+0x77C2
+0x77C4
+0x77C7
+0x77C9
+0x77CA
+0x77CC
+0x77CD
+0x77CE
+0x77CF
+0x77D0
+0x77D3
+0x77D4
+0x77D5
+0x77D7
+0x77D8
+0x77D9
+0x77DA
+0x77DB
+0x77DC
+0x77DE
+0x77E0
+0x77E2
+0x77E3
+0x77E5
+0x77E7
+0x77E8
+0x77E9
+0x77EC
+0x77ED
+0x77EE
+0x77EF
+0x77F0
+0x77F1
+0x77F2
+0x77F3
+0x77F7
+0x77F8
+0x77F9
+0x77FA
+0x77FB
+0x77FC
+0x77FD
+0x7802
+0x7803
+0x7805
+0x7806
+0x7809
+0x780C
+0x780D
+0x780E
+0x780F
+0x7810
+0x7811
+0x7812
+0x7813
+0x7814
+0x781D
+0x781F
+0x7820
+0x7821
+0x7822
+0x7823
+0x7825
+0x7826
+0x7827
+0x7828
+0x7829
+0x782A
+0x782B
+0x782C
+0x782D
+0x782E
+0x782F
+0x7830
+0x7831
+0x7832
+0x7833
+0x7834
+0x7835
+0x7837
+0x7838
+0x7843
+0x7845
+0x7848
+0x7849
+0x784A
+0x784C
+0x784D
+0x784E
+0x7850
+0x7852
+0x785C
+0x785D
+0x785E
+0x7860
+0x7862
+0x7864
+0x7865
+0x7868
+0x7869
+0x786A
+0x786B
+0x786C
+0x786D
+0x786E
+0x786F
+0x7870
+0x7871
+0x7879
+0x787B
+0x787C
+0x787E
+0x787F
+0x7880
+0x7883
+0x7884
+0x7885
+0x7886
+0x7887
+0x7889
+0x788C
+0x788E
+0x788F
+0x7891
+0x7893
+0x7894
+0x7895
+0x7896
+0x7897
+0x7898
+0x7899
+0x789A
+0x789E
+0x789F
+0x78A0
+0x78A1
+0x78A2
+0x78A3
+0x78A4
+0x78A5
+0x78A7
+0x78A8
+0x78A9
+0x78AA
+0x78AB
+0x78AC
+0x78AD
+0x78B0
+0x78B2
+0x78B3
+0x78B4
+0x78BA
+0x78BB
+0x78BC
+0x78BE
+0x78C1
+0x78C3
+0x78C4
+0x78C5
+0x78C8
+0x78C9
+0x78CA
+0x78CB
+0x78CC
+0x78CD
+0x78CE
+0x78CF
+0x78D0
+0x78D1
+0x78D4
+0x78D5
+0x78DA
+0x78DB
+0x78DD
+0x78DE
+0x78DF
+0x78E0
+0x78E1
+0x78E2
+0x78E3
+0x78E5
+0x78E7
+0x78E8
+0x78E9
+0x78EA
+0x78EC
+0x78ED
+0x78EF
+0x78F2
+0x78F3
+0x78F4
+0x78F7
+0x78F9
+0x78FA
+0x78FB
+0x78FC
+0x78FD
+0x78FE
+0x78FF
+0x7901
+0x7902
+0x7904
+0x7905
+0x7909
+0x790C
+0x790E
+0x7910
+0x7911
+0x7912
+0x7913
+0x7914
+0x7917
+0x7919
+0x791B
+0x791C
+0x791D
+0x791E
+0x7921
+0x7923
+0x7924
+0x7925
+0x7926
+0x7927
+0x7928
+0x7929
+0x792A
+0x792B
+0x792C
+0x792D
+0x792F
+0x7931
+0x7935
+0x7938
+0x7939
+0x793A
+0x793D
+0x793E
+0x793F
+0x7940
+0x7941
+0x7942
+0x7944
+0x7945
+0x7946
+0x7947
+0x7948
+0x7949
+0x794A
+0x794B
+0x794C
+0x794F
+0x7950
+0x7951
+0x7952
+0x7953
+0x7954
+0x7955
+0x7956
+0x7957
+0x795A
+0x795B
+0x795C
+0x795D
+0x795E
+0x795F
+0x7960
+0x7961
+0x7963
+0x7964
+0x7965
+0x7967
+0x7968
+0x7969
+0x796A
+0x796B
+0x796D
+0x7970
+0x7972
+0x7973
+0x7974
+0x7979
+0x797A
+0x797C
+0x797D
+0x797F
+0x7981
+0x7982
+0x7988
+0x798A
+0x798B
+0x798D
+0x798E
+0x798F
+0x7990
+0x7992
+0x7993
+0x7994
+0x7995
+0x7996
+0x7997
+0x7998
+0x799A
+0x799B
+0x799C
+0x79A0
+0x79A1
+0x79A2
+0x79A4
+0x79A6
+0x79A7
+0x79A8
+0x79AA
+0x79AB
+0x79AC
+0x79AD
+0x79AE
+0x79B0
+0x79B1
+0x79B2
+0x79B3
+0x79B4
+0x79B6
+0x79B7
+0x79B8
+0x79B9
+0x79BA
+0x79BB
+0x79BD
+0x79BE
+0x79BF
+0x79C0
+0x79C1
+0x79C5
+0x79C8
+0x79C9
+0x79CB
+0x79CD
+0x79CE
+0x79CF
+0x79D1
+0x79D2
+0x79D5
+0x79D6
+0x79D8
+0x79DC
+0x79DD
+0x79DE
+0x79DF
+0x79E0
+0x79E3
+0x79E4
+0x79E6
+0x79E7
+0x79E9
+0x79EA
+0x79EB
+0x79EC
+0x79ED
+0x79EE
+0x79F6
+0x79F7
+0x79F8
+0x79FA
+0x79FB
+0x7A00
+0x7A02
+0x7A03
+0x7A04
+0x7A05
+0x7A08
+0x7A0A
+0x7A0B
+0x7A0C
+0x7A0D
+0x7A10
+0x7A11
+0x7A12
+0x7A13
+0x7A14
+0x7A15
+0x7A17
+0x7A18
+0x7A19
+0x7A1A
+0x7A1B
+0x7A1C
+0x7A1E
+0x7A1F
+0x7A20
+0x7A22
+0x7A26
+0x7A28
+0x7A2B
+0x7A2E
+0x7A2F
+0x7A30
+0x7A31
+0x7A37
+0x7A39
+0x7A3B
+0x7A3C
+0x7A3D
+0x7A3F
+0x7A40
+0x7A44
+0x7A46
+0x7A47
+0x7A48
+0x7A4A
+0x7A4B
+0x7A4C
+0x7A4D
+0x7A4E
+0x7A54
+0x7A56
+0x7A57
+0x7A58
+0x7A5A
+0x7A5B
+0x7A5C
+0x7A5F
+0x7A60
+0x7A61
+0x7A62
+0x7A67
+0x7A68
+0x7A69
+0x7A6B
+0x7A6C
+0x7A6D
+0x7A6E
+0x7A70
+0x7A71
+0x7A74
+0x7A75
+0x7A76
+0x7A78
+0x7A79
+0x7A7A
+0x7A7B
+0x7A7E
+0x7A7F
+0x7A80
+0x7A81
+0x7A84
+0x7A85
+0x7A86
+0x7A87
+0x7A88
+0x7A89
+0x7A8A
+0x7A8B
+0x7A8C
+0x7A8F
+0x7A90
+0x7A92
+0x7A94
+0x7A95
+0x7A96
+0x7A97
+0x7A98
+0x7A99
+0x7A9E
+0x7A9F
+0x7AA0
+0x7AA2
+0x7AA3
+0x7AA8
+0x7AA9
+0x7AAA
+0x7AAB
+0x7AAC
+0x7AAE
+0x7AAF
+0x7AB1
+0x7AB2
+0x7AB3
+0x7AB4
+0x7AB5
+0x7AB6
+0x7AB7
+0x7AB8
+0x7ABA
+0x7ABE
+0x7ABF
+0x7AC0
+0x7AC1
+0x7AC4
+0x7AC5
+0x7AC7
+0x7ACA
+0x7ACB
+0x7AD1
+0x7AD8
+0x7AD9
+0x7ADF
+0x7AE0
+0x7AE3
+0x7AE4
+0x7AE5
+0x7AE6
+0x7AEB
+0x7AED
+0x7AEE
+0x7AEF
+0x7AF6
+0x7AF7
+0x7AF9
+0x7AFA
+0x7AFB
+0x7AFD
+0x7AFF
+0x7B00
+0x7B01
+0x7B04
+0x7B05
+0x7B06
+0x7B08
+0x7B09
+0x7B0A
+0x7B0E
+0x7B0F
+0x7B10
+0x7B11
+0x7B12
+0x7B13
+0x7B18
+0x7B19
+0x7B1A
+0x7B1B
+0x7B1D
+0x7B1E
+0x7B20
+0x7B22
+0x7B23
+0x7B24
+0x7B25
+0x7B26
+0x7B28
+0x7B2A
+0x7B2B
+0x7B2C
+0x7B2D
+0x7B2E
+0x7B2F
+0x7B30
+0x7B31
+0x7B32
+0x7B33
+0x7B34
+0x7B35
+0x7B38
+0x7B3B
+0x7B40
+0x7B44
+0x7B45
+0x7B46
+0x7B47
+0x7B48
+0x7B49
+0x7B4A
+0x7B4B
+0x7B4C
+0x7B4D
+0x7B4E
+0x7B4F
+0x7B50
+0x7B51
+0x7B52
+0x7B54
+0x7B56
+0x7B58
+0x7B60
+0x7B61
+0x7B63
+0x7B64
+0x7B65
+0x7B66
+0x7B67
+0x7B69
+0x7B6D
+0x7B6E
+0x7B70
+0x7B71
+0x7B72
+0x7B73
+0x7B74
+0x7B75
+0x7B76
+0x7B77
+0x7B78
+0x7B82
+0x7B84
+0x7B85
+0x7B87
+0x7B88
+0x7B8A
+0x7B8B
+0x7B8C
+0x7B8D
+0x7B8E
+0x7B8F
+0x7B90
+0x7B91
+0x7B94
+0x7B95
+0x7B96
+0x7B97
+0x7B98
+0x7B99
+0x7B9B
+0x7B9C
+0x7B9D
+0x7BA0
+0x7BA1
+0x7BA4
+0x7BAC
+0x7BAD
+0x7BAF
+0x7BB1
+0x7BB4
+0x7BB5
+0x7BB7
+0x7BB8
+0x7BB9
+0x7BBE
+0x7BC0
+0x7BC1
+0x7BC4
+0x7BC6
+0x7BC7
+0x7BC9
+0x7BCA
+0x7BCB
+0x7BCC
+0x7BCE
+0x7BD4
+0x7BD5
+0x7BD8
+0x7BD9
+0x7BDA
+0x7BDB
+0x7BDC
+0x7BDD
+0x7BDE
+0x7BDF
+0x7BE0
+0x7BE1
+0x7BE2
+0x7BE3
+0x7BE4
+0x7BE5
+0x7BE6
+0x7BE7
+0x7BE8
+0x7BE9
+0x7BEA
+0x7BEB
+0x7BF0
+0x7BF1
+0x7BF2
+0x7BF3
+0x7BF4
+0x7BF7
+0x7BF8
+0x7BF9
+0x7BFB
+0x7BFD
+0x7BFE
+0x7BFF
+0x7C00
+0x7C01
+0x7C02
+0x7C03
+0x7C05
+0x7C06
+0x7C07
+0x7C09
+0x7C0A
+0x7C0B
+0x7C0C
+0x7C0D
+0x7C0E
+0x7C0F
+0x7C10
+0x7C11
+0x7C19
+0x7C1C
+0x7C1D
+0x7C1E
+0x7C1F
+0x7C20
+0x7C21
+0x7C22
+0x7C23
+0x7C25
+0x7C26
+0x7C27
+0x7C28
+0x7C29
+0x7C2A
+0x7C2B
+0x7C2C
+0x7C2D
+0x7C30
+0x7C33
+0x7C37
+0x7C38
+0x7C39
+0x7C3B
+0x7C3C
+0x7C3D
+0x7C3E
+0x7C3F
+0x7C40
+0x7C43
+0x7C45
+0x7C47
+0x7C48
+0x7C49
+0x7C4A
+0x7C4C
+0x7C4D
+0x7C50
+0x7C53
+0x7C54
+0x7C57
+0x7C59
+0x7C5A
+0x7C5B
+0x7C5C
+0x7C5F
+0x7C60
+0x7C63
+0x7C64
+0x7C65
+0x7C66
+0x7C67
+0x7C69
+0x7C6A
+0x7C6B
+0x7C6C
+0x7C6E
+0x7C6F
+0x7C72
+0x7C73
+0x7C75
+0x7C78
+0x7C79
+0x7C7A
+0x7C7D
+0x7C7F
+0x7C80
+0x7C81
+0x7C84
+0x7C85
+0x7C88
+0x7C89
+0x7C8A
+0x7C8C
+0x7C8D
+0x7C91
+0x7C92
+0x7C94
+0x7C95
+0x7C96
+0x7C97
+0x7C98
+0x7C9E
+0x7C9F
+0x7CA1
+0x7CA2
+0x7CA3
+0x7CA5
+0x7CA8
+0x7CAF
+0x7CB1
+0x7CB2
+0x7CB3
+0x7CB4
+0x7CB5
+0x7CB9
+0x7CBA
+0x7CBB
+0x7CBC
+0x7CBD
+0x7CBE
+0x7CBF
+0x7CC5
+0x7CC8
+0x7CCA
+0x7CCB
+0x7CCC
+0x7CCE
+0x7CD0
+0x7CD1
+0x7CD2
+0x7CD4
+0x7CD5
+0x7CD6
+0x7CD7
+0x7CD9
+0x7CDC
+0x7CDD
+0x7CDE
+0x7CDF
+0x7CE0
+0x7CE2
+0x7CE7
+0x7CE8
+0x7CEA
+0x7CEC
+0x7CEE
+0x7CEF
+0x7CF0
+0x7CF1
+0x7CF2
+0x7CF4
+0x7CF6
+0x7CF7
+0x7CF8
+0x7CFB
+0x7CFD
+0x7CFE
+0x7D00
+0x7D01
+0x7D02
+0x7D03
+0x7D04
+0x7D05
+0x7D06
+0x7D07
+0x7D08
+0x7D09
+0x7D0A
+0x7D0B
+0x7D0C
+0x7D0D
+0x7D0E
+0x7D0F
+0x7D10
+0x7D11
+0x7D12
+0x7D13
+0x7D14
+0x7D15
+0x7D16
+0x7D17
+0x7D18
+0x7D19
+0x7D1A
+0x7D1B
+0x7D1C
+0x7D1D
+0x7D1E
+0x7D1F
+0x7D20
+0x7D21
+0x7D22
+0x7D28
+0x7D29
+0x7D2B
+0x7D2C
+0x7D2E
+0x7D2F
+0x7D30
+0x7D31
+0x7D32
+0x7D33
+0x7D35
+0x7D36
+0x7D38
+0x7D39
+0x7D3A
+0x7D3B
+0x7D3C
+0x7D3D
+0x7D3E
+0x7D3F
+0x7D40
+0x7D41
+0x7D42
+0x7D43
+0x7D44
+0x7D45
+0x7D46
+0x7D47
+0x7D4A
+0x7D4E
+0x7D4F
+0x7D50
+0x7D51
+0x7D52
+0x7D53
+0x7D54
+0x7D55
+0x7D56
+0x7D58
+0x7D5B
+0x7D5C
+0x7D5E
+0x7D5F
+0x7D61
+0x7D62
+0x7D63
+0x7D66
+0x7D67
+0x7D68
+0x7D69
+0x7D6A
+0x7D6B
+0x7D6D
+0x7D6E
+0x7D6F
+0x7D70
+0x7D71
+0x7D72
+0x7D73
+0x7D79
+0x7D7A
+0x7D7B
+0x7D7C
+0x7D7D
+0x7D7F
+0x7D80
+0x7D81
+0x7D83
+0x7D84
+0x7D85
+0x7D86
+0x7D88
+0x7D8C
+0x7D8D
+0x7D8E
+0x7D8F
+0x7D91
+0x7D92
+0x7D93
+0x7D94
+0x7D96
+0x7D9C
+0x7D9D
+0x7D9E
+0x7D9F
+0x7DA0
+0x7DA1
+0x7DA2
+0x7DA3
+0x7DA6
+0x7DA7
+0x7DA9
+0x7DAA
+0x7DAC
+0x7DAD
+0x7DAE
+0x7DAF
+0x7DB0
+0x7DB1
+0x7DB2
+0x7DB4
+0x7DB5
+0x7DB7
+0x7DB8
+0x7DB9
+0x7DBA
+0x7DBB
+0x7DBC
+0x7DBD
+0x7DBE
+0x7DBF
+0x7DC0
+0x7DC1
+0x7DC2
+0x7DC4
+0x7DC5
+0x7DC6
+0x7DC7
+0x7DC9
+0x7DCA
+0x7DCB
+0x7DCC
+0x7DCE
+0x7DD2
+0x7DD7
+0x7DD8
+0x7DD9
+0x7DDA
+0x7DDB
+0x7DDD
+0x7DDE
+0x7DDF
+0x7DE0
+0x7DE1
+0x7DE3
+0x7DE6
+0x7DE7
+0x7DE8
+0x7DE9
+0x7DEA
+0x7DEC
+0x7DEE
+0x7DEF
+0x7DF0
+0x7DF1
+0x7DF2
+0x7DF3
+0x7DF4
+0x7DF6
+0x7DF7
+0x7DF9
+0x7DFA
+0x7DFB
+0x7E03
+0x7E08
+0x7E09
+0x7E0A
+0x7E0B
+0x7E0C
+0x7E0D
+0x7E0E
+0x7E0F
+0x7E10
+0x7E11
+0x7E12
+0x7E13
+0x7E14
+0x7E15
+0x7E16
+0x7E17
+0x7E1A
+0x7E1B
+0x7E1C
+0x7E1D
+0x7E1E
+0x7E1F
+0x7E20
+0x7E21
+0x7E22
+0x7E23
+0x7E24
+0x7E25
+0x7E29
+0x7E2A
+0x7E2B
+0x7E2D
+0x7E2E
+0x7E2F
+0x7E30
+0x7E31
+0x7E32
+0x7E33
+0x7E34
+0x7E35
+0x7E36
+0x7E37
+0x7E38
+0x7E39
+0x7E3A
+0x7E3B
+0x7E3C
+0x7E3D
+0x7E3E
+0x7E3F
+0x7E40
+0x7E41
+0x7E42
+0x7E43
+0x7E44
+0x7E45
+0x7E46
+0x7E47
+0x7E48
+0x7E49
+0x7E4C
+0x7E50
+0x7E51
+0x7E52
+0x7E53
+0x7E54
+0x7E55
+0x7E56
+0x7E57
+0x7E58
+0x7E59
+0x7E5A
+0x7E5C
+0x7E5E
+0x7E5F
+0x7E60
+0x7E61
+0x7E62
+0x7E63
+0x7E68
+0x7E69
+0x7E6A
+0x7E6B
+0x7E6D
+0x7E6F
+0x7E70
+0x7E72
+0x7E73
+0x7E74
+0x7E75
+0x7E76
+0x7E77
+0x7E78
+0x7E79
+0x7E7A
+0x7E7B
+0x7E7C
+0x7E7D
+0x7E7E
+0x7E80
+0x7E81
+0x7E82
+0x7E86
+0x7E87
+0x7E88
+0x7E8A
+0x7E8B
+0x7E8C
+0x7E8D
+0x7E8F
+0x7E91
+0x7E93
+0x7E94
+0x7E95
+0x7E96
+0x7E97
+0x7E98
+0x7E99
+0x7E9A
+0x7E9B
+0x7E9C
+0x7F36
+0x7F38
+0x7F39
+0x7F3A
+0x7F3D
+0x7F3E
+0x7F3F
+0x7F43
+0x7F44
+0x7F45
+0x7F48
+0x7F4A
+0x7F4B
+0x7F4C
+0x7F4D
+0x7F4F
+0x7F50
+0x7F51
+0x7F54
+0x7F55
+0x7F58
+0x7F5B
+0x7F5C
+0x7F5D
+0x7F5E
+0x7F5F
+0x7F60
+0x7F61
+0x7F63
+0x7F65
+0x7F66
+0x7F67
+0x7F68
+0x7F69
+0x7F6A
+0x7F6B
+0x7F6C
+0x7F6D
+0x7F6E
+0x7F70
+0x7F72
+0x7F73
+0x7F75
+0x7F76
+0x7F77
+0x7F79
+0x7F7A
+0x7F7B
+0x7F7C
+0x7F7D
+0x7F7E
+0x7F7F
+0x7F83
+0x7F85
+0x7F86
+0x7F87
+0x7F88
+0x7F89
+0x7F8A
+0x7F8B
+0x7F8C
+0x7F8D
+0x7F8E
+0x7F91
+0x7F92
+0x7F94
+0x7F95
+0x7F96
+0x7F9A
+0x7F9B
+0x7F9C
+0x7F9D
+0x7F9E
+0x7FA0
+0x7FA1
+0x7FA2
+0x7FA4
+0x7FA5
+0x7FA6
+0x7FA7
+0x7FA8
+0x7FA9
+0x7FAC
+0x7FAD
+0x7FAF
+0x7FB0
+0x7FB1
+0x7FB2
+0x7FB3
+0x7FB5
+0x7FB6
+0x7FB7
+0x7FB8
+0x7FB9
+0x7FBA
+0x7FBB
+0x7FBC
+0x7FBD
+0x7FBE
+0x7FBF
+0x7FC0
+0x7FC1
+0x7FC2
+0x7FC3
+0x7FC5
+0x7FC7
+0x7FC9
+0x7FCA
+0x7FCB
+0x7FCC
+0x7FCD
+0x7FCE
+0x7FCF
+0x7FD0
+0x7FD1
+0x7FD2
+0x7FD4
+0x7FD5
+0x7FD7
+0x7FDB
+0x7FDC
+0x7FDE
+0x7FDF
+0x7FE0
+0x7FE1
+0x7FE2
+0x7FE3
+0x7FE5
+0x7FE6
+0x7FE8
+0x7FE9
+0x7FEA
+0x7FEB
+0x7FEC
+0x7FED
+0x7FEE
+0x7FEF
+0x7FF0
+0x7FF1
+0x7FF2
+0x7FF3
+0x7FF4
+0x7FF5
+0x7FF7
+0x7FF8
+0x7FF9
+0x7FFB
+0x7FFC
+0x7FFD
+0x7FFE
+0x7FFF
+0x8000
+0x8001
+0x8003
+0x8004
+0x8005
+0x8006
+0x8007
+0x800B
+0x800C
+0x800D
+0x800E
+0x800F
+0x8010
+0x8011
+0x8012
+0x8014
+0x8015
+0x8016
+0x8017
+0x8018
+0x8019
+0x801B
+0x801C
+0x801E
+0x801F
+0x8021
+0x8024
+0x8026
+0x8028
+0x8029
+0x802A
+0x802C
+0x8030
+0x8033
+0x8034
+0x8035
+0x8036
+0x8037
+0x8039
+0x803D
+0x803E
+0x803F
+0x8043
+0x8046
+0x8047
+0x8048
+0x804A
+0x804F
+0x8050
+0x8051
+0x8052
+0x8056
+0x8058
+0x805A
+0x805C
+0x805D
+0x805E
+0x8064
+0x8067
+0x806C
+0x806F
+0x8070
+0x8071
+0x8072
+0x8073
+0x8075
+0x8076
+0x8077
+0x8078
+0x8079
+0x807D
+0x807E
+0x807F
+0x8082
+0x8084
+0x8085
+0x8086
+0x8087
+0x8089
+0x808A
+0x808B
+0x808C
+0x808F
+0x8090
+0x8092
+0x8093
+0x8095
+0x8096
+0x8098
+0x8099
+0x809A
+0x809B
+0x809C
+0x809D
+0x80A1
+0x80A2
+0x80A3
+0x80A5
+0x80A9
+0x80AA
+0x80AB
+0x80AD
+0x80AE
+0x80AF
+0x80B1
+0x80B2
+0x80B4
+0x80B5
+0x80B8
+0x80BA
+0x80C2
+0x80C3
+0x80C4
+0x80C5
+0x80C7
+0x80C8
+0x80C9
+0x80CA
+0x80CC
+0x80CD
+0x80CE
+0x80CF
+0x80D0
+0x80D1
+0x80D4
+0x80D5
+0x80D6
+0x80D7
+0x80D8
+0x80D9
+0x80DA
+0x80DB
+0x80DC
+0x80DD
+0x80DE
+0x80E0
+0x80E1
+0x80E3
+0x80E4
+0x80E5
+0x80E6
+0x80ED
+0x80EF
+0x80F0
+0x80F1
+0x80F2
+0x80F3
+0x80F4
+0x80F5
+0x80F8
+0x80F9
+0x80FA
+0x80FB
+0x80FC
+0x80FD
+0x80FE
+0x8100
+0x8101
+0x8102
+0x8105
+0x8106
+0x8108
+0x810A
+0x8115
+0x8116
+0x8118
+0x8119
+0x811B
+0x811D
+0x811E
+0x811F
+0x8121
+0x8122
+0x8123
+0x8124
+0x8125
+0x8127
+0x8129
+0x812B
+0x812C
+0x812D
+0x812F
+0x8130
+0x8139
+0x813A
+0x813D
+0x813E
+0x8143
+0x8144
+0x8146
+0x8147
+0x814A
+0x814B
+0x814C
+0x814D
+0x814E
+0x814F
+0x8150
+0x8151
+0x8152
+0x8153
+0x8154
+0x8155
+0x815B
+0x815C
+0x815E
+0x8160
+0x8161
+0x8162
+0x8164
+0x8165
+0x8166
+0x8167
+0x8169
+0x816B
+0x816E
+0x816F
+0x8170
+0x8171
+0x8172
+0x8173
+0x8174
+0x8176
+0x8177
+0x8178
+0x8179
+0x817A
+0x817F
+0x8180
+0x8182
+0x8183
+0x8186
+0x8187
+0x8188
+0x8189
+0x818A
+0x818B
+0x818C
+0x818D
+0x818F
+0x8195
+0x8197
+0x8198
+0x8199
+0x819A
+0x819B
+0x819C
+0x819D
+0x819E
+0x819F
+0x81A0
+0x81A2
+0x81A3
+0x81A6
+0x81A7
+0x81A8
+0x81A9
+0x81AB
+0x81AC
+0x81AE
+0x81B0
+0x81B1
+0x81B2
+0x81B3
+0x81B4
+0x81B5
+0x81B7
+0x81B9
+0x81BA
+0x81BB
+0x81BC
+0x81BD
+0x81BE
+0x81BF
+0x81C0
+0x81C2
+0x81C3
+0x81C4
+0x81C5
+0x81C6
+0x81C7
+0x81C9
+0x81CA
+0x81CC
+0x81CD
+0x81CF
+0x81D0
+0x81D1
+0x81D2
+0x81D5
+0x81D7
+0x81D8
+0x81D9
+0x81DA
+0x81DB
+0x81DD
+0x81DE
+0x81DF
+0x81E0
+0x81E1
+0x81E2
+0x81E3
+0x81E5
+0x81E6
+0x81E7
+0x81E8
+0x81E9
+0x81EA
+0x81EC
+0x81ED
+0x81EE
+0x81F2
+0x81F3
+0x81F4
+0x81F7
+0x81F8
+0x81F9
+0x81FA
+0x81FB
+0x81FC
+0x81FE
+0x81FF
+0x8200
+0x8201
+0x8202
+0x8204
+0x8205
+0x8207
+0x8208
+0x8209
+0x820A
+0x820B
+0x820C
+0x820D
+0x8210
+0x8211
+0x8212
+0x8214
+0x8215
+0x8216
+0x821B
+0x821C
+0x821D
+0x821E
+0x821F
+0x8220
+0x8221
+0x8222
+0x8225
+0x8228
+0x822A
+0x822B
+0x822C
+0x822F
+0x8232
+0x8233
+0x8234
+0x8235
+0x8236
+0x8237
+0x8238
+0x8239
+0x823A
+0x823C
+0x823D
+0x823F
+0x8240
+0x8242
+0x8244
+0x8245
+0x8247
+0x8249
+0x824B
+0x824E
+0x824F
+0x8250
+0x8251
+0x8252
+0x8253
+0x8255
+0x8256
+0x8257
+0x8258
+0x8259
+0x825A
+0x825B
+0x825C
+0x825E
+0x825F
+0x8261
+0x8263
+0x8264
+0x8266
+0x8268
+0x8269
+0x826B
+0x826C
+0x826D
+0x826E
+0x826F
+0x8271
+0x8272
+0x8274
+0x8275
+0x8277
+0x8278
+0x827C
+0x827D
+0x827E
+0x827F
+0x8280
+0x8283
+0x8284
+0x8285
+0x828A
+0x828B
+0x828D
+0x828E
+0x828F
+0x8290
+0x8291
+0x8292
+0x8293
+0x8294
+0x8298
+0x8299
+0x829A
+0x829B
+0x829D
+0x829E
+0x829F
+0x82A0
+0x82A1
+0x82A2
+0x82A3
+0x82A4
+0x82A5
+0x82A7
+0x82A8
+0x82A9
+0x82AB
+0x82AC
+0x82AD
+0x82AE
+0x82AF
+0x82B0
+0x82B1
+0x82B3
+0x82B4
+0x82B5
+0x82B6
+0x82B7
+0x82B8
+0x82B9
+0x82BA
+0x82BB
+0x82BC
+0x82BD
+0x82BE
+0x82C0
+0x82C2
+0x82C3
+0x82D1
+0x82D2
+0x82D3
+0x82D4
+0x82D5
+0x82D6
+0x82D7
+0x82D9
+0x82DB
+0x82DC
+0x82DE
+0x82DF
+0x82E0
+0x82E1
+0x82E3
+0x82E4
+0x82E5
+0x82E6
+0x82E7
+0x82E8
+0x82EA
+0x82EB
+0x82EC
+0x82ED
+0x82EF
+0x82F0
+0x82F1
+0x82F2
+0x82F3
+0x82F4
+0x82F5
+0x82F6
+0x82F9
+0x82FA
+0x82FB
+0x82FE
+0x8300
+0x8301
+0x8302
+0x8303
+0x8304
+0x8305
+0x8306
+0x8307
+0x8308
+0x8309
+0x830C
+0x830D
+0x8316
+0x8317
+0x8319
+0x831B
+0x831C
+0x831E
+0x8320
+0x8322
+0x8324
+0x8325
+0x8326
+0x8327
+0x8328
+0x8329
+0x832A
+0x832B
+0x832C
+0x832D
+0x832F
+0x8331
+0x8332
+0x8333
+0x8334
+0x8335
+0x8336
+0x8337
+0x8338
+0x8339
+0x833A
+0x833B
+0x833C
+0x833F
+0x8340
+0x8341
+0x8342
+0x8343
+0x8344
+0x8345
+0x8347
+0x8348
+0x8349
+0x834A
+0x834B
+0x834C
+0x834D
+0x834E
+0x834F
+0x8350
+0x8351
+0x8352
+0x8353
+0x8354
+0x8356
+0x8373
+0x8374
+0x8375
+0x8376
+0x8377
+0x8378
+0x837A
+0x837B
+0x837C
+0x837D
+0x837E
+0x837F
+0x8381
+0x8383
+0x8386
+0x8387
+0x8388
+0x8389
+0x838A
+0x838B
+0x838C
+0x838D
+0x838E
+0x838F
+0x8390
+0x8392
+0x8393
+0x8394
+0x8395
+0x8396
+0x8397
+0x8398
+0x8399
+0x839A
+0x839B
+0x839D
+0x839E
+0x83A0
+0x83A2
+0x83A3
+0x83A4
+0x83A5
+0x83A6
+0x83A7
+0x83A8
+0x83A9
+0x83AA
+0x83AB
+0x83AE
+0x83AF
+0x83B0
+0x83BD
+0x83BF
+0x83C0
+0x83C1
+0x83C2
+0x83C3
+0x83C4
+0x83C5
+0x83C6
+0x83C7
+0x83C8
+0x83C9
+0x83CA
+0x83CB
+0x83CC
+0x83CE
+0x83CF
+0x83D1
+0x83D4
+0x83D5
+0x83D6
+0x83D7
+0x83D8
+0x83D9
+0x83DB
+0x83DC
+0x83DD
+0x83DE
+0x83DF
+0x83E0
+0x83E1
+0x83E2
+0x83E3
+0x83E4
+0x83E5
+0x83E7
+0x83E8
+0x83E9
+0x83EA
+0x83EB
+0x83EC
+0x83EE
+0x83EF
+0x83F0
+0x83F1
+0x83F2
+0x83F3
+0x83F4
+0x83F5
+0x83F6
+0x83F8
+0x83F9
+0x83FA
+0x83FB
+0x83FC
+0x83FD
+0x83FE
+0x83FF
+0x8401
+0x8403
+0x8404
+0x8406
+0x8407
+0x8409
+0x840A
+0x840B
+0x840C
+0x840D
+0x840E
+0x840F
+0x8410
+0x8411
+0x8412
+0x8413
+0x841B
+0x8423
+0x8429
+0x842B
+0x842C
+0x842D
+0x842F
+0x8430
+0x8431
+0x8432
+0x8433
+0x8434
+0x8435
+0x8436
+0x8437
+0x8438
+0x8439
+0x843A
+0x843B
+0x843C
+0x843D
+0x843F
+0x8440
+0x8442
+0x8443
+0x8444
+0x8445
+0x8446
+0x8447
+0x8449
+0x844B
+0x844C
+0x844D
+0x844E
+0x8450
+0x8451
+0x8452
+0x8454
+0x8456
+0x8457
+0x8459
+0x845A
+0x845B
+0x845D
+0x845E
+0x845F
+0x8460
+0x8461
+0x8463
+0x8465
+0x8466
+0x8467
+0x8468
+0x8469
+0x846B
+0x846C
+0x846D
+0x846E
+0x846F
+0x8470
+0x8473
+0x8474
+0x8475
+0x8476
+0x8477
+0x8478
+0x8479
+0x847A
+0x847D
+0x847E
+0x8482
+0x8486
+0x848D
+0x848E
+0x848F
+0x8490
+0x8491
+0x8494
+0x8497
+0x8498
+0x8499
+0x849A
+0x849B
+0x849C
+0x849D
+0x849E
+0x849F
+0x84A0
+0x84A1
+0x84A2
+0x84A4
+0x84A7
+0x84A8
+0x84A9
+0x84AA
+0x84AB
+0x84AC
+0x84AE
+0x84AF
+0x84B0
+0x84B1
+0x84B2
+0x84B4
+0x84B6
+0x84B8
+0x84B9
+0x84BA
+0x84BB
+0x84BC
+0x84BF
+0x84C0
+0x84C1
+0x84C2
+0x84C4
+0x84C5
+0x84C6
+0x84C7
+0x84C9
+0x84CA
+0x84CB
+0x84CC
+0x84CD
+0x84CE
+0x84CF
+0x84D0
+0x84D1
+0x84D2
+0x84D3
+0x84D4
+0x84D6
+0x84D7
+0x84DB
+0x84E7
+0x84E8
+0x84E9
+0x84EA
+0x84EB
+0x84EC
+0x84EE
+0x84EF
+0x84F0
+0x84F1
+0x84F2
+0x84F3
+0x84F4
+0x84F6
+0x84F7
+0x84F9
+0x84FA
+0x84FB
+0x84FC
+0x84FD
+0x84FE
+0x84FF
+0x8500
+0x8502
+0x8506
+0x8507
+0x8508
+0x8509
+0x850A
+0x850B
+0x850C
+0x850D
+0x850E
+0x850F
+0x8511
+0x8512
+0x8513
+0x8514
+0x8515
+0x8516
+0x8517
+0x8518
+0x8519
+0x851A
+0x851C
+0x851D
+0x851E
+0x851F
+0x8520
+0x8521
+0x8523
+0x8524
+0x8525
+0x8526
+0x8527
+0x8528
+0x8529
+0x852A
+0x852B
+0x852C
+0x852D
+0x852E
+0x852F
+0x8530
+0x8531
+0x853B
+0x853D
+0x853E
+0x8540
+0x8541
+0x8543
+0x8544
+0x8545
+0x8546
+0x8547
+0x8548
+0x8549
+0x854A
+0x854D
+0x854E
+0x8551
+0x8553
+0x8554
+0x8555
+0x8556
+0x8557
+0x8558
+0x8559
+0x855B
+0x855D
+0x855E
+0x8560
+0x8561
+0x8562
+0x8563
+0x8564
+0x8565
+0x8566
+0x8567
+0x8568
+0x8569
+0x856A
+0x856B
+0x856C
+0x856D
+0x856E
+0x8571
+0x8575
+0x8576
+0x8577
+0x8578
+0x8579
+0x857A
+0x857B
+0x857C
+0x857E
+0x8580
+0x8581
+0x8582
+0x8583
+0x8584
+0x8585
+0x8586
+0x8587
+0x8588
+0x8589
+0x858A
+0x858B
+0x858C
+0x858D
+0x858E
+0x858F
+0x8590
+0x8591
+0x8594
+0x8595
+0x8596
+0x8598
+0x8599
+0x859A
+0x859B
+0x859C
+0x859D
+0x859E
+0x859F
+0x85A0
+0x85A1
+0x85A2
+0x85A3
+0x85A4
+0x85A6
+0x85A7
+0x85A8
+0x85A9
+0x85AA
+0x85AF
+0x85B0
+0x85B1
+0x85B3
+0x85B4
+0x85B5
+0x85B6
+0x85B7
+0x85B8
+0x85B9
+0x85BA
+0x85BD
+0x85BE
+0x85BF
+0x85C0
+0x85C2
+0x85C3
+0x85C4
+0x85C5
+0x85C6
+0x85C7
+0x85C8
+0x85C9
+0x85CB
+0x85CD
+0x85CE
+0x85CF
+0x85D0
+0x85D1
+0x85D2
+0x85D5
+0x85D7
+0x85D8
+0x85D9
+0x85DA
+0x85DC
+0x85DD
+0x85DE
+0x85DF
+0x85E1
+0x85E2
+0x85E3
+0x85E4
+0x85E5
+0x85E6
+0x85E8
+0x85E9
+0x85EA
+0x85EB
+0x85EC
+0x85ED
+0x85EF
+0x85F0
+0x85F1
+0x85F2
+0x85F6
+0x85F7
+0x85F8
+0x85F9
+0x85FA
+0x85FB
+0x85FD
+0x85FE
+0x85FF
+0x8600
+0x8601
+0x8604
+0x8605
+0x8606
+0x8607
+0x8609
+0x860A
+0x860B
+0x860C
+0x8611
+0x8617
+0x8618
+0x8619
+0x861A
+0x861B
+0x861C
+0x861E
+0x861F
+0x8620
+0x8621
+0x8622
+0x8623
+0x8624
+0x8625
+0x8626
+0x8627
+0x8629
+0x862A
+0x862C
+0x862D
+0x862E
+0x8631
+0x8632
+0x8633
+0x8634
+0x8635
+0x8636
+0x8638
+0x8639
+0x863A
+0x863B
+0x863C
+0x863E
+0x863F
+0x8640
+0x8643
+0x8646
+0x8647
+0x8648
+0x864B
+0x864C
+0x864D
+0x864E
+0x8650
+0x8652
+0x8653
+0x8654
+0x8655
+0x8656
+0x8659
+0x865B
+0x865C
+0x865E
+0x865F
+0x8661
+0x8662
+0x8663
+0x8664
+0x8665
+0x8667
+0x8668
+0x8669
+0x866A
+0x866B
+0x866D
+0x866E
+0x866F
+0x8670
+0x8671
+0x8673
+0x8674
+0x8677
+0x8679
+0x867A
+0x867B
+0x867C
+0x8685
+0x8686
+0x8687
+0x868A
+0x868B
+0x868C
+0x868D
+0x868E
+0x8690
+0x8691
+0x8693
+0x8694
+0x8695
+0x8696
+0x8697
+0x8698
+0x8699
+0x869A
+0x869C
+0x869D
+0x869E
+0x86A1
+0x86A2
+0x86A3
+0x86A4
+0x86A5
+0x86A7
+0x86A8
+0x86A9
+0x86AA
+0x86AF
+0x86B0
+0x86B1
+0x86B3
+0x86B4
+0x86B5
+0x86B6
+0x86B7
+0x86B8
+0x86B9
+0x86BA
+0x86BB
+0x86BC
+0x86BD
+0x86BE
+0x86BF
+0x86C0
+0x86C1
+0x86C2
+0x86C3
+0x86C4
+0x86C5
+0x86C6
+0x86C7
+0x86C8
+0x86C9
+0x86CB
+0x86CC
+0x86D0
+0x86D1
+0x86D3
+0x86D4
+0x86D6
+0x86D7
+0x86D8
+0x86D9
+0x86DA
+0x86DB
+0x86DC
+0x86DD
+0x86DE
+0x86DF
+0x86E2
+0x86E3
+0x86E4
+0x86E6
+0x86E8
+0x86E9
+0x86EA
+0x86EB
+0x86EC
+0x86ED
+0x86F5
+0x86F6
+0x86F7
+0x86F8
+0x86F9
+0x86FA
+0x86FB
+0x86FE
+0x8700
+0x8701
+0x8702
+0x8703
+0x8704
+0x8705
+0x8706
+0x8707
+0x8708
+0x8709
+0x870A
+0x870B
+0x870C
+0x870D
+0x870E
+0x8711
+0x8712
+0x8713
+0x8718
+0x8719
+0x871A
+0x871B
+0x871C
+0x871E
+0x8720
+0x8721
+0x8722
+0x8723
+0x8724
+0x8725
+0x8726
+0x8727
+0x8728
+0x8729
+0x872A
+0x872C
+0x872D
+0x872E
+0x8730
+0x8731
+0x8732
+0x8733
+0x8734
+0x8735
+0x8737
+0x8738
+0x873A
+0x873B
+0x873C
+0x873E
+0x873F
+0x8740
+0x8741
+0x8742
+0x8743
+0x8746
+0x874C
+0x874D
+0x874E
+0x874F
+0x8750
+0x8751
+0x8752
+0x8753
+0x8754
+0x8755
+0x8756
+0x8757
+0x8758
+0x8759
+0x875A
+0x875B
+0x875C
+0x875D
+0x875E
+0x875F
+0x8760
+0x8761
+0x8762
+0x8763
+0x8764
+0x8765
+0x8766
+0x8767
+0x8768
+0x8769
+0x876A
+0x876B
+0x876C
+0x876D
+0x876E
+0x876F
+0x8773
+0x8774
+0x8775
+0x8776
+0x8777
+0x8778
+0x8779
+0x877A
+0x877B
+0x8781
+0x8782
+0x8783
+0x8784
+0x8785
+0x8787
+0x8788
+0x8789
+0x878D
+0x878F
+0x8790
+0x8791
+0x8792
+0x8793
+0x8794
+0x8796
+0x8797
+0x8798
+0x879A
+0x879B
+0x879C
+0x879D
+0x879E
+0x879F
+0x87A2
+0x87A3
+0x87A4
+0x87AA
+0x87AB
+0x87AC
+0x87AD
+0x87AE
+0x87AF
+0x87B0
+0x87B2
+0x87B3
+0x87B4
+0x87B5
+0x87B6
+0x87B7
+0x87B8
+0x87B9
+0x87BA
+0x87BB
+0x87BC
+0x87BD
+0x87BE
+0x87BF
+0x87C0
+0x87C2
+0x87C3
+0x87C4
+0x87C5
+0x87C6
+0x87C8
+0x87C9
+0x87CA
+0x87CB
+0x87CC
+0x87D1
+0x87D2
+0x87D3
+0x87D4
+0x87D7
+0x87D8
+0x87D9
+0x87DB
+0x87DC
+0x87DD
+0x87DE
+0x87DF
+0x87E0
+0x87E1
+0x87E2
+0x87E3
+0x87E4
+0x87E5
+0x87E6
+0x87E7
+0x87E8
+0x87EA
+0x87EB
+0x87EC
+0x87ED
+0x87EF
+0x87F2
+0x87F3
+0x87F4
+0x87F6
+0x87F7
+0x87F9
+0x87FA
+0x87FB
+0x87FC
+0x87FE
+0x87FF
+0x8800
+0x8801
+0x8802
+0x8803
+0x8805
+0x8806
+0x8808
+0x8809
+0x880A
+0x880B
+0x880C
+0x880D
+0x8810
+0x8811
+0x8813
+0x8814
+0x8815
+0x8816
+0x8817
+0x8819
+0x881B
+0x881C
+0x881D
+0x881F
+0x8820
+0x8821
+0x8822
+0x8823
+0x8824
+0x8825
+0x8826
+0x8828
+0x8829
+0x882A
+0x882B
+0x882C
+0x882E
+0x882F
+0x8830
+0x8831
+0x8832
+0x8833
+0x8835
+0x8836
+0x8837
+0x8838
+0x8839
+0x883B
+0x883C
+0x883D
+0x883E
+0x883F
+0x8840
+0x8841
+0x8843
+0x8844
+0x8848
+0x884A
+0x884B
+0x884C
+0x884D
+0x884E
+0x8852
+0x8853
+0x8855
+0x8856
+0x8857
+0x8859
+0x885A
+0x885B
+0x885D
+0x8861
+0x8862
+0x8863
+0x8867
+0x8868
+0x8869
+0x886A
+0x886B
+0x886D
+0x886F
+0x8870
+0x8871
+0x8872
+0x8874
+0x8875
+0x8876
+0x8877
+0x8879
+0x887C
+0x887D
+0x887E
+0x887F
+0x8880
+0x8881
+0x8882
+0x8883
+0x8888
+0x8889
+0x888B
+0x888C
+0x888D
+0x888E
+0x8891
+0x8892
+0x8893
+0x8895
+0x8896
+0x8897
+0x8898
+0x8899
+0x889A
+0x889B
+0x889E
+0x889F
+0x88A1
+0x88A2
+0x88A4
+0x88A7
+0x88A8
+0x88AA
+0x88AB
+0x88AC
+0x88B1
+0x88B2
+0x88B6
+0x88B7
+0x88B8
+0x88B9
+0x88BA
+0x88BC
+0x88BD
+0x88BE
+0x88C0
+0x88C1
+0x88C2
+0x88C9
+0x88CA
+0x88CB
+0x88CC
+0x88CD
+0x88CE
+0x88D0
+0x88D2
+0x88D4
+0x88D5
+0x88D6
+0x88D7
+0x88D8
+0x88D9
+0x88DA
+0x88DB
+0x88DC
+0x88DD
+0x88DE
+0x88DF
+0x88E1
+0x88E7
+0x88E8
+0x88EB
+0x88EC
+0x88EE
+0x88EF
+0x88F0
+0x88F1
+0x88F2
+0x88F3
+0x88F4
+0x88F6
+0x88F7
+0x88F8
+0x88F9
+0x88FA
+0x88FB
+0x88FC
+0x88FD
+0x88FE
+0x8901
+0x8902
+0x8905
+0x8906
+0x8907
+0x8909
+0x890A
+0x890B
+0x890C
+0x890E
+0x8910
+0x8911
+0x8912
+0x8913
+0x8914
+0x8915
+0x8916
+0x8917
+0x8918
+0x8919
+0x891A
+0x891E
+0x891F
+0x8921
+0x8922
+0x8923
+0x8925
+0x8926
+0x8927
+0x8929
+0x892A
+0x892B
+0x892C
+0x892D
+0x892E
+0x892F
+0x8930
+0x8931
+0x8932
+0x8933
+0x8935
+0x8936
+0x8937
+0x8938
+0x893B
+0x893C
+0x893D
+0x893E
+0x8941
+0x8942
+0x8944
+0x8946
+0x8949
+0x894B
+0x894C
+0x894F
+0x8950
+0x8951
+0x8952
+0x8953
+0x8956
+0x8957
+0x8958
+0x8959
+0x895A
+0x895B
+0x895C
+0x895D
+0x895E
+0x895F
+0x8960
+0x8961
+0x8962
+0x8963
+0x8964
+0x8966
+0x8969
+0x896A
+0x896B
+0x896C
+0x896D
+0x896E
+0x896F
+0x8971
+0x8972
+0x8973
+0x8974
+0x8976
+0x8979
+0x897A
+0x897B
+0x897C
+0x897E
+0x897F
+0x8981
+0x8982
+0x8983
+0x8985
+0x8986
+0x8988
+0x898B
+0x898F
+0x8993
+0x8995
+0x8996
+0x8997
+0x8998
+0x899B
+0x899C
+0x899D
+0x899E
+0x899F
+0x89A1
+0x89A2
+0x89A3
+0x89A4
+0x89A6
+0x89AA
+0x89AC
+0x89AD
+0x89AE
+0x89AF
+0x89B2
+0x89B6
+0x89B7
+0x89B9
+0x89BA
+0x89BD
+0x89BE
+0x89BF
+0x89C0
+0x89D2
+0x89D3
+0x89D4
+0x89D5
+0x89D6
+0x89D9
+0x89DA
+0x89DB
+0x89DC
+0x89DD
+0x89DF
+0x89E0
+0x89E1
+0x89E2
+0x89E3
+0x89E4
+0x89E5
+0x89E6
+0x89E8
+0x89E9
+0x89EB
+0x89EC
+0x89ED
+0x89F0
+0x89F1
+0x89F2
+0x89F3
+0x89F4
+0x89F6
+0x89F7
+0x89F8
+0x89FA
+0x89FB
+0x89FC
+0x89FE
+0x89FF
+0x8A00
+0x8A02
+0x8A03
+0x8A04
+0x8A07
+0x8A08
+0x8A0A
+0x8A0C
+0x8A0E
+0x8A0F
+0x8A10
+0x8A11
+0x8A12
+0x8A13
+0x8A15
+0x8A16
+0x8A17
+0x8A18
+0x8A1B
+0x8A1D
+0x8A1E
+0x8A1F
+0x8A22
+0x8A23
+0x8A25
+0x8A27
+0x8A2A
+0x8A2C
+0x8A2D
+0x8A30
+0x8A31
+0x8A34
+0x8A36
+0x8A39
+0x8A3A
+0x8A3B
+0x8A3C
+0x8A3E
+0x8A3F
+0x8A40
+0x8A41
+0x8A44
+0x8A45
+0x8A46
+0x8A48
+0x8A4A
+0x8A4C
+0x8A4D
+0x8A4E
+0x8A4F
+0x8A50
+0x8A51
+0x8A52
+0x8A54
+0x8A55
+0x8A56
+0x8A57
+0x8A58
+0x8A59
+0x8A5B
+0x8A5E
+0x8A60
+0x8A61
+0x8A62
+0x8A63
+0x8A66
+0x8A68
+0x8A69
+0x8A6B
+0x8A6C
+0x8A6D
+0x8A6E
+0x8A70
+0x8A71
+0x8A72
+0x8A73
+0x8A74
+0x8A75
+0x8A76
+0x8A77
+0x8A79
+0x8A7A
+0x8A7B
+0x8A7C
+0x8A7F
+0x8A81
+0x8A82
+0x8A83
+0x8A84
+0x8A85
+0x8A86
+0x8A87
+0x8A8B
+0x8A8C
+0x8A8D
+0x8A8F
+0x8A91
+0x8A92
+0x8A93
+0x8A95
+0x8A96
+0x8A98
+0x8A99
+0x8A9A
+0x8A9E
+0x8AA0
+0x8AA1
+0x8AA3
+0x8AA4
+0x8AA5
+0x8AA6
+0x8AA7
+0x8AA8
+0x8AAA
+0x8AAB
+0x8AB0
+0x8AB2
+0x8AB6
+0x8AB8
+0x8AB9
+0x8ABA
+0x8ABB
+0x8ABC
+0x8ABD
+0x8ABE
+0x8ABF
+0x8AC0
+0x8AC2
+0x8AC3
+0x8AC4
+0x8AC5
+0x8AC6
+0x8AC7
+0x8AC8
+0x8AC9
+0x8ACB
+0x8ACD
+0x8ACF
+0x8AD1
+0x8AD2
+0x8AD3
+0x8AD4
+0x8AD5
+0x8AD6
+0x8AD7
+0x8AD8
+0x8AD9
+0x8ADB
+0x8ADC
+0x8ADD
+0x8ADE
+0x8ADF
+0x8AE0
+0x8AE1
+0x8AE2
+0x8AE4
+0x8AE6
+0x8AE7
+0x8AE8
+0x8AEB
+0x8AED
+0x8AEE
+0x8AEF
+0x8AF0
+0x8AF1
+0x8AF2
+0x8AF3
+0x8AF4
+0x8AF5
+0x8AF6
+0x8AF7
+0x8AF8
+0x8AFA
+0x8AFB
+0x8AFC
+0x8AFE
+0x8AFF
+0x8B00
+0x8B01
+0x8B02
+0x8B04
+0x8B05
+0x8B06
+0x8B07
+0x8B08
+0x8B0A
+0x8B0B
+0x8B0D
+0x8B0E
+0x8B0F
+0x8B10
+0x8B11
+0x8B12
+0x8B13
+0x8B14
+0x8B15
+0x8B16
+0x8B17
+0x8B18
+0x8B19
+0x8B1A
+0x8B1B
+0x8B1C
+0x8B1D
+0x8B1E
+0x8B20
+0x8B22
+0x8B23
+0x8B24
+0x8B25
+0x8B26
+0x8B27
+0x8B28
+0x8B2A
+0x8B2B
+0x8B2C
+0x8B2E
+0x8B2F
+0x8B30
+0x8B31
+0x8B33
+0x8B35
+0x8B36
+0x8B37
+0x8B39
+0x8B3A
+0x8B3B
+0x8B3C
+0x8B3D
+0x8B3E
+0x8B40
+0x8B41
+0x8B42
+0x8B45
+0x8B46
+0x8B47
+0x8B48
+0x8B49
+0x8B4A
+0x8B4B
+0x8B4E
+0x8B4F
+0x8B50
+0x8B51
+0x8B52
+0x8B53
+0x8B54
+0x8B55
+0x8B56
+0x8B57
+0x8B58
+0x8B59
+0x8B5A
+0x8B5C
+0x8B5D
+0x8B5F
+0x8B60
+0x8B63
+0x8B65
+0x8B66
+0x8B67
+0x8B68
+0x8B6A
+0x8B6B
+0x8B6C
+0x8B6D
+0x8B6F
+0x8B70
+0x8B74
+0x8B77
+0x8B78
+0x8B79
+0x8B7A
+0x8B7B
+0x8B7D
+0x8B7E
+0x8B7F
+0x8B80
+0x8B82
+0x8B84
+0x8B85
+0x8B86
+0x8B88
+0x8B8A
+0x8B8B
+0x8B8C
+0x8B8E
+0x8B92
+0x8B93
+0x8B94
+0x8B95
+0x8B96
+0x8B98
+0x8B99
+0x8B9A
+0x8B9C
+0x8B9E
+0x8B9F
+0x8C37
+0x8C39
+0x8C3B
+0x8C3C
+0x8C3D
+0x8C3E
+0x8C3F
+0x8C41
+0x8C42
+0x8C43
+0x8C45
+0x8C46
+0x8C47
+0x8C48
+0x8C49
+0x8C4A
+0x8C4B
+0x8C4C
+0x8C4D
+0x8C4E
+0x8C4F
+0x8C50
+0x8C54
+0x8C55
+0x8C56
+0x8C57
+0x8C5A
+0x8C5C
+0x8C5D
+0x8C5F
+0x8C61
+0x8C62
+0x8C64
+0x8C65
+0x8C66
+0x8C68
+0x8C69
+0x8C6A
+0x8C6B
+0x8C6C
+0x8C6D
+0x8C6F
+0x8C70
+0x8C71
+0x8C72
+0x8C73
+0x8C75
+0x8C76
+0x8C77
+0x8C78
+0x8C79
+0x8C7A
+0x8C7B
+0x8C7D
+0x8C80
+0x8C81
+0x8C82
+0x8C84
+0x8C85
+0x8C86
+0x8C89
+0x8C8A
+0x8C8C
+0x8C8D
+0x8C8F
+0x8C90
+0x8C91
+0x8C92
+0x8C93
+0x8C94
+0x8C95
+0x8C97
+0x8C98
+0x8C99
+0x8C9A
+0x8C9C
+0x8C9D
+0x8C9E
+0x8CA0
+0x8CA1
+0x8CA2
+0x8CA3
+0x8CA4
+0x8CA5
+0x8CA7
+0x8CA8
+0x8CA9
+0x8CAA
+0x8CAB
+0x8CAC
+0x8CAF
+0x8CB0
+0x8CB2
+0x8CB3
+0x8CB4
+0x8CB5
+0x8CB6
+0x8CB7
+0x8CB8
+0x8CB9
+0x8CBA
+0x8CBB
+0x8CBC
+0x8CBD
+0x8CBE
+0x8CBF
+0x8CC0
+0x8CC1
+0x8CC2
+0x8CC3
+0x8CC4
+0x8CC5
+0x8CC7
+0x8CC8
+0x8CCA
+0x8CCC
+0x8CCF
+0x8CD1
+0x8CD2
+0x8CD3
+0x8CD5
+0x8CD7
+0x8CD9
+0x8CDA
+0x8CDC
+0x8CDD
+0x8CDE
+0x8CDF
+0x8CE0
+0x8CE1
+0x8CE2
+0x8CE3
+0x8CE4
+0x8CE5
+0x8CE6
+0x8CE7
+0x8CE8
+0x8CEA
+0x8CEC
+0x8CED
+0x8CEE
+0x8CF0
+0x8CF1
+0x8CF3
+0x8CF4
+0x8CF5
+0x8CF8
+0x8CF9
+0x8CFA
+0x8CFB
+0x8CFC
+0x8CFD
+0x8CFE
+0x8D00
+0x8D02
+0x8D04
+0x8D05
+0x8D06
+0x8D07
+0x8D08
+0x8D09
+0x8D0A
+0x8D0D
+0x8D0F
+0x8D10
+0x8D13
+0x8D14
+0x8D15
+0x8D16
+0x8D17
+0x8D19
+0x8D1B
+0x8D64
+0x8D66
+0x8D67
+0x8D68
+0x8D69
+0x8D6B
+0x8D6C
+0x8D6D
+0x8D6E
+0x8D6F
+0x8D70
+0x8D72
+0x8D73
+0x8D74
+0x8D76
+0x8D77
+0x8D78
+0x8D79
+0x8D7B
+0x8D7D
+0x8D80
+0x8D81
+0x8D84
+0x8D85
+0x8D89
+0x8D8A
+0x8D8C
+0x8D8D
+0x8D8E
+0x8D8F
+0x8D90
+0x8D91
+0x8D92
+0x8D93
+0x8D94
+0x8D95
+0x8D96
+0x8D99
+0x8D9B
+0x8D9C
+0x8D9F
+0x8DA0
+0x8DA1
+0x8DA3
+0x8DA5
+0x8DA7
+0x8DA8
+0x8DAA
+0x8DAB
+0x8DAC
+0x8DAD
+0x8DAE
+0x8DAF
+0x8DB2
+0x8DB3
+0x8DB4
+0x8DB5
+0x8DB6
+0x8DB7
+0x8DB9
+0x8DBA
+0x8DBC
+0x8DBE
+0x8DBF
+0x8DC1
+0x8DC2
+0x8DC5
+0x8DC6
+0x8DC7
+0x8DC8
+0x8DCB
+0x8DCC
+0x8DCD
+0x8DCE
+0x8DCF
+0x8DD0
+0x8DD1
+0x8DD3
+0x8DD5
+0x8DD6
+0x8DD7
+0x8DD8
+0x8DD9
+0x8DDA
+0x8DDB
+0x8DDC
+0x8DDD
+0x8DDF
+0x8DE0
+0x8DE1
+0x8DE2
+0x8DE3
+0x8DE4
+0x8DE6
+0x8DE7
+0x8DE8
+0x8DE9
+0x8DEA
+0x8DEB
+0x8DEC
+0x8DEE
+0x8DEF
+0x8DF0
+0x8DF1
+0x8DF2
+0x8DF3
+0x8DF4
+0x8DFA
+0x8DFC
+0x8DFD
+0x8DFE
+0x8DFF
+0x8E00
+0x8E02
+0x8E03
+0x8E04
+0x8E05
+0x8E06
+0x8E07
+0x8E09
+0x8E0A
+0x8E0D
+0x8E0F
+0x8E10
+0x8E11
+0x8E12
+0x8E13
+0x8E14
+0x8E15
+0x8E16
+0x8E17
+0x8E18
+0x8E19
+0x8E1A
+0x8E1B
+0x8E1C
+0x8E1D
+0x8E1E
+0x8E1F
+0x8E20
+0x8E21
+0x8E22
+0x8E23
+0x8E24
+0x8E25
+0x8E26
+0x8E27
+0x8E29
+0x8E2B
+0x8E2E
+0x8E30
+0x8E31
+0x8E33
+0x8E34
+0x8E35
+0x8E36
+0x8E38
+0x8E39
+0x8E3C
+0x8E3D
+0x8E3E
+0x8E3F
+0x8E40
+0x8E41
+0x8E42
+0x8E44
+0x8E45
+0x8E47
+0x8E48
+0x8E49
+0x8E4A
+0x8E4B
+0x8E4C
+0x8E4D
+0x8E4E
+0x8E50
+0x8E53
+0x8E54
+0x8E55
+0x8E56
+0x8E57
+0x8E59
+0x8E5A
+0x8E5B
+0x8E5C
+0x8E5D
+0x8E5E
+0x8E5F
+0x8E60
+0x8E61
+0x8E62
+0x8E63
+0x8E64
+0x8E65
+0x8E66
+0x8E67
+0x8E69
+0x8E6A
+0x8E6C
+0x8E6D
+0x8E6F
+0x8E72
+0x8E73
+0x8E74
+0x8E76
+0x8E78
+0x8E7A
+0x8E7B
+0x8E7C
+0x8E81
+0x8E82
+0x8E84
+0x8E85
+0x8E86
+0x8E87
+0x8E88
+0x8E89
+0x8E8A
+0x8E8B
+0x8E8C
+0x8E8D
+0x8E8E
+0x8E90
+0x8E91
+0x8E92
+0x8E93
+0x8E94
+0x8E95
+0x8E96
+0x8E97
+0x8E98
+0x8E9A
+0x8E9D
+0x8E9E
+0x8E9F
+0x8EA0
+0x8EA1
+0x8EA3
+0x8EA4
+0x8EA5
+0x8EA6
+0x8EA8
+0x8EA9
+0x8EAA
+0x8EAB
+0x8EAC
+0x8EB2
+0x8EBA
+0x8EBD
+0x8EC0
+0x8EC2
+0x8EC9
+0x8ECA
+0x8ECB
+0x8ECC
+0x8ECD
+0x8ECF
+0x8ED1
+0x8ED2
+0x8ED3
+0x8ED4
+0x8ED7
+0x8ED8
+0x8EDB
+0x8EDC
+0x8EDD
+0x8EDE
+0x8EDF
+0x8EE0
+0x8EE1
+0x8EE5
+0x8EE6
+0x8EE7
+0x8EE8
+0x8EE9
+0x8EEB
+0x8EEC
+0x8EEE
+0x8EEF
+0x8EF1
+0x8EF4
+0x8EF5
+0x8EF6
+0x8EF7
+0x8EF8
+0x8EF9
+0x8EFA
+0x8EFB
+0x8EFC
+0x8EFE
+0x8EFF
+0x8F00
+0x8F01
+0x8F02
+0x8F03
+0x8F05
+0x8F06
+0x8F07
+0x8F08
+0x8F09
+0x8F0A
+0x8F0B
+0x8F0D
+0x8F0E
+0x8F10
+0x8F11
+0x8F12
+0x8F13
+0x8F14
+0x8F15
+0x8F16
+0x8F17
+0x8F18
+0x8F1A
+0x8F1B
+0x8F1C
+0x8F1D
+0x8F1E
+0x8F1F
+0x8F20
+0x8F23
+0x8F24
+0x8F25
+0x8F26
+0x8F29
+0x8F2A
+0x8F2C
+0x8F2E
+0x8F2F
+0x8F32
+0x8F33
+0x8F34
+0x8F35
+0x8F36
+0x8F37
+0x8F38
+0x8F39
+0x8F3B
+0x8F3E
+0x8F3F
+0x8F40
+0x8F42
+0x8F43
+0x8F44
+0x8F45
+0x8F46
+0x8F47
+0x8F48
+0x8F49
+0x8F4B
+0x8F4D
+0x8F4E
+0x8F4F
+0x8F50
+0x8F51
+0x8F52
+0x8F53
+0x8F54
+0x8F55
+0x8F56
+0x8F57
+0x8F58
+0x8F59
+0x8F5A
+0x8F5B
+0x8F5D
+0x8F5E
+0x8F5F
+0x8F60
+0x8F61
+0x8F62
+0x8F63
+0x8F64
+0x8F9B
+0x8F9C
+0x8F9F
+0x8FA3
+0x8FA6
+0x8FA8
+0x8FAD
+0x8FAE
+0x8FAF
+0x8FB0
+0x8FB1
+0x8FB2
+0x8FB4
+0x8FBF
+0x8FC2
+0x8FC4
+0x8FC5
+0x8FC6
+0x8FC9
+0x8FCB
+0x8FCD
+0x8FCE
+0x8FD1
+0x8FD2
+0x8FD3
+0x8FD4
+0x8FD5
+0x8FD6
+0x8FD7
+0x8FE0
+0x8FE1
+0x8FE2
+0x8FE3
+0x8FE4
+0x8FE5
+0x8FE6
+0x8FE8
+0x8FEA
+0x8FEB
+0x8FED
+0x8FEE
+0x8FF0
+0x8FF4
+0x8FF5
+0x8FF6
+0x8FF7
+0x8FF8
+0x8FFA
+0x8FFB
+0x8FFC
+0x8FFD
+0x8FFE
+0x8FFF
+0x9000
+0x9001
+0x9002
+0x9003
+0x9004
+0x9005
+0x9006
+0x900B
+0x900C
+0x900D
+0x900F
+0x9010
+0x9011
+0x9014
+0x9015
+0x9016
+0x9017
+0x9019
+0x901A
+0x901B
+0x901C
+0x901D
+0x901E
+0x901F
+0x9020
+0x9021
+0x9022
+0x9023
+0x9024
+0x902D
+0x902E
+0x902F
+0x9031
+0x9032
+0x9034
+0x9035
+0x9036
+0x9038
+0x903C
+0x903D
+0x903E
+0x903F
+0x9041
+0x9042
+0x9044
+0x9047
+0x9049
+0x904A
+0x904B
+0x904D
+0x904E
+0x904F
+0x9050
+0x9051
+0x9052
+0x9053
+0x9054
+0x9055
+0x9058
+0x9059
+0x905B
+0x905C
+0x905D
+0x905E
+0x9060
+0x9062
+0x9063
+0x9067
+0x9068
+0x9069
+0x906B
+0x906D
+0x906E
+0x906F
+0x9070
+0x9072
+0x9073
+0x9074
+0x9075
+0x9076
+0x9077
+0x9078
+0x9079
+0x907A
+0x907B
+0x907C
+0x907D
+0x907E
+0x907F
+0x9080
+0x9081
+0x9082
+0x9083
+0x9084
+0x9085
+0x9086
+0x9087
+0x9088
+0x908A
+0x908B
+0x908D
+0x908F
+0x9090
+0x9091
+0x9094
+0x9095
+0x9097
+0x9098
+0x9099
+0x909B
+0x909E
+0x909F
+0x90A0
+0x90A1
+0x90A2
+0x90A3
+0x90A5
+0x90A6
+0x90A7
+0x90AA
+0x90AF
+0x90B0
+0x90B1
+0x90B2
+0x90B3
+0x90B4
+0x90B5
+0x90B6
+0x90B8
+0x90BD
+0x90BE
+0x90BF
+0x90C1
+0x90C3
+0x90C5
+0x90C7
+0x90C8
+0x90CA
+0x90CB
+0x90CE
+0x90D4
+0x90D5
+0x90D6
+0x90D7
+0x90D8
+0x90D9
+0x90DA
+0x90DB
+0x90DC
+0x90DD
+0x90DF
+0x90E0
+0x90E1
+0x90E2
+0x90E3
+0x90E4
+0x90E5
+0x90E8
+0x90E9
+0x90EA
+0x90EB
+0x90EC
+0x90ED
+0x90EF
+0x90F0
+0x90F1
+0x90F2
+0x90F3
+0x90F4
+0x90F5
+0x90F9
+0x90FA
+0x90FB
+0x90FC
+0x90FD
+0x90FE
+0x90FF
+0x9100
+0x9101
+0x9102
+0x9103
+0x9104
+0x9105
+0x9106
+0x9107
+0x9108
+0x9109
+0x910B
+0x910D
+0x910E
+0x910F
+0x9110
+0x9111
+0x9112
+0x9114
+0x9116
+0x9117
+0x9118
+0x9119
+0x911A
+0x911B
+0x911C
+0x911D
+0x911E
+0x911F
+0x9120
+0x9121
+0x9122
+0x9123
+0x9124
+0x9126
+0x9127
+0x9128
+0x9129
+0x912A
+0x912B
+0x912C
+0x912D
+0x912E
+0x912F
+0x9130
+0x9131
+0x9132
+0x9133
+0x9134
+0x9135
+0x9136
+0x9138
+0x9139
+0x913A
+0x913B
+0x913E
+0x913F
+0x9140
+0x9141
+0x9143
+0x9144
+0x9145
+0x9146
+0x9147
+0x9148
+0x9149
+0x914A
+0x914B
+0x914C
+0x914D
+0x914E
+0x914F
+0x9150
+0x9152
+0x9153
+0x9155
+0x9156
+0x9157
+0x9158
+0x915A
+0x915F
+0x9160
+0x9161
+0x9162
+0x9163
+0x9164
+0x9165
+0x9168
+0x9169
+0x916A
+0x916C
+0x916E
+0x916F
+0x9172
+0x9173
+0x9174
+0x9175
+0x9177
+0x9178
+0x9179
+0x917A
+0x9180
+0x9181
+0x9182
+0x9183
+0x9184
+0x9185
+0x9186
+0x9187
+0x9189
+0x918A
+0x918B
+0x918D
+0x918F
+0x9190
+0x9191
+0x9192
+0x9193
+0x9199
+0x919A
+0x919B
+0x919C
+0x919D
+0x919E
+0x919F
+0x91A0
+0x91A1
+0x91A2
+0x91A3
+0x91A5
+0x91A7
+0x91A8
+0x91AA
+0x91AB
+0x91AC
+0x91AD
+0x91AE
+0x91AF
+0x91B0
+0x91B1
+0x91B2
+0x91B3
+0x91B4
+0x91B5
+0x91B7
+0x91B9
+0x91BA
+0x91BC
+0x91BD
+0x91BE
+0x91C0
+0x91C1
+0x91C2
+0x91C3
+0x91C5
+0x91C6
+0x91C7
+0x91C9
+0x91CB
+0x91CC
+0x91CD
+0x91CE
+0x91CF
+0x91D0
+0x91D1
+0x91D3
+0x91D4
+0x91D5
+0x91D7
+0x91D8
+0x91D9
+0x91DA
+0x91DC
+0x91DD
+0x91E2
+0x91E3
+0x91E4
+0x91E6
+0x91E7
+0x91E8
+0x91E9
+0x91EA
+0x91EB
+0x91EC
+0x91ED
+0x91EE
+0x91F1
+0x91F3
+0x91F4
+0x91F5
+0x91F7
+0x91F8
+0x91F9
+0x91FD
+0x91FF
+0x9200
+0x9201
+0x9202
+0x9203
+0x9204
+0x9205
+0x9206
+0x9207
+0x9209
+0x920A
+0x920C
+0x920D
+0x920F
+0x9210
+0x9211
+0x9212
+0x9214
+0x9215
+0x9216
+0x9217
+0x9219
+0x921A
+0x921C
+0x921E
+0x9223
+0x9224
+0x9225
+0x9226
+0x9227
+0x922D
+0x922E
+0x9230
+0x9231
+0x9232
+0x9233
+0x9234
+0x9236
+0x9237
+0x9238
+0x9239
+0x923A
+0x923D
+0x923E
+0x923F
+0x9240
+0x9245
+0x9246
+0x9248
+0x9249
+0x924A
+0x924B
+0x924C
+0x924D
+0x924E
+0x924F
+0x9250
+0x9251
+0x9252
+0x9253
+0x9254
+0x9256
+0x9257
+0x925A
+0x925B
+0x925E
+0x9260
+0x9261
+0x9263
+0x9264
+0x9265
+0x9266
+0x9267
+0x926C
+0x926D
+0x926F
+0x9270
+0x9272
+0x9276
+0x9278
+0x9279
+0x927A
+0x927B
+0x927C
+0x927D
+0x927E
+0x927F
+0x9280
+0x9282
+0x9283
+0x9285
+0x9286
+0x9287
+0x9288
+0x928A
+0x928B
+0x928C
+0x928D
+0x928E
+0x9291
+0x9293
+0x9294
+0x9295
+0x9296
+0x9297
+0x9298
+0x9299
+0x929A
+0x929B
+0x929C
+0x929D
+0x92A0
+0x92A1
+0x92A2
+0x92A3
+0x92A4
+0x92A5
+0x92A6
+0x92A7
+0x92A8
+0x92A9
+0x92AA
+0x92AB
+0x92AC
+0x92B2
+0x92B3
+0x92B4
+0x92B5
+0x92B6
+0x92B7
+0x92BB
+0x92BC
+0x92C0
+0x92C1
+0x92C2
+0x92C3
+0x92C4
+0x92C5
+0x92C6
+0x92C7
+0x92C8
+0x92C9
+0x92CA
+0x92CB
+0x92CC
+0x92CD
+0x92CE
+0x92CF
+0x92D0
+0x92D1
+0x92D2
+0x92D3
+0x92D5
+0x92D7
+0x92D8
+0x92D9
+0x92DD
+0x92DE
+0x92DF
+0x92E0
+0x92E1
+0x92E4
+0x92E6
+0x92E7
+0x92E8
+0x92E9
+0x92EA
+0x92EE
+0x92EF
+0x92F0
+0x92F1
+0x92F7
+0x92F8
+0x92F9
+0x92FA
+0x92FB
+0x92FC
+0x92FE
+0x92FF
+0x9300
+0x9301
+0x9302
+0x9304
+0x9306
+0x9308
+0x9309
+0x930B
+0x930C
+0x930D
+0x930E
+0x930F
+0x9310
+0x9312
+0x9313
+0x9314
+0x9315
+0x9316
+0x9318
+0x9319
+0x931A
+0x931B
+0x931D
+0x931E
+0x931F
+0x9320
+0x9321
+0x9322
+0x9323
+0x9324
+0x9325
+0x9326
+0x9327
+0x9328
+0x9329
+0x932A
+0x932B
+0x932D
+0x932E
+0x932F
+0x9333
+0x9334
+0x9335
+0x9336
+0x9338
+0x9339
+0x933C
+0x9346
+0x9347
+0x9349
+0x934A
+0x934B
+0x934C
+0x934D
+0x934E
+0x934F
+0x9350
+0x9351
+0x9352
+0x9354
+0x9355
+0x9356
+0x9357
+0x9358
+0x9359
+0x935A
+0x935B
+0x935C
+0x935E
+0x9360
+0x9361
+0x9363
+0x9364
+0x9365
+0x9367
+0x936A
+0x936C
+0x936D
+0x9370
+0x9371
+0x9375
+0x9376
+0x9377
+0x9379
+0x937A
+0x937B
+0x937C
+0x937E
+0x9380
+0x9382
+0x9383
+0x9388
+0x9389
+0x938A
+0x938C
+0x938D
+0x938E
+0x938F
+0x9391
+0x9392
+0x9394
+0x9395
+0x9396
+0x9397
+0x9398
+0x9399
+0x939A
+0x939B
+0x939D
+0x939E
+0x939F
+0x93A1
+0x93A2
+0x93A3
+0x93A4
+0x93A5
+0x93A6
+0x93A7
+0x93A8
+0x93A9
+0x93AA
+0x93AC
+0x93AE
+0x93AF
+0x93B0
+0x93B1
+0x93B2
+0x93B3
+0x93B4
+0x93B5
+0x93B7
+0x93C0
+0x93C2
+0x93C3
+0x93C4
+0x93C7
+0x93C8
+0x93CA
+0x93CC
+0x93CD
+0x93CE
+0x93CF
+0x93D0
+0x93D1
+0x93D2
+0x93D4
+0x93D5
+0x93D6
+0x93D7
+0x93D8
+0x93D9
+0x93DA
+0x93DC
+0x93DD
+0x93DE
+0x93DF
+0x93E1
+0x93E2
+0x93E3
+0x93E4
+0x93E6
+0x93E7
+0x93E8
+0x93EC
+0x93EE
+0x93F5
+0x93F6
+0x93F7
+0x93F8
+0x93F9
+0x93FA
+0x93FB
+0x93FC
+0x93FD
+0x93FE
+0x93FF
+0x9400
+0x9403
+0x9406
+0x9407
+0x9409
+0x940A
+0x940B
+0x940C
+0x940D
+0x940E
+0x940F
+0x9410
+0x9411
+0x9412
+0x9413
+0x9414
+0x9415
+0x9416
+0x9418
+0x9419
+0x9420
+0x9428
+0x9429
+0x942A
+0x942B
+0x942C
+0x942E
+0x9430
+0x9431
+0x9432
+0x9433
+0x9435
+0x9436
+0x9437
+0x9438
+0x9439
+0x943A
+0x943B
+0x943C
+0x943D
+0x943F
+0x9440
+0x9444
+0x9445
+0x9446
+0x9447
+0x9448
+0x9449
+0x944A
+0x944B
+0x944C
+0x944F
+0x9450
+0x9451
+0x9452
+0x9455
+0x9457
+0x945D
+0x945E
+0x9460
+0x9462
+0x9463
+0x9464
+0x9468
+0x9469
+0x946A
+0x946B
+0x946D
+0x946E
+0x946F
+0x9470
+0x9471
+0x9472
+0x9473
+0x9474
+0x9475
+0x9476
+0x9477
+0x9478
+0x947C
+0x947D
+0x947E
+0x947F
+0x9480
+0x9481
+0x9482
+0x9483
+0x9577
+0x957A
+0x957B
+0x957C
+0x957D
+0x9580
+0x9582
+0x9583
+0x9586
+0x9588
+0x9589
+0x958B
+0x958C
+0x958D
+0x958E
+0x958F
+0x9590
+0x9591
+0x9592
+0x9593
+0x9594
+0x9598
+0x959B
+0x959C
+0x959E
+0x959F
+0x95A1
+0x95A3
+0x95A4
+0x95A5
+0x95A8
+0x95A9
+0x95AB
+0x95AC
+0x95AD
+0x95AE
+0x95B0
+0x95B1
+0x95B5
+0x95B6
+0x95B7
+0x95B9
+0x95BA
+0x95BB
+0x95BC
+0x95BD
+0x95BE
+0x95BF
+0x95C0
+0x95C3
+0x95C5
+0x95C6
+0x95C7
+0x95C8
+0x95C9
+0x95CA
+0x95CB
+0x95CC
+0x95CD
+0x95D0
+0x95D1
+0x95D2
+0x95D3
+0x95D4
+0x95D5
+0x95D6
+0x95DA
+0x95DB
+0x95DC
+0x95DE
+0x95DF
+0x95E0
+0x95E1
+0x95E2
+0x95E3
+0x95E4
+0x95E5
+0x961C
+0x961E
+0x9620
+0x9621
+0x9622
+0x9623
+0x9624
+0x9628
+0x962A
+0x962C
+0x962D
+0x962E
+0x962F
+0x9630
+0x9631
+0x9632
+0x9639
+0x963A
+0x963B
+0x963C
+0x963D
+0x963F
+0x9640
+0x9642
+0x9643
+0x9644
+0x964A
+0x964B
+0x964C
+0x964D
+0x964E
+0x964F
+0x9650
+0x9651
+0x9653
+0x9654
+0x9658
+0x965B
+0x965C
+0x965D
+0x965E
+0x965F
+0x9661
+0x9662
+0x9663
+0x9664
+0x966A
+0x966B
+0x966C
+0x966D
+0x966F
+0x9670
+0x9671
+0x9672
+0x9673
+0x9674
+0x9675
+0x9676
+0x9677
+0x9678
+0x967C
+0x967D
+0x967E
+0x9680
+0x9683
+0x9684
+0x9685
+0x9686
+0x9687
+0x9688
+0x9689
+0x968A
+0x968B
+0x968D
+0x968E
+0x9691
+0x9692
+0x9693
+0x9694
+0x9695
+0x9697
+0x9698
+0x9699
+0x969B
+0x969C
+0x969E
+0x96A1
+0x96A2
+0x96A4
+0x96A7
+0x96A8
+0x96A9
+0x96AA
+0x96AC
+0x96AE
+0x96B0
+0x96B1
+0x96B3
+0x96B4
+0x96B8
+0x96B9
+0x96BB
+0x96BC
+0x96BF
+0x96C0
+0x96C1
+0x96C2
+0x96C3
+0x96C4
+0x96C5
+0x96C6
+0x96C7
+0x96C8
+0x96C9
+0x96CA
+0x96CB
+0x96CC
+0x96CD
+0x96CE
+0x96D2
+0x96D3
+0x96D4
+0x96D5
+0x96D6
+0x96D7
+0x96D8
+0x96D9
+0x96DA
+0x96DB
+0x96DC
+0x96DD
+0x96DE
+0x96DF
+0x96E1
+0x96E2
+0x96E3
+0x96E5
+0x96E8
+0x96E9
+0x96EA
+0x96EF
+0x96F0
+0x96F1
+0x96F2
+0x96F5
+0x96F6
+0x96F7
+0x96F8
+0x96F9
+0x96FA
+0x96FB
+0x96FD
+0x96FF
+0x9700
+0x9702
+0x9704
+0x9705
+0x9706
+0x9707
+0x9708
+0x9709
+0x970B
+0x970D
+0x970E
+0x970F
+0x9710
+0x9711
+0x9712
+0x9713
+0x9716
+0x9718
+0x9719
+0x971C
+0x971D
+0x971E
+0x971F
+0x9720
+0x9722
+0x9723
+0x9724
+0x9725
+0x9726
+0x9727
+0x9728
+0x9729
+0x972A
+0x972B
+0x972C
+0x972E
+0x972F
+0x9730
+0x9732
+0x9735
+0x9738
+0x9739
+0x973A
+0x973D
+0x973E
+0x973F
+0x9742
+0x9743
+0x9744
+0x9746
+0x9747
+0x9748
+0x9749
+0x974B
+0x9752
+0x9756
+0x9758
+0x975A
+0x975B
+0x975C
+0x975E
+0x9760
+0x9761
+0x9762
+0x9766
+0x9768
+0x9769
+0x976A
+0x976C
+0x976E
+0x9770
+0x9772
+0x9773
+0x9774
+0x9776
+0x9777
+0x9778
+0x977A
+0x977B
+0x977C
+0x977D
+0x977E
+0x977F
+0x9780
+0x9781
+0x9782
+0x9783
+0x9784
+0x9785
+0x9788
+0x978A
+0x978B
+0x978D
+0x978E
+0x978F
+0x9794
+0x9797
+0x9798
+0x9799
+0x979A
+0x979C
+0x979D
+0x979E
+0x97A0
+0x97A1
+0x97A2
+0x97A3
+0x97A4
+0x97A5
+0x97A6
+0x97A8
+0x97AA
+0x97AB
+0x97AC
+0x97AD
+0x97AE
+0x97B3
+0x97B6
+0x97B7
+0x97B9
+0x97BB
+0x97BF
+0x97C1
+0x97C3
+0x97C4
+0x97C5
+0x97C6
+0x97C7
+0x97C9
+0x97CB
+0x97CC
+0x97CD
+0x97CE
+0x97CF
+0x97D0
+0x97D3
+0x97D4
+0x97D5
+0x97D6
+0x97D7
+0x97D8
+0x97D9
+0x97DC
+0x97DD
+0x97DE
+0x97DF
+0x97E1
+0x97E3
+0x97E5
+0x97ED
+0x97F0
+0x97F1
+0x97F3
+0x97F6
+0x97F8
+0x97F9
+0x97FA
+0x97FB
+0x97FD
+0x97FE
+0x97FF
+0x9800
+0x9801
+0x9802
+0x9803
+0x9804
+0x9805
+0x9806
+0x9807
+0x9808
+0x980A
+0x980C
+0x980D
+0x980E
+0x980F
+0x9810
+0x9811
+0x9812
+0x9813
+0x9816
+0x9817
+0x9818
+0x981B
+0x981C
+0x981D
+0x981E
+0x9820
+0x9821
+0x9824
+0x9826
+0x9827
+0x9828
+0x9829
+0x982B
+0x982D
+0x982F
+0x9830
+0x9832
+0x9835
+0x9837
+0x9838
+0x9839
+0x983B
+0x9841
+0x9843
+0x9844
+0x9845
+0x9846
+0x9848
+0x9849
+0x984A
+0x984C
+0x984D
+0x984E
+0x984F
+0x9850
+0x9851
+0x9852
+0x9853
+0x9857
+0x9858
+0x9859
+0x985B
+0x985C
+0x985D
+0x985E
+0x985F
+0x9860
+0x9862
+0x9863
+0x9864
+0x9865
+0x9867
+0x9869
+0x986A
+0x986B
+0x986F
+0x9870
+0x9871
+0x9872
+0x9873
+0x9874
+0x98A8
+0x98A9
+0x98AC
+0x98AD
+0x98AE
+0x98AF
+0x98B1
+0x98B2
+0x98B3
+0x98B6
+0x98B8
+0x98BA
+0x98BB
+0x98BC
+0x98BD
+0x98BE
+0x98BF
+0x98C0
+0x98C1
+0x98C2
+0x98C4
+0x98C6
+0x98C9
+0x98CB
+0x98CC
+0x98DB
+0x98DF
+0x98E2
+0x98E3
+0x98E5
+0x98E7
+0x98E9
+0x98EA
+0x98EB
+0x98ED
+0x98EF
+0x98F2
+0x98F4
+0x98F6
+0x98F9
+0x98FA
+0x98FC
+0x98FD
+0x98FE
+0x9900
+0x9902
+0x9903
+0x9905
+0x9907
+0x9908
+0x9909
+0x990A
+0x990C
+0x9910
+0x9911
+0x9912
+0x9913
+0x9914
+0x9915
+0x9916
+0x9917
+0x9918
+0x991A
+0x991B
+0x991E
+0x991F
+0x9921
+0x9924
+0x9925
+0x9927
+0x9928
+0x9929
+0x992A
+0x992B
+0x992C
+0x992D
+0x992E
+0x992F
+0x9930
+0x9931
+0x9932
+0x9933
+0x9935
+0x993A
+0x993C
+0x993D
+0x993E
+0x993F
+0x9941
+0x9943
+0x9945
+0x9947
+0x9948
+0x9949
+0x994B
+0x994C
+0x994E
+0x9950
+0x9951
+0x9952
+0x9953
+0x9954
+0x9955
+0x9956
+0x9957
+0x9958
+0x9959
+0x995B
+0x995C
+0x995E
+0x995F
+0x9961
+0x9996
+0x9997
+0x9998
+0x9999
+0x999C
+0x999D
+0x999E
+0x99A1
+0x99A3
+0x99A5
+0x99A6
+0x99A7
+0x99A8
+0x99AB
+0x99AC
+0x99AD
+0x99AE
+0x99AF
+0x99B0
+0x99B1
+0x99B2
+0x99B3
+0x99B4
+0x99B5
+0x99B9
+0x99BA
+0x99BB
+0x99BD
+0x99C1
+0x99C2
+0x99C3
+0x99C7
+0x99C9
+0x99CB
+0x99CC
+0x99CD
+0x99CE
+0x99CF
+0x99D0
+0x99D1
+0x99D2
+0x99D3
+0x99D4
+0x99D5
+0x99D6
+0x99D7
+0x99D8
+0x99D9
+0x99DB
+0x99DC
+0x99DD
+0x99DF
+0x99E2
+0x99E3
+0x99E4
+0x99E5
+0x99E7
+0x99E9
+0x99EA
+0x99EC
+0x99ED
+0x99EE
+0x99F0
+0x99F1
+0x99F4
+0x99F6
+0x99F7
+0x99F8
+0x99F9
+0x99FA
+0x99FB
+0x99FC
+0x99FD
+0x99FE
+0x99FF
+0x9A01
+0x9A02
+0x9A03
+0x9A04
+0x9A05
+0x9A06
+0x9A07
+0x9A09
+0x9A0A
+0x9A0B
+0x9A0D
+0x9A0E
+0x9A0F
+0x9A11
+0x9A14
+0x9A15
+0x9A16
+0x9A19
+0x9A1A
+0x9A1B
+0x9A1C
+0x9A1D
+0x9A1E
+0x9A20
+0x9A22
+0x9A23
+0x9A24
+0x9A25
+0x9A27
+0x9A29
+0x9A2A
+0x9A2B
+0x9A2C
+0x9A2D
+0x9A2E
+0x9A30
+0x9A31
+0x9A32
+0x9A34
+0x9A35
+0x9A36
+0x9A37
+0x9A38
+0x9A39
+0x9A3A
+0x9A3D
+0x9A3E
+0x9A3F
+0x9A40
+0x9A41
+0x9A42
+0x9A43
+0x9A44
+0x9A45
+0x9A46
+0x9A48
+0x9A49
+0x9A4A
+0x9A4C
+0x9A4D
+0x9A4E
+0x9A4F
+0x9A50
+0x9A52
+0x9A53
+0x9A54
+0x9A55
+0x9A56
+0x9A57
+0x9A59
+0x9A5A
+0x9A5B
+0x9A5E
+0x9A5F
+0x9A60
+0x9A62
+0x9A64
+0x9A65
+0x9A66
+0x9A67
+0x9A68
+0x9A69
+0x9A6A
+0x9A6B
+0x9AA8
+0x9AAB
+0x9AAD
+0x9AAF
+0x9AB0
+0x9AB1
+0x9AB3
+0x9AB4
+0x9AB7
+0x9AB8
+0x9AB9
+0x9ABB
+0x9ABC
+0x9ABE
+0x9ABF
+0x9AC0
+0x9AC1
+0x9AC2
+0x9AC6
+0x9AC7
+0x9ACA
+0x9ACD
+0x9ACF
+0x9AD0
+0x9AD1
+0x9AD2
+0x9AD3
+0x9AD4
+0x9AD5
+0x9AD6
+0x9AD8
+0x9ADC
+0x9ADF
+0x9AE1
+0x9AE3
+0x9AE6
+0x9AE7
+0x9AEB
+0x9AEC
+0x9AED
+0x9AEE
+0x9AEF
+0x9AF1
+0x9AF2
+0x9AF3
+0x9AF6
+0x9AF7
+0x9AF9
+0x9AFA
+0x9AFB
+0x9AFC
+0x9AFD
+0x9AFE
+0x9B01
+0x9B03
+0x9B04
+0x9B05
+0x9B06
+0x9B08
+0x9B0A
+0x9B0B
+0x9B0C
+0x9B0D
+0x9B0E
+0x9B10
+0x9B11
+0x9B12
+0x9B15
+0x9B16
+0x9B17
+0x9B18
+0x9B19
+0x9B1A
+0x9B1E
+0x9B1F
+0x9B20
+0x9B22
+0x9B23
+0x9B24
+0x9B25
+0x9B27
+0x9B28
+0x9B29
+0x9B2B
+0x9B2E
+0x9B2F
+0x9B31
+0x9B32
+0x9B33
+0x9B35
+0x9B37
+0x9B3A
+0x9B3B
+0x9B3C
+0x9B3E
+0x9B3F
+0x9B41
+0x9B42
+0x9B43
+0x9B44
+0x9B45
+0x9B46
+0x9B48
+0x9B4A
+0x9B4B
+0x9B4C
+0x9B4D
+0x9B4E
+0x9B4F
+0x9B51
+0x9B52
+0x9B54
+0x9B55
+0x9B56
+0x9B58
+0x9B59
+0x9B5A
+0x9B5B
+0x9B5F
+0x9B60
+0x9B61
+0x9B64
+0x9B66
+0x9B67
+0x9B68
+0x9B6C
+0x9B6F
+0x9B70
+0x9B71
+0x9B74
+0x9B75
+0x9B76
+0x9B77
+0x9B7A
+0x9B7B
+0x9B7C
+0x9B7D
+0x9B7E
+0x9B80
+0x9B82
+0x9B85
+0x9B86
+0x9B87
+0x9B88
+0x9B90
+0x9B91
+0x9B92
+0x9B93
+0x9B95
+0x9B9A
+0x9B9B
+0x9B9E
+0x9BA0
+0x9BA1
+0x9BA2
+0x9BA4
+0x9BA5
+0x9BA6
+0x9BA8
+0x9BAA
+0x9BAB
+0x9BAD
+0x9BAE
+0x9BAF
+0x9BB5
+0x9BB6
+0x9BB8
+0x9BB9
+0x9BBD
+0x9BBF
+0x9BC0
+0x9BC1
+0x9BC3
+0x9BC4
+0x9BC6
+0x9BC7
+0x9BC8
+0x9BC9
+0x9BCA
+0x9BD3
+0x9BD4
+0x9BD5
+0x9BD6
+0x9BD7
+0x9BD9
+0x9BDA
+0x9BDB
+0x9BDC
+0x9BDE
+0x9BE0
+0x9BE1
+0x9BE2
+0x9BE4
+0x9BE5
+0x9BE6
+0x9BE7
+0x9BE8
+0x9BEA
+0x9BEB
+0x9BEC
+0x9BF0
+0x9BF7
+0x9BF8
+0x9BFD
+0x9C05
+0x9C06
+0x9C07
+0x9C08
+0x9C09
+0x9C0B
+0x9C0D
+0x9C0E
+0x9C12
+0x9C13
+0x9C14
+0x9C17
+0x9C1C
+0x9C1D
+0x9C21
+0x9C23
+0x9C24
+0x9C25
+0x9C28
+0x9C29
+0x9C2B
+0x9C2C
+0x9C2D
+0x9C31
+0x9C32
+0x9C33
+0x9C34
+0x9C36
+0x9C37
+0x9C39
+0x9C3B
+0x9C3C
+0x9C3D
+0x9C3E
+0x9C3F
+0x9C40
+0x9C41
+0x9C44
+0x9C46
+0x9C48
+0x9C49
+0x9C4A
+0x9C4B
+0x9C4C
+0x9C4D
+0x9C4E
+0x9C50
+0x9C52
+0x9C54
+0x9C55
+0x9C56
+0x9C57
+0x9C58
+0x9C59
+0x9C5E
+0x9C5F
+0x9C60
+0x9C62
+0x9C63
+0x9C66
+0x9C67
+0x9C68
+0x9C6D
+0x9C6E
+0x9C71
+0x9C73
+0x9C74
+0x9C75
+0x9C77
+0x9C78
+0x9C79
+0x9C7A
+0x9CE5
+0x9CE6
+0x9CE7
+0x9CE9
+0x9CEA
+0x9CED
+0x9CF1
+0x9CF2
+0x9CF3
+0x9CF4
+0x9CF5
+0x9CF6
+0x9CF7
+0x9CF9
+0x9CFA
+0x9CFB
+0x9CFC
+0x9CFD
+0x9CFF
+0x9D00
+0x9D03
+0x9D04
+0x9D05
+0x9D06
+0x9D07
+0x9D08
+0x9D09
+0x9D10
+0x9D12
+0x9D14
+0x9D15
+0x9D17
+0x9D18
+0x9D19
+0x9D1B
+0x9D1D
+0x9D1E
+0x9D1F
+0x9D20
+0x9D22
+0x9D23
+0x9D25
+0x9D26
+0x9D28
+0x9D29
+0x9D2D
+0x9D2E
+0x9D2F
+0x9D30
+0x9D31
+0x9D33
+0x9D36
+0x9D37
+0x9D38
+0x9D3B
+0x9D3D
+0x9D3E
+0x9D3F
+0x9D40
+0x9D41
+0x9D42
+0x9D43
+0x9D45
+0x9D4A
+0x9D4B
+0x9D4C
+0x9D4F
+0x9D51
+0x9D52
+0x9D53
+0x9D54
+0x9D56
+0x9D57
+0x9D58
+0x9D59
+0x9D5A
+0x9D5B
+0x9D5C
+0x9D5D
+0x9D5F
+0x9D60
+0x9D61
+0x9D67
+0x9D68
+0x9D69
+0x9D6A
+0x9D6B
+0x9D6C
+0x9D6F
+0x9D70
+0x9D71
+0x9D72
+0x9D73
+0x9D74
+0x9D75
+0x9D77
+0x9D78
+0x9D79
+0x9D7B
+0x9D7D
+0x9D7F
+0x9D80
+0x9D81
+0x9D82
+0x9D84
+0x9D85
+0x9D86
+0x9D87
+0x9D88
+0x9D89
+0x9D8A
+0x9D8B
+0x9D8C
+0x9D90
+0x9D92
+0x9D94
+0x9D96
+0x9D97
+0x9D98
+0x9D99
+0x9D9A
+0x9D9B
+0x9D9C
+0x9D9D
+0x9D9E
+0x9D9F
+0x9DA0
+0x9DA1
+0x9DA2
+0x9DA3
+0x9DA4
+0x9DA6
+0x9DA7
+0x9DA8
+0x9DA9
+0x9DAA
+0x9DAC
+0x9DAD
+0x9DAF
+0x9DB1
+0x9DB2
+0x9DB3
+0x9DB4
+0x9DB5
+0x9DB6
+0x9DB7
+0x9DB8
+0x9DB9
+0x9DBA
+0x9DBB
+0x9DBC
+0x9DBE
+0x9DBF
+0x9DC1
+0x9DC2
+0x9DC3
+0x9DC5
+0x9DC7
+0x9DC8
+0x9DCA
+0x9DCB
+0x9DCC
+0x9DCD
+0x9DCE
+0x9DCF
+0x9DD0
+0x9DD1
+0x9DD2
+0x9DD3
+0x9DD5
+0x9DD6
+0x9DD7
+0x9DD8
+0x9DD9
+0x9DDA
+0x9DDB
+0x9DDC
+0x9DDD
+0x9DDE
+0x9DDF
+0x9DE1
+0x9DE2
+0x9DE3
+0x9DE4
+0x9DE5
+0x9DE6
+0x9DE8
+0x9DE9
+0x9DEB
+0x9DEC
+0x9DED
+0x9DEE
+0x9DEF
+0x9DF0
+0x9DF2
+0x9DF3
+0x9DF4
+0x9DF5
+0x9DF6
+0x9DF7
+0x9DF8
+0x9DF9
+0x9DFA
+0x9DFB
+0x9DFD
+0x9DFE
+0x9DFF
+0x9E00
+0x9E01
+0x9E02
+0x9E03
+0x9E04
+0x9E05
+0x9E06
+0x9E07
+0x9E09
+0x9E0B
+0x9E0D
+0x9E0F
+0x9E10
+0x9E11
+0x9E12
+0x9E13
+0x9E14
+0x9E15
+0x9E17
+0x9E19
+0x9E1A
+0x9E1B
+0x9E1D
+0x9E1E
+0x9E75
+0x9E79
+0x9E7A
+0x9E7C
+0x9E7D
+0x9E7F
+0x9E80
+0x9E82
+0x9E83
+0x9E86
+0x9E87
+0x9E88
+0x9E89
+0x9E8A
+0x9E8B
+0x9E8C
+0x9E8D
+0x9E8E
+0x9E91
+0x9E92
+0x9E93
+0x9E94
+0x9E97
+0x9E99
+0x9E9A
+0x9E9B
+0x9E9C
+0x9E9D
+0x9E9F
+0x9EA0
+0x9EA1
+0x9EA4
+0x9EA5
+0x9EA7
+0x9EA9
+0x9EAD
+0x9EAE
+0x9EB0
+0x9EB4
+0x9EB5
+0x9EB6
+0x9EB7
+0x9EBB
+0x9EBC
+0x9EBE
+0x9EC0
+0x9EC2
+0x9EC3
+0x9EC8
+0x9ECC
+0x9ECD
+0x9ECE
+0x9ECF
+0x9ED0
+0x9ED1
+0x9ED3
+0x9ED4
+0x9ED5
+0x9ED6
+0x9ED8
+0x9EDA
+0x9EDB
+0x9EDC
+0x9EDD
+0x9EDE
+0x9EDF
+0x9EE0
+0x9EE4
+0x9EE5
+0x9EE6
+0x9EE7
+0x9EE8
+0x9EEB
+0x9EED
+0x9EEE
+0x9EEF
+0x9EF0
+0x9EF2
+0x9EF3
+0x9EF4
+0x9EF5
+0x9EF6
+0x9EF7
+0x9EF9
+0x9EFA
+0x9EFB
+0x9EFC
+0x9EFD
+0x9EFF
+0x9F00
+0x9F01
+0x9F06
+0x9F07
+0x9F09
+0x9F0A
+0x9F0E
+0x9F0F
+0x9F10
+0x9F12
+0x9F13
+0x9F15
+0x9F16
+0x9F18
+0x9F19
+0x9F1A
+0x9F1B
+0x9F1C
+0x9F1E
+0x9F20
+0x9F22
+0x9F23
+0x9F24
+0x9F25
+0x9F28
+0x9F29
+0x9F2A
+0x9F2B
+0x9F2C
+0x9F2D
+0x9F2E
+0x9F2F
+0x9F30
+0x9F31
+0x9F32
+0x9F33
+0x9F34
+0x9F35
+0x9F36
+0x9F37
+0x9F38
+0x9F3B
+0x9F3D
+0x9F3E
+0x9F40
+0x9F41
+0x9F42
+0x9F43
+0x9F46
+0x9F47
+0x9F48
+0x9F49
+0x9F4A
+0x9F4B
+0x9F4C
+0x9F4D
+0x9F4E
+0x9F4F
+0x9F52
+0x9F54
+0x9F55
+0x9F56
+0x9F57
+0x9F58
+0x9F59
+0x9F5B
+0x9F5C
+0x9F5D
+0x9F5E
+0x9F5F
+0x9F60
+0x9F61
+0x9F63
+0x9F64
+0x9F65
+0x9F66
+0x9F67
+0x9F6A
+0x9F6B
+0x9F6C
+0x9F6E
+0x9F6F
+0x9F70
+0x9F71
+0x9F72
+0x9F74
+0x9F75
+0x9F76
+0x9F77
+0x9F78
+0x9F79
+0x9F7A
+0x9F7B
+0x9F7E
+0x9F8D
+0x9F90
+0x9F91
+0x9F92
+0x9F94
+0x9F95
+0x9F98
+0x9F9C
+0x9FA0
+0x9FA2
+0x9FA4
+0xFA0C
+0xFA0D
diff --git a/fontconfig/fc-lang/zu.orth b/fontconfig/fc-lang/zu.orth
index dc236c820..8be8ea482 100644
--- a/fontconfig/fc-lang/zu.orth
+++ b/fontconfig/fc-lang/zu.orth
@@ -1,29 +1,29 @@
-#
-# fontconfig/fc-lang/zu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Zulu (zu)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
+#
+# fontconfig/fc-lang/zu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Zulu (zu)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
diff --git a/fontconfig/fc-list/Makefile.am b/fontconfig/fc-list/Makefile.am
index b364271bd..9edb35e3a 100644
--- a/fontconfig/fc-list/Makefile.am
+++ b/fontconfig/fc-list/Makefile.am
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-list/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_LIST_SRC=${top_srcdir}/fc-list
-
-SGML = ${FC_LIST_SRC}/fc-list.sgml
-
-bin_PROGRAMS=fc-list
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-BUILT_MANS=fc-list.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-list.sgml $(BUILT_MANS)
-
-fc_list_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-list/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DOC2MAN = docbook2man
+
+FC_LIST_SRC=${top_srcdir}/fc-list
+
+SGML = ${FC_LIST_SRC}/fc-list.sgml
+
+bin_PROGRAMS=fc-list
+
+INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
+
+BUILT_MANS=fc-list.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-list.sgml $(BUILT_MANS)
+
+fc_list_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-list/fc-list.c b/fontconfig/fc-list/fc-list.c
index e7813a6b4..9f16224e0 100644
--- a/fontconfig/fc-list/fc-list.c
+++ b/fontconfig/fc-list/fc-list.c
@@ -1,209 +1,209 @@
-/*
- * fontconfig/fc-list/fc-list.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"verbose", 0, 0, 'v'},
- {"format", 1, 0, 'f'},
- {"quiet", 0, 0, 'q'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n",
- program);
-#else
- fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n",
- program);
-#endif
- fprintf (file, "List fonts matching [pattern]\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int verbose = 0;
- int quiet = 0;
- FcChar8 *format = NULL;
- int nfont = 0;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "vf:qVh")) != -1)
-#endif
- {
- switch (c) {
- case 'v':
- verbose = 1;
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'q':
- quiet = 1;
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
- if (argv[i])
- {
- pat = FcNameParse ((FcChar8 *) argv[i]);
- while (argv[++i])
- {
- if (!os)
- os = FcObjectSetCreate ();
- FcObjectSetAdd (os, argv[i]);
- }
- }
- else
- pat = FcPatternCreate ();
- if (quiet && !os)
- os = FcObjectSetCreate ();
- if (!verbose && !format && !os)
- os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, (char *) 0);
- fs = FcFontList (0, pat, os);
- if (os)
- FcObjectSetDestroy (os);
- if (pat)
- FcPatternDestroy (pat);
-
- if (!quiet && fs)
- {
- int j;
-
- for (j = 0; j < fs->nfont; j++)
- {
- if (verbose)
- {
- FcPatternPrint (fs->fonts[j]);
- }
- else if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (fs->fonts[j], format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else
- {
- FcChar8 *str;
- FcChar8 *file;
-
- str = FcNameUnparse (fs->fonts[j]);
- if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch)
- printf ("%s: ", file);
- printf ("%s\n", str);
- free (str);
- }
- }
- }
-
- if (fs) {
- nfont = fs->nfont;
- FcFontSetDestroy (fs);
- }
-
- FcFini ();
-
- return quiet ? (nfont == 0 ? 1 : 0) : 0;
-}
+/*
+ * fontconfig/fc-list/fc-list.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+const struct option longopts[] = {
+ {"verbose", 0, 0, 'v'},
+ {"format", 1, 0, 'f'},
+ {"quiet", 0, 0, 'q'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n",
+ program);
+#else
+ fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n",
+ program);
+#endif
+ fprintf (file, "List fonts matching [pattern]\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ int verbose = 0;
+ int quiet = 0;
+ FcChar8 *format = NULL;
+ int nfont = 0;
+ int i;
+ FcObjectSet *os = 0;
+ FcFontSet *fs;
+ FcPattern *pat;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "vf:qVh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'v':
+ verbose = 1;
+ break;
+ case 'f':
+ format = (FcChar8 *) strdup (optarg);
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (!FcInit ())
+ {
+ fprintf (stderr, "Can't init font config library\n");
+ return 1;
+ }
+ if (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ while (argv[++i])
+ {
+ if (!os)
+ os = FcObjectSetCreate ();
+ FcObjectSetAdd (os, argv[i]);
+ }
+ }
+ else
+ pat = FcPatternCreate ();
+ if (quiet && !os)
+ os = FcObjectSetCreate ();
+ if (!verbose && !format && !os)
+ os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, (char *) 0);
+ fs = FcFontList (0, pat, os);
+ if (os)
+ FcObjectSetDestroy (os);
+ if (pat)
+ FcPatternDestroy (pat);
+
+ if (!quiet && fs)
+ {
+ int j;
+
+ for (j = 0; j < fs->nfont; j++)
+ {
+ if (verbose)
+ {
+ FcPatternPrint (fs->fonts[j]);
+ }
+ else if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (fs->fonts[j], format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else
+ {
+ FcChar8 *str;
+ FcChar8 *file;
+
+ str = FcNameUnparse (fs->fonts[j]);
+ if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch)
+ printf ("%s: ", file);
+ printf ("%s\n", str);
+ free (str);
+ }
+ }
+ }
+
+ if (fs) {
+ nfont = fs->nfont;
+ FcFontSetDestroy (fs);
+ }
+
+ FcFini ();
+
+ return quiet ? (nfont == 0 ? 1 : 0) : 0;
+}
diff --git a/fontconfig/fc-list/fc-list.sgml b/fontconfig/fc-list/fc-list.sgml
index ffa089144..7f0c23023 100644
--- a/fontconfig/fc-list/fc-list.sgml
+++ b/fontconfig/fc-list/fc-list.sgml
@@ -1,214 +1,215 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
- <!ENTITY dhsurname "<surname>Mouette</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>joss@debian.org</email>">
- <!ENTITY dhusername "Josselin Mouette">
- <!ENTITY dhucpackage "<refentrytitle>fc-list</refentrytitle>">
- <!ENTITY dhpackage "fc-list">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>list available fonts</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-vVh</option></arg>
- <arg><option>--verbose</option></arg>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> lists fonts and styles
- available on the system for applications using fontconfig.
- If any elements are specified, only those are printed.
- Otherwise family and style are printed, unless verbose
- output is requested.</para>
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Print verbose output of the whole font pattern for each match,
- or <replaceable>element</replaceable>s if any is
- provided.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>pattern</replaceable></option>
- </term>
- <listitem>
- <para>If this argument is set, only fonts matching
- <replaceable>pattern</replaceable> are displayed.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>element</replaceable></option>
- </term>
- <listitem>
- <para>If set, the <replaceable>element</replaceable> property
- is displayed for matching fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>EXAMPLES</title>
-
- <variablelist>
- <varlistentry>
- <term>fc-list</term>
- <listitem><para>Lists all font faces.</para></listitem>
- </varlistentry>
- <varlistentry>
- <term>fc-list :lang=hi</term>
- <listitem><para>Lists font faces that cover Hindi.</para></listitem>
- </varlistentry>
- <varlistentry>
- <term>fc-list : family style file spacing </term>
- <listitem><para>Lists the filename and spacing value for each font
- face. <quote>:</quote> is an empty pattern that matches all
- fonts.</para></listitem>
- </varlistentry>
- </variablelist>
-
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-match</command>(1)
- <function>FcFontList</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by Keith Packard
- <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
+ <!ENTITY dhsurname "<surname>Mouette</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>joss@debian.org</email>">
+ <!ENTITY dhusername "Josselin Mouette">
+ <!ENTITY dhucpackage "<refentrytitle>fc-list</refentrytitle>">
+ <!ENTITY dhpackage "fc-list">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>list available fonts</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-vVh</option></arg>
+ <arg><option>--verbose</option></arg>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> lists fonts and styles
+ available on the system for applications using fontconfig.
+ If any elements are specified, only those are printed.
+ Otherwise family and style are printed, unless verbose
+ output is requested.</para>
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Print verbose output of the whole font pattern for each match,
+ or <replaceable>element</replaceable>s if any is
+ provided.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>pattern</replaceable></option>
+ </term>
+ <listitem>
+ <para>If this argument is set, only fonts matching
+ <replaceable>pattern</replaceable> are displayed.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>element</replaceable></option>
+ </term>
+ <listitem>
+ <para>If set, the <replaceable>element</replaceable> property
+ is displayed for matching fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>EXAMPLES</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>fc-list</term>
+ <listitem><para>Lists all font faces.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>fc-list :lang=hi</term>
+ <listitem><para>Lists font faces that cover Hindi.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>fc-list : family style file spacing </term>
+ <listitem><para>Lists the filename and spacing value for each font
+ face. <quote>:</quote> is an empty pattern that matches all
+ fonts.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-match</command>(1)
+ <function>FcFontList</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was written by Keith Packard
+ <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-match/Makefile.am b/fontconfig/fc-match/Makefile.am
index 9d725a582..f4244b6a5 100644
--- a/fontconfig/fc-match/Makefile.am
+++ b/fontconfig/fc-match/Makefile.am
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-match/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-match
-
-DOC2MAN = docbook2man
-
-FC_MATCH_SRC=${top_srcdir}/fc-match
-
-SGML = ${FC_MATCH_SRC}/fc-match.sgml
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-BUILT_MANS=fc-match.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-match.sgml $(BUILT_MANS)
-
-fc_match_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-match/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+bin_PROGRAMS=fc-match
+
+DOC2MAN = docbook2man
+
+FC_MATCH_SRC=${top_srcdir}/fc-match
+
+SGML = ${FC_MATCH_SRC}/fc-match.sgml
+
+INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
+
+BUILT_MANS=fc-match.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-match.sgml $(BUILT_MANS)
+
+fc_match_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-match/fc-match.c b/fontconfig/fc-match/fc-match.c
index 8963e7af3..14f38ff30 100644
--- a/fontconfig/fc-match/fc-match.c
+++ b/fontconfig/fc-match/fc-match.c
@@ -1,263 +1,263 @@
-/*
- * fontconfig/fc-match/fc-match.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"sort", 0, 0, 's'},
- {"all", 0, 0, 'a'},
- {"verbose", 0, 0, 'v'},
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n",
- program);
-#else
- fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n",
- program);
-#endif
- fprintf (file, "List best font matching [pattern]\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -s, --sort display sorted list of matches\n");
- fprintf (file, " -a, --all display unpruned sorted list of matches\n");
- fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -s, (sort) display sorted list of matches\n");
- fprintf (file, " -a (all) display unpruned sorted list of matches\n");
- fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int verbose = 0;
- int sort = 0, all = 0;
- FcChar8 *format = NULL;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
- FcResult result;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "asvf:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'a':
- all = 1;
- break;
- case 's':
- sort = 1;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
- if (argv[i])
- {
- pat = FcNameParse ((FcChar8 *) argv[i]);
- while (argv[++i])
- {
- if (!os)
- os = FcObjectSetCreate ();
- FcObjectSetAdd (os, argv[i]);
- }
- }
- else
- pat = FcPatternCreate ();
-
- if (!pat)
- return 1;
-
- FcConfigSubstitute (0, pat, FcMatchPattern);
- FcDefaultSubstitute (pat);
-
- fs = FcFontSetCreate ();
-
- if (sort || all)
- {
- FcFontSet *font_patterns;
- int j;
- font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result);
-
- for (j = 0; j < font_patterns->nfont; j++)
- {
- FcPattern *font_pattern;
-
- font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]);
- if (font_pattern)
- FcFontSetAdd (fs, font_pattern);
- }
-
- FcFontSetSortDestroy (font_patterns);
- }
- else
- {
- FcPattern *match;
- match = FcFontMatch (0, pat, &result);
- if (match)
- FcFontSetAdd (fs, match);
- }
- FcPatternDestroy (pat);
-
- if (fs)
- {
- int j;
-
- for (j = 0; j < fs->nfont; j++)
- {
- FcPattern *font;
-
- font = FcPatternFilter (fs->fonts[j], os);
-
- if (verbose)
- {
- FcPatternPrint (font);
- }
- else if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (font, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else if (os)
- {
- FcChar8 *str;
- str = FcNameUnparse (font);
- printf ("%s\n", str);
- free (str);
- }
- else
- {
- FcChar8 *family;
- FcChar8 *style;
- FcChar8 *file;
-
- if (FcPatternGetString (font, FC_FILE, 0, &file) != FcResultMatch)
- file = (FcChar8 *) "<unknown filename>";
- else
- {
- FcChar8 *slash = (FcChar8 *) strrchr ((char *) file, '/');
- if (slash)
- file = slash+1;
- }
- if (FcPatternGetString (font, FC_FAMILY, 0, &family) != FcResultMatch)
- family = (FcChar8 *) "<unknown family>";
- if (FcPatternGetString (font, FC_STYLE, 0, &style) != FcResultMatch)
- style = (FcChar8 *) "<unknown style>";
-
- printf ("%s: \"%s\" \"%s\"\n", file, family, style);
- }
-
- FcPatternDestroy (font);
- }
- FcFontSetDestroy (fs);
- }
-
- if (os)
- FcObjectSetDestroy (os);
-
- FcFini ();
-
- return 0;
-}
+/*
+ * fontconfig/fc-match/fc-match.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+static const struct option longopts[] = {
+ {"sort", 0, 0, 's'},
+ {"all", 0, 0, 'a'},
+ {"verbose", 0, 0, 'v'},
+ {"format", 1, 0, 'f'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n",
+ program);
+#endif
+ fprintf (file, "List best font matching [pattern]\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -s, --sort display sorted list of matches\n");
+ fprintf (file, " -a, --all display unpruned sorted list of matches\n");
+ fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -s, (sort) display sorted list of matches\n");
+ fprintf (file, " -a (all) display unpruned sorted list of matches\n");
+ fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ int verbose = 0;
+ int sort = 0, all = 0;
+ FcChar8 *format = NULL;
+ int i;
+ FcObjectSet *os = 0;
+ FcFontSet *fs;
+ FcPattern *pat;
+ FcResult result;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "asvf:Vh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'a':
+ all = 1;
+ break;
+ case 's':
+ sort = 1;
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case 'f':
+ format = (FcChar8 *) strdup (optarg);
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (!FcInit ())
+ {
+ fprintf (stderr, "Can't init font config library\n");
+ return 1;
+ }
+ if (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ while (argv[++i])
+ {
+ if (!os)
+ os = FcObjectSetCreate ();
+ FcObjectSetAdd (os, argv[i]);
+ }
+ }
+ else
+ pat = FcPatternCreate ();
+
+ if (!pat)
+ return 1;
+
+ FcConfigSubstitute (0, pat, FcMatchPattern);
+ FcDefaultSubstitute (pat);
+
+ fs = FcFontSetCreate ();
+
+ if (sort || all)
+ {
+ FcFontSet *font_patterns;
+ int j;
+ font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result);
+
+ for (j = 0; j < font_patterns->nfont; j++)
+ {
+ FcPattern *font_pattern;
+
+ font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]);
+ if (font_pattern)
+ FcFontSetAdd (fs, font_pattern);
+ }
+
+ FcFontSetSortDestroy (font_patterns);
+ }
+ else
+ {
+ FcPattern *match;
+ match = FcFontMatch (0, pat, &result);
+ if (match)
+ FcFontSetAdd (fs, match);
+ }
+ FcPatternDestroy (pat);
+
+ if (fs)
+ {
+ int j;
+
+ for (j = 0; j < fs->nfont; j++)
+ {
+ FcPattern *font;
+
+ font = FcPatternFilter (fs->fonts[j], os);
+
+ if (verbose)
+ {
+ FcPatternPrint (font);
+ }
+ else if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (font, format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else if (os)
+ {
+ FcChar8 *str;
+ str = FcNameUnparse (font);
+ printf ("%s\n", str);
+ free (str);
+ }
+ else
+ {
+ FcChar8 *family;
+ FcChar8 *style;
+ FcChar8 *file;
+
+ if (FcPatternGetString (font, FC_FILE, 0, &file) != FcResultMatch)
+ file = (FcChar8 *) "<unknown filename>";
+ else
+ {
+ FcChar8 *slash = (FcChar8 *) strrchr ((char *) file, '/');
+ if (slash)
+ file = slash+1;
+ }
+ if (FcPatternGetString (font, FC_FAMILY, 0, &family) != FcResultMatch)
+ family = (FcChar8 *) "<unknown family>";
+ if (FcPatternGetString (font, FC_STYLE, 0, &style) != FcResultMatch)
+ style = (FcChar8 *) "<unknown style>";
+
+ printf ("%s: \"%s\" \"%s\"\n", file, family, style);
+ }
+
+ FcPatternDestroy (font);
+ }
+ FcFontSetDestroy (fs);
+ }
+
+ if (os)
+ FcObjectSetDestroy (os);
+
+ FcFini ();
+
+ return 0;
+}
diff --git a/fontconfig/fc-match/fc-match.sgml b/fontconfig/fc-match/fc-match.sgml
index 390b733c3..5cc879037 100644
--- a/fontconfig/fc-match/fc-match.sgml
+++ b/fontconfig/fc-match/fc-match.sgml
@@ -1,216 +1,217 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
- <!ENTITY dhsurname "<surname>Lam</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>plam@csail.mit.edu</email>">
- <!ENTITY dhusername "Patrick Lam">
- <!ENTITY dhucpackage "<refentrytitle>fc-match</refentrytitle>">
- <!ENTITY dhpackage "fc-match">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>match available fonts</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-asvVh</option></arg>
- <arg><option>--all</option></arg>
- <arg><option>--sort</option></arg>
- <arg><option>--verbose</option></arg>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> matches
- <replaceable>pattern</replaceable> (empty
-pattern by default) using the normal fontconfig matching rules to find
-the best font available. If <option>--sort</option> is given, the sorted list of best
-matching fonts is displayed.
-The <option>--all</option> option works like
-<option>--sort</option> except that no pruning is done on the list of fonts.</para>
-<para>If any elements are specified, only those are printed.
-Otherwise short file name, family, and style are printed, unless verbose
-output is requested.</para>
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-a</option>
- <option>--all</option>
- </term>
- <listitem>
- <para>Displays sorted list of best matching fonts, but do not do any
- pruning on the list.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-s</option>
- <option>--sort</option>
- </term>
- <listitem>
- <para>Displays sorted list of best matching fonts.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Print verbose output of the whole font pattern for each match,
- or <replaceable>element</replaceable>s if any is
- provided.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>pattern</replaceable></option>
- </term>
- <listitem>
- <para>Displays fonts matching
- <replaceable>pattern</replaceable> (uses empty pattern by default).</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>element</replaceable></option>
- </term>
- <listitem>
- <para>If set, the <replaceable>element</replaceable> property
- is displayed for matching fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-list</command>(1)
- <function>FcFontMatch</function>(3)
- <function>FcFontSort</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scal</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
+ <!ENTITY dhsurname "<surname>Lam</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>plam@csail.mit.edu</email>">
+ <!ENTITY dhusername "Patrick Lam">
+ <!ENTITY dhucpackage "<refentrytitle>fc-match</refentrytitle>">
+ <!ENTITY dhpackage "fc-match">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>match available fonts</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-asvVh</option></arg>
+ <arg><option>--all</option></arg>
+ <arg><option>--sort</option></arg>
+ <arg><option>--verbose</option></arg>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> matches
+ <replaceable>pattern</replaceable> (empty
+pattern by default) using the normal fontconfig matching rules to find
+the best font available. If <option>--sort</option> is given, the sorted list of best
+matching fonts is displayed.
+The <option>--all</option> option works like
+<option>--sort</option> except that no pruning is done on the list of fonts.</para>
+<para>If any elements are specified, only those are printed.
+Otherwise short file name, family, and style are printed, unless verbose
+output is requested.</para>
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-a</option>
+ <option>--all</option>
+ </term>
+ <listitem>
+ <para>Displays sorted list of best matching fonts, but do not do any
+ pruning on the list.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>
+ <option>--sort</option>
+ </term>
+ <listitem>
+ <para>Displays sorted list of best matching fonts.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Print verbose output of the whole font pattern for each match,
+ or <replaceable>element</replaceable>s if any is
+ provided.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>pattern</replaceable></option>
+ </term>
+ <listitem>
+ <para>Displays fonts matching
+ <replaceable>pattern</replaceable> (uses empty pattern by default).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>element</replaceable></option>
+ </term>
+ <listitem>
+ <para>If set, the <replaceable>element</replaceable> property
+ is displayed for matching fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-list</command>(1)
+ <function>FcFontMatch</function>(3)
+ <function>FcFontSort</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-pattern/Makefile.am b/fontconfig/fc-pattern/Makefile.am
new file mode 100644
index 000000000..a7db2105e
--- /dev/null
+++ b/fontconfig/fc-pattern/Makefile.am
@@ -0,0 +1,59 @@
+#
+# fontconfig/fc-pattern/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+bin_PROGRAMS=fc-pattern
+
+DOC2MAN = docbook2man
+
+FC_PATTERN_SRC=${top_srcdir}/fc-pattern
+
+SGML = ${FC_PATTERN_SRC}/fc-pattern.sgml
+
+INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
+
+BUILT_MANS=fc-pattern.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-pattern.sgml $(BUILT_MANS)
+
+fc_pattern_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-pattern/fc-pattern.c b/fontconfig/fc-pattern/fc-pattern.c
new file mode 100644
index 000000000..aa51e5f39
--- /dev/null
+++ b/fontconfig/fc-pattern/fc-pattern.c
@@ -0,0 +1,195 @@
+/*
+ * fontconfig/fc-pattern/fc-pattern.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+static const struct option longopts[] = {
+ {"config", 0, 0, 'c'},
+ {"default", 0, 0, 'd'},
+ {"format", 1, 0, 'f'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n",
+ program);
+#endif
+ fprintf (file, "List best font matching [pattern]\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -c, --config perform config substitution on pattern\n");
+ fprintf (file, " -d, -default perform default substitution on pattern\n");
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -c, (config) perform config substitution on pattern\n");
+ fprintf (file, " -d, (default) perform default substitution on pattern\n");
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ int do_config = 0, do_default = 0;
+ FcChar8 *format = NULL;
+ int i;
+ FcObjectSet *os = 0;
+ FcPattern *pat;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "cdf:Vh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "cdf:Vh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'c':
+ do_config = 1;
+ break;
+ case 'd':
+ do_default = 1;
+ break;
+ case 'f':
+ format = (FcChar8 *) strdup (optarg);
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (!FcInit ())
+ {
+ fprintf (stderr, "Can't init font config library\n");
+ return 1;
+ }
+ if (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ while (argv[++i])
+ {
+ if (!os)
+ os = FcObjectSetCreate ();
+ FcObjectSetAdd (os, argv[i]);
+ }
+ }
+ else
+ pat = FcPatternCreate ();
+
+ if (!pat)
+ return 1;
+
+ if (do_config)
+ FcConfigSubstitute (0, pat, FcMatchPattern);
+ if (do_default)
+ FcDefaultSubstitute (pat);
+
+ if (os)
+ {
+ FcPattern *new;
+ new = FcPatternFilter (pat, os);
+ FcPatternDestroy (pat);
+ pat = new;
+ }
+
+ if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (pat, format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else
+ {
+ FcPatternPrint (pat);
+ }
+
+ FcPatternDestroy (pat);
+
+ if (os)
+ FcObjectSetDestroy (os);
+
+ FcFini ();
+
+ return 0;
+}
diff --git a/fontconfig/fc-pattern/fc-pattern.sgml b/fontconfig/fc-pattern/fc-pattern.sgml
new file mode 100644
index 000000000..928afd8d2
--- /dev/null
+++ b/fontconfig/fc-pattern/fc-pattern.sgml
@@ -0,0 +1,204 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
+ <!ENTITY dhsurname "<surname>Esfahbod</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Apr 20, 2010</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>behdad@behdad.org</email>">
+ <!ENTITY dhusername "Behdad Esfahbod">
+ <!ENTITY dhucpackage "<refentrytitle>fc-pattern</refentrytitle>">
+ <!ENTITY dhpackage "fc-pattern">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2010</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>parse and show pattern</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-cdVh</option></arg>
+ <arg><option>--config</option></arg>
+ <arg><option>--default</option></arg>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> parses
+ <replaceable>pattern</replaceable> (empty
+pattern by default) and shows the parsed result.
+If <option>--config</option> is given, config substitution is performed on the
+pattern before being displayed.
+If <option>--default</option> is given, default substitution is performed on the
+pattern before being displayed.</para>
+<para>If any elements are specified, only those are printed.</para>
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-c</option>
+ <option>--config</option>
+ </term>
+ <listitem>
+ <para>Perform config substitution on pattern.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-d</option>
+ <option>--default</option>
+ </term>
+ <listitem>
+ <para>Perform default substitution on pattern.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>pattern</replaceable></option>
+ </term>
+ <listitem>
+ <para>Parses and displays <replaceable>pattern</replaceable> (uses empty pattern by default).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>element</replaceable></option>
+ </term>
+ <listitem>
+ <para>If set, the <replaceable>element</replaceable> property
+ is displayed for parsed pattern.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <function>FcNameParse</function>(3)
+ <function>FcConfigSubstitute</function>(3)
+ <function>FcDefaultSubstitute</function>(3)
+ <function>FcPatternPrint</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-query/Makefile.am b/fontconfig/fc-query/Makefile.am
index 114fd7f80..a7300a3bc 100644
--- a/fontconfig/fc-query/Makefile.am
+++ b/fontconfig/fc-query/Makefile.am
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-query/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-query
-
-DOC2MAN = docbook2man
-
-FC_QUERY_SRC=${top_srcdir}/fc-query
-
-SGML = ${FC_QUERY_SRC}/fc-query.sgml
-
-INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
-
-BUILT_MANS=fc-query.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-query.sgml $(BUILT_MANS)
-
-fc_query_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-query/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+bin_PROGRAMS=fc-query
+
+DOC2MAN = docbook2man
+
+FC_QUERY_SRC=${top_srcdir}/fc-query
+
+SGML = ${FC_QUERY_SRC}/fc-query.sgml
+
+INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
+
+BUILT_MANS=fc-query.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-query.sgml $(BUILT_MANS)
+
+fc_query_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-query/fc-query.c b/fontconfig/fc-query/fc-query.c
index f2693de59..efb1aa0e4 100644
--- a/fontconfig/fc-query/fc-query.c
+++ b/fontconfig/fc-query/fc-query.c
@@ -1,191 +1,191 @@
-/*
- * fontconfig/fc-query/fc-query.c
- *
- * Copyright © 2003 Keith Packard
- * Copyright © 2008 Red Hat, Inc.
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcfreetype.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"index", 1, 0, 'i'},
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] [--index index] [--format FORMAT] [--version] [--help] font-file...\n",
- program);
-#else
- fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] font-file...\n",
- program);
-#endif
- fprintf (file, "Query font files and print resulting pattern(s)\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -i, --index INDEX display the INDEX face of each font file only\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -i INDEX (index) display the INDEX face of each font file only\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int index_set = 0;
- int set_index = 0;
- FcChar8 *format = NULL;
- int err = 0;
- int i;
- FcBlanks *blanks;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "i:f:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "i:f:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'i':
- index_set = 1;
- set_index = atoi (optarg);
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (i == argc)
- usage (argv[0], 1);
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
-
- blanks = FcConfigGetBlanks (NULL);
-
- for (; i < argc; i++)
- {
- int index;
- int count = 0;
-
- index = set_index;
-
- do {
- FcPattern *pat;
-
- pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, blanks, &count);
- if (pat)
- {
- if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (pat, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else
- {
- FcPatternPrint (pat);
- }
-
- FcPatternDestroy (pat);
- }
- else
- {
- fprintf (stderr, "Can't query face %d of font file %s\n",
- index, argv[i]);
- err = 1;
- }
-
- index++;
- } while (!index_set && index < count);
- }
-
- FcFini ();
- return err;
-}
+/*
+ * fontconfig/fc-query/fc-query.c
+ *
+ * Copyright © 2003 Keith Packard
+ * Copyright © 2008 Red Hat, Inc.
+ * Red Hat Author(s): Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include <fontconfig/fcfreetype.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+static const struct option longopts[] = {
+ {"index", 1, 0, 'i'},
+ {"format", 1, 0, 'f'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] [--index index] [--format FORMAT] [--version] [--help] font-file...\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] font-file...\n",
+ program);
+#endif
+ fprintf (file, "Query font files and print resulting pattern(s)\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -i, --index INDEX display the INDEX face of each font file only\n");
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -i INDEX (index) display the INDEX face of each font file only\n");
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ int index_set = 0;
+ int set_index = 0;
+ FcChar8 *format = NULL;
+ int err = 0;
+ int i;
+ FcBlanks *blanks;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "i:f:Vh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "i:f:Vh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'i':
+ index_set = 1;
+ set_index = atoi (optarg);
+ break;
+ case 'f':
+ format = (FcChar8 *) strdup (optarg);
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (i == argc)
+ usage (argv[0], 1);
+
+ if (!FcInit ())
+ {
+ fprintf (stderr, "Can't init font config library\n");
+ return 1;
+ }
+
+ blanks = FcConfigGetBlanks (NULL);
+
+ for (; i < argc; i++)
+ {
+ int index;
+ int count = 0;
+
+ index = set_index;
+
+ do {
+ FcPattern *pat;
+
+ pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, blanks, &count);
+ if (pat)
+ {
+ if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (pat, format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else
+ {
+ FcPatternPrint (pat);
+ }
+
+ FcPatternDestroy (pat);
+ }
+ else
+ {
+ fprintf (stderr, "Can't query face %d of font file %s\n",
+ index, argv[i]);
+ err = 1;
+ }
+
+ index++;
+ } while (!index_set && index < count);
+ }
+
+ FcFini ();
+ return err;
+}
diff --git a/fontconfig/fc-query/fc-query.sgml b/fontconfig/fc-query/fc-query.sgml
index 59fd63548..e81e7bf14 100644
--- a/fontconfig/fc-query/fc-query.sgml
+++ b/fontconfig/fc-query/fc-query.sgml
@@ -1,191 +1,192 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
- <!ENTITY dhsurname "<surname>Esfahbod</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>behdad@behdad.org</email>">
- <!ENTITY dhusername "Behdad Esfahbod">
- <!ENTITY dhucpackage "<refentrytitle>fc-query</refentrytitle>">
- <!ENTITY dhpackage "fc-query">
-
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2008</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>query font files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-Vh</option></arg>
- <sbr>
- <group>
- <arg><option>-i</option> <option><replaceable>index</replaceable></option></arg>
- <arg><option>--index</option> <option><replaceable>index</replaceable></option></arg>
- </group>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg choice="req" rep="repeat"><option><replaceable>font-file</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> queries
- <replaceable>font-file</replaceable>(s) using the normal fontconfig
- rules and prints out font pattern for each face found.
- If <option>--index</option> is given, only one face of each file is
- queried, otherwise all faces are queried.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-i</option>
- <option>--index</option>
- <option><replaceable>index</replaceable></option>
- </term>
- <listitem>
- <para>Only query face indexed <replaceable>index</replaceable> of
- each file.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>font-file</replaceable></option>
- </term>
- <listitem>
- <para>Query <replaceable>font-file</replaceable> for font faces.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>RETURN CODES</title>
- <para><command>fc-query</command> returns error code 0 for successful parsing,
- or 1 if any errors occured or if at least one font face could not be opened.</para>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-scan</command>(1)
- <function>FcFreeTypeQuery</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
+ <!ENTITY dhsurname "<surname>Esfahbod</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>behdad@behdad.org</email>">
+ <!ENTITY dhusername "Behdad Esfahbod">
+ <!ENTITY dhucpackage "<refentrytitle>fc-query</refentrytitle>">
+ <!ENTITY dhpackage "fc-query">
+
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2008</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>query font files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-Vh</option></arg>
+ <sbr>
+ <group>
+ <arg><option>-i</option> <option><replaceable>index</replaceable></option></arg>
+ <arg><option>--index</option> <option><replaceable>index</replaceable></option></arg>
+ </group>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg choice="req" rep="repeat"><option><replaceable>font-file</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> queries
+ <replaceable>font-file</replaceable>(s) using the normal fontconfig
+ rules and prints out font pattern for each face found.
+ If <option>--index</option> is given, only one face of each file is
+ queried, otherwise all faces are queried.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-i</option>
+ <option>--index</option>
+ <option><replaceable>index</replaceable></option>
+ </term>
+ <listitem>
+ <para>Only query face indexed <replaceable>index</replaceable> of
+ each file.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>font-file</replaceable></option>
+ </term>
+ <listitem>
+ <para>Query <replaceable>font-file</replaceable> for font faces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>RETURN CODES</title>
+ <para><command>fc-query</command> returns error code 0 for successful parsing,
+ or 1 if any errors occured or if at least one font face could not be opened.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-scan</command>(1)
+ <function>FcFreeTypeQuery</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fc-scan/Makefile.am b/fontconfig/fc-scan/Makefile.am
index af4383149..c786a79e9 100644
--- a/fontconfig/fc-scan/Makefile.am
+++ b/fontconfig/fc-scan/Makefile.am
@@ -1,59 +1,59 @@
-#
-# fontconfig/fc-scan/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-scan
-
-DOC2MAN = docbook2man
-
-FC_SCAN_SRC=${top_srcdir}/fc-scan
-
-SGML = ${FC_SCAN_SRC}/fc-scan.sgml
-
-INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
-
-BUILT_MANS=fc-scan.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-scan.sgml $(BUILT_MANS)
-
-fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+#
+# fontconfig/fc-scan/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+bin_PROGRAMS=fc-scan
+
+DOC2MAN = docbook2man
+
+FC_SCAN_SRC=${top_srcdir}/fc-scan
+
+SGML = ${FC_SCAN_SRC}/fc-scan.sgml
+
+INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
+
+BUILT_MANS=fc-scan.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-scan.sgml $(BUILT_MANS)
+
+fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(RM) $@
+ $(DOC2MAN) ${SGML}
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+clean-local:
+ $(RM) $(man_MANS)
+
+else
+all-local:
+clean-local:
+endif
diff --git a/fontconfig/fc-scan/fc-scan.c b/fontconfig/fc-scan/fc-scan.c
index 5f9a46670..1843da202 100644
--- a/fontconfig/fc-scan/fc-scan.c
+++ b/fontconfig/fc-scan/fc-scan.c
@@ -1,184 +1,184 @@
-/*
- * fontconfig/fc-scan/fc-scan.c
- *
- * Copyright © 2003 Keith Packard
- * Copyright © 2008 Red Hat, Inc.
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcfreetype.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-Vh] [-f FORMAT] [--format FORMAT] [--version] [--help] font-file...\n",
- program);
-#else
- fprintf (file, "usage: %s [-Vh] [-f FORMAT] font-file...\n",
- program);
-#endif
- fprintf (file, "Scan font files and directories, and print resulting pattern(s)\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- FcChar8 *format = NULL;
- int i;
- FcFontSet *fs;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "f:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "f:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (i == argc)
- usage (argv[0], 1);
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
-
- fs = FcFontSetCreate ();
-
- for (; i < argc; i++)
- {
- const FcChar8 *file = (FcChar8*) argv[i];
-
- if (!FcFileIsDir (file))
- FcFileScan (fs, NULL, NULL, NULL, file, FcTrue);
- else
- {
- FcStrSet *dirs = FcStrSetCreate ();
- FcStrList *strlist = FcStrListCreate (dirs);
- do
- {
- FcDirScan (fs, dirs, NULL, NULL, file, FcTrue);
- }
- while ((file = FcStrListNext (strlist)));
- FcStrListDone (strlist);
- FcStrSetDestroy (dirs);
- }
- }
-
- for (i = 0; i < fs->nfont; i++)
- {
- FcPattern *pat;
-
- pat = fs->fonts[i];
-
- if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (pat, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else
- {
- FcPatternPrint (pat);
- }
- }
-
- FcFontSetDestroy (fs);
-
- FcFini ();
- return i > 0 ? 0 : 1;
-}
+/*
+ * fontconfig/fc-scan/fc-scan.c
+ *
+ * Copyright © 2003 Keith Packard
+ * Copyright © 2008 Red Hat, Inc.
+ * Red Hat Author(s): Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#include <fontconfig/fontconfig.h>
+#include <fontconfig/fcfreetype.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+static const struct option longopts[] = {
+ {"format", 1, 0, 'f'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-Vh] [-f FORMAT] [--format FORMAT] [--version] [--help] font-file...\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-Vh] [-f FORMAT] font-file...\n",
+ program);
+#endif
+ fprintf (file, "Scan font files and directories, and print resulting pattern(s)\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ FcChar8 *format = NULL;
+ int i;
+ FcFontSet *fs;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "f:Vh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "f:Vh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'f':
+ format = (FcChar8 *) strdup (optarg);
+ break;
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ if (i == argc)
+ usage (argv[0], 1);
+
+ if (!FcInit ())
+ {
+ fprintf (stderr, "Can't init font config library\n");
+ return 1;
+ }
+
+ fs = FcFontSetCreate ();
+
+ for (; i < argc; i++)
+ {
+ const FcChar8 *file = (FcChar8*) argv[i];
+
+ if (!FcFileIsDir (file))
+ FcFileScan (fs, NULL, NULL, NULL, file, FcTrue);
+ else
+ {
+ FcStrSet *dirs = FcStrSetCreate ();
+ FcStrList *strlist = FcStrListCreate (dirs);
+ do
+ {
+ FcDirScan (fs, dirs, NULL, NULL, file, FcTrue);
+ }
+ while ((file = FcStrListNext (strlist)));
+ FcStrListDone (strlist);
+ FcStrSetDestroy (dirs);
+ }
+ }
+
+ for (i = 0; i < fs->nfont; i++)
+ {
+ FcPattern *pat;
+
+ pat = fs->fonts[i];
+
+ if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (pat, format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else
+ {
+ FcPatternPrint (pat);
+ }
+ }
+
+ FcFontSetDestroy (fs);
+
+ FcFini ();
+ return i > 0 ? 0 : 1;
+}
diff --git a/fontconfig/fc-scan/fc-scan.sgml b/fontconfig/fc-scan/fc-scan.sgml
index b9f7714e2..4c8a88d44 100644
--- a/fontconfig/fc-scan/fc-scan.sgml
+++ b/fontconfig/fc-scan/fc-scan.sgml
@@ -1,176 +1,177 @@
-<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
- <!ENTITY dhsurname "<surname>Esfahbod</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Jan 15, 2009</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>behdad@behdad.org</email>">
- <!ENTITY dhusername "Behdad Esfahbod">
- <!ENTITY dhucpackage "<refentrytitle>fc-scan</refentrytitle>">
- <!ENTITY dhpackage "fc-scan">
-
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2008</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>scan font files or directories</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-Vh</option></arg>
- <sbr>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg choice="req" rep="repeat"><option><replaceable>file</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> scans
- <replaceable>file</replaceable>(s) recursively
- and prints out font pattern for each face found.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>file</replaceable></option>
- </term>
- <listitem>
- <para>Scan <replaceable>file</replaceable> recursively for font faces.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>RETURN CODES</title>
- <para><command>fc-scan</command> returns error code 0 if at least one font
- was found or 1 otherwise.</para>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-query</command>(1)
- <function>FcFileScan</function>(3)
- <function>FcDirScan</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
+ <!ENTITY dhsurname "<surname>Esfahbod</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Jan 15, 2009</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>behdad@behdad.org</email>">
+ <!ENTITY dhusername "Behdad Esfahbod">
+ <!ENTITY dhucpackage "<refentrytitle>fc-scan</refentrytitle>">
+ <!ENTITY dhpackage "fc-scan">
+
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2008</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>scan font files or directories</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-Vh</option></arg>
+ <sbr>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg choice="req" rep="repeat"><option><replaceable>file</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> scans
+ <replaceable>file</replaceable>(s) recursively
+ and prints out font pattern for each face found.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>file</replaceable></option>
+ </term>
+ <listitem>
+ <para>Scan <replaceable>file</replaceable> recursively for font faces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>RETURN CODES</title>
+ <para><command>fc-scan</command> returns error code 0 if at least one font
+ was found or 1 otherwise.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-query</command>(1)
+ <function>FcFileScan</function>(3)
+ <function>FcDirScan</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/fontconfig/fontconfig.pc.in b/fontconfig/fontconfig.pc.in
index db55f6e14..811419764 100644
--- a/fontconfig/fontconfig.pc.in
+++ b/fontconfig/fontconfig.pc.in
@@ -1,11 +1,16 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: Fontconfig
-Description: Font configuration and customization library
-Version: @VERSION@
-Libs: -L${libdir} -lfontconfig
-Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@
-Cflags: -I${includedir}
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+sysconfdir=@sysconfdir@
+localstatedir=@localstatedir@
+PACKAGE=@PACKAGE@
+confdir=@confdir@
+cachedir=@fc_cachedir@
+
+Name: Fontconfig
+Description: Font configuration and customization library
+Version: @VERSION@
+Libs: -L${libdir} -lfontconfig
+Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@
+Cflags: -I${includedir}
diff --git a/fontconfig/fontconfig/fcfreetype.h b/fontconfig/fontconfig/fcfreetype.h
index de9988f65..09799dc9d 100644
--- a/fontconfig/fontconfig/fcfreetype.h
+++ b/fontconfig/fontconfig/fcfreetype.h
@@ -1,59 +1,59 @@
-/*
- * fontconfig/fontconfig/fcfreetype.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCFREETYPE_H_
-#define _FCFREETYPE_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifndef FcPublic
-#define FcPublic
-#endif
-
-_FCFUNCPROTOBEGIN
-
-FcPublic FT_UInt
-FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4);
-
-FcPublic FcCharSet *
-FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing);
-
-FcPublic FcCharSet *
-FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks);
-
-FcPublic FcResult
-FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f);
-
-FcPublic FcBool
-FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f);
-
-FcPublic FcPattern *
-FcFreeTypeQueryFace (const FT_Face face,
- const FcChar8 *file,
- int id,
- FcBlanks *blanks);
-
-_FCFUNCPROTOEND
-
-#endif
+/*
+ * fontconfig/fontconfig/fcfreetype.h
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FCFREETYPE_H_
+#define _FCFREETYPE_H_
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifndef FcPublic
+#define FcPublic
+#endif
+
+_FCFUNCPROTOBEGIN
+
+FcPublic FT_UInt
+FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4);
+
+FcPublic FcCharSet *
+FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing);
+
+FcPublic FcCharSet *
+FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks);
+
+FcPublic FcResult
+FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f);
+
+FcPublic FcBool
+FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f);
+
+FcPublic FcPattern *
+FcFreeTypeQueryFace (const FT_Face face,
+ const FcChar8 *file,
+ int id,
+ FcBlanks *blanks);
+
+_FCFUNCPROTOEND
+
+#endif
diff --git a/fontconfig/fontconfig/fcprivate.h b/fontconfig/fontconfig/fcprivate.h
index ec964fce1..e65ff9cc5 100644
--- a/fontconfig/fontconfig/fcprivate.h
+++ b/fontconfig/fontconfig/fcprivate.h
@@ -1,123 +1,123 @@
-/*
- * fontconfig/fontconfig/fcprivate.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCPRIVATE_H_
-#define _FCPRIVATE_H_
-
-/*
- * I tried this with functions that took va_list* arguments
- * but portability concerns made me change these functions
- * into macros (sigh).
- */
-
-#define FcPatternVapBuild(result, orig, va) \
-{ \
- FcPattern *__p__ = (orig); \
- const char *__o__; \
- FcValue __v__; \
- \
- if (!__p__) \
- { \
- __p__ = FcPatternCreate (); \
- if (!__p__) \
- goto _FcPatternVapBuild_bail0; \
- } \
- for (;;) \
- { \
- __o__ = va_arg (va, const char *); \
- if (!__o__) \
- break; \
- __v__.type = va_arg (va, FcType); \
- switch (__v__.type) { \
- case FcTypeVoid: \
- goto _FcPatternVapBuild_bail1; \
- case FcTypeInteger: \
- __v__.u.i = va_arg (va, int); \
- break; \
- case FcTypeDouble: \
- __v__.u.d = va_arg (va, double); \
- break; \
- case FcTypeString: \
- __v__.u.s = va_arg (va, const FcChar8 *); \
- break; \
- case FcTypeBool: \
- __v__.u.b = va_arg (va, FcBool); \
- break; \
- case FcTypeMatrix: \
- __v__.u.m = va_arg (va, const FcMatrix *); \
- break; \
- case FcTypeCharSet: \
- __v__.u.c = va_arg (va, const FcCharSet *); \
- break; \
- case FcTypeFTFace: \
- __v__.u.f = va_arg (va, FT_Face); \
- break; \
- case FcTypeLangSet: \
- __v__.u.l = va_arg (va, const FcLangSet *); \
- break; \
- } \
- if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \
- goto _FcPatternVapBuild_bail1; \
- } \
- result = __p__; \
- goto _FcPatternVapBuild_return; \
- \
-_FcPatternVapBuild_bail1: \
- if (!orig) \
- FcPatternDestroy (__p__); \
-_FcPatternVapBuild_bail0: \
- result = (void*)0; \
- \
-_FcPatternVapBuild_return: \
- ; \
-}
-
-
-#define FcObjectSetVapBuild(__ret__, __first__, __va__) \
-{ \
- FcObjectSet *__os__; \
- const char *__ob__; \
- \
- __ret__ = 0; \
- __os__ = FcObjectSetCreate (); \
- if (!__os__) \
- goto _FcObjectSetVapBuild_bail0; \
- __ob__ = __first__; \
- while (__ob__) \
- { \
- if (!FcObjectSetAdd (__os__, __ob__)) \
- goto _FcObjectSetVapBuild_bail1; \
- __ob__ = va_arg (__va__, const char *); \
- } \
- __ret__ = __os__; \
- \
-_FcObjectSetVapBuild_bail1: \
- if (!__ret__ && __os__) \
- FcObjectSetDestroy (__os__); \
-_FcObjectSetVapBuild_bail0: \
- ; \
-}
-
-#endif /* _FCPRIVATE_H_ */
-
+/*
+ * fontconfig/fontconfig/fcprivate.h
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FCPRIVATE_H_
+#define _FCPRIVATE_H_
+
+/*
+ * I tried this with functions that took va_list* arguments
+ * but portability concerns made me change these functions
+ * into macros (sigh).
+ */
+
+#define FcPatternVapBuild(result, orig, va) \
+{ \
+ FcPattern *__p__ = (orig); \
+ const char *__o__; \
+ FcValue __v__; \
+ \
+ if (!__p__) \
+ { \
+ __p__ = FcPatternCreate (); \
+ if (!__p__) \
+ goto _FcPatternVapBuild_bail0; \
+ } \
+ for (;;) \
+ { \
+ __o__ = va_arg (va, const char *); \
+ if (!__o__) \
+ break; \
+ __v__.type = va_arg (va, FcType); \
+ switch (__v__.type) { \
+ case FcTypeVoid: \
+ goto _FcPatternVapBuild_bail1; \
+ case FcTypeInteger: \
+ __v__.u.i = va_arg (va, int); \
+ break; \
+ case FcTypeDouble: \
+ __v__.u.d = va_arg (va, double); \
+ break; \
+ case FcTypeString: \
+ __v__.u.s = va_arg (va, const FcChar8 *); \
+ break; \
+ case FcTypeBool: \
+ __v__.u.b = va_arg (va, FcBool); \
+ break; \
+ case FcTypeMatrix: \
+ __v__.u.m = va_arg (va, const FcMatrix *); \
+ break; \
+ case FcTypeCharSet: \
+ __v__.u.c = va_arg (va, const FcCharSet *); \
+ break; \
+ case FcTypeFTFace: \
+ __v__.u.f = va_arg (va, FT_Face); \
+ break; \
+ case FcTypeLangSet: \
+ __v__.u.l = va_arg (va, const FcLangSet *); \
+ break; \
+ } \
+ if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \
+ goto _FcPatternVapBuild_bail1; \
+ } \
+ result = __p__; \
+ goto _FcPatternVapBuild_return; \
+ \
+_FcPatternVapBuild_bail1: \
+ if (!orig) \
+ FcPatternDestroy (__p__); \
+_FcPatternVapBuild_bail0: \
+ result = (void*)0; \
+ \
+_FcPatternVapBuild_return: \
+ ; \
+}
+
+
+#define FcObjectSetVapBuild(__ret__, __first__, __va__) \
+{ \
+ FcObjectSet *__os__; \
+ const char *__ob__; \
+ \
+ __ret__ = 0; \
+ __os__ = FcObjectSetCreate (); \
+ if (!__os__) \
+ goto _FcObjectSetVapBuild_bail0; \
+ __ob__ = __first__; \
+ while (__ob__) \
+ { \
+ if (!FcObjectSetAdd (__os__, __ob__)) \
+ goto _FcObjectSetVapBuild_bail1; \
+ __ob__ = va_arg (__va__, const char *); \
+ } \
+ __ret__ = __os__; \
+ \
+_FcObjectSetVapBuild_bail1: \
+ if (!__ret__ && __os__) \
+ FcObjectSetDestroy (__os__); \
+_FcObjectSetVapBuild_bail0: \
+ ; \
+}
+
+#endif /* _FCPRIVATE_H_ */
+
diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h
index 4efa4507a..45b23dd23 100644
--- a/fontconfig/fontconfig/fontconfig.h
+++ b/fontconfig/fontconfig/fontconfig.h
@@ -1,963 +1,974 @@
-/*
- * fontconfig/fontconfig/fontconfig.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FONTCONFIG_H_
-#define _FONTCONFIG_H_
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdarg.h>
-
-#if defined(__GNUC__) && (__GNUC__ >= 4)
-#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
-#else
-#define FC_ATTRIBUTE_SENTINEL(x)
-#endif
-
-#ifndef FcPublic
-#define FcPublic
-#endif
-
-typedef unsigned char FcChar8;
-typedef unsigned short FcChar16;
-typedef unsigned int FcChar32;
-typedef int FcBool;
-
-/*
- * Current Fontconfig version number. This same number
- * must appear in the fontconfig configure.in file. Yes,
- * it'a a pain to synchronize version numbers like this.
- */
-
-#define FC_MAJOR 2
-#define FC_MINOR 8
-#define FC_REVISION 0
-
-#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
-
-/*
- * Current font cache file format version
- * This is appended to the cache files so that multiple
- * versions of the library will peacefully coexist
- *
- * Change this value whenever the disk format for the cache file
- * changes in any non-compatible way. Try to avoid such changes as
- * it means multiple copies of the font information.
- */
-
-#define FC_CACHE_VERSION "3"
-
-#define FcTrue 1
-#define FcFalse 0
-
-#define FC_FAMILY "family" /* String */
-#define FC_STYLE "style" /* String */
-#define FC_SLANT "slant" /* Int */
-#define FC_WEIGHT "weight" /* Int */
-#define FC_SIZE "size" /* Double */
-#define FC_ASPECT "aspect" /* Double */
-#define FC_PIXEL_SIZE "pixelsize" /* Double */
-#define FC_SPACING "spacing" /* Int */
-#define FC_FOUNDRY "foundry" /* String */
-#define FC_ANTIALIAS "antialias" /* Bool (depends) */
-#define FC_HINTING "hinting" /* Bool (true) */
-#define FC_HINT_STYLE "hintstyle" /* Int */
-#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */
-#define FC_AUTOHINT "autohint" /* Bool (false) */
-#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */
-#define FC_WIDTH "width" /* Int */
-#define FC_FILE "file" /* String */
-#define FC_INDEX "index" /* Int */
-#define FC_FT_FACE "ftface" /* FT_Face */
-#define FC_RASTERIZER "rasterizer" /* String */
-#define FC_OUTLINE "outline" /* Bool */
-#define FC_SCALABLE "scalable" /* Bool */
-#define FC_SCALE "scale" /* double */
-#define FC_DPI "dpi" /* double */
-#define FC_RGBA "rgba" /* Int */
-#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */
-#define FC_SOURCE "source" /* String (deprecated) */
-#define FC_CHARSET "charset" /* CharSet */
-#define FC_LANG "lang" /* String RFC 3066 langs */
-#define FC_FONTVERSION "fontversion" /* Int from 'head' table */
-#define FC_FULLNAME "fullname" /* String */
-#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */
-#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */
-#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */
-#define FC_CAPABILITY "capability" /* String */
-#define FC_FONTFORMAT "fontformat" /* String */
-#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/
-#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */
-#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */
-#define FC_LCD_FILTER "lcdfilter" /* Int */
-
-#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION
-#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION
-#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION
-
-/* Adjust outline rasterizer */
-#define FC_CHAR_WIDTH "charwidth" /* Int */
-#define FC_CHAR_HEIGHT "charheight"/* Int */
-#define FC_MATRIX "matrix" /* FcMatrix */
-
-#define FC_WEIGHT_THIN 0
-#define FC_WEIGHT_EXTRALIGHT 40
-#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT
-#define FC_WEIGHT_LIGHT 50
-#define FC_WEIGHT_BOOK 75
-#define FC_WEIGHT_REGULAR 80
-#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR
-#define FC_WEIGHT_MEDIUM 100
-#define FC_WEIGHT_DEMIBOLD 180
-#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD
-#define FC_WEIGHT_BOLD 200
-#define FC_WEIGHT_EXTRABOLD 205
-#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD
-#define FC_WEIGHT_BLACK 210
-#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK
-#define FC_WEIGHT_EXTRABLACK 215
-#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK
-
-#define FC_SLANT_ROMAN 0
-#define FC_SLANT_ITALIC 100
-#define FC_SLANT_OBLIQUE 110
-
-#define FC_WIDTH_ULTRACONDENSED 50
-#define FC_WIDTH_EXTRACONDENSED 63
-#define FC_WIDTH_CONDENSED 75
-#define FC_WIDTH_SEMICONDENSED 87
-#define FC_WIDTH_NORMAL 100
-#define FC_WIDTH_SEMIEXPANDED 113
-#define FC_WIDTH_EXPANDED 125
-#define FC_WIDTH_EXTRAEXPANDED 150
-#define FC_WIDTH_ULTRAEXPANDED 200
-
-#define FC_PROPORTIONAL 0
-#define FC_DUAL 90
-#define FC_MONO 100
-#define FC_CHARCELL 110
-
-/* sub-pixel order */
-#define FC_RGBA_UNKNOWN 0
-#define FC_RGBA_RGB 1
-#define FC_RGBA_BGR 2
-#define FC_RGBA_VRGB 3
-#define FC_RGBA_VBGR 4
-#define FC_RGBA_NONE 5
-
-/* hinting style */
-#define FC_HINT_NONE 0
-#define FC_HINT_SLIGHT 1
-#define FC_HINT_MEDIUM 2
-#define FC_HINT_FULL 3
-
-/* LCD filter */
-#define FC_LCD_NONE 0
-#define FC_LCD_DEFAULT 1
-#define FC_LCD_LIGHT 2
-#define FC_LCD_LEGACY 3
-
-typedef enum _FcType {
- FcTypeVoid,
- FcTypeInteger,
- FcTypeDouble,
- FcTypeString,
- FcTypeBool,
- FcTypeMatrix,
- FcTypeCharSet,
- FcTypeFTFace,
- FcTypeLangSet
-} FcType;
-
-typedef struct _FcMatrix {
- double xx, xy, yx, yy;
-} FcMatrix;
-
-#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \
- (m)->xy = (m)->yx = 0)
-
-/*
- * A data structure to represent the available glyphs in a font.
- * This is represented as a sparse boolean btree.
- */
-
-typedef struct _FcCharSet FcCharSet;
-
-typedef struct _FcObjectType {
- const char *object;
- FcType type;
-} FcObjectType;
-
-typedef struct _FcConstant {
- const FcChar8 *name;
- const char *object;
- int value;
-} FcConstant;
-
-typedef enum _FcResult {
- FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
- FcResultOutOfMemory
-} FcResult;
-
-typedef struct _FcPattern FcPattern;
-
-typedef struct _FcLangSet FcLangSet;
-
-typedef struct _FcValue {
- FcType type;
- union {
- const FcChar8 *s;
- int i;
- FcBool b;
- double d;
- const FcMatrix *m;
- const FcCharSet *c;
- void *f;
- const FcLangSet *l;
- } u;
-} FcValue;
-
-typedef struct _FcFontSet {
- int nfont;
- int sfont;
- FcPattern **fonts;
-} FcFontSet;
-
-typedef struct _FcObjectSet {
- int nobject;
- int sobject;
- const char **objects;
-} FcObjectSet;
-
-typedef enum _FcMatchKind {
- FcMatchPattern, FcMatchFont, FcMatchScan
-} FcMatchKind;
-
-typedef enum _FcLangResult {
- FcLangEqual = 0,
- FcLangDifferentCountry = 1,
- FcLangDifferentTerritory = 1,
- FcLangDifferentLang = 2
-} FcLangResult;
-
-typedef enum _FcSetName {
- FcSetSystem = 0,
- FcSetApplication = 1
-} FcSetName;
-
-typedef struct _FcAtomic FcAtomic;
-
-#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */
-#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */
-#define _FCFUNCPROTOEND }
-#else
-#define _FCFUNCPROTOBEGIN
-#define _FCFUNCPROTOEND
-#endif
-
-typedef enum { FcEndianBig, FcEndianLittle } FcEndian;
-
-typedef struct _FcConfig FcConfig;
-
-typedef struct _FcGlobalCache FcFileCache;
-
-typedef struct _FcBlanks FcBlanks;
-
-typedef struct _FcStrList FcStrList;
-
-typedef struct _FcStrSet FcStrSet;
-
-typedef struct _FcCache FcCache;
-
-_FCFUNCPROTOBEGIN
-
-/* fcblanks.c */
-FcPublic FcBlanks *
-FcBlanksCreate (void);
-
-FcPublic void
-FcBlanksDestroy (FcBlanks *b);
-
-FcPublic FcBool
-FcBlanksAdd (FcBlanks *b, FcChar32 ucs4);
-
-FcPublic FcBool
-FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4);
-
-/* fccache.c */
-
-FcPublic const FcChar8 *
-FcCacheDir(const FcCache *c);
-
-FcPublic FcFontSet *
-FcCacheCopySet(const FcCache *c);
-
-FcPublic const FcChar8 *
-FcCacheSubdir (const FcCache *c, int i);
-
-FcPublic int
-FcCacheNumSubdir (const FcCache *c);
-
-FcPublic int
-FcCacheNumFont (const FcCache *c);
-
-FcPublic FcBool
-FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config);
-
-FcPublic FcBool
-FcDirCacheValid (const FcChar8 *cache_file);
-
-/* fccfg.c */
-FcPublic FcChar8 *
-FcConfigHome (void);
-
-FcPublic FcBool
-FcConfigEnableHome (FcBool enable);
-
-FcPublic FcChar8 *
-FcConfigFilename (const FcChar8 *url);
-
-FcPublic FcConfig *
-FcConfigCreate (void);
-
-FcPublic FcConfig *
-FcConfigReference (FcConfig *config);
-
-FcPublic void
-FcConfigDestroy (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSetCurrent (FcConfig *config);
-
-FcPublic FcConfig *
-FcConfigGetCurrent (void);
-
-FcPublic FcBool
-FcConfigUptoDate (FcConfig *config);
-
-FcPublic FcBool
-FcConfigBuildFonts (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetFontDirs (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetConfigDirs (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetConfigFiles (FcConfig *config);
-
-FcPublic FcChar8 *
-FcConfigGetCache (FcConfig *config);
-
-FcPublic FcBlanks *
-FcConfigGetBlanks (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetCacheDirs (FcConfig *config);
-
-FcPublic int
-FcConfigGetRescanInterval (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSetRescanInterval (FcConfig *config, int rescanInterval);
-
-FcPublic FcFontSet *
-FcConfigGetFonts (FcConfig *config,
- FcSetName set);
-
-FcPublic FcBool
-FcConfigAppFontAddFile (FcConfig *config,
- const FcChar8 *file);
-
-FcPublic FcBool
-FcConfigAppFontAddDir (FcConfig *config,
- const FcChar8 *dir);
-
-FcPublic void
-FcConfigAppFontClear (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSubstituteWithPat (FcConfig *config,
- FcPattern *p,
- FcPattern *p_pat,
- FcMatchKind kind);
-
-FcPublic FcBool
-FcConfigSubstitute (FcConfig *config,
- FcPattern *p,
- FcMatchKind kind);
-
-/* fccharset.c */
-FcPublic FcCharSet*
-FcCharSetCreate (void);
-
-/* deprecated alias for FcCharSetCreate */
-FcPublic FcCharSet *
-FcCharSetNew (void);
-
-FcPublic void
-FcCharSetDestroy (FcCharSet *fcs);
-
-FcPublic FcBool
-FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4);
-
-FcPublic FcCharSet*
-FcCharSetCopy (FcCharSet *src);
-
-FcPublic FcBool
-FcCharSetEqual (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetUnion (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcBool
-FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed);
-
-FcPublic FcBool
-FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4);
-
-FcPublic FcChar32
-FcCharSetCount (const FcCharSet *a);
-
-FcPublic FcChar32
-FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcChar32
-FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcBool
-FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b);
-
-#define FC_CHARSET_MAP_SIZE (256/32)
-#define FC_CHARSET_DONE ((FcChar32) -1)
-
-FcPublic FcChar32
-FcCharSetFirstPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
-FcPublic FcChar32
-FcCharSetNextPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
-/*
- * old coverage API, rather hard to use correctly
- */
-
-FcPublic FcChar32
-FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result);
-
-/* fcdbg.c */
-FcPublic void
-FcValuePrint (const FcValue v);
-
-FcPublic void
-FcPatternPrint (const FcPattern *p);
-
-FcPublic void
-FcFontSetPrint (const FcFontSet *s);
-
-/* fcdefault.c */
-FcPublic void
-FcDefaultSubstitute (FcPattern *pattern);
-
-/* fcdir.c */
-FcPublic FcBool
-FcFileIsDir (const FcChar8 *file);
-
-FcPublic FcBool
-FcFileScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcBool force);
-
-FcPublic FcBool
-FcDirScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force);
-
-FcPublic FcBool
-FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
-
-FcPublic FcCache *
-FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file);
-
-FcPublic FcCache *
-FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config);
-
-FcPublic FcCache *
-FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat);
-
-FcPublic void
-FcDirCacheUnload (FcCache *cache);
-
-/* fcfreetype.c */
-FcPublic FcPattern *
-FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count);
-
-/* fcfs.c */
-
-FcPublic FcFontSet *
-FcFontSetCreate (void);
-
-FcPublic void
-FcFontSetDestroy (FcFontSet *s);
-
-FcPublic FcBool
-FcFontSetAdd (FcFontSet *s, FcPattern *font);
-
-/* fcinit.c */
-FcPublic FcConfig *
-FcInitLoadConfig (void);
-
-FcPublic FcConfig *
-FcInitLoadConfigAndFonts (void);
-
-FcPublic FcBool
-FcInit (void);
-
-FcPublic void
-FcFini (void);
-
-FcPublic int
-FcGetVersion (void);
-
-FcPublic FcBool
-FcInitReinitialize (void);
-
-FcPublic FcBool
-FcInitBringUptoDate (void);
-
-/* fclang.c */
-FcPublic FcStrSet *
-FcGetLangs (void);
-
-FcPublic const FcCharSet *
-FcLangGetCharSet (const FcChar8 *lang);
-
-FcPublic FcLangSet*
-FcLangSetCreate (void);
-
-FcPublic void
-FcLangSetDestroy (FcLangSet *ls);
-
-FcPublic FcLangSet*
-FcLangSetCopy (const FcLangSet *ls);
-
-FcPublic FcBool
-FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang);
-
-FcPublic FcLangResult
-FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang);
-
-FcPublic FcLangResult
-FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcBool
-FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcBool
-FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcChar32
-FcLangSetHash (const FcLangSet *ls);
-
-FcPublic FcStrSet *
-FcLangSetGetLangs (const FcLangSet *ls);
-
-/* fclist.c */
-FcPublic FcObjectSet *
-FcObjectSetCreate (void);
-
-FcPublic FcBool
-FcObjectSetAdd (FcObjectSet *os, const char *object);
-
-FcPublic void
-FcObjectSetDestroy (FcObjectSet *os);
-
-FcPublic FcObjectSet *
-FcObjectSetVaBuild (const char *first, va_list va);
-
-FcPublic FcObjectSet *
-FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0);
-
-FcPublic FcFontSet *
-FcFontSetList (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcObjectSet *os);
-
-FcPublic FcFontSet *
-FcFontList (FcConfig *config,
- FcPattern *p,
- FcObjectSet *os);
-
-/* fcatomic.c */
-
-FcPublic FcAtomic *
-FcAtomicCreate (const FcChar8 *file);
-
-FcPublic FcBool
-FcAtomicLock (FcAtomic *atomic);
-
-FcPublic FcChar8 *
-FcAtomicNewFile (FcAtomic *atomic);
-
-FcPublic FcChar8 *
-FcAtomicOrigFile (FcAtomic *atomic);
-
-FcPublic FcBool
-FcAtomicReplaceOrig (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicDeleteNew (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicUnlock (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicDestroy (FcAtomic *atomic);
-
-/* fcmatch.c */
-FcPublic FcPattern *
-FcFontSetMatch (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result);
-
-FcPublic FcPattern *
-FcFontMatch (FcConfig *config,
- FcPattern *p,
- FcResult *result);
-
-FcPublic FcPattern *
-FcFontRenderPrepare (FcConfig *config,
- FcPattern *pat,
- FcPattern *font);
-
-FcPublic FcFontSet *
-FcFontSetSort (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result);
-
-FcPublic FcFontSet *
-FcFontSort (FcConfig *config,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result);
-
-FcPublic void
-FcFontSetSortDestroy (FcFontSet *fs);
-
-/* fcmatrix.c */
-FcPublic FcMatrix *
-FcMatrixCopy (const FcMatrix *mat);
-
-FcPublic FcBool
-FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2);
-
-FcPublic void
-FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b);
-
-FcPublic void
-FcMatrixRotate (FcMatrix *m, double c, double s);
-
-FcPublic void
-FcMatrixScale (FcMatrix *m, double sx, double sy);
-
-FcPublic void
-FcMatrixShear (FcMatrix *m, double sh, double sv);
-
-/* fcname.c */
-
-FcPublic FcBool
-FcNameRegisterObjectTypes (const FcObjectType *types, int ntype);
-
-FcPublic FcBool
-FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype);
-
-FcPublic const FcObjectType *
-FcNameGetObjectType (const char *object);
-
-FcPublic FcBool
-FcNameRegisterConstants (const FcConstant *consts, int nconsts);
-
-FcPublic FcBool
-FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
-
-FcPublic const FcConstant *
-FcNameGetConstant (FcChar8 *string);
-
-FcPublic FcBool
-FcNameConstant (FcChar8 *string, int *result);
-
-FcPublic FcPattern *
-FcNameParse (const FcChar8 *name);
-
-FcPublic FcChar8 *
-FcNameUnparse (FcPattern *pat);
-
-/* fcpat.c */
-FcPublic FcPattern *
-FcPatternCreate (void);
-
-FcPublic FcPattern *
-FcPatternDuplicate (const FcPattern *p);
-
-FcPublic void
-FcPatternReference (FcPattern *p);
-
-FcPublic FcPattern *
-FcPatternFilter (FcPattern *p, const FcObjectSet *os);
-
-FcPublic void
-FcValueDestroy (FcValue v);
-
-FcPublic FcBool
-FcValueEqual (FcValue va, FcValue vb);
-
-FcPublic FcValue
-FcValueSave (FcValue v);
-
-FcPublic void
-FcPatternDestroy (FcPattern *p);
-
-FcPublic FcBool
-FcPatternEqual (const FcPattern *pa, const FcPattern *pb);
-
-FcPublic FcBool
-FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os);
-
-FcPublic FcChar32
-FcPatternHash (const FcPattern *p);
-
-FcPublic FcBool
-FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
-
-FcPublic FcBool
-FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
-
-FcPublic FcResult
-FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
-
-FcPublic FcBool
-FcPatternDel (FcPattern *p, const char *object);
-
-FcPublic FcBool
-FcPatternRemove (FcPattern *p, const char *object, int id);
-
-FcPublic FcBool
-FcPatternAddInteger (FcPattern *p, const char *object, int i);
-
-FcPublic FcBool
-FcPatternAddDouble (FcPattern *p, const char *object, double d);
-
-FcPublic FcBool
-FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s);
-
-FcPublic FcBool
-FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s);
-
-FcPublic FcBool
-FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c);
-
-FcPublic FcBool
-FcPatternAddBool (FcPattern *p, const char *object, FcBool b);
-
-FcPublic FcBool
-FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls);
-
-FcPublic FcResult
-FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i);
-
-FcPublic FcResult
-FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d);
-
-FcPublic FcResult
-FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s);
-
-FcPublic FcResult
-FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s);
-
-FcPublic FcResult
-FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c);
-
-FcPublic FcResult
-FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b);
-
-FcPublic FcResult
-FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls);
-
-FcPublic FcPattern *
-FcPatternVaBuild (FcPattern *p, va_list va);
-
-FcPublic FcPattern *
-FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0);
-
-FcPublic FcChar8 *
-FcPatternFormat (FcPattern *pat, const FcChar8 *format);
-
-/* fcstr.c */
-
-FcPublic FcChar8 *
-FcStrCopy (const FcChar8 *s);
-
-FcPublic FcChar8 *
-FcStrCopyFilename (const FcChar8 *s);
-
-FcPublic FcChar8 *
-FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic void
-FcStrFree (FcChar8 *s);
-
-/* These are ASCII only, suitable only for pattern element names */
-#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132))
-#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172))
-#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
-
-FcPublic FcChar8 *
-FcStrDowncase (const FcChar8 *s);
-
-FcPublic int
-FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic int
-FcStrCmp (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic const FcChar8 *
-FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic const FcChar8 *
-FcStrStr (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic int
-FcUtf8ToUcs4 (const FcChar8 *src_orig,
- FcChar32 *dst,
- int len);
-
-FcPublic FcBool
-FcUtf8Len (const FcChar8 *string,
- int len,
- int *nchar,
- int *wchar);
-
-#define FC_UTF8_MAX_LEN 6
-
-FcPublic int
-FcUcs4ToUtf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN]);
-
-FcPublic int
-FcUtf16ToUcs4 (const FcChar8 *src_orig,
- FcEndian endian,
- FcChar32 *dst,
- int len); /* in bytes */
-
-FcPublic FcBool
-FcUtf16Len (const FcChar8 *string,
- FcEndian endian,
- int len, /* in bytes */
- int *nchar,
- int *wchar);
-
-FcPublic FcChar8 *
-FcStrDirname (const FcChar8 *file);
-
-FcPublic FcChar8 *
-FcStrBasename (const FcChar8 *file);
-
-FcPublic FcStrSet *
-FcStrSetCreate (void);
-
-FcPublic FcBool
-FcStrSetMember (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetEqual (FcStrSet *sa, FcStrSet *sb);
-
-FcPublic FcBool
-FcStrSetAdd (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetDel (FcStrSet *set, const FcChar8 *s);
-
-FcPublic void
-FcStrSetDestroy (FcStrSet *set);
-
-FcPublic FcStrList *
-FcStrListCreate (FcStrSet *set);
-
-FcPublic FcChar8 *
-FcStrListNext (FcStrList *list);
-
-FcPublic void
-FcStrListDone (FcStrList *list);
-
-/* fcxml.c */
-FcPublic FcBool
-FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain);
-
-_FCFUNCPROTOEND
-
-#undef FC_ATTRIBUTE_SENTINEL
-
-
-#ifndef _FCINT_H_
-
-/*
- * Deprecated functions are placed here to help users fix their code without
- * digging through documentation
- */
-
-#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval
-#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval
-
-#endif
-
-#endif /* _FONTCONFIG_H_ */
+/*
+ * fontconfig/fontconfig/fontconfig.h
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FONTCONFIG_H_
+#define _FONTCONFIG_H_
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdarg.h>
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
+#else
+#define FC_ATTRIBUTE_SENTINEL(x)
+#endif
+
+#ifndef FcPublic
+#define FcPublic
+#endif
+
+typedef unsigned char FcChar8;
+typedef unsigned short FcChar16;
+typedef unsigned int FcChar32;
+typedef int FcBool;
+
+/*
+ * Current Fontconfig version number. This same number
+ * must appear in the fontconfig configure.in file. Yes,
+ * it'a a pain to synchronize version numbers like this.
+ */
+
+#define FC_MAJOR 2
+#define FC_MINOR 8
+#define FC_REVISION 0
+
+#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
+
+/*
+ * Current font cache file format version
+ * This is appended to the cache files so that multiple
+ * versions of the library will peacefully coexist
+ *
+ * Change this value whenever the disk format for the cache file
+ * changes in any non-compatible way. Try to avoid such changes as
+ * it means multiple copies of the font information.
+ */
+
+#define FC_CACHE_VERSION "3"
+
+#define FcTrue 1
+#define FcFalse 0
+
+#define FC_FAMILY "family" /* String */
+#define FC_STYLE "style" /* String */
+#define FC_SLANT "slant" /* Int */
+#define FC_WEIGHT "weight" /* Int */
+#define FC_SIZE "size" /* Double */
+#define FC_ASPECT "aspect" /* Double */
+#define FC_PIXEL_SIZE "pixelsize" /* Double */
+#define FC_SPACING "spacing" /* Int */
+#define FC_FOUNDRY "foundry" /* String */
+#define FC_ANTIALIAS "antialias" /* Bool (depends) */
+#define FC_HINTING "hinting" /* Bool (true) */
+#define FC_HINT_STYLE "hintstyle" /* Int */
+#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */
+#define FC_AUTOHINT "autohint" /* Bool (false) */
+#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */
+#define FC_WIDTH "width" /* Int */
+#define FC_FILE "file" /* String */
+#define FC_INDEX "index" /* Int */
+#define FC_FT_FACE "ftface" /* FT_Face */
+#define FC_RASTERIZER "rasterizer" /* String */
+#define FC_OUTLINE "outline" /* Bool */
+#define FC_SCALABLE "scalable" /* Bool */
+#define FC_SCALE "scale" /* double */
+#define FC_DPI "dpi" /* double */
+#define FC_RGBA "rgba" /* Int */
+#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */
+#define FC_SOURCE "source" /* String (deprecated) */
+#define FC_CHARSET "charset" /* CharSet */
+#define FC_LANG "lang" /* String RFC 3066 langs */
+#define FC_FONTVERSION "fontversion" /* Int from 'head' table */
+#define FC_FULLNAME "fullname" /* String */
+#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */
+#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */
+#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */
+#define FC_CAPABILITY "capability" /* String */
+#define FC_FONTFORMAT "fontformat" /* String */
+#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/
+#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */
+#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */
+#define FC_LCD_FILTER "lcdfilter" /* Int */
+
+#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION
+#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION
+#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION
+
+/* Adjust outline rasterizer */
+#define FC_CHAR_WIDTH "charwidth" /* Int */
+#define FC_CHAR_HEIGHT "charheight"/* Int */
+#define FC_MATRIX "matrix" /* FcMatrix */
+
+#define FC_WEIGHT_THIN 0
+#define FC_WEIGHT_EXTRALIGHT 40
+#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT
+#define FC_WEIGHT_LIGHT 50
+#define FC_WEIGHT_BOOK 75
+#define FC_WEIGHT_REGULAR 80
+#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR
+#define FC_WEIGHT_MEDIUM 100
+#define FC_WEIGHT_DEMIBOLD 180
+#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD
+#define FC_WEIGHT_BOLD 200
+#define FC_WEIGHT_EXTRABOLD 205
+#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD
+#define FC_WEIGHT_BLACK 210
+#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK
+#define FC_WEIGHT_EXTRABLACK 215
+#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK
+
+#define FC_SLANT_ROMAN 0
+#define FC_SLANT_ITALIC 100
+#define FC_SLANT_OBLIQUE 110
+
+#define FC_WIDTH_ULTRACONDENSED 50
+#define FC_WIDTH_EXTRACONDENSED 63
+#define FC_WIDTH_CONDENSED 75
+#define FC_WIDTH_SEMICONDENSED 87
+#define FC_WIDTH_NORMAL 100
+#define FC_WIDTH_SEMIEXPANDED 113
+#define FC_WIDTH_EXPANDED 125
+#define FC_WIDTH_EXTRAEXPANDED 150
+#define FC_WIDTH_ULTRAEXPANDED 200
+
+#define FC_PROPORTIONAL 0
+#define FC_DUAL 90
+#define FC_MONO 100
+#define FC_CHARCELL 110
+
+/* sub-pixel order */
+#define FC_RGBA_UNKNOWN 0
+#define FC_RGBA_RGB 1
+#define FC_RGBA_BGR 2
+#define FC_RGBA_VRGB 3
+#define FC_RGBA_VBGR 4
+#define FC_RGBA_NONE 5
+
+/* hinting style */
+#define FC_HINT_NONE 0
+#define FC_HINT_SLIGHT 1
+#define FC_HINT_MEDIUM 2
+#define FC_HINT_FULL 3
+
+/* LCD filter */
+#define FC_LCD_NONE 0
+#define FC_LCD_DEFAULT 1
+#define FC_LCD_LIGHT 2
+#define FC_LCD_LEGACY 3
+
+typedef enum _FcType {
+ FcTypeVoid,
+ FcTypeInteger,
+ FcTypeDouble,
+ FcTypeString,
+ FcTypeBool,
+ FcTypeMatrix,
+ FcTypeCharSet,
+ FcTypeFTFace,
+ FcTypeLangSet
+} FcType;
+
+typedef struct _FcMatrix {
+ double xx, xy, yx, yy;
+} FcMatrix;
+
+#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \
+ (m)->xy = (m)->yx = 0)
+
+/*
+ * A data structure to represent the available glyphs in a font.
+ * This is represented as a sparse boolean btree.
+ */
+
+typedef struct _FcCharSet FcCharSet;
+
+typedef struct _FcObjectType {
+ const char *object;
+ FcType type;
+} FcObjectType;
+
+typedef struct _FcConstant {
+ const FcChar8 *name;
+ const char *object;
+ int value;
+} FcConstant;
+
+typedef enum _FcResult {
+ FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
+ FcResultOutOfMemory
+} FcResult;
+
+typedef struct _FcPattern FcPattern;
+
+typedef struct _FcLangSet FcLangSet;
+
+typedef struct _FcValue {
+ FcType type;
+ union {
+ const FcChar8 *s;
+ int i;
+ FcBool b;
+ double d;
+ const FcMatrix *m;
+ const FcCharSet *c;
+ void *f;
+ const FcLangSet *l;
+ } u;
+} FcValue;
+
+typedef struct _FcFontSet {
+ int nfont;
+ int sfont;
+ FcPattern **fonts;
+} FcFontSet;
+
+typedef struct _FcObjectSet {
+ int nobject;
+ int sobject;
+ const char **objects;
+} FcObjectSet;
+
+typedef enum _FcMatchKind {
+ FcMatchPattern, FcMatchFont, FcMatchScan
+} FcMatchKind;
+
+typedef enum _FcLangResult {
+ FcLangEqual = 0,
+ FcLangDifferentCountry = 1,
+ FcLangDifferentTerritory = 1,
+ FcLangDifferentLang = 2
+} FcLangResult;
+
+typedef enum _FcSetName {
+ FcSetSystem = 0,
+ FcSetApplication = 1
+} FcSetName;
+
+typedef struct _FcAtomic FcAtomic;
+
+#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */
+#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */
+#define _FCFUNCPROTOEND }
+#else
+#define _FCFUNCPROTOBEGIN
+#define _FCFUNCPROTOEND
+#endif
+
+typedef enum { FcEndianBig, FcEndianLittle } FcEndian;
+
+typedef struct _FcConfig FcConfig;
+
+typedef struct _FcGlobalCache FcFileCache;
+
+typedef struct _FcBlanks FcBlanks;
+
+typedef struct _FcStrList FcStrList;
+
+typedef struct _FcStrSet FcStrSet;
+
+typedef struct _FcCache FcCache;
+
+_FCFUNCPROTOBEGIN
+
+/* fcblanks.c */
+FcPublic FcBlanks *
+FcBlanksCreate (void);
+
+FcPublic void
+FcBlanksDestroy (FcBlanks *b);
+
+FcPublic FcBool
+FcBlanksAdd (FcBlanks *b, FcChar32 ucs4);
+
+FcPublic FcBool
+FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4);
+
+/* fccache.c */
+
+FcPublic const FcChar8 *
+FcCacheDir(const FcCache *c);
+
+FcPublic FcFontSet *
+FcCacheCopySet(const FcCache *c);
+
+FcPublic const FcChar8 *
+FcCacheSubdir (const FcCache *c, int i);
+
+FcPublic int
+FcCacheNumSubdir (const FcCache *c);
+
+FcPublic int
+FcCacheNumFont (const FcCache *c);
+
+FcPublic FcBool
+FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config);
+
+FcPublic FcBool
+FcDirCacheValid (const FcChar8 *cache_file);
+
+/* fccfg.c */
+FcPublic FcChar8 *
+FcConfigHome (void);
+
+FcPublic FcBool
+FcConfigEnableHome (FcBool enable);
+
+FcPublic FcChar8 *
+FcConfigFilename (const FcChar8 *url);
+
+FcPublic FcConfig *
+FcConfigCreate (void);
+
+FcPublic FcConfig *
+FcConfigReference (FcConfig *config);
+
+FcPublic void
+FcConfigDestroy (FcConfig *config);
+
+FcPublic FcBool
+FcConfigSetCurrent (FcConfig *config);
+
+FcPublic FcConfig *
+FcConfigGetCurrent (void);
+
+FcPublic FcBool
+FcConfigUptoDate (FcConfig *config);
+
+FcPublic FcBool
+FcConfigBuildFonts (FcConfig *config);
+
+FcPublic FcStrList *
+FcConfigGetFontDirs (FcConfig *config);
+
+FcPublic FcStrList *
+FcConfigGetConfigDirs (FcConfig *config);
+
+FcPublic FcStrList *
+FcConfigGetConfigFiles (FcConfig *config);
+
+FcPublic FcChar8 *
+FcConfigGetCache (FcConfig *config);
+
+FcPublic FcBlanks *
+FcConfigGetBlanks (FcConfig *config);
+
+FcPublic FcStrList *
+FcConfigGetCacheDirs (FcConfig *config);
+
+FcPublic int
+FcConfigGetRescanInterval (FcConfig *config);
+
+FcPublic FcBool
+FcConfigSetRescanInterval (FcConfig *config, int rescanInterval);
+
+FcPublic FcFontSet *
+FcConfigGetFonts (FcConfig *config,
+ FcSetName set);
+
+FcPublic FcBool
+FcConfigAppFontAddFile (FcConfig *config,
+ const FcChar8 *file);
+
+FcPublic FcBool
+FcConfigAppFontAddDir (FcConfig *config,
+ const FcChar8 *dir);
+
+FcPublic void
+FcConfigAppFontClear (FcConfig *config);
+
+FcPublic FcBool
+FcConfigSubstituteWithPat (FcConfig *config,
+ FcPattern *p,
+ FcPattern *p_pat,
+ FcMatchKind kind);
+
+FcPublic FcBool
+FcConfigSubstitute (FcConfig *config,
+ FcPattern *p,
+ FcMatchKind kind);
+
+/* fccharset.c */
+FcPublic FcCharSet*
+FcCharSetCreate (void);
+
+/* deprecated alias for FcCharSetCreate */
+FcPublic FcCharSet *
+FcCharSetNew (void);
+
+FcPublic void
+FcCharSetDestroy (FcCharSet *fcs);
+
+FcPublic FcBool
+FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4);
+
+FcPublic FcBool
+FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4);
+
+FcPublic FcCharSet*
+FcCharSetCopy (FcCharSet *src);
+
+FcPublic FcBool
+FcCharSetEqual (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcCharSet*
+FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcCharSet*
+FcCharSetUnion (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcCharSet*
+FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcBool
+FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed);
+
+FcPublic FcBool
+FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4);
+
+FcPublic FcChar32
+FcCharSetCount (const FcCharSet *a);
+
+FcPublic FcChar32
+FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcChar32
+FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b);
+
+FcPublic FcBool
+FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b);
+
+#define FC_CHARSET_MAP_SIZE (256/32)
+#define FC_CHARSET_DONE ((FcChar32) -1)
+
+FcPublic FcChar32
+FcCharSetFirstPage (const FcCharSet *a,
+ FcChar32 map[FC_CHARSET_MAP_SIZE],
+ FcChar32 *next);
+
+FcPublic FcChar32
+FcCharSetNextPage (const FcCharSet *a,
+ FcChar32 map[FC_CHARSET_MAP_SIZE],
+ FcChar32 *next);
+
+/*
+ * old coverage API, rather hard to use correctly
+ */
+
+FcPublic FcChar32
+FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result);
+
+/* fcdbg.c */
+FcPublic void
+FcValuePrint (const FcValue v);
+
+FcPublic void
+FcPatternPrint (const FcPattern *p);
+
+FcPublic void
+FcFontSetPrint (const FcFontSet *s);
+
+/* fcdefault.c */
+FcPublic void
+FcDefaultSubstitute (FcPattern *pattern);
+
+/* fcdir.c */
+FcPublic FcBool
+FcFileIsDir (const FcChar8 *file);
+
+FcPublic FcBool
+FcFileScan (FcFontSet *set,
+ FcStrSet *dirs,
+ FcFileCache *cache,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcBool force);
+
+FcPublic FcBool
+FcDirScan (FcFontSet *set,
+ FcStrSet *dirs,
+ FcFileCache *cache,
+ FcBlanks *blanks,
+ const FcChar8 *dir,
+ FcBool force);
+
+FcPublic FcBool
+FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
+
+FcPublic FcCache *
+FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file);
+
+FcPublic FcCache *
+FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config);
+
+FcPublic FcCache *
+FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat);
+
+FcPublic void
+FcDirCacheUnload (FcCache *cache);
+
+/* fcfreetype.c */
+FcPublic FcPattern *
+FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count);
+
+/* fcfs.c */
+
+FcPublic FcFontSet *
+FcFontSetCreate (void);
+
+FcPublic void
+FcFontSetDestroy (FcFontSet *s);
+
+FcPublic FcBool
+FcFontSetAdd (FcFontSet *s, FcPattern *font);
+
+/* fcinit.c */
+FcPublic FcConfig *
+FcInitLoadConfig (void);
+
+FcPublic FcConfig *
+FcInitLoadConfigAndFonts (void);
+
+FcPublic FcBool
+FcInit (void);
+
+FcPublic void
+FcFini (void);
+
+FcPublic int
+FcGetVersion (void);
+
+FcPublic FcBool
+FcInitReinitialize (void);
+
+FcPublic FcBool
+FcInitBringUptoDate (void);
+
+/* fclang.c */
+FcPublic FcStrSet *
+FcGetLangs (void);
+
+FcPublic const FcCharSet *
+FcLangGetCharSet (const FcChar8 *lang);
+
+FcPublic FcLangSet*
+FcLangSetCreate (void);
+
+FcPublic void
+FcLangSetDestroy (FcLangSet *ls);
+
+FcPublic FcLangSet*
+FcLangSetCopy (const FcLangSet *ls);
+
+FcPublic FcBool
+FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang);
+
+FcPublic FcBool
+FcLangSetDel (FcLangSet *ls, const FcChar8 *lang);
+
+FcPublic FcLangResult
+FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang);
+
+FcPublic FcLangResult
+FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcPublic FcBool
+FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcPublic FcBool
+FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb);
+
+FcPublic FcChar32
+FcLangSetHash (const FcLangSet *ls);
+
+FcPublic FcStrSet *
+FcLangSetGetLangs (const FcLangSet *ls);
+
+FcLangSet *
+FcLangSetUnion (const FcLangSet *a, const FcLangSet *b);
+
+FcLangSet *
+FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b);
+
+/* fclist.c */
+FcPublic FcObjectSet *
+FcObjectSetCreate (void);
+
+FcPublic FcBool
+FcObjectSetAdd (FcObjectSet *os, const char *object);
+
+FcPublic void
+FcObjectSetDestroy (FcObjectSet *os);
+
+FcPublic FcObjectSet *
+FcObjectSetVaBuild (const char *first, va_list va);
+
+FcPublic FcObjectSet *
+FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0);
+
+FcPublic FcFontSet *
+FcFontSetList (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcObjectSet *os);
+
+FcPublic FcFontSet *
+FcFontList (FcConfig *config,
+ FcPattern *p,
+ FcObjectSet *os);
+
+/* fcatomic.c */
+
+FcPublic FcAtomic *
+FcAtomicCreate (const FcChar8 *file);
+
+FcPublic FcBool
+FcAtomicLock (FcAtomic *atomic);
+
+FcPublic FcChar8 *
+FcAtomicNewFile (FcAtomic *atomic);
+
+FcPublic FcChar8 *
+FcAtomicOrigFile (FcAtomic *atomic);
+
+FcPublic FcBool
+FcAtomicReplaceOrig (FcAtomic *atomic);
+
+FcPublic void
+FcAtomicDeleteNew (FcAtomic *atomic);
+
+FcPublic void
+FcAtomicUnlock (FcAtomic *atomic);
+
+FcPublic void
+FcAtomicDestroy (FcAtomic *atomic);
+
+/* fcmatch.c */
+FcPublic FcPattern *
+FcFontSetMatch (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcResult *result);
+
+FcPublic FcPattern *
+FcFontMatch (FcConfig *config,
+ FcPattern *p,
+ FcResult *result);
+
+FcPublic FcPattern *
+FcFontRenderPrepare (FcConfig *config,
+ FcPattern *pat,
+ FcPattern *font);
+
+FcPublic FcFontSet *
+FcFontSetSort (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcBool trim,
+ FcCharSet **csp,
+ FcResult *result);
+
+FcPublic FcFontSet *
+FcFontSort (FcConfig *config,
+ FcPattern *p,
+ FcBool trim,
+ FcCharSet **csp,
+ FcResult *result);
+
+FcPublic void
+FcFontSetSortDestroy (FcFontSet *fs);
+
+/* fcmatrix.c */
+FcPublic FcMatrix *
+FcMatrixCopy (const FcMatrix *mat);
+
+FcPublic FcBool
+FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2);
+
+FcPublic void
+FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b);
+
+FcPublic void
+FcMatrixRotate (FcMatrix *m, double c, double s);
+
+FcPublic void
+FcMatrixScale (FcMatrix *m, double sx, double sy);
+
+FcPublic void
+FcMatrixShear (FcMatrix *m, double sh, double sv);
+
+/* fcname.c */
+
+FcPublic FcBool
+FcNameRegisterObjectTypes (const FcObjectType *types, int ntype);
+
+FcPublic FcBool
+FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype);
+
+FcPublic const FcObjectType *
+FcNameGetObjectType (const char *object);
+
+FcPublic FcBool
+FcNameRegisterConstants (const FcConstant *consts, int nconsts);
+
+FcPublic FcBool
+FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
+
+FcPublic const FcConstant *
+FcNameGetConstant (FcChar8 *string);
+
+FcPublic FcBool
+FcNameConstant (FcChar8 *string, int *result);
+
+FcPublic FcPattern *
+FcNameParse (const FcChar8 *name);
+
+FcPublic FcChar8 *
+FcNameUnparse (FcPattern *pat);
+
+/* fcpat.c */
+FcPublic FcPattern *
+FcPatternCreate (void);
+
+FcPublic FcPattern *
+FcPatternDuplicate (const FcPattern *p);
+
+FcPublic void
+FcPatternReference (FcPattern *p);
+
+FcPublic FcPattern *
+FcPatternFilter (FcPattern *p, const FcObjectSet *os);
+
+FcPublic void
+FcValueDestroy (FcValue v);
+
+FcPublic FcBool
+FcValueEqual (FcValue va, FcValue vb);
+
+FcPublic FcValue
+FcValueSave (FcValue v);
+
+FcPublic void
+FcPatternDestroy (FcPattern *p);
+
+FcPublic FcBool
+FcPatternEqual (const FcPattern *pa, const FcPattern *pb);
+
+FcPublic FcBool
+FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os);
+
+FcPublic FcChar32
+FcPatternHash (const FcPattern *p);
+
+FcPublic FcBool
+FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
+
+FcPublic FcBool
+FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
+
+FcPublic FcResult
+FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
+
+FcPublic FcBool
+FcPatternDel (FcPattern *p, const char *object);
+
+FcPublic FcBool
+FcPatternRemove (FcPattern *p, const char *object, int id);
+
+FcPublic FcBool
+FcPatternAddInteger (FcPattern *p, const char *object, int i);
+
+FcPublic FcBool
+FcPatternAddDouble (FcPattern *p, const char *object, double d);
+
+FcPublic FcBool
+FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s);
+
+FcPublic FcBool
+FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s);
+
+FcPublic FcBool
+FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c);
+
+FcPublic FcBool
+FcPatternAddBool (FcPattern *p, const char *object, FcBool b);
+
+FcPublic FcBool
+FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls);
+
+FcPublic FcResult
+FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i);
+
+FcPublic FcResult
+FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d);
+
+FcPublic FcResult
+FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s);
+
+FcPublic FcResult
+FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s);
+
+FcPublic FcResult
+FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c);
+
+FcPublic FcResult
+FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b);
+
+FcPublic FcResult
+FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls);
+
+FcPublic FcPattern *
+FcPatternVaBuild (FcPattern *p, va_list va);
+
+FcPublic FcPattern *
+FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0);
+
+FcPublic FcChar8 *
+FcPatternFormat (FcPattern *pat, const FcChar8 *format);
+
+/* fcstr.c */
+
+FcPublic FcChar8 *
+FcStrCopy (const FcChar8 *s);
+
+FcPublic FcChar8 *
+FcStrCopyFilename (const FcChar8 *s);
+
+FcPublic FcChar8 *
+FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPublic void
+FcStrFree (FcChar8 *s);
+
+/* These are ASCII only, suitable only for pattern element names */
+#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132))
+#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172))
+#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
+
+FcPublic FcChar8 *
+FcStrDowncase (const FcChar8 *s);
+
+FcPublic int
+FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPublic int
+FcStrCmp (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPublic const FcChar8 *
+FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPublic const FcChar8 *
+FcStrStr (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPublic int
+FcUtf8ToUcs4 (const FcChar8 *src_orig,
+ FcChar32 *dst,
+ int len);
+
+FcPublic FcBool
+FcUtf8Len (const FcChar8 *string,
+ int len,
+ int *nchar,
+ int *wchar);
+
+#define FC_UTF8_MAX_LEN 6
+
+FcPublic int
+FcUcs4ToUtf8 (FcChar32 ucs4,
+ FcChar8 dest[FC_UTF8_MAX_LEN]);
+
+FcPublic int
+FcUtf16ToUcs4 (const FcChar8 *src_orig,
+ FcEndian endian,
+ FcChar32 *dst,
+ int len); /* in bytes */
+
+FcPublic FcBool
+FcUtf16Len (const FcChar8 *string,
+ FcEndian endian,
+ int len, /* in bytes */
+ int *nchar,
+ int *wchar);
+
+FcPublic FcChar8 *
+FcStrDirname (const FcChar8 *file);
+
+FcPublic FcChar8 *
+FcStrBasename (const FcChar8 *file);
+
+FcPublic FcStrSet *
+FcStrSetCreate (void);
+
+FcPublic FcBool
+FcStrSetMember (FcStrSet *set, const FcChar8 *s);
+
+FcPublic FcBool
+FcStrSetEqual (FcStrSet *sa, FcStrSet *sb);
+
+FcPublic FcBool
+FcStrSetAdd (FcStrSet *set, const FcChar8 *s);
+
+FcPublic FcBool
+FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s);
+
+FcPublic FcBool
+FcStrSetDel (FcStrSet *set, const FcChar8 *s);
+
+FcPublic void
+FcStrSetDestroy (FcStrSet *set);
+
+FcPublic FcStrList *
+FcStrListCreate (FcStrSet *set);
+
+FcPublic FcChar8 *
+FcStrListNext (FcStrList *list);
+
+FcPublic void
+FcStrListDone (FcStrList *list);
+
+/* fcxml.c */
+FcPublic FcBool
+FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain);
+
+_FCFUNCPROTOEND
+
+#undef FC_ATTRIBUTE_SENTINEL
+
+
+#ifndef _FCINT_H_
+
+/*
+ * Deprecated functions are placed here to help users fix their code without
+ * digging through documentation
+ */
+
+#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval
+#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval
+
+#endif
+
+#endif /* _FONTCONFIG_H_ */
diff --git a/fontconfig/fonts.dtd b/fontconfig/fonts.dtd
index cbdfdab3f..3e315b840 100644
--- a/fontconfig/fonts.dtd
+++ b/fontconfig/fonts.dtd
@@ -1,224 +1,225 @@
-<!-- This is the Document Type Definition for font configuration files -->
-<!ELEMENT fontconfig (dir |
- cache |
- cachedir |
- include |
- config |
- selectfont |
- match |
- alias)* >
-
-<!--
- Add a directory that provides fonts
--->
-<!ELEMENT dir (#PCDATA)>
-<!ATTLIST dir xml:space (default|preserve) 'preserve'>
-
-<!--
- Define the per-user file that holds cache font information.
-
- If the filename begins with '~', it is replaced with the users
- home directory path.
--->
-<!ELEMENT cache (#PCDATA)>
-<!ATTLIST cache xml:space (default|preserve) 'preserve'>
-
-<!--
- Add a directory that is searched for font cache files.
- These hold per-directory cache data and are searched in
- order for each directory. When writing cache files, the first
- directory which allows the cache file to be created is used.
-
- A leading '~' in a directory name is replaced with the users
- home directory path.
--->
-<!ELEMENT cachedir (#PCDATA)>
-<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
-
-<!--
- Reference another configuration file; note that this
- is another complete font configuration file and not
- just a file included by the XML parser.
-
- Set 'ignore_missing' to 'yes' if errors are to be ignored.
-
- If the filename begins with '~', it is replaced with the users
- home directory path.
--->
-<!ELEMENT include (#PCDATA)>
-<!ATTLIST include
- ignore_missing (no|yes) "no"
- xml:space (default|preserve) "preserve">
-
-<!--
- Global library configuration data
- -->
-<!ELEMENT config (blank|rescan)*>
-
-<!--
- Specify the set of Unicode encoding values which
- represent glyphs that are allowed to contain no
- data. With this list, fontconfig can examine
- fonts for broken glyphs and eliminate them from
- the set of valid Unicode chars. This idea
- was borrowed from Mozilla
- -->
-<!ELEMENT blank (int)*>
-
-<!--
- Aliases are just a special case for multiple match elements
-
- They are syntactically equivalent to:
-
- <match>
- <test name="family">
- <string value=[family]/>
- </test>
- <edit name="family" mode="prepend">
- <string value=[prefer]/>
- ...
- </edit>
- <edit name="family" mode="append">
- <string value=[accept]/>
- ...
- </edit>
- <edit name="family" mode="append_last">
- <string value=[default]/>
- ...
- </edit>
- </match>
--->
-<!--
- Periodically rescan the font configuration and
- directories to synch internal state with filesystem
- -->
-<!ELEMENT rescan (int)>
-
-<!--
- Edit list of available fonts at startup/reload time
- -->
-<!ELEMENT selectfont (rejectfont | acceptfont)* >
-
-<!ELEMENT rejectfont (glob | pattern)*>
-
-<!ELEMENT acceptfont (glob | pattern)*>
-
-<!ELEMENT glob (#PCDATA)>
-
-<!ELEMENT pattern (patelt)*>
-
-<!ENTITY % constant 'int|double|string|matrix|bool|charset|const'>
-
-<!ELEMENT patelt (%constant;)*>
-<!ATTLIST patelt
- name CDATA #REQUIRED>
-
-<!ELEMENT alias (family*, prefer?, accept?, default?)>
-<!ATTLIST alias
- binding (weak|strong|same) "weak">
-<!ELEMENT prefer (family)*>
-<!ELEMENT accept (family)*>
-<!ELEMENT default (family)*>
-<!ELEMENT family (#PCDATA)>
-<!ATTLIST family xml:space (default|preserve) 'preserve'>
-
-<!ENTITY % expr 'int|double|string|matrix|bool|charset
- |name|const
- |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
- |plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
-
-<!--
- Match and edit patterns.
-
- If 'target' is 'pattern', execute the match before selecting a font.
- if 'target' is 'font', execute the match on the result of a font
- selection.
--->
-<!ELEMENT match (test*, edit*)>
-<!ATTLIST match
- target (pattern|font|scan) "pattern">
-
-<!--
- Match a field in a pattern
-
- if 'qual' is 'any', then the match succeeds if any value in the field matches.
- if 'qual' is 'all', then the match succeeds only if all values match.
- if 'qual' is 'first', then the match succeeds only if the first value matches.
- if 'qual' is 'not_first', then the match succeeds only if any value other than
- the first matches.
- For match elements with target=font, if test 'target' is 'pattern',
- then the test is applied to the pattern used in matching rather than
- to the resulting font.
-
- Match elements with target=scan are applied as fonts are scanned.
- They edit the pattern generated from the scanned font and affect
- what the fontconfig database contains.
--->
-<!ELEMENT test (%expr;)*>
-<!ATTLIST test
- qual (any|all|first|not_first) "any"
- name CDATA #REQUIRED
- target (pattern|font|default) "default"
- compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq">
-
-<!--
- Edit a field in a pattern
-
- The enclosed values are used together to edit the list of values
- associated with 'name'.
-
- If 'name' matches one of those used in a test element for this match element:
- if 'mode' is 'assign', replace the matched value.
- if 'mode' is 'assign_replace', replace all of the values
- if 'mode' is 'prepend', insert before the matched value
- if 'mode' is 'append', insert after the matched value
- if 'mode' is 'prepend_first', insert before all of the values
- if 'mode' is 'append_last', insert after all of the values
- If 'name' doesn't match any of those used in a test element:
- if 'mode' is 'assign' or 'assign_replace, replace all of the values
- if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
- if 'mode' is 'append' or 'append_last', insert after all of the values
--->
-<!ELEMENT edit (%expr;)*>
-<!ATTLIST edit
- name CDATA #REQUIRED
- mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
- binding (weak|strong|same) "weak">
-
-<!--
- Elements of expressions follow
--->
-<!ELEMENT int (#PCDATA)>
-<!ATTLIST int xml:space (default|preserve) 'preserve'>
-<!ELEMENT double (#PCDATA)>
-<!ATTLIST double xml:space (default|preserve) 'preserve'>
-<!ELEMENT string (#PCDATA)>
-<!ATTLIST string xml:space (default|preserve) 'preserve'>
-<!ELEMENT matrix (double,double,double,double)>
-<!ELEMENT bool (#PCDATA)>
-<!ELEMENT charset (#PCDATA)>
-<!ATTLIST charset xml:space (default|preserve) 'preserve'>
-<!ELEMENT name (#PCDATA)>
-<!ATTLIST name xml:space (default|preserve) 'preserve'>
-<!ELEMENT const (#PCDATA)>
-<!ATTLIST const xml:space (default|preserve) 'preserve'>
-<!ELEMENT or (%expr;)*>
-<!ELEMENT and (%expr;)*>
-<!ELEMENT eq ((%expr;), (%expr;))>
-<!ELEMENT not_eq ((%expr;), (%expr;))>
-<!ELEMENT less ((%expr;), (%expr;))>
-<!ELEMENT less_eq ((%expr;), (%expr;))>
-<!ELEMENT more ((%expr;), (%expr;))>
-<!ELEMENT more_eq ((%expr;), (%expr;))>
-<!ELEMENT contains ((%expr;), (%expr;))>
-<!ELEMENT not_contains ((%expr;), (%expr;))>
-<!ELEMENT plus (%expr;)*>
-<!ELEMENT minus (%expr;)*>
-<!ELEMENT times (%expr;)*>
-<!ELEMENT divide (%expr;)*>
-<!ELEMENT not (%expr;)>
-<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
-<!ELEMENT floor (%expr;)>
-<!ELEMENT ceil (%expr;)>
-<!ELEMENT round (%expr;)>
-<!ELEMENT trunc (%expr;)>
+<!-- This is the Document Type Definition for font configuration files -->
+<!ELEMENT fontconfig (dir |
+ cache |
+ cachedir |
+ include |
+ config |
+ selectfont |
+ match |
+ alias)* >
+
+<!--
+ Add a directory that provides fonts
+-->
+<!ELEMENT dir (#PCDATA)>
+<!ATTLIST dir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Define the per-user file that holds cache font information.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cache (#PCDATA)>
+<!ATTLIST cache xml:space (default|preserve) 'preserve'>
+
+<!--
+ Add a directory that is searched for font cache files.
+ These hold per-directory cache data and are searched in
+ order for each directory. When writing cache files, the first
+ directory which allows the cache file to be created is used.
+
+ A leading '~' in a directory name is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cachedir (#PCDATA)>
+<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Reference another configuration file; note that this
+ is another complete font configuration file and not
+ just a file included by the XML parser.
+
+ Set 'ignore_missing' to 'yes' if errors are to be ignored.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+ ignore_missing (no|yes) "no"
+ xml:space (default|preserve) "preserve">
+
+<!--
+ Global library configuration data
+ -->
+<!ELEMENT config (blank|rescan)*>
+
+<!--
+ Specify the set of Unicode encoding values which
+ represent glyphs that are allowed to contain no
+ data. With this list, fontconfig can examine
+ fonts for broken glyphs and eliminate them from
+ the set of valid Unicode chars. This idea
+ was borrowed from Mozilla
+ -->
+<!ELEMENT blank (int|range)*>
+
+<!--
+ Aliases are just a special case for multiple match elements
+
+ They are syntactically equivalent to:
+
+ <match>
+ <test name="family">
+ <string value=[family]/>
+ </test>
+ <edit name="family" mode="prepend">
+ <string value=[prefer]/>
+ ...
+ </edit>
+ <edit name="family" mode="append">
+ <string value=[accept]/>
+ ...
+ </edit>
+ <edit name="family" mode="append_last">
+ <string value=[default]/>
+ ...
+ </edit>
+ </match>
+-->
+<!--
+ Periodically rescan the font configuration and
+ directories to synch internal state with filesystem
+ -->
+<!ELEMENT rescan (int)>
+
+<!--
+ Edit list of available fonts at startup/reload time
+ -->
+<!ELEMENT selectfont (rejectfont | acceptfont)* >
+
+<!ELEMENT rejectfont (glob | pattern)*>
+
+<!ELEMENT acceptfont (glob | pattern)*>
+
+<!ELEMENT glob (#PCDATA)>
+
+<!ELEMENT pattern (patelt)*>
+
+<!ENTITY % constant 'int|double|string|matrix|bool|charset|langset|const'>
+
+<!ELEMENT patelt (%constant;)*>
+<!ATTLIST patelt
+ name CDATA #REQUIRED>
+
+<!ELEMENT alias (family*, prefer?, accept?, default?)>
+<!ATTLIST alias
+ binding (weak|strong|same) "weak">
+<!ELEMENT prefer (family)*>
+<!ELEMENT accept (family)*>
+<!ELEMENT default (family)*>
+<!ELEMENT family (#PCDATA)>
+<!ATTLIST family xml:space (default|preserve) 'preserve'>
+
+<!ENTITY % expr 'int|double|string|matrix|bool|charset|langset
+ |name|const
+ |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
+ |plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
+
+<!--
+ Match and edit patterns.
+
+ If 'target' is 'pattern', execute the match before selecting a font.
+ if 'target' is 'font', execute the match on the result of a font
+ selection.
+-->
+<!ELEMENT match (test*, edit*)>
+<!ATTLIST match
+ target (pattern|font|scan) "pattern">
+
+<!--
+ Match a field in a pattern
+
+ if 'qual' is 'any', then the match succeeds if any value in the field matches.
+ if 'qual' is 'all', then the match succeeds only if all values match.
+ if 'qual' is 'first', then the match succeeds only if the first value matches.
+ if 'qual' is 'not_first', then the match succeeds only if any value other than
+ the first matches.
+ For match elements with target=font, if test 'target' is 'pattern',
+ then the test is applied to the pattern used in matching rather than
+ to the resulting font.
+
+ Match elements with target=scan are applied as fonts are scanned.
+ They edit the pattern generated from the scanned font and affect
+ what the fontconfig database contains.
+-->
+<!ELEMENT test (%expr;)*>
+<!ATTLIST test
+ qual (any|all|first|not_first) "any"
+ name CDATA #REQUIRED
+ target (pattern|font|default) "default"
+ compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq">
+
+<!--
+ Edit a field in a pattern
+
+ The enclosed values are used together to edit the list of values
+ associated with 'name'.
+
+ If 'name' matches one of those used in a test element for this match element:
+ if 'mode' is 'assign', replace the matched value.
+ if 'mode' is 'assign_replace', replace all of the values
+ if 'mode' is 'prepend', insert before the matched value
+ if 'mode' is 'append', insert after the matched value
+ if 'mode' is 'prepend_first', insert before all of the values
+ if 'mode' is 'append_last', insert after all of the values
+ If 'name' doesn't match any of those used in a test element:
+ if 'mode' is 'assign' or 'assign_replace, replace all of the values
+ if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
+ if 'mode' is 'append' or 'append_last', insert after all of the values
+-->
+<!ELEMENT edit (%expr;)*>
+<!ATTLIST edit
+ name CDATA #REQUIRED
+ mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
+ binding (weak|strong|same) "weak">
+
+<!--
+ Elements of expressions follow
+-->
+<!ELEMENT int (#PCDATA)>
+<!ATTLIST int xml:space (default|preserve) 'preserve'>
+<!ELEMENT double (#PCDATA)>
+<!ATTLIST double xml:space (default|preserve) 'preserve'>
+<!ELEMENT string (#PCDATA)>
+<!ATTLIST string xml:space (default|preserve) 'preserve'>
+<!ELEMENT matrix (double,double,double,double)>
+<!ELEMENT bool (#PCDATA)>
+<!ELEMENT charset (int|range)*>
+<!ELEMENT range (int,int)>
+<!ELEMENT langset (string)*>
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name xml:space (default|preserve) 'preserve'>
+<!ELEMENT const (#PCDATA)>
+<!ATTLIST const xml:space (default|preserve) 'preserve'>
+<!ELEMENT or (%expr;)*>
+<!ELEMENT and (%expr;)*>
+<!ELEMENT eq ((%expr;), (%expr;))>
+<!ELEMENT not_eq ((%expr;), (%expr;))>
+<!ELEMENT less ((%expr;), (%expr;))>
+<!ELEMENT less_eq ((%expr;), (%expr;))>
+<!ELEMENT more ((%expr;), (%expr;))>
+<!ELEMENT more_eq ((%expr;), (%expr;))>
+<!ELEMENT contains ((%expr;), (%expr;))>
+<!ELEMENT not_contains ((%expr;), (%expr;))>
+<!ELEMENT plus (%expr;)*>
+<!ELEMENT minus (%expr;)*>
+<!ELEMENT times (%expr;)*>
+<!ELEMENT divide (%expr;)*>
+<!ELEMENT not (%expr;)>
+<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
+<!ELEMENT floor (%expr;)>
+<!ELEMENT ceil (%expr;)>
+<!ELEMENT round (%expr;)>
+<!ELEMENT trunc (%expr;)>
diff --git a/fontconfig/src/Makefile.am b/fontconfig/src/Makefile.am
index 406e85e15..7ecbc1b62 100644
--- a/fontconfig/src/Makefile.am
+++ b/fontconfig/src/Makefile.am
@@ -1,167 +1,167 @@
-#
-# fontconfig/src/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. Keith Packard makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-if OS_WIN32
-
-export_symbols = -export-symbols fontconfig.def
-
-fontconfig_def_dependency = fontconfig.def
-
-# gcc import library install/uninstall
-
-install-libtool-import-lib:
- $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)
- $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def
-
-uninstall-libtool-import-lib:
- -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def
-
-else
-
-install-libtool-import-lib:
-uninstall-libtool-import-lib:
-
-fontconfig_def_dependency =
-
-endif
-
-if MS_LIB_AVAILABLE
-
-# Microsoft import library install/uninstall
-
-noinst_DATA = fontconfig.lib
-
-fontconfig.lib : libfontconfig.la
- lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@
-
-install-ms-import-lib:
- $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir)
-
-uninstall-ms-import-lib:
- -rm $(DESTDIR)$(libdir)/fontconfig.lib
-
-else
-
-install-ms-import-lib:
-uninstall-ms-import-lib:
-
-endif
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/src \
- $(FREETYPE_CFLAGS) \
- $(LIBXML2_CFLAGS) \
- $(EXPAT_CFLAGS) \
- $(WARN_CFLAGS) \
- -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
- -DFONTCONFIG_PATH='"$(CONFDIR)"'
-
-EXTRA_DIST = makealias
-
-noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h
-
-ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) \
- ../fc-arch/fcarch.h \
- ../fc-case/fccase.h \
- ../fc-glyphname/fcglyphname.h \
- ../fc-lang/fclang.h
-
-../fc-arch/fcarch.h:
- cd ../fc-arch && $(MAKE) $(AM_MAKEFLAGS) fcarch.h
-../fc-case/fccase.h:
- cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h
-../fc-glyphname/fcglyphname.h:
- cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h
-../fc-lang/fclang.h:
- cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h
-
-libfontconfig_la_SOURCES = \
- fcatomic.c \
- fcblanks.c \
- fccache.c \
- fccfg.c \
- fccharset.c \
- fcdbg.c \
- fcdefault.c \
- fcdir.c \
- fcformat.c \
- fcfreetype.c \
- fcfs.c \
- fcinit.c \
- fclang.c \
- fclist.c \
- fcmatch.c \
- fcmatrix.c \
- fcname.c \
- fcpat.c \
- fcserialize.c \
- fcstr.c \
- fcxml.c \
- ftglue.h \
- ftglue.c
-
-lib_LTLIBRARIES = libfontconfig.la
-
-libfontconfig_la_LDFLAGS = \
- -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols)
-
-libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS)
-
-libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency)
-
-install-data-local: install-ms-import-lib install-libtool-import-lib
-
-uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib
-
-PUBLIC_FILES = \
- $(top_srcdir)/fontconfig/fontconfig.h \
- $(top_srcdir)/src/fcdeprecate.h \
- $(top_srcdir)/fontconfig/fcprivate.h
-
-PUBLIC_FT_FILES = \
- $(top_srcdir)/fontconfig/fcfreetype.h
-
-fcaliastail.h: fcalias.h
-
-fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES)
- sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES)
-
-fcftaliastail.h: fcftalias.h
-
-fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES)
- sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES)
-
-CLEANFILES = $(ALIAS_FILES)
-
-fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES)
- echo Generating $@
- (echo EXPORTS; \
- (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \
- grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \
- sort; \
- echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \
- echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@
- @ ! grep -q FcERROR $@ || ($(RM) $@; false)
+#
+# fontconfig/src/Makefile.am
+#
+# Copyright © 2003 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+if OS_WIN32
+
+export_symbols = -export-symbols fontconfig.def
+
+fontconfig_def_dependency = fontconfig.def
+
+# gcc import library install/uninstall
+
+install-libtool-import-lib:
+ $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)
+ $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def
+
+uninstall-libtool-import-lib:
+ -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def
+
+else
+
+install-libtool-import-lib:
+uninstall-libtool-import-lib:
+
+fontconfig_def_dependency =
+
+endif
+
+if MS_LIB_AVAILABLE
+
+# Microsoft import library install/uninstall
+
+noinst_DATA = fontconfig.lib
+
+fontconfig.lib : libfontconfig.la
+ lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@
+
+install-ms-import-lib:
+ $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir)
+
+uninstall-ms-import-lib:
+ -rm $(DESTDIR)$(libdir)/fontconfig.lib
+
+else
+
+install-ms-import-lib:
+uninstall-ms-import-lib:
+
+endif
+
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/src \
+ $(FREETYPE_CFLAGS) \
+ $(LIBXML2_CFLAGS) \
+ $(EXPAT_CFLAGS) \
+ $(WARN_CFLAGS) \
+ -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
+ -DFONTCONFIG_PATH='"$(CONFDIR)"'
+
+EXTRA_DIST = makealias
+
+noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h
+
+ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h
+
+BUILT_SOURCES = $(ALIAS_FILES) \
+ ../fc-case/fccase.h \
+ ../fc-glyphname/fcglyphname.h \
+ ../fc-lang/fclang.h
+
+noinst_PROGRAMS = fcarch
+
+../fc-case/fccase.h:
+ cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h
+../fc-glyphname/fcglyphname.h:
+ cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h
+../fc-lang/fclang.h:
+ cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h
+
+libfontconfig_la_SOURCES = \
+ fcarch.h \
+ fcatomic.c \
+ fcblanks.c \
+ fccache.c \
+ fccfg.c \
+ fccharset.c \
+ fcdbg.c \
+ fcdefault.c \
+ fcdir.c \
+ fcformat.c \
+ fcfreetype.c \
+ fcfs.c \
+ fcinit.c \
+ fclang.c \
+ fclist.c \
+ fcmatch.c \
+ fcmatrix.c \
+ fcname.c \
+ fcpat.c \
+ fcserialize.c \
+ fcstr.c \
+ fcxml.c \
+ ftglue.h \
+ ftglue.c
+
+lib_LTLIBRARIES = libfontconfig.la
+
+libfontconfig_la_LDFLAGS = \
+ -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols)
+
+libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS)
+
+libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency)
+
+install-data-local: install-ms-import-lib install-libtool-import-lib
+
+uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib
+
+PUBLIC_FILES = \
+ $(top_srcdir)/fontconfig/fontconfig.h \
+ $(top_srcdir)/src/fcdeprecate.h \
+ $(top_srcdir)/fontconfig/fcprivate.h
+
+PUBLIC_FT_FILES = \
+ $(top_srcdir)/fontconfig/fcfreetype.h
+
+fcaliastail.h: fcalias.h
+
+fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES)
+ sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES)
+
+fcftaliastail.h: fcftalias.h
+
+fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES)
+ sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES)
+
+CLEANFILES = $(ALIAS_FILES)
+
+fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES)
+ echo Generating $@
+ (echo EXPORTS; \
+ (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \
+ grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \
+ sort; \
+ echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \
+ echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@
+ @ ! grep -q FcERROR $@ || ($(RM) $@; false)
diff --git a/fontconfig/src/fcarch.c b/fontconfig/src/fcarch.c
new file mode 100644
index 000000000..c69397e18
--- /dev/null
+++ b/fontconfig/src/fcarch.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright © 2002 Keith Packard
+ * Copyright © 2010 Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/* If architecture is hardcoded, skip the assert tests */
+
+#ifndef FC_ARCHITECTURE
+
+#include "fcarch.h"
+
+/* Make sure the cache structure is consistent with what we expect */
+
+#include "fcint.h"
+
+FC_ASSERT_STATIC (1 == sizeof (char));
+FC_ASSERT_STATIC (2 == sizeof (FcChar16));
+FC_ASSERT_STATIC (4 == sizeof (int));
+FC_ASSERT_STATIC (4 == sizeof (FcChar32));
+FC_ASSERT_STATIC (4 == sizeof (FcObject));
+FC_ASSERT_STATIC (4 == sizeof (FcValueBinding));
+FC_ASSERT_STATIC (8 == sizeof (FcAlign));
+FC_ASSERT_STATIC (0x20 == sizeof (FcCharLeaf));
+
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (intptr_t));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcPatternEltPtr));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueListPtr));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (char *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (struct FcPatternElt *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueList *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **));
+FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *));
+
+FC_ASSERT_STATIC (0x08 + 1*ALIGNOF_DOUBLE == sizeof (FcValue));
+FC_ASSERT_STATIC (0x00 + 2*SIZEOF_VOID_P == sizeof (FcPatternElt));
+FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcPattern));
+FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcCharSet));
+FC_ASSERT_STATIC (0x08 + 6*SIZEOF_VOID_P == sizeof (FcCache));
+
+#endif
+
+
+int
+main (int argc, char **argv)
+{
+ printf ("%s\n", FC_ARCHITECTURE);
+ return 0;
+}
diff --git a/fontconfig/src/fcarch.h b/fontconfig/src/fcarch.h
new file mode 100644
index 000000000..0c8cd053f
--- /dev/null
+++ b/fontconfig/src/fcarch.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright © 2006 Keith Packard
+ * Copyright © 2010 Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef _FCARCH_H_
+#define _FCARCH_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * Each unique machine architecture needs an entry in this file
+ * So far the differences boil down to: endianness, 32 vs 64 bit pointers,
+ * and on 32bit ones, whether double is aligned to one word or two words.
+ * Those result in the 6 formats listed below.
+ *
+ * If any of the assertion errors in fccache.c fail, you need to add a new
+ * architecture. Contact the fontconfig mailing list in that case.
+ *
+ * name endianness pointer-size double-alignment
+ *
+ * le32d4 4321 4 4
+ * le32d8 4321 4 8
+ * le64 4321 8 8
+ * be32d4 1234 4 4
+ * be32d8 1234 4 8
+ * be64 1234 8 8
+ */
+
+#if defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
+# define FC_ARCH_ENDIAN "be"
+#else /* !WORDS_BIGENDIAN */
+# define FC_ARCH_ENDIAN "le"
+#endif
+
+#if SIZEOF_VOID_P == 4
+# if ALIGNOF_DOUBLE == 4
+# define FC_ARCH_SIZE_ALIGN "32d4"
+# else /* ALIGNOF_DOUBLE != 4 */
+# define FC_ARCH_SIZE_ALIGN "32d8"
+# endif
+#else /* SIZEOF_VOID_P != 4 */
+# define FC_ARCH_SIZE_ALIGN "64"
+#endif
+
+#ifdef ARCHITECTURE
+# define ARCHITECTURE FC_ARCHITECTURE
+#else
+# define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN
+#endif
+
+#endif /* _FCARCH_H_ */
diff --git a/fontconfig/src/fcatomic.c b/fontconfig/src/fcatomic.c
index d6121305a..cc16a9c96 100644
--- a/fontconfig/src/fcatomic.c
+++ b/fontconfig/src/fcatomic.c
@@ -1,217 +1,217 @@
-/*
- * fontconfig/src/fcatomic.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * fcatomic.c
- *
- * Lock cache and configuration files for atomic update
- *
- * Uses only regular filesystem calls so it should
- * work even in the absense of functioning file locking
- *
- * On Unix, four files are used:
- * file - the data file accessed by other apps.
- * new - a new version of the data file while it's being written
- * lck - the lock file
- * tmp - a temporary file made unique with mkstemp
- *
- * Here's how it works:
- * Create 'tmp' and store our PID in it
- * Attempt to link it to 'lck'
- * Unlink 'tmp'
- * If the link succeeded, the lock is held
- *
- * On Windows, where there are no links, no tmp file is used, and lck
- * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is
- * held.
- */
-
-#include "fcint.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <time.h>
-
-#ifdef _WIN32
-#undef mkdir
-#define mkdir(path,mode) _mkdir(path)
-#endif
-
-#define NEW_NAME ".NEW"
-#define LCK_NAME ".LCK"
-#define TMP_NAME ".TMP-XXXXXX"
-
-FcAtomic *
-FcAtomicCreate (const FcChar8 *file)
-{
- int file_len = strlen ((char *) file);
- int new_len = file_len + sizeof (NEW_NAME);
- int lck_len = file_len + sizeof (LCK_NAME);
- int tmp_len = file_len + sizeof (TMP_NAME);
- int total_len = (sizeof (FcAtomic) +
- file_len + 1 +
- new_len + 1 +
- lck_len + 1 +
- tmp_len + 1);
- FcAtomic *atomic = malloc (total_len);
- if (!atomic)
- return 0;
- FcMemAlloc (FC_MEM_ATOMIC, total_len);
-
- atomic->file = (FcChar8 *) (atomic + 1);
- strcpy ((char *) atomic->file, (char *) file);
-
- atomic->new = atomic->file + file_len + 1;
- strcpy ((char *) atomic->new, (char *) file);
- strcat ((char *) atomic->new, NEW_NAME);
-
- atomic->lck = atomic->new + new_len + 1;
- strcpy ((char *) atomic->lck, (char *) file);
- strcat ((char *) atomic->lck, LCK_NAME);
-
- atomic->tmp = atomic->lck + lck_len + 1;
-
- return atomic;
-}
-
-FcBool
-FcAtomicLock (FcAtomic *atomic)
-{
- int fd = -1;
- FILE *f = 0;
- int ret;
- struct stat lck_stat;
-
-#ifdef HAVE_LINK
- strcpy ((char *) atomic->tmp, (char *) atomic->file);
- strcat ((char *) atomic->tmp, TMP_NAME);
- fd = mkstemp ((char *) atomic->tmp);
- if (fd < 0)
- return FcFalse;
- f = fdopen (fd, "w");
- if (!f)
- {
- close (fd);
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- ret = fprintf (f, "%ld\n", (long)getpid());
- if (ret <= 0)
- {
- fclose (f);
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- if (fclose (f) == EOF)
- {
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- ret = link ((char *) atomic->tmp, (char *) atomic->lck);
- (void) unlink ((char *) atomic->tmp);
-#else
- ret = mkdir ((char *) atomic->lck, 0600);
-#endif
- if (ret < 0)
- {
- /*
- * If the file is around and old (> 10 minutes),
- * assume the lock is stale. This assumes that any
- * machines sharing the same filesystem will have clocks
- * reasonably close to each other.
- */
- if (FcStat ((char *) atomic->lck, &lck_stat) >= 0)
- {
- time_t now = time (0);
- if ((long int) (now - lck_stat.st_mtime) > 10 * 60)
- {
-#ifdef HAVE_LINK
- if (unlink ((char *) atomic->lck) == 0)
- return FcAtomicLock (atomic);
-#else
- if (rmdir ((char *) atomic->lck) == 0)
- return FcAtomicLock (atomic);
-#endif
- }
- }
- return FcFalse;
- }
- (void) unlink ((char *) atomic->new);
- return FcTrue;
-}
-
-FcChar8 *
-FcAtomicNewFile (FcAtomic *atomic)
-{
- return atomic->new;
-}
-
-FcChar8 *
-FcAtomicOrigFile (FcAtomic *atomic)
-{
- return atomic->file;
-}
-
-FcBool
-FcAtomicReplaceOrig (FcAtomic *atomic)
-{
-#ifdef _WIN32
- unlink (atomic->file);
-#endif
- if (rename ((char *) atomic->new, (char *) atomic->file) < 0)
- return FcFalse;
- return FcTrue;
-}
-
-void
-FcAtomicDeleteNew (FcAtomic *atomic)
-{
- unlink ((char *) atomic->new);
-}
-
-void
-FcAtomicUnlock (FcAtomic *atomic)
-{
-#ifdef HAVE_LINK
- unlink ((char *) atomic->lck);
-#else
- rmdir ((char *) atomic->lck);
-#endif
-}
-
-void
-FcAtomicDestroy (FcAtomic *atomic)
-{
- FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) +
- strlen ((char *) atomic->file) * 4 + 4 +
- sizeof (NEW_NAME) + sizeof (LCK_NAME) +
- sizeof (TMP_NAME));
-
- free (atomic);
-}
-#define __fcatomic__
-#include "fcaliastail.h"
-#undef __fcatomic__
+/*
+ * fontconfig/src/fcatomic.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * fcatomic.c
+ *
+ * Lock cache and configuration files for atomic update
+ *
+ * Uses only regular filesystem calls so it should
+ * work even in the absense of functioning file locking
+ *
+ * On Unix, four files are used:
+ * file - the data file accessed by other apps.
+ * new - a new version of the data file while it's being written
+ * lck - the lock file
+ * tmp - a temporary file made unique with mkstemp
+ *
+ * Here's how it works:
+ * Create 'tmp' and store our PID in it
+ * Attempt to link it to 'lck'
+ * Unlink 'tmp'
+ * If the link succeeded, the lock is held
+ *
+ * On Windows, where there are no links, no tmp file is used, and lck
+ * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is
+ * held.
+ */
+
+#include "fcint.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+
+#ifdef _WIN32
+#undef mkdir
+#define mkdir(path,mode) _mkdir(path)
+#endif
+
+#define NEW_NAME ".NEW"
+#define LCK_NAME ".LCK"
+#define TMP_NAME ".TMP-XXXXXX"
+
+FcAtomic *
+FcAtomicCreate (const FcChar8 *file)
+{
+ int file_len = strlen ((char *) file);
+ int new_len = file_len + sizeof (NEW_NAME);
+ int lck_len = file_len + sizeof (LCK_NAME);
+ int tmp_len = file_len + sizeof (TMP_NAME);
+ int total_len = (sizeof (FcAtomic) +
+ file_len + 1 +
+ new_len + 1 +
+ lck_len + 1 +
+ tmp_len + 1);
+ FcAtomic *atomic = malloc (total_len);
+ if (!atomic)
+ return 0;
+ FcMemAlloc (FC_MEM_ATOMIC, total_len);
+
+ atomic->file = (FcChar8 *) (atomic + 1);
+ strcpy ((char *) atomic->file, (char *) file);
+
+ atomic->new = atomic->file + file_len + 1;
+ strcpy ((char *) atomic->new, (char *) file);
+ strcat ((char *) atomic->new, NEW_NAME);
+
+ atomic->lck = atomic->new + new_len + 1;
+ strcpy ((char *) atomic->lck, (char *) file);
+ strcat ((char *) atomic->lck, LCK_NAME);
+
+ atomic->tmp = atomic->lck + lck_len + 1;
+
+ return atomic;
+}
+
+FcBool
+FcAtomicLock (FcAtomic *atomic)
+{
+ int fd = -1;
+ FILE *f = 0;
+ int ret;
+ struct stat lck_stat;
+
+#ifdef HAVE_LINK
+ strcpy ((char *) atomic->tmp, (char *) atomic->file);
+ strcat ((char *) atomic->tmp, TMP_NAME);
+ fd = mkstemp ((char *) atomic->tmp);
+ if (fd < 0)
+ return FcFalse;
+ f = fdopen (fd, "w");
+ if (!f)
+ {
+ close (fd);
+ unlink ((char *) atomic->tmp);
+ return FcFalse;
+ }
+ ret = fprintf (f, "%ld\n", (long)getpid());
+ if (ret <= 0)
+ {
+ fclose (f);
+ unlink ((char *) atomic->tmp);
+ return FcFalse;
+ }
+ if (fclose (f) == EOF)
+ {
+ unlink ((char *) atomic->tmp);
+ return FcFalse;
+ }
+ ret = link ((char *) atomic->tmp, (char *) atomic->lck);
+ (void) unlink ((char *) atomic->tmp);
+#else
+ ret = mkdir ((char *) atomic->lck, 0600);
+#endif
+ if (ret < 0)
+ {
+ /*
+ * If the file is around and old (> 10 minutes),
+ * assume the lock is stale. This assumes that any
+ * machines sharing the same filesystem will have clocks
+ * reasonably close to each other.
+ */
+ if (FcStat (atomic->lck, &lck_stat) >= 0)
+ {
+ time_t now = time (0);
+ if ((long int) (now - lck_stat.st_mtime) > 10 * 60)
+ {
+#ifdef HAVE_LINK
+ if (unlink ((char *) atomic->lck) == 0)
+ return FcAtomicLock (atomic);
+#else
+ if (rmdir ((char *) atomic->lck) == 0)
+ return FcAtomicLock (atomic);
+#endif
+ }
+ }
+ return FcFalse;
+ }
+ (void) unlink ((char *) atomic->new);
+ return FcTrue;
+}
+
+FcChar8 *
+FcAtomicNewFile (FcAtomic *atomic)
+{
+ return atomic->new;
+}
+
+FcChar8 *
+FcAtomicOrigFile (FcAtomic *atomic)
+{
+ return atomic->file;
+}
+
+FcBool
+FcAtomicReplaceOrig (FcAtomic *atomic)
+{
+#ifdef _WIN32
+ unlink (atomic->file);
+#endif
+ if (rename ((char *) atomic->new, (char *) atomic->file) < 0)
+ return FcFalse;
+ return FcTrue;
+}
+
+void
+FcAtomicDeleteNew (FcAtomic *atomic)
+{
+ unlink ((char *) atomic->new);
+}
+
+void
+FcAtomicUnlock (FcAtomic *atomic)
+{
+#ifdef HAVE_LINK
+ unlink ((char *) atomic->lck);
+#else
+ rmdir ((char *) atomic->lck);
+#endif
+}
+
+void
+FcAtomicDestroy (FcAtomic *atomic)
+{
+ FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) +
+ strlen ((char *) atomic->file) * 4 + 4 +
+ sizeof (NEW_NAME) + sizeof (LCK_NAME) +
+ sizeof (TMP_NAME));
+
+ free (atomic);
+}
+#define __fcatomic__
+#include "fcaliastail.h"
+#undef __fcatomic__
diff --git a/fontconfig/src/fcblanks.c b/fontconfig/src/fcblanks.c
index bab3066e8..eab2ecf78 100644
--- a/fontconfig/src/fcblanks.c
+++ b/fontconfig/src/fcblanks.c
@@ -1,95 +1,95 @@
-/*
- * fontconfig/src/fcblanks.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-
-FcBlanks *
-FcBlanksCreate (void)
-{
- FcBlanks *b;
-
- b = malloc (sizeof (FcBlanks));
- if (!b)
- return 0;
- FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks));
- b->nblank = 0;
- b->sblank = 0;
- b->blanks = 0;
- return b;
-}
-
-void
-FcBlanksDestroy (FcBlanks *b)
-{
- if (b->blanks)
- {
- FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
- free (b->blanks);
- }
- FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks));
- free (b);
-}
-
-FcBool
-FcBlanksAdd (FcBlanks *b, FcChar32 ucs4)
-{
- FcChar32 *c;
- int sblank;
-
- for (sblank = 0; sblank < b->nblank; sblank++)
- if (b->blanks[sblank] == ucs4)
- return FcTrue;
-
- if (b->nblank == b->sblank)
- {
- sblank = b->sblank + 32;
- if (b->blanks)
- c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32));
- else
- c = (FcChar32 *) malloc (sblank * sizeof (FcChar32));
- if (!c)
- return FcFalse;
- if (b->sblank)
- FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
- FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32));
- b->sblank = sblank;
- b->blanks = c;
- }
- b->blanks[b->nblank++] = ucs4;
- return FcTrue;
-}
-
-FcBool
-FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4)
-{
- int i;
-
- for (i = 0; i < b->nblank; i++)
- if (b->blanks[i] == ucs4)
- return FcTrue;
- return FcFalse;
-}
-#define __fcblanks__
-#include "fcaliastail.h"
-#undef __fcblanks__
+/*
+ * fontconfig/src/fcblanks.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+
+FcBlanks *
+FcBlanksCreate (void)
+{
+ FcBlanks *b;
+
+ b = malloc (sizeof (FcBlanks));
+ if (!b)
+ return 0;
+ FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks));
+ b->nblank = 0;
+ b->sblank = 0;
+ b->blanks = 0;
+ return b;
+}
+
+void
+FcBlanksDestroy (FcBlanks *b)
+{
+ if (b->blanks)
+ {
+ FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
+ free (b->blanks);
+ }
+ FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks));
+ free (b);
+}
+
+FcBool
+FcBlanksAdd (FcBlanks *b, FcChar32 ucs4)
+{
+ FcChar32 *c;
+ int sblank;
+
+ for (sblank = 0; sblank < b->nblank; sblank++)
+ if (b->blanks[sblank] == ucs4)
+ return FcTrue;
+
+ if (b->nblank == b->sblank)
+ {
+ sblank = b->sblank + 32;
+ if (b->blanks)
+ c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32));
+ else
+ c = (FcChar32 *) malloc (sblank * sizeof (FcChar32));
+ if (!c)
+ return FcFalse;
+ if (b->sblank)
+ FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
+ FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32));
+ b->sblank = sblank;
+ b->blanks = c;
+ }
+ b->blanks[b->nblank++] = ucs4;
+ return FcTrue;
+}
+
+FcBool
+FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4)
+{
+ int i;
+
+ for (i = 0; i < b->nblank; i++)
+ if (b->blanks[i] == ucs4)
+ return FcTrue;
+ return FcFalse;
+}
+#define __fcblanks__
+#include "fcaliastail.h"
+#undef __fcblanks__
diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c
index d62b19346..b27e3d39e 100644
--- a/fontconfig/src/fccache.c
+++ b/fontconfig/src/fccache.c
@@ -1,1263 +1,1273 @@
-/*
- * Copyright © 2000 Keith Packard
- * Copyright © 2005 Patrick Lam
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "../fc-arch/fcarch.h"
-#include <stdio.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <string.h>
-#include <sys/types.h>
-#include <assert.h>
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
-# include <unistd.h>
-# include <sys/mman.h>
-#endif
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-struct MD5Context {
- FcChar32 buf[4];
- FcChar32 bits[2];
- unsigned char in[64];
-};
-
-static void MD5Init(struct MD5Context *ctx);
-static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len);
-static void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
-static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]);
-
-#define CACHEBASE_LEN (1 + 32 + 1 + sizeof (FC_ARCHITECTURE) + sizeof (FC_CACHE_SUFFIX))
-
-#ifdef _WIN32
-
-#include <windows.h>
-
-#ifdef __GNUC__
-typedef long long INT64;
-#define EPOCH_OFFSET 11644473600ll
-#else
-#define EPOCH_OFFSET 11644473600i64
-typedef __int64 INT64;
-#endif
-
-/* Workaround for problems in the stat() in the Microsoft C library:
- *
- * 1) stat() uses FindFirstFile() to get the file
- * attributes. Unfortunately this API doesn't return correct values
- * for modification time of a directory until some time after a file
- * or subdirectory has been added to the directory. (This causes
- * run-test.sh to fail, for instance.) GetFileAttributesEx() is
- * better, it returns the updated timestamp right away.
- *
- * 2) stat() does some strange things related to backward
- * compatibility with the local time timestamps on FAT volumes and
- * daylight saving time. This causes problems after the switches
- * to/from daylight saving time. See
- * http://bugzilla.gnome.org/show_bug.cgi?id=154968 , especially
- * comment #30, and http://www.codeproject.com/datetime/dstbugs.asp .
- * We don't need any of that, FAT and Win9x are as good as dead. So
- * just use the UTC timestamps from NTFS, converted to the Unix epoch.
- */
-
-int
-FcStat (const char *file, struct stat *statb)
-{
- WIN32_FILE_ATTRIBUTE_DATA wfad;
- char full_path_name[MAX_PATH];
- char *basename;
- DWORD rc;
-
- if (!GetFileAttributesEx (file, GetFileExInfoStandard, &wfad))
- return -1;
-
- statb->st_dev = 0;
-
- /* Calculate a pseudo inode number as a hash of the full path name.
- * Call GetLongPathName() to get the spelling of the path name as it
- * is on disk.
- */
- rc = GetFullPathName (file, sizeof (full_path_name), full_path_name, &basename);
- if (rc == 0 || rc > sizeof (full_path_name))
- return -1;
-
- rc = GetLongPathName (full_path_name, full_path_name, sizeof (full_path_name));
- statb->st_ino = FcStringHash (full_path_name);
-
- statb->st_mode = _S_IREAD | _S_IWRITE;
- statb->st_mode |= (statb->st_mode >> 3) | (statb->st_mode >> 6);
-
- if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- statb->st_mode |= _S_IFDIR;
- else
- statb->st_mode |= _S_IFREG;
-
- statb->st_nlink = 1;
- statb->st_uid = statb->st_gid = 0;
- statb->st_rdev = 0;
-
- if (wfad.nFileSizeHigh > 0)
- return -1;
- statb->st_size = wfad.nFileSizeLow;
-
- statb->st_atime = (*(INT64 *)&wfad.ftLastAccessTime)/10000000 - EPOCH_OFFSET;
- statb->st_mtime = (*(INT64 *)&wfad.ftLastWriteTime)/10000000 - EPOCH_OFFSET;
- statb->st_ctime = statb->st_mtime;
-
- return 0;
-}
-#endif
-
-static const char bin2hex[] = { '0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 'a', 'b',
- 'c', 'd', 'e', 'f' };
-
-static FcChar8 *
-FcDirCacheBasename (const FcChar8 * dir, FcChar8 cache_base[CACHEBASE_LEN])
-{
- unsigned char hash[16];
- FcChar8 *hex_hash;
- int cnt;
- struct MD5Context ctx;
-
- MD5Init (&ctx);
- MD5Update (&ctx, (const unsigned char *)dir, strlen ((const char *) dir));
-
- MD5Final (hash, &ctx);
-
- cache_base[0] = '/';
- hex_hash = cache_base + 1;
- for (cnt = 0; cnt < 16; ++cnt)
- {
- hex_hash[2*cnt ] = bin2hex[hash[cnt] >> 4];
- hex_hash[2*cnt+1] = bin2hex[hash[cnt] & 0xf];
- }
- hex_hash[2*cnt] = 0;
- strcat ((char *) cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX);
-
- return cache_base;
-}
-
-FcBool
-FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
-{
- FcChar8 *cache_hashed = NULL;
- FcChar8 cache_base[CACHEBASE_LEN];
- FcStrList *list;
- FcChar8 *cache_dir;
-
- FcDirCacheBasename (dir, cache_base);
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
-
- while ((cache_dir = FcStrListNext (list)))
- {
- cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- break;
- (void) unlink ((char *) cache_hashed);
- FcStrFree (cache_hashed);
- }
- FcStrListDone (list);
- /* return FcFalse if something went wrong */
- if (cache_dir)
- return FcFalse;
- return FcTrue;
-}
-
-static int
-FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat)
-{
- int fd;
-
-#ifdef _WIN32
- if (FcStat (cache_file, file_stat) < 0)
- return -1;
-#endif
- fd = open((char *) cache_file, O_RDONLY | O_BINARY);
- if (fd < 0)
- return fd;
-#ifndef _WIN32
- if (fstat (fd, file_stat) < 0)
- {
- close (fd);
- return -1;
- }
-#endif
- return fd;
-}
-
-/*
- * Look for a cache file for the specified dir. Attempt
- * to use each one we find, stopping when the callback
- * indicates success
- */
-static FcBool
-FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- FcBool (*callback) (int fd, struct stat *fd_stat,
- struct stat *dir_stat, void *closure),
- void *closure, FcChar8 **cache_file_ret)
-{
- int fd = -1;
- FcChar8 cache_base[CACHEBASE_LEN];
- FcStrList *list;
- FcChar8 *cache_dir;
- struct stat file_stat, dir_stat;
- FcBool ret = FcFalse;
-
- if (FcStat ((char *) dir, &dir_stat) < 0)
- return FcFalse;
-
- FcDirCacheBasename (dir, cache_base);
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
-
- while ((cache_dir = FcStrListNext (list)))
- {
- FcChar8 *cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- break;
- fd = FcDirCacheOpenFile (cache_hashed, &file_stat);
- if (fd >= 0) {
- ret = (*callback) (fd, &file_stat, &dir_stat, closure);
- close (fd);
- if (ret)
- {
- if (cache_file_ret)
- *cache_file_ret = cache_hashed;
- else
- FcStrFree (cache_hashed);
- break;
- }
- }
- FcStrFree (cache_hashed);
- }
- FcStrListDone (list);
-
- return ret;
-}
-
-#define FC_CACHE_MIN_MMAP 1024
-
-/*
- * Skip list element, make sure the 'next' pointer is the last thing
- * in the structure, it will be allocated large enough to hold all
- * of the necessary pointers
- */
-
-typedef struct _FcCacheSkip FcCacheSkip;
-
-struct _FcCacheSkip {
- FcCache *cache;
- int ref;
- intptr_t size;
- dev_t cache_dev;
- ino_t cache_ino;
- time_t cache_mtime;
- FcCacheSkip *next[1];
-};
-
-/*
- * The head of the skip list; pointers for every possible level
- * in the skip list, plus the largest level in the list
- */
-
-#define FC_CACHE_MAX_LEVEL 16
-
-static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL];
-static int fcCacheMaxLevel;
-
-#if HAVE_RANDOM
-# define FcRandom() random()
-#else
-# if HAVE_LRAND48
-# define FcRandom() lrand48()
-# else
-# if HAVE_RAND
-# define FcRandom() rand()
-# endif
-# endif
-#endif
-/*
- * Generate a random level number, distributed
- * so that each level is 1/4 as likely as the one before
- *
- * Note that level numbers run 1 <= level <= MAX_LEVEL
- */
-static int
-random_level (void)
-{
- /* tricky bit -- each bit is '1' 75% of the time */
- long int bits = FcRandom () | FcRandom ();
- int level = 0;
-
- while (++level < FC_CACHE_MAX_LEVEL)
- {
- if (bits & 1)
- break;
- bits >>= 1;
- }
- return level;
-}
-
-/*
- * Insert cache into the list
- */
-static FcBool
-FcCacheInsert (FcCache *cache, struct stat *cache_stat)
-{
- FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
- FcCacheSkip *s, **next;
- int i, level;
-
- /*
- * Find links along each chain
- */
- next = fcCacheChains;
- for (i = fcCacheMaxLevel; --i >= 0; )
- {
- for (; (s = next[i]); next = s->next)
- if (s->cache > cache)
- break;
- update[i] = &next[i];
- }
-
- /*
- * Create new list element
- */
- level = random_level ();
- if (level > fcCacheMaxLevel)
- {
- level = fcCacheMaxLevel + 1;
- update[fcCacheMaxLevel] = &fcCacheChains[fcCacheMaxLevel];
- fcCacheMaxLevel = level;
- }
-
- s = malloc (sizeof (FcCacheSkip) + (level - 1) * sizeof (FcCacheSkip *));
- if (!s)
- return FcFalse;
-
- s->cache = cache;
- s->size = cache->size;
- s->ref = 1;
- if (cache_stat)
- {
- s->cache_dev = cache_stat->st_dev;
- s->cache_ino = cache_stat->st_ino;
- s->cache_mtime = cache_stat->st_mtime;
- }
- else
- {
- s->cache_dev = 0;
- s->cache_ino = 0;
- s->cache_mtime = 0;
- }
-
- /*
- * Insert into all fcCacheChains
- */
- for (i = 0; i < level; i++)
- {
- s->next[i] = *update[i];
- *update[i] = s;
- }
- return FcTrue;
-}
-
-static FcCacheSkip *
-FcCacheFindByAddr (void *object)
-{
- int i;
- FcCacheSkip **next = fcCacheChains;
- FcCacheSkip *s;
-
- /*
- * Walk chain pointers one level at a time
- */
- for (i = fcCacheMaxLevel; --i >= 0;)
- while (next[i] && (char *) object >= ((char *) next[i]->cache + next[i]->size))
- next = next[i]->next;
- /*
- * Here we are
- */
- s = next[0];
- if (s && (char *) object < ((char *) s->cache + s->size))
- return s;
- return NULL;
-}
-
-static void
-FcCacheRemove (FcCache *cache)
-{
- FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
- FcCacheSkip *s, **next;
- int i;
-
- /*
- * Find links along each chain
- */
- next = fcCacheChains;
- for (i = fcCacheMaxLevel; --i >= 0; )
- {
- for (; (s = next[i]); next = s->next)
- if (s->cache >= cache)
- break;
- update[i] = &next[i];
- }
- s = next[0];
- for (i = 0; i < fcCacheMaxLevel && *update[i] == s; i++)
- *update[i] = s->next[i];
- while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL)
- fcCacheMaxLevel--;
- free (s);
-}
-
-static FcCache *
-FcCacheFindByStat (struct stat *cache_stat)
-{
- FcCacheSkip *s;
-
- for (s = fcCacheChains[0]; s; s = s->next[0])
- if (s->cache_dev == cache_stat->st_dev &&
- s->cache_ino == cache_stat->st_ino &&
- s->cache_mtime == cache_stat->st_mtime)
- {
- s->ref++;
- return s->cache;
- }
- return NULL;
-}
-
-static void
-FcDirCacheDispose (FcCache *cache)
-{
- switch (cache->magic) {
- case FC_CACHE_MAGIC_ALLOC:
- free (cache);
- break;
- case FC_CACHE_MAGIC_MMAP:
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- munmap (cache, cache->size);
-#elif defined(_WIN32)
- UnmapViewOfFile (cache);
-#endif
- break;
- }
- FcCacheRemove (cache);
-}
-
-void
-FcCacheObjectReference (void *object)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (object);
-
- if (skip)
- skip->ref++;
-}
-
-void
-FcCacheObjectDereference (void *object)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (object);
-
- if (skip)
- {
- skip->ref--;
- if (skip->ref <= 0)
- FcDirCacheDispose (skip->cache);
- }
-}
-
-void
-FcCacheFini (void)
-{
- int i;
-
- for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
- assert (fcCacheChains[i] == NULL);
- assert (fcCacheMaxLevel == 0);
-}
-
-static FcBool
-FcCacheTimeValid (FcCache *cache, struct stat *dir_stat)
-{
- struct stat dir_static;
-
- if (!dir_stat)
- {
- if (FcStat ((const char *) FcCacheDir (cache), &dir_static) < 0)
- return FcFalse;
- dir_stat = &dir_static;
- }
- if (FcDebug () & FC_DBG_CACHE)
- printf ("FcCacheTimeValid dir \"%s\" cache time %d dir time %d\n",
- FcCacheDir (cache), cache->mtime, (int) dir_stat->st_mtime);
- return cache->mtime == (int) dir_stat->st_mtime;
-}
-
-/*
- * Map a cache file into memory
- */
-static FcCache *
-FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat)
-{
- FcCache *cache;
- FcBool allocated = FcFalse;
-
- if (fd_stat->st_size < sizeof (FcCache))
- return NULL;
- cache = FcCacheFindByStat (fd_stat);
- if (cache)
- {
- if (FcCacheTimeValid (cache, dir_stat))
- return cache;
- FcDirCacheUnload (cache);
- cache = NULL;
- }
-
- /*
- * Lage cache files are mmap'ed, smaller cache files are read. This
- * balances the system cost of mmap against per-process memory usage.
- */
- if (fd_stat->st_size >= FC_CACHE_MIN_MMAP)
- {
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (cache == MAP_FAILED)
- cache = NULL;
-#elif defined(_WIN32)
- {
- HANDLE hFileMap;
-
- cache = NULL;
- hFileMap = CreateFileMapping((HANDLE) _get_osfhandle(fd), NULL,
- PAGE_READONLY, 0, 0, NULL);
- if (hFileMap != NULL)
- {
- cache = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0,
- fd_stat->st_size);
- CloseHandle (hFileMap);
- }
- }
-#endif
- }
- if (!cache)
- {
- cache = malloc (fd_stat->st_size);
- if (!cache)
- return NULL;
-
- if (read (fd, cache, fd_stat->st_size) != fd_stat->st_size)
- {
- free (cache);
- return NULL;
- }
- allocated = FcTrue;
- }
- if (cache->magic != FC_CACHE_MAGIC_MMAP ||
- cache->version < FC_CACHE_CONTENT_VERSION ||
- cache->size != fd_stat->st_size ||
- !FcCacheTimeValid (cache, dir_stat) ||
- !FcCacheInsert (cache, fd_stat))
- {
- if (allocated)
- free (cache);
- else
- {
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- munmap (cache, fd_stat->st_size);
-#elif defined(_WIN32)
- UnmapViewOfFile (cache);
-#endif
- }
- return NULL;
- }
-
- /* Mark allocated caches so they're freed rather than unmapped */
- if (allocated)
- cache->magic = FC_CACHE_MAGIC_ALLOC;
-
- return cache;
-}
-
-void
-FcDirCacheReference (FcCache *cache, int nref)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (cache);
-
- if (skip)
- skip->ref += nref;
-}
-
-void
-FcDirCacheUnload (FcCache *cache)
-{
- FcCacheObjectDereference (cache);
-}
-
-static FcBool
-FcDirCacheMapHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
-{
- FcCache *cache = FcDirCacheMapFd (fd, fd_stat, dir_stat);
-
- if (!cache)
- return FcFalse;
- *((FcCache **) closure) = cache;
- return FcTrue;
-}
-
-FcCache *
-FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file)
-{
- FcCache *cache = NULL;
-
- if (!FcDirCacheProcess (config, dir,
- FcDirCacheMapHelper,
- &cache, cache_file))
- return NULL;
- return cache;
-}
-
-FcCache *
-FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
-{
- int fd;
- FcCache *cache;
- struct stat my_file_stat;
-
- if (!file_stat)
- file_stat = &my_file_stat;
- fd = FcDirCacheOpenFile (cache_file, file_stat);
- if (fd < 0)
- return NULL;
- cache = FcDirCacheMapFd (fd, file_stat, NULL);
- close (fd);
- return cache;
-}
-
-/*
- * Validate a cache file by reading the header and checking
- * the magic number and the size field
- */
-static FcBool
-FcDirCacheValidateHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
-{
- FcBool ret = FcTrue;
- FcCache c;
-
- if (read (fd, &c, sizeof (FcCache)) != sizeof (FcCache))
- ret = FcFalse;
- else if (c.magic != FC_CACHE_MAGIC_MMAP)
- ret = FcFalse;
- else if (c.version < FC_CACHE_CONTENT_VERSION)
- ret = FcFalse;
- else if (fd_stat->st_size != c.size)
- ret = FcFalse;
- else if (c.mtime != (int) dir_stat->st_mtime)
- ret = FcFalse;
- return ret;
-}
-
-static FcBool
-FcDirCacheValidConfig (const FcChar8 *dir, FcConfig *config)
-{
- return FcDirCacheProcess (config, dir,
- FcDirCacheValidateHelper,
- NULL, NULL);
-}
-
-FcBool
-FcDirCacheValid (const FcChar8 *dir)
-{
- FcConfig *config;
-
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
-
- return FcDirCacheValidConfig (dir, config);
-}
-
-/*
- * Build a cache structure from the given contents
- */
-FcCache *
-FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs)
-{
- FcSerialize *serialize = FcSerializeCreate ();
- FcCache *cache;
- int i;
- intptr_t cache_offset;
- intptr_t dirs_offset;
- FcChar8 *dir_serialize;
- intptr_t *dirs_serialize;
- FcFontSet *set_serialize;
-
- if (!serialize)
- return NULL;
- /*
- * Space for cache structure
- */
- cache_offset = FcSerializeReserve (serialize, sizeof (FcCache));
- /*
- * Directory name
- */
- if (!FcStrSerializeAlloc (serialize, dir))
- goto bail1;
- /*
- * Subdirs
- */
- dirs_offset = FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *));
- for (i = 0; i < dirs->num; i++)
- if (!FcStrSerializeAlloc (serialize, dirs->strs[i]))
- goto bail1;
-
- /*
- * Patterns
- */
- if (!FcFontSetSerializeAlloc (serialize, set))
- goto bail1;
-
- /* Serialize layout complete. Now allocate space and fill it */
- cache = malloc (serialize->size);
- if (!cache)
- goto bail1;
- /* shut up valgrind */
- memset (cache, 0, serialize->size);
-
- serialize->linear = cache;
-
- cache->magic = FC_CACHE_MAGIC_ALLOC;
- cache->version = FC_CACHE_CONTENT_VERSION;
- cache->size = serialize->size;
- cache->mtime = (int) dir_stat->st_mtime;
-
- /*
- * Serialize directory name
- */
- dir_serialize = FcStrSerialize (serialize, dir);
- if (!dir_serialize)
- goto bail2;
- cache->dir = FcPtrToOffset (cache, dir_serialize);
-
- /*
- * Serialize sub dirs
- */
- dirs_serialize = FcSerializePtr (serialize, dirs);
- if (!dirs_serialize)
- goto bail2;
- cache->dirs = FcPtrToOffset (cache, dirs_serialize);
- cache->dirs_count = dirs->num;
- for (i = 0; i < dirs->num; i++)
- {
- FcChar8 *d_serialize = FcStrSerialize (serialize, dirs->strs[i]);
- if (!d_serialize)
- goto bail2;
- dirs_serialize[i] = FcPtrToOffset (dirs_serialize, d_serialize);
- }
-
- /*
- * Serialize font set
- */
- set_serialize = FcFontSetSerialize (serialize, set);
- if (!set_serialize)
- goto bail2;
- cache->set = FcPtrToOffset (cache, set_serialize);
-
- FcSerializeDestroy (serialize);
-
- FcCacheInsert (cache, NULL);
-
- return cache;
-
-bail2:
- free (cache);
-bail1:
- FcSerializeDestroy (serialize);
- return NULL;
-}
-
-
-#ifdef _WIN32
-#undef mkdir
-#define mkdir(path,mode) _mkdir(path)
-#endif
-
-static FcBool
-FcMakeDirectory (const FcChar8 *dir)
-{
- FcChar8 *parent;
- FcBool ret;
-
- if (strlen ((char *) dir) == 0)
- return FcFalse;
-
- parent = FcStrDirname (dir);
- if (!parent)
- return FcFalse;
- if (access ((char *) parent, F_OK) == 0)
- ret = mkdir ((char *) dir, 0755) == 0 && chmod ((char *) dir, 0755) == 0;
- else if (access ((char *) parent, F_OK) == -1)
- ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0755) == 0) && chmod ((char *) dir, 0755) == 0;
- else
- ret = FcFalse;
- FcStrFree (parent);
- return ret;
-}
-
-/* write serialized state to the cache file */
-FcBool
-FcDirCacheWrite (FcCache *cache, FcConfig *config)
-{
- FcChar8 *dir = FcCacheDir (cache);
- FcChar8 cache_base[CACHEBASE_LEN];
- FcChar8 *cache_hashed;
- int fd;
- FcAtomic *atomic;
- FcStrList *list;
- FcChar8 *cache_dir = NULL;
- FcChar8 *test_dir;
- FcCacheSkip *skip;
- struct stat cache_stat;
- int magic;
- int written;
-
- /*
- * Write it to the first directory in the list which is writable
- */
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
- while ((test_dir = FcStrListNext (list))) {
- if (access ((char *) test_dir, W_OK|X_OK) == 0)
- {
- cache_dir = test_dir;
- break;
- }
- else
- {
- /*
- * If the directory doesn't exist, try to create it
- */
- if (access ((char *) test_dir, F_OK) == -1) {
- if (FcMakeDirectory (test_dir))
- {
- cache_dir = test_dir;
- break;
- }
- }
- /*
- * Otherwise, try making it writable
- */
- else if (chmod ((char *) test_dir, 0755) == 0)
- {
- cache_dir = test_dir;
- break;
- }
- }
- }
- FcStrListDone (list);
- if (!cache_dir)
- return FcFalse;
-
- FcDirCacheBasename (dir, cache_base);
- cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- return FcFalse;
-
- if (FcDebug () & FC_DBG_CACHE)
- printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n",
- dir, cache_hashed);
-
- atomic = FcAtomicCreate ((FcChar8 *)cache_hashed);
- if (!atomic)
- goto bail1;
-
- if (!FcAtomicLock (atomic))
- goto bail3;
-
- fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666);
- if (fd == -1)
- goto bail4;
-
- /* Temporarily switch magic to MMAP while writing to file */
- magic = cache->magic;
- if (magic != FC_CACHE_MAGIC_MMAP)
- cache->magic = FC_CACHE_MAGIC_MMAP;
-
- /*
- * Write cache contents to file
- */
- written = write (fd, cache, cache->size);
-
- /* Switch magic back */
- if (magic != FC_CACHE_MAGIC_MMAP)
- cache->magic = magic;
-
- if (written != cache->size)
- {
- perror ("write cache");
- goto bail5;
- }
-
- close(fd);
- if (!FcAtomicReplaceOrig(atomic))
- goto bail4;
-
- /* If the file is small, update the cache chain entry such that the
- * new cache file is not read again. If it's large, we don't do that
- * such that we reload it, using mmap, which is shared across processes.
- */
- if (cache->size < FC_CACHE_MIN_MMAP &&
- (skip = FcCacheFindByAddr (cache)) &&
- FcStat (cache_hashed, &cache_stat))
- {
- skip->cache_dev = cache_stat.st_dev;
- skip->cache_ino = cache_stat.st_ino;
- skip->cache_mtime = cache_stat.st_mtime;
- }
-
- FcStrFree (cache_hashed);
- FcAtomicUnlock (atomic);
- FcAtomicDestroy (atomic);
- return FcTrue;
-
- bail5:
- close (fd);
- bail4:
- FcAtomicUnlock (atomic);
- bail3:
- FcAtomicDestroy (atomic);
- bail1:
- FcStrFree (cache_hashed);
- return FcFalse;
-}
-
-/*
- * Hokey little macro trick to permit the definitions of C functions
- * with the same name as CPP macros
- */
-#define args1(x) (x)
-#define args2(x,y) (x,y)
-
-const FcChar8 *
-FcCacheDir args1(const FcCache *c)
-{
- return FcCacheDir (c);
-}
-
-FcFontSet *
-FcCacheCopySet args1(const FcCache *c)
-{
- FcFontSet *old = FcCacheSet (c);
- FcFontSet *new = FcFontSetCreate ();
- int i;
-
- if (!new)
- return NULL;
- for (i = 0; i < old->nfont; i++)
- {
- FcPattern *font = FcFontSetFont (old, i);
-
- FcPatternReference (font);
- if (!FcFontSetAdd (new, font))
- {
- FcFontSetDestroy (new);
- return NULL;
- }
- }
- return new;
-}
-
-const FcChar8 *
-FcCacheSubdir args2(const FcCache *c, int i)
-{
- return FcCacheSubdir (c, i);
-}
-
-int
-FcCacheNumSubdir args1(const FcCache *c)
-{
- return c->dirs_count;
-}
-
-int
-FcCacheNumFont args1(const FcCache *c)
-{
- return FcCacheSet(c)->nfont;
-}
-
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest. This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-#ifndef HIGHFIRST
-#define byteReverse(buf, len) /* Nothing */
-#else
-/*
- * Note: this code is harmless on little-endian machines.
- */
-void byteReverse(unsigned char *buf, unsigned longs)
-{
- FcChar32 t;
- do {
- t = (FcChar32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(FcChar32 *) buf = t;
- buf += 4;
- } while (--longs);
-}
-#endif
-
-/*
- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-static void MD5Init(struct MD5Context *ctx)
-{
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits[0] = 0;
- ctx->bits[1] = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len)
-{
- FcChar32 t;
-
- /* Update bitcount */
-
- t = ctx->bits[0];
- if ((ctx->bits[0] = t + ((FcChar32) len << 3)) < t)
- ctx->bits[1]++; /* Carry from low to high */
- ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-
- /* Handle any leading odd-sized chunks */
-
- if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy(p, buf, len);
- return;
- }
- memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- buf += t;
- len -= t;
- }
- /* Process data in 64-byte chunks */
-
- while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- buf += 64;
- len -= 64;
- }
-
- /* Handle any remaining bytes of data. */
-
- memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-static void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
- unsigned count;
- unsigned char *p;
-
- /* Compute number of bytes mod 64 */
- count = (ctx->bits[0] >> 3) & 0x3F;
-
- /* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
- p = ctx->in + count;
- *p++ = 0x80;
-
- /* Bytes of padding needed to make 64 bytes */
- count = 64 - 1 - count;
-
- /* Pad out to 56 mod 64 */
- if (count < 8) {
- /* Two lots of padding: Pad the first block to 64 bytes */
- memset(p, 0, count);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
-
- /* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
- } else {
- /* Pad block to 56 bytes */
- memset(p, 0, count - 8);
- }
- byteReverse(ctx->in, 14);
-
- /* Append length in bits and transform */
- ((FcChar32 *) ctx->in)[14] = ctx->bits[0];
- ((FcChar32 *) ctx->in)[15] = ctx->bits[1];
-
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
-}
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data. MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void MD5Transform(FcChar32 buf[4], FcChar32 in[16])
-{
- register FcChar32 a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-#define __fccache__
-#include "fcaliastail.h"
-#undef __fccache__
+/*
+ * Copyright © 2000 Keith Packard
+ * Copyright © 2005 Patrick Lam
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include "fcarch.h"
+#include <stdio.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <string.h>
+#include <sys/types.h>
+#include <assert.h>
+#if defined(HAVE_MMAP) || defined(__CYGWIN__)
+# include <unistd.h>
+# include <sys/mman.h>
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+
+struct MD5Context {
+ FcChar32 buf[4];
+ FcChar32 bits[2];
+ unsigned char in[64];
+};
+
+static void MD5Init(struct MD5Context *ctx);
+static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len);
+static void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
+static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]);
+
+#define CACHEBASE_LEN (1 + 32 + 1 + sizeof (FC_ARCHITECTURE) + sizeof (FC_CACHE_SUFFIX))
+
+#ifdef _WIN32
+
+#include <windows.h>
+
+#ifdef __GNUC__
+typedef long long INT64;
+#define EPOCH_OFFSET 11644473600ll
+#else
+#define EPOCH_OFFSET 11644473600i64
+typedef __int64 INT64;
+#endif
+
+/* Workaround for problems in the stat() in the Microsoft C library:
+ *
+ * 1) stat() uses FindFirstFile() to get the file
+ * attributes. Unfortunately this API doesn't return correct values
+ * for modification time of a directory until some time after a file
+ * or subdirectory has been added to the directory. (This causes
+ * run-test.sh to fail, for instance.) GetFileAttributesEx() is
+ * better, it returns the updated timestamp right away.
+ *
+ * 2) stat() does some strange things related to backward
+ * compatibility with the local time timestamps on FAT volumes and
+ * daylight saving time. This causes problems after the switches
+ * to/from daylight saving time. See
+ * http://bugzilla.gnome.org/show_bug.cgi?id=154968 , especially
+ * comment #30, and http://www.codeproject.com/datetime/dstbugs.asp .
+ * We don't need any of that, FAT and Win9x are as good as dead. So
+ * just use the UTC timestamps from NTFS, converted to the Unix epoch.
+ */
+
+int
+FcStat (const char *file, struct stat *statb)
+{
+ WIN32_FILE_ATTRIBUTE_DATA wfad;
+ char full_path_name[MAX_PATH];
+ char *basename;
+ DWORD rc;
+
+ if (!GetFileAttributesEx (file, GetFileExInfoStandard, &wfad))
+ return -1;
+
+ statb->st_dev = 0;
+
+ /* Calculate a pseudo inode number as a hash of the full path name.
+ * Call GetLongPathName() to get the spelling of the path name as it
+ * is on disk.
+ */
+ rc = GetFullPathName (file, sizeof (full_path_name), full_path_name, &basename);
+ if (rc == 0 || rc > sizeof (full_path_name))
+ return -1;
+
+ rc = GetLongPathName (full_path_name, full_path_name, sizeof (full_path_name));
+ statb->st_ino = FcStringHash (full_path_name);
+
+ statb->st_mode = _S_IREAD | _S_IWRITE;
+ statb->st_mode |= (statb->st_mode >> 3) | (statb->st_mode >> 6);
+
+ if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ statb->st_mode |= _S_IFDIR;
+ else
+ statb->st_mode |= _S_IFREG;
+
+ statb->st_nlink = 1;
+ statb->st_uid = statb->st_gid = 0;
+ statb->st_rdev = 0;
+
+ if (wfad.nFileSizeHigh > 0)
+ return -1;
+ statb->st_size = wfad.nFileSizeLow;
+
+ statb->st_atime = (*(INT64 *)&wfad.ftLastAccessTime)/10000000 - EPOCH_OFFSET;
+ statb->st_mtime = (*(INT64 *)&wfad.ftLastWriteTime)/10000000 - EPOCH_OFFSET;
+ statb->st_ctime = statb->st_mtime;
+
+ return 0;
+}
+
+#else
+
+int
+FcStat (const char *file, struct stat *statb)
+{
+ return stat ((char *) file, statb);
+}
+
+#endif
+
+static const char bin2hex[] = { '0', '1', '2', '3',
+ '4', '5', '6', '7',
+ '8', '9', 'a', 'b',
+ 'c', 'd', 'e', 'f' };
+
+static FcChar8 *
+FcDirCacheBasename (const FcChar8 * dir, FcChar8 cache_base[CACHEBASE_LEN])
+{
+ unsigned char hash[16];
+ FcChar8 *hex_hash;
+ int cnt;
+ struct MD5Context ctx;
+
+ MD5Init (&ctx);
+ MD5Update (&ctx, (const unsigned char *)dir, strlen ((const char *) dir));
+
+ MD5Final (hash, &ctx);
+
+ cache_base[0] = '/';
+ hex_hash = cache_base + 1;
+ for (cnt = 0; cnt < 16; ++cnt)
+ {
+ hex_hash[2*cnt ] = bin2hex[hash[cnt] >> 4];
+ hex_hash[2*cnt+1] = bin2hex[hash[cnt] & 0xf];
+ }
+ hex_hash[2*cnt] = 0;
+ strcat ((char *) cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX);
+
+ return cache_base;
+}
+
+FcBool
+FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
+{
+ FcChar8 *cache_hashed = NULL;
+ FcChar8 cache_base[CACHEBASE_LEN];
+ FcStrList *list;
+ FcChar8 *cache_dir;
+
+ FcDirCacheBasename (dir, cache_base);
+
+ list = FcStrListCreate (config->cacheDirs);
+ if (!list)
+ return FcFalse;
+
+ while ((cache_dir = FcStrListNext (list)))
+ {
+ cache_hashed = FcStrPlus (cache_dir, cache_base);
+ if (!cache_hashed)
+ break;
+ (void) unlink ((char *) cache_hashed);
+ FcStrFree (cache_hashed);
+ }
+ FcStrListDone (list);
+ /* return FcFalse if something went wrong */
+ if (cache_dir)
+ return FcFalse;
+ return FcTrue;
+}
+
+static int
+FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat)
+{
+ int fd;
+
+#ifdef _WIN32
+ if (FcStat (cache_file, file_stat) < 0)
+ return -1;
+#endif
+ fd = open((char *) cache_file, O_RDONLY | O_BINARY);
+ if (fd < 0)
+ return fd;
+#ifndef _WIN32
+ if (fstat (fd, file_stat) < 0)
+ {
+ close (fd);
+ return -1;
+ }
+#endif
+ return fd;
+}
+
+/*
+ * Look for a cache file for the specified dir. Attempt
+ * to use each one we find, stopping when the callback
+ * indicates success
+ */
+static FcBool
+FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
+ FcBool (*callback) (int fd, struct stat *fd_stat,
+ struct stat *dir_stat, void *closure),
+ void *closure, FcChar8 **cache_file_ret)
+{
+ int fd = -1;
+ FcChar8 cache_base[CACHEBASE_LEN];
+ FcStrList *list;
+ FcChar8 *cache_dir;
+ struct stat file_stat, dir_stat;
+ FcBool ret = FcFalse;
+
+ if (FcStat (dir, &dir_stat) < 0)
+ return FcFalse;
+
+ FcDirCacheBasename (dir, cache_base);
+
+ list = FcStrListCreate (config->cacheDirs);
+ if (!list)
+ return FcFalse;
+
+ while ((cache_dir = FcStrListNext (list)))
+ {
+ FcChar8 *cache_hashed = FcStrPlus (cache_dir, cache_base);
+ if (!cache_hashed)
+ break;
+ fd = FcDirCacheOpenFile (cache_hashed, &file_stat);
+ if (fd >= 0) {
+ ret = (*callback) (fd, &file_stat, &dir_stat, closure);
+ close (fd);
+ if (ret)
+ {
+ if (cache_file_ret)
+ *cache_file_ret = cache_hashed;
+ else
+ FcStrFree (cache_hashed);
+ break;
+ }
+ }
+ FcStrFree (cache_hashed);
+ }
+ FcStrListDone (list);
+
+ return ret;
+}
+
+#define FC_CACHE_MIN_MMAP 1024
+
+/*
+ * Skip list element, make sure the 'next' pointer is the last thing
+ * in the structure, it will be allocated large enough to hold all
+ * of the necessary pointers
+ */
+
+typedef struct _FcCacheSkip FcCacheSkip;
+
+struct _FcCacheSkip {
+ FcCache *cache;
+ int ref;
+ intptr_t size;
+ dev_t cache_dev;
+ ino_t cache_ino;
+ time_t cache_mtime;
+ FcCacheSkip *next[1];
+};
+
+/*
+ * The head of the skip list; pointers for every possible level
+ * in the skip list, plus the largest level in the list
+ */
+
+#define FC_CACHE_MAX_LEVEL 16
+
+static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL];
+static int fcCacheMaxLevel;
+
+#if HAVE_RANDOM
+# define FcRandom() random()
+#else
+# if HAVE_LRAND48
+# define FcRandom() lrand48()
+# else
+# if HAVE_RAND
+# define FcRandom() rand()
+# endif
+# endif
+#endif
+/*
+ * Generate a random level number, distributed
+ * so that each level is 1/4 as likely as the one before
+ *
+ * Note that level numbers run 1 <= level <= MAX_LEVEL
+ */
+static int
+random_level (void)
+{
+ /* tricky bit -- each bit is '1' 75% of the time */
+ long int bits = FcRandom () | FcRandom ();
+ int level = 0;
+
+ while (++level < FC_CACHE_MAX_LEVEL)
+ {
+ if (bits & 1)
+ break;
+ bits >>= 1;
+ }
+ return level;
+}
+
+/*
+ * Insert cache into the list
+ */
+static FcBool
+FcCacheInsert (FcCache *cache, struct stat *cache_stat)
+{
+ FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
+ FcCacheSkip *s, **next;
+ int i, level;
+
+ /*
+ * Find links along each chain
+ */
+ next = fcCacheChains;
+ for (i = fcCacheMaxLevel; --i >= 0; )
+ {
+ for (; (s = next[i]); next = s->next)
+ if (s->cache > cache)
+ break;
+ update[i] = &next[i];
+ }
+
+ /*
+ * Create new list element
+ */
+ level = random_level ();
+ if (level > fcCacheMaxLevel)
+ {
+ level = fcCacheMaxLevel + 1;
+ update[fcCacheMaxLevel] = &fcCacheChains[fcCacheMaxLevel];
+ fcCacheMaxLevel = level;
+ }
+
+ s = malloc (sizeof (FcCacheSkip) + (level - 1) * sizeof (FcCacheSkip *));
+ if (!s)
+ return FcFalse;
+
+ s->cache = cache;
+ s->size = cache->size;
+ s->ref = 1;
+ if (cache_stat)
+ {
+ s->cache_dev = cache_stat->st_dev;
+ s->cache_ino = cache_stat->st_ino;
+ s->cache_mtime = cache_stat->st_mtime;
+ }
+ else
+ {
+ s->cache_dev = 0;
+ s->cache_ino = 0;
+ s->cache_mtime = 0;
+ }
+
+ /*
+ * Insert into all fcCacheChains
+ */
+ for (i = 0; i < level; i++)
+ {
+ s->next[i] = *update[i];
+ *update[i] = s;
+ }
+ return FcTrue;
+}
+
+static FcCacheSkip *
+FcCacheFindByAddr (void *object)
+{
+ int i;
+ FcCacheSkip **next = fcCacheChains;
+ FcCacheSkip *s;
+
+ /*
+ * Walk chain pointers one level at a time
+ */
+ for (i = fcCacheMaxLevel; --i >= 0;)
+ while (next[i] && (char *) object >= ((char *) next[i]->cache + next[i]->size))
+ next = next[i]->next;
+ /*
+ * Here we are
+ */
+ s = next[0];
+ if (s && (char *) object < ((char *) s->cache + s->size))
+ return s;
+ return NULL;
+}
+
+static void
+FcCacheRemove (FcCache *cache)
+{
+ FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
+ FcCacheSkip *s, **next;
+ int i;
+
+ /*
+ * Find links along each chain
+ */
+ next = fcCacheChains;
+ for (i = fcCacheMaxLevel; --i >= 0; )
+ {
+ for (; (s = next[i]); next = s->next)
+ if (s->cache >= cache)
+ break;
+ update[i] = &next[i];
+ }
+ s = next[0];
+ for (i = 0; i < fcCacheMaxLevel && *update[i] == s; i++)
+ *update[i] = s->next[i];
+ while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL)
+ fcCacheMaxLevel--;
+ free (s);
+}
+
+static FcCache *
+FcCacheFindByStat (struct stat *cache_stat)
+{
+ FcCacheSkip *s;
+
+ for (s = fcCacheChains[0]; s; s = s->next[0])
+ if (s->cache_dev == cache_stat->st_dev &&
+ s->cache_ino == cache_stat->st_ino &&
+ s->cache_mtime == cache_stat->st_mtime)
+ {
+ s->ref++;
+ return s->cache;
+ }
+ return NULL;
+}
+
+static void
+FcDirCacheDispose (FcCache *cache)
+{
+ switch (cache->magic) {
+ case FC_CACHE_MAGIC_ALLOC:
+ free (cache);
+ break;
+ case FC_CACHE_MAGIC_MMAP:
+#if defined(HAVE_MMAP) || defined(__CYGWIN__)
+ munmap (cache, cache->size);
+#elif defined(_WIN32)
+ UnmapViewOfFile (cache);
+#endif
+ break;
+ }
+ FcCacheRemove (cache);
+}
+
+void
+FcCacheObjectReference (void *object)
+{
+ FcCacheSkip *skip = FcCacheFindByAddr (object);
+
+ if (skip)
+ skip->ref++;
+}
+
+void
+FcCacheObjectDereference (void *object)
+{
+ FcCacheSkip *skip = FcCacheFindByAddr (object);
+
+ if (skip)
+ {
+ skip->ref--;
+ if (skip->ref <= 0)
+ FcDirCacheDispose (skip->cache);
+ }
+}
+
+void
+FcCacheFini (void)
+{
+ int i;
+
+ for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
+ assert (fcCacheChains[i] == NULL);
+ assert (fcCacheMaxLevel == 0);
+}
+
+static FcBool
+FcCacheTimeValid (FcCache *cache, struct stat *dir_stat)
+{
+ struct stat dir_static;
+
+ if (!dir_stat)
+ {
+ if (FcStat (FcCacheDir (cache), &dir_static) < 0)
+ return FcFalse;
+ dir_stat = &dir_static;
+ }
+ if (FcDebug () & FC_DBG_CACHE)
+ printf ("FcCacheTimeValid dir \"%s\" cache time %d dir time %d\n",
+ FcCacheDir (cache), cache->mtime, (int) dir_stat->st_mtime);
+ return cache->mtime == (int) dir_stat->st_mtime;
+}
+
+/*
+ * Map a cache file into memory
+ */
+static FcCache *
+FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat)
+{
+ FcCache *cache;
+ FcBool allocated = FcFalse;
+
+ if (fd_stat->st_size < sizeof (FcCache))
+ return NULL;
+ cache = FcCacheFindByStat (fd_stat);
+ if (cache)
+ {
+ if (FcCacheTimeValid (cache, dir_stat))
+ return cache;
+ FcDirCacheUnload (cache);
+ cache = NULL;
+ }
+
+ /*
+ * Lage cache files are mmap'ed, smaller cache files are read. This
+ * balances the system cost of mmap against per-process memory usage.
+ */
+ if (fd_stat->st_size >= FC_CACHE_MIN_MMAP)
+ {
+#if defined(HAVE_MMAP) || defined(__CYGWIN__)
+ cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0);
+ if (cache == MAP_FAILED)
+ cache = NULL;
+#elif defined(_WIN32)
+ {
+ HANDLE hFileMap;
+
+ cache = NULL;
+ hFileMap = CreateFileMapping((HANDLE) _get_osfhandle(fd), NULL,
+ PAGE_READONLY, 0, 0, NULL);
+ if (hFileMap != NULL)
+ {
+ cache = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0,
+ fd_stat->st_size);
+ CloseHandle (hFileMap);
+ }
+ }
+#endif
+ }
+ if (!cache)
+ {
+ cache = malloc (fd_stat->st_size);
+ if (!cache)
+ return NULL;
+
+ if (read (fd, cache, fd_stat->st_size) != fd_stat->st_size)
+ {
+ free (cache);
+ return NULL;
+ }
+ allocated = FcTrue;
+ }
+ if (cache->magic != FC_CACHE_MAGIC_MMAP ||
+ cache->version < FC_CACHE_CONTENT_VERSION ||
+ cache->size != fd_stat->st_size ||
+ !FcCacheTimeValid (cache, dir_stat) ||
+ !FcCacheInsert (cache, fd_stat))
+ {
+ if (allocated)
+ free (cache);
+ else
+ {
+#if defined(HAVE_MMAP) || defined(__CYGWIN__)
+ munmap (cache, fd_stat->st_size);
+#elif defined(_WIN32)
+ UnmapViewOfFile (cache);
+#endif
+ }
+ return NULL;
+ }
+
+ /* Mark allocated caches so they're freed rather than unmapped */
+ if (allocated)
+ cache->magic = FC_CACHE_MAGIC_ALLOC;
+
+ return cache;
+}
+
+void
+FcDirCacheReference (FcCache *cache, int nref)
+{
+ FcCacheSkip *skip = FcCacheFindByAddr (cache);
+
+ if (skip)
+ skip->ref += nref;
+}
+
+void
+FcDirCacheUnload (FcCache *cache)
+{
+ FcCacheObjectDereference (cache);
+}
+
+static FcBool
+FcDirCacheMapHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
+{
+ FcCache *cache = FcDirCacheMapFd (fd, fd_stat, dir_stat);
+
+ if (!cache)
+ return FcFalse;
+ *((FcCache **) closure) = cache;
+ return FcTrue;
+}
+
+FcCache *
+FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file)
+{
+ FcCache *cache = NULL;
+
+ if (!FcDirCacheProcess (config, dir,
+ FcDirCacheMapHelper,
+ &cache, cache_file))
+ return NULL;
+ return cache;
+}
+
+FcCache *
+FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
+{
+ int fd;
+ FcCache *cache;
+ struct stat my_file_stat;
+
+ if (!file_stat)
+ file_stat = &my_file_stat;
+ fd = FcDirCacheOpenFile (cache_file, file_stat);
+ if (fd < 0)
+ return NULL;
+ cache = FcDirCacheMapFd (fd, file_stat, NULL);
+ close (fd);
+ return cache;
+}
+
+/*
+ * Validate a cache file by reading the header and checking
+ * the magic number and the size field
+ */
+static FcBool
+FcDirCacheValidateHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
+{
+ FcBool ret = FcTrue;
+ FcCache c;
+
+ if (read (fd, &c, sizeof (FcCache)) != sizeof (FcCache))
+ ret = FcFalse;
+ else if (c.magic != FC_CACHE_MAGIC_MMAP)
+ ret = FcFalse;
+ else if (c.version < FC_CACHE_CONTENT_VERSION)
+ ret = FcFalse;
+ else if (fd_stat->st_size != c.size)
+ ret = FcFalse;
+ else if (c.mtime != (int) dir_stat->st_mtime)
+ ret = FcFalse;
+ return ret;
+}
+
+static FcBool
+FcDirCacheValidConfig (const FcChar8 *dir, FcConfig *config)
+{
+ return FcDirCacheProcess (config, dir,
+ FcDirCacheValidateHelper,
+ NULL, NULL);
+}
+
+FcBool
+FcDirCacheValid (const FcChar8 *dir)
+{
+ FcConfig *config;
+
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+
+ return FcDirCacheValidConfig (dir, config);
+}
+
+/*
+ * Build a cache structure from the given contents
+ */
+FcCache *
+FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs)
+{
+ FcSerialize *serialize = FcSerializeCreate ();
+ FcCache *cache;
+ int i;
+ intptr_t cache_offset;
+ intptr_t dirs_offset;
+ FcChar8 *dir_serialize;
+ intptr_t *dirs_serialize;
+ FcFontSet *set_serialize;
+
+ if (!serialize)
+ return NULL;
+ /*
+ * Space for cache structure
+ */
+ cache_offset = FcSerializeReserve (serialize, sizeof (FcCache));
+ /*
+ * Directory name
+ */
+ if (!FcStrSerializeAlloc (serialize, dir))
+ goto bail1;
+ /*
+ * Subdirs
+ */
+ dirs_offset = FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *));
+ for (i = 0; i < dirs->num; i++)
+ if (!FcStrSerializeAlloc (serialize, dirs->strs[i]))
+ goto bail1;
+
+ /*
+ * Patterns
+ */
+ if (!FcFontSetSerializeAlloc (serialize, set))
+ goto bail1;
+
+ /* Serialize layout complete. Now allocate space and fill it */
+ cache = malloc (serialize->size);
+ if (!cache)
+ goto bail1;
+ /* shut up valgrind */
+ memset (cache, 0, serialize->size);
+
+ serialize->linear = cache;
+
+ cache->magic = FC_CACHE_MAGIC_ALLOC;
+ cache->version = FC_CACHE_CONTENT_VERSION;
+ cache->size = serialize->size;
+ cache->mtime = (int) dir_stat->st_mtime;
+
+ /*
+ * Serialize directory name
+ */
+ dir_serialize = FcStrSerialize (serialize, dir);
+ if (!dir_serialize)
+ goto bail2;
+ cache->dir = FcPtrToOffset (cache, dir_serialize);
+
+ /*
+ * Serialize sub dirs
+ */
+ dirs_serialize = FcSerializePtr (serialize, dirs);
+ if (!dirs_serialize)
+ goto bail2;
+ cache->dirs = FcPtrToOffset (cache, dirs_serialize);
+ cache->dirs_count = dirs->num;
+ for (i = 0; i < dirs->num; i++)
+ {
+ FcChar8 *d_serialize = FcStrSerialize (serialize, dirs->strs[i]);
+ if (!d_serialize)
+ goto bail2;
+ dirs_serialize[i] = FcPtrToOffset (dirs_serialize, d_serialize);
+ }
+
+ /*
+ * Serialize font set
+ */
+ set_serialize = FcFontSetSerialize (serialize, set);
+ if (!set_serialize)
+ goto bail2;
+ cache->set = FcPtrToOffset (cache, set_serialize);
+
+ FcSerializeDestroy (serialize);
+
+ FcCacheInsert (cache, NULL);
+
+ return cache;
+
+bail2:
+ free (cache);
+bail1:
+ FcSerializeDestroy (serialize);
+ return NULL;
+}
+
+
+#ifdef _WIN32
+#undef mkdir
+#define mkdir(path,mode) _mkdir(path)
+#endif
+
+static FcBool
+FcMakeDirectory (const FcChar8 *dir)
+{
+ FcChar8 *parent;
+ FcBool ret;
+
+ if (strlen ((char *) dir) == 0)
+ return FcFalse;
+
+ parent = FcStrDirname (dir);
+ if (!parent)
+ return FcFalse;
+ if (access ((char *) parent, F_OK) == 0)
+ ret = mkdir ((char *) dir, 0755) == 0 && chmod ((char *) dir, 0755) == 0;
+ else if (access ((char *) parent, F_OK) == -1)
+ ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0755) == 0) && chmod ((char *) dir, 0755) == 0;
+ else
+ ret = FcFalse;
+ FcStrFree (parent);
+ return ret;
+}
+
+/* write serialized state to the cache file */
+FcBool
+FcDirCacheWrite (FcCache *cache, FcConfig *config)
+{
+ FcChar8 *dir = FcCacheDir (cache);
+ FcChar8 cache_base[CACHEBASE_LEN];
+ FcChar8 *cache_hashed;
+ int fd;
+ FcAtomic *atomic;
+ FcStrList *list;
+ FcChar8 *cache_dir = NULL;
+ FcChar8 *test_dir;
+ FcCacheSkip *skip;
+ struct stat cache_stat;
+ int magic;
+ int written;
+
+ /*
+ * Write it to the first directory in the list which is writable
+ */
+
+ list = FcStrListCreate (config->cacheDirs);
+ if (!list)
+ return FcFalse;
+ while ((test_dir = FcStrListNext (list))) {
+ if (access ((char *) test_dir, W_OK|X_OK) == 0)
+ {
+ cache_dir = test_dir;
+ break;
+ }
+ else
+ {
+ /*
+ * If the directory doesn't exist, try to create it
+ */
+ if (access ((char *) test_dir, F_OK) == -1) {
+ if (FcMakeDirectory (test_dir))
+ {
+ cache_dir = test_dir;
+ break;
+ }
+ }
+ /*
+ * Otherwise, try making it writable
+ */
+ else if (chmod ((char *) test_dir, 0755) == 0)
+ {
+ cache_dir = test_dir;
+ break;
+ }
+ }
+ }
+ FcStrListDone (list);
+ if (!cache_dir)
+ return FcFalse;
+
+ FcDirCacheBasename (dir, cache_base);
+ cache_hashed = FcStrPlus (cache_dir, cache_base);
+ if (!cache_hashed)
+ return FcFalse;
+
+ if (FcDebug () & FC_DBG_CACHE)
+ printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n",
+ dir, cache_hashed);
+
+ atomic = FcAtomicCreate ((FcChar8 *)cache_hashed);
+ if (!atomic)
+ goto bail1;
+
+ if (!FcAtomicLock (atomic))
+ goto bail3;
+
+ fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666);
+ if (fd == -1)
+ goto bail4;
+
+ /* Temporarily switch magic to MMAP while writing to file */
+ magic = cache->magic;
+ if (magic != FC_CACHE_MAGIC_MMAP)
+ cache->magic = FC_CACHE_MAGIC_MMAP;
+
+ /*
+ * Write cache contents to file
+ */
+ written = write (fd, cache, cache->size);
+
+ /* Switch magic back */
+ if (magic != FC_CACHE_MAGIC_MMAP)
+ cache->magic = magic;
+
+ if (written != cache->size)
+ {
+ perror ("write cache");
+ goto bail5;
+ }
+
+ close(fd);
+ if (!FcAtomicReplaceOrig(atomic))
+ goto bail4;
+
+ /* If the file is small, update the cache chain entry such that the
+ * new cache file is not read again. If it's large, we don't do that
+ * such that we reload it, using mmap, which is shared across processes.
+ */
+ if (cache->size < FC_CACHE_MIN_MMAP &&
+ (skip = FcCacheFindByAddr (cache)) &&
+ FcStat (cache_hashed, &cache_stat))
+ {
+ skip->cache_dev = cache_stat.st_dev;
+ skip->cache_ino = cache_stat.st_ino;
+ skip->cache_mtime = cache_stat.st_mtime;
+ }
+
+ FcStrFree (cache_hashed);
+ FcAtomicUnlock (atomic);
+ FcAtomicDestroy (atomic);
+ return FcTrue;
+
+ bail5:
+ close (fd);
+ bail4:
+ FcAtomicUnlock (atomic);
+ bail3:
+ FcAtomicDestroy (atomic);
+ bail1:
+ FcStrFree (cache_hashed);
+ return FcFalse;
+}
+
+/*
+ * Hokey little macro trick to permit the definitions of C functions
+ * with the same name as CPP macros
+ */
+#define args1(x) (x)
+#define args2(x,y) (x,y)
+
+const FcChar8 *
+FcCacheDir args1(const FcCache *c)
+{
+ return FcCacheDir (c);
+}
+
+FcFontSet *
+FcCacheCopySet args1(const FcCache *c)
+{
+ FcFontSet *old = FcCacheSet (c);
+ FcFontSet *new = FcFontSetCreate ();
+ int i;
+
+ if (!new)
+ return NULL;
+ for (i = 0; i < old->nfont; i++)
+ {
+ FcPattern *font = FcFontSetFont (old, i);
+
+ FcPatternReference (font);
+ if (!FcFontSetAdd (new, font))
+ {
+ FcFontSetDestroy (new);
+ return NULL;
+ }
+ }
+ return new;
+}
+
+const FcChar8 *
+FcCacheSubdir args2(const FcCache *c, int i)
+{
+ return FcCacheSubdir (c, i);
+}
+
+int
+FcCacheNumSubdir args1(const FcCache *c)
+{
+ return c->dirs_count;
+}
+
+int
+FcCacheNumFont args1(const FcCache *c)
+{
+ return FcCacheSet(c)->nfont;
+}
+
+/*
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest. This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ */
+
+#ifndef HIGHFIRST
+#define byteReverse(buf, len) /* Nothing */
+#else
+/*
+ * Note: this code is harmless on little-endian machines.
+ */
+void byteReverse(unsigned char *buf, unsigned longs)
+{
+ FcChar32 t;
+ do {
+ t = (FcChar32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+ ((unsigned) buf[1] << 8 | buf[0]);
+ *(FcChar32 *) buf = t;
+ buf += 4;
+ } while (--longs);
+}
+#endif
+
+/*
+ * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+static void MD5Init(struct MD5Context *ctx)
+{
+ ctx->buf[0] = 0x67452301;
+ ctx->buf[1] = 0xefcdab89;
+ ctx->buf[2] = 0x98badcfe;
+ ctx->buf[3] = 0x10325476;
+
+ ctx->bits[0] = 0;
+ ctx->bits[1] = 0;
+}
+
+/*
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len)
+{
+ FcChar32 t;
+
+ /* Update bitcount */
+
+ t = ctx->bits[0];
+ if ((ctx->bits[0] = t + ((FcChar32) len << 3)) < t)
+ ctx->bits[1]++; /* Carry from low to high */
+ ctx->bits[1] += len >> 29;
+
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+
+ /* Handle any leading odd-sized chunks */
+
+ if (t) {
+ unsigned char *p = (unsigned char *) ctx->in + t;
+
+ t = 64 - t;
+ if (len < t) {
+ memcpy(p, buf, len);
+ return;
+ }
+ memcpy(p, buf, t);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
+ buf += t;
+ len -= t;
+ }
+ /* Process data in 64-byte chunks */
+
+ while (len >= 64) {
+ memcpy(ctx->in, buf, 64);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
+ buf += 64;
+ len -= 64;
+ }
+
+ /* Handle any remaining bytes of data. */
+
+ memcpy(ctx->in, buf, len);
+}
+
+/*
+ * Final wrapup - pad to 64-byte boundary with the bit pattern
+ * 1 0* (64-bit count of bits processed, MSB-first)
+ */
+static void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
+{
+ unsigned count;
+ unsigned char *p;
+
+ /* Compute number of bytes mod 64 */
+ count = (ctx->bits[0] >> 3) & 0x3F;
+
+ /* Set the first char of padding to 0x80. This is safe since there is
+ always at least one byte free */
+ p = ctx->in + count;
+ *p++ = 0x80;
+
+ /* Bytes of padding needed to make 64 bytes */
+ count = 64 - 1 - count;
+
+ /* Pad out to 56 mod 64 */
+ if (count < 8) {
+ /* Two lots of padding: Pad the first block to 64 bytes */
+ memset(p, 0, count);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
+
+ /* Now fill the next block with 56 bytes */
+ memset(ctx->in, 0, 56);
+ } else {
+ /* Pad block to 56 bytes */
+ memset(p, 0, count - 8);
+ }
+ byteReverse(ctx->in, 14);
+
+ /* Append length in bits and transform */
+ ((FcChar32 *) ctx->in)[14] = ctx->bits[0];
+ ((FcChar32 *) ctx->in)[15] = ctx->bits[1];
+
+ MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
+ byteReverse((unsigned char *) ctx->buf, 4);
+ memcpy(digest, ctx->buf, 16);
+ memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
+}
+
+
+/* The four core functions - F1 is optimized somewhat */
+
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+ ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
+
+/*
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data. MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+static void MD5Transform(FcChar32 buf[4], FcChar32 in[16])
+{
+ register FcChar32 a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
+}
+#define __fccache__
+#include "fcaliastail.h"
+#undef __fccache__
diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c
index 0f89b57a4..d6300515e 100644
--- a/fontconfig/src/fccfg.c
+++ b/fontconfig/src/fccfg.c
@@ -1,2056 +1,2099 @@
-/*
- * fontconfig/src/fccfg.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <dirent.h>
-#include <sys/types.h>
-
-#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT))
-#define STRICT
-#include <windows.h>
-#undef STRICT
-#endif
-
-#if defined (_WIN32) && !defined (R_OK)
-#define R_OK 4
-#endif
-
-FcConfig *_fcConfig;
-
-FcConfig *
-FcConfigCreate (void)
-{
- FcSetName set;
- FcConfig *config;
-
- config = malloc (sizeof (FcConfig));
- if (!config)
- goto bail0;
- FcMemAlloc (FC_MEM_CONFIG, sizeof (FcConfig));
-
- config->configDirs = FcStrSetCreate ();
- if (!config->configDirs)
- goto bail1;
-
- config->configFiles = FcStrSetCreate ();
- if (!config->configFiles)
- goto bail2;
-
- config->fontDirs = FcStrSetCreate ();
- if (!config->fontDirs)
- goto bail3;
-
- config->acceptGlobs = FcStrSetCreate ();
- if (!config->acceptGlobs)
- goto bail4;
-
- config->rejectGlobs = FcStrSetCreate ();
- if (!config->rejectGlobs)
- goto bail5;
-
- config->acceptPatterns = FcFontSetCreate ();
- if (!config->acceptPatterns)
- goto bail6;
-
- config->rejectPatterns = FcFontSetCreate ();
- if (!config->rejectPatterns)
- goto bail7;
-
- config->cacheDirs = FcStrSetCreate ();
- if (!config->cacheDirs)
- goto bail8;
-
- config->blanks = 0;
-
- config->substPattern = 0;
- config->substFont = 0;
- config->substScan = 0;
- config->maxObjects = 0;
- for (set = FcSetSystem; set <= FcSetApplication; set++)
- config->fonts[set] = 0;
-
- config->rescanTime = time(0);
- config->rescanInterval = 30;
-
- config->expr_pool = NULL;
-
- config->ref = 1;
-
- return config;
-
-bail8:
- FcFontSetDestroy (config->rejectPatterns);
-bail7:
- FcFontSetDestroy (config->acceptPatterns);
-bail6:
- FcStrSetDestroy (config->rejectGlobs);
-bail5:
- FcStrSetDestroy (config->acceptGlobs);
-bail4:
- FcStrSetDestroy (config->fontDirs);
-bail3:
- FcStrSetDestroy (config->configFiles);
-bail2:
- FcStrSetDestroy (config->configDirs);
-bail1:
- free (config);
- FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
-bail0:
- return 0;
-}
-
-static FcFileTime
-FcConfigNewestFile (FcStrSet *files)
-{
- FcStrList *list = FcStrListCreate (files);
- FcFileTime newest = { 0, FcFalse };
- FcChar8 *file;
- struct stat statb;
-
- if (list)
- {
- while ((file = FcStrListNext (list)))
- if (FcStat ((char *) file, &statb) == 0)
- if (!newest.set || statb.st_mtime - newest.time > 0)
- {
- newest.set = FcTrue;
- newest.time = statb.st_mtime;
- }
- FcStrListDone (list);
- }
- return newest;
-}
-
-FcBool
-FcConfigUptoDate (FcConfig *config)
-{
- FcFileTime config_time, config_dir_time, font_time;
- time_t now = time(0);
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
- config_time = FcConfigNewestFile (config->configFiles);
- config_dir_time = FcConfigNewestFile (config->configDirs);
- font_time = FcConfigNewestFile (config->fontDirs);
- if ((config_time.set && config_time.time - config->rescanTime > 0) ||
- (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) ||
- (font_time.set && (font_time.time - config->rescanTime) > 0))
- {
- /* We need to check for potential clock problems here (OLPC ticket #6046) */
- if ((config_time.set && (config_time.time - now) > 0) ||
- (config_dir_time.set && (config_dir_time.time - now) > 0) ||
- (font_time.set && (font_time.time - now) > 0))
- {
- fprintf (stderr,
- "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected\n");
- config->rescanTime = now;
- return FcTrue;
- }
- else
- return FcFalse;
- }
- config->rescanTime = now;
- return FcTrue;
-}
-
-static void
-FcSubstDestroy (FcSubst *s)
-{
- FcSubst *n;
-
- while (s)
- {
- n = s->next;
- if (s->test)
- FcTestDestroy (s->test);
- if (s->edit)
- FcEditDestroy (s->edit);
- free (s);
- FcMemFree (FC_MEM_SUBST, sizeof (FcSubst));
- s = n;
- }
-}
-
-FcExpr *
-FcConfigAllocExpr (FcConfig *config)
-{
- if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end)
- {
- FcExprPage *new_page;
-
- new_page = malloc (sizeof (FcExprPage));
- if (!new_page)
- return 0;
- FcMemAlloc (FC_MEM_EXPR, sizeof (FcExprPage));
-
- new_page->next_page = config->expr_pool;
- new_page->next = new_page->exprs;
- config->expr_pool = new_page;
- }
-
- return config->expr_pool->next++;
-}
-
-FcConfig *
-FcConfigReference (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
-
- config->ref++;
-
- return config;
-}
-
-void
-FcConfigDestroy (FcConfig *config)
-{
- FcSetName set;
- FcExprPage *page;
-
- if (--config->ref > 0)
- return;
-
- if (config == _fcConfig)
- _fcConfig = 0;
-
- FcStrSetDestroy (config->configDirs);
- FcStrSetDestroy (config->fontDirs);
- FcStrSetDestroy (config->cacheDirs);
- FcStrSetDestroy (config->configFiles);
- FcStrSetDestroy (config->acceptGlobs);
- FcStrSetDestroy (config->rejectGlobs);
- FcFontSetDestroy (config->acceptPatterns);
- FcFontSetDestroy (config->rejectPatterns);
-
- if (config->blanks)
- FcBlanksDestroy (config->blanks);
-
- FcSubstDestroy (config->substPattern);
- FcSubstDestroy (config->substFont);
- FcSubstDestroy (config->substScan);
- for (set = FcSetSystem; set <= FcSetApplication; set++)
- if (config->fonts[set])
- FcFontSetDestroy (config->fonts[set]);
-
- page = config->expr_pool;
- while (page)
- {
- FcExprPage *next = page->next_page;
- FcMemFree (FC_MEM_EXPR, sizeof (FcExprPage));
- free (page);
- page = next;
- }
-
- free (config);
- FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
-}
-
-/*
- * Add cache to configuration, adding fonts and directories
- */
-
-FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache,
- FcSetName set, FcStrSet *dirSet)
-{
- FcFontSet *fs;
- intptr_t *dirs;
- int i;
-
- /*
- * Add fonts
- */
- fs = FcCacheSet (cache);
- if (fs)
- {
- int nref = 0;
-
- for (i = 0; i < fs->nfont; i++)
- {
- FcPattern *font = FcFontSetFont (fs, i);
- FcChar8 *font_file;
-
- /*
- * Check to see if font is banned by filename
- */
- if (FcPatternObjectGetString (font, FC_FILE_OBJECT,
- 0, &font_file) == FcResultMatch &&
- !FcConfigAcceptFilename (config, font_file))
- {
- continue;
- }
-
- /*
- * Check to see if font is banned by pattern
- */
- if (!FcConfigAcceptFont (config, font))
- continue;
-
- nref++;
- FcFontSetAdd (config->fonts[set], font);
- }
- FcDirCacheReference (cache, nref);
- }
-
- /*
- * Add directories
- */
- dirs = FcCacheDirs (cache);
- if (dirs)
- {
- for (i = 0; i < cache->dirs_count; i++)
- {
- FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8);
- if (FcConfigAcceptFilename (config, dir))
- FcStrSetAddFilename (dirSet, dir);
- }
- }
- return FcTrue;
-}
-
-static FcBool
-FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet)
-{
- FcStrList *dirlist;
- FcChar8 *dir;
- FcCache *cache;
-
- dirlist = FcStrListCreate (dirSet);
- if (!dirlist)
- return FcFalse;
-
- while ((dir = FcStrListNext (dirlist)))
- {
- if (FcDebug () & FC_DBG_FONTSET)
- printf ("adding fonts from%s\n", dir);
- cache = FcDirCacheRead (dir, FcFalse, config);
- if (!cache)
- continue;
- FcConfigAddCache (config, cache, set, dirSet);
- FcDirCacheUnload (cache);
- }
- FcStrListDone (dirlist);
- return FcTrue;
-}
-
-/*
- * Scan the current list of directories in the configuration
- * and build the set of available fonts.
- */
-
-FcBool
-FcConfigBuildFonts (FcConfig *config)
-{
- FcFontSet *fonts;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- fonts = FcFontSetCreate ();
- if (!fonts)
- return FcFalse;
-
- FcConfigSetFonts (config, fonts, FcSetSystem);
-
- if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs))
- return FcFalse;
- if (FcDebug () & FC_DBG_FONTSET)
- FcFontSetPrint (fonts);
- return FcTrue;
-}
-
-FcBool
-FcConfigSetCurrent (FcConfig *config)
-{
- if (config == _fcConfig)
- return FcTrue;
-
- if (!config->fonts)
- if (!FcConfigBuildFonts (config))
- return FcFalse;
-
- if (_fcConfig)
- FcConfigDestroy (_fcConfig);
- _fcConfig = config;
- return FcTrue;
-}
-
-FcConfig *
-FcConfigGetCurrent (void)
-{
- if (!_fcConfig)
- if (!FcInit ())
- return 0;
- return _fcConfig;
-}
-
-FcBool
-FcConfigAddConfigDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->configDirs, d);
-}
-
-FcStrList *
-FcConfigGetConfigDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->configDirs);
-}
-
-FcBool
-FcConfigAddFontDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->fontDirs, d);
-}
-
-FcBool
-FcConfigAddDir (FcConfig *config,
- const FcChar8 *d)
-{
- return (FcConfigAddConfigDir (config, d) &&
- FcConfigAddFontDir (config, d));
-}
-
-FcStrList *
-FcConfigGetFontDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->fontDirs);
-}
-
-FcBool
-FcConfigAddCacheDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->cacheDirs, d);
-}
-
-FcStrList *
-FcConfigGetCacheDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->cacheDirs);
-}
-
-FcBool
-FcConfigAddConfigFile (FcConfig *config,
- const FcChar8 *f)
-{
- FcBool ret;
- FcChar8 *file = FcConfigFilename (f);
-
- if (!file)
- return FcFalse;
-
- ret = FcStrSetAdd (config->configFiles, file);
- FcStrFree (file);
- return ret;
-}
-
-FcStrList *
-FcConfigGetConfigFiles (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->configFiles);
-}
-
-FcChar8 *
-FcConfigGetCache (FcConfig *config)
-{
- return NULL;
-}
-
-FcFontSet *
-FcConfigGetFonts (FcConfig *config,
- FcSetName set)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->fonts[set];
-}
-
-void
-FcConfigSetFonts (FcConfig *config,
- FcFontSet *fonts,
- FcSetName set)
-{
- if (config->fonts[set])
- FcFontSetDestroy (config->fonts[set]);
- config->fonts[set] = fonts;
-}
-
-FcBlanks *
-FcConfigGetBlanks (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->blanks;
-}
-
-FcBool
-FcConfigAddBlank (FcConfig *config,
- FcChar32 blank)
-{
- FcBlanks *b, *freeme = 0;
-
- b = config->blanks;
- if (!b)
- {
- freeme = b = FcBlanksCreate ();
- if (!b)
- return FcFalse;
- }
- if (!FcBlanksAdd (b, blank))
- {
- if (freeme)
- FcBlanksDestroy (freeme);
- return FcFalse;
- }
- config->blanks = b;
- return FcTrue;
-}
-
-int
-FcConfigGetRescanInterval (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->rescanInterval;
-}
-
-FcBool
-FcConfigSetRescanInterval (FcConfig *config, int rescanInterval)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
- config->rescanInterval = rescanInterval;
- return FcTrue;
-}
-
-/*
- * A couple of typos escaped into the library
- */
-int
-FcConfigGetRescanInverval (FcConfig *config)
-{
- return FcConfigGetRescanInterval (config);
-}
-
-FcBool
-FcConfigSetRescanInverval (FcConfig *config, int rescanInterval)
-{
- return FcConfigSetRescanInterval (config, rescanInterval);
-}
-
-
-FcBool
-FcConfigAddEdit (FcConfig *config,
- FcTest *test,
- FcEdit *edit,
- FcMatchKind kind)
-{
- FcSubst *subst, **prev;
- FcTest *t;
- int num;
-
- switch (kind) {
- case FcMatchPattern:
- prev = &config->substPattern;
- break;
- case FcMatchFont:
- prev = &config->substFont;
- break;
- case FcMatchScan:
- prev = &config->substScan;
- break;
- default:
- return FcFalse;
- }
- subst = (FcSubst *) malloc (sizeof (FcSubst));
- if (!subst)
- return FcFalse;
- FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst));
- for (; *prev; prev = &(*prev)->next);
- *prev = subst;
- subst->next = 0;
- subst->test = test;
- subst->edit = edit;
- num = 0;
- for (t = test; t; t = t->next)
- {
- if (t->kind == FcMatchDefault)
- t->kind = kind;
- num++;
- }
- if (config->maxObjects < num)
- config->maxObjects = num;
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("Add Subst ");
- FcSubstPrint (subst);
- }
- return FcTrue;
-}
-
-typedef struct _FcSubState {
- FcPatternElt *elt;
- FcValueList *value;
-} FcSubState;
-
-static FcValue
-FcConfigPromote (FcValue v, FcValue u)
-{
- if (v.type == FcTypeInteger)
- {
- v.type = FcTypeDouble;
- v.u.d = (double) v.u.i;
- }
- else if (v.type == FcTypeVoid && u.type == FcTypeMatrix)
- {
- v.u.m = &FcIdentityMatrix;
- v.type = FcTypeMatrix;
- }
- else if (v.type == FcTypeString && u.type == FcTypeLangSet)
- {
- v.u.l = FcLangSetPromote (v.u.s);
- v.type = FcTypeLangSet;
- }
- return v;
-}
-
-FcBool
-FcConfigCompareValue (const FcValue *left_o,
- FcOp op,
- const FcValue *right_o)
-{
- FcValue left = FcValueCanonicalize(left_o);
- FcValue right = FcValueCanonicalize(right_o);
- FcBool ret = FcFalse;
-
- left = FcConfigPromote (left, right);
- right = FcConfigPromote (right, left);
- if (left.type == right.type)
- {
- switch (left.type) {
- case FcTypeInteger:
- break; /* FcConfigPromote prevents this from happening */
- case FcTypeDouble:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.d == right.u.d;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.d != right.u.d;
- break;
- case FcOpLess:
- ret = left.u.d < right.u.d;
- break;
- case FcOpLessEqual:
- ret = left.u.d <= right.u.d;
- break;
- case FcOpMore:
- ret = left.u.d > right.u.d;
- break;
- case FcOpMoreEqual:
- ret = left.u.d >= right.u.d;
- break;
- default:
- break;
- }
- break;
- case FcTypeBool:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.b == right.u.b;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.b != right.u.b;
- break;
- default:
- break;
- }
- break;
- case FcTypeString:
- switch (op) {
- case FcOpEqual:
- case FcOpListing:
- ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0;
- break;
- case FcOpContains:
- ret = FcStrStrIgnoreCase (left.u.s, right.u.s) != 0;
- break;
- case FcOpNotEqual:
- ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) != 0;
- break;
- case FcOpNotContains:
- ret = FcStrStrIgnoreCase (left.u.s, right.u.s) == 0;
- break;
- default:
- break;
- }
- break;
- case FcTypeMatrix:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = FcMatrixEqual (left.u.m, right.u.m);
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = !FcMatrixEqual (left.u.m, right.u.m);
- break;
- default:
- break;
- }
- break;
- case FcTypeCharSet:
- switch (op) {
- case FcOpContains:
- case FcOpListing:
- /* left contains right if right is a subset of left */
- ret = FcCharSetIsSubset (right.u.c, left.u.c);
- break;
- case FcOpNotContains:
- /* left contains right if right is a subset of left */
- ret = !FcCharSetIsSubset (right.u.c, left.u.c);
- break;
- case FcOpEqual:
- ret = FcCharSetEqual (left.u.c, right.u.c);
- break;
- case FcOpNotEqual:
- ret = !FcCharSetEqual (left.u.c, right.u.c);
- break;
- default:
- break;
- }
- break;
- case FcTypeLangSet:
- switch (op) {
- case FcOpContains:
- case FcOpListing:
- ret = FcLangSetContains (left.u.l, right.u.l);
- break;
- case FcOpNotContains:
- ret = !FcLangSetContains (left.u.l, right.u.l);
- break;
- case FcOpEqual:
- ret = FcLangSetEqual (left.u.l, right.u.l);
- break;
- case FcOpNotEqual:
- ret = !FcLangSetEqual (left.u.l, right.u.l);
- break;
- default:
- break;
- }
- break;
- case FcTypeVoid:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = FcTrue;
- break;
- default:
- break;
- }
- break;
- case FcTypeFTFace:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.f == right.u.f;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.f != right.u.f;
- break;
- default:
- break;
- }
- break;
- }
- }
- else
- {
- if (op == FcOpNotEqual || op == FcOpNotContains)
- ret = FcTrue;
- }
- return ret;
-}
-
-
-#define _FcDoubleFloor(d) ((int) (d))
-#define _FcDoubleCeil(d) ((double) (int) (d) == (d) ? (int) (d) : (int) ((d) + 1))
-#define FcDoubleFloor(d) ((d) >= 0 ? _FcDoubleFloor(d) : -_FcDoubleCeil(-(d)))
-#define FcDoubleCeil(d) ((d) >= 0 ? _FcDoubleCeil(d) : -_FcDoubleFloor(-(d)))
-#define FcDoubleRound(d) FcDoubleFloor ((d) + 0.5)
-#define FcDoubleTrunc(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleFloor (-(d)))
-
-static FcValue
-FcConfigEvaluate (FcPattern *p, FcExpr *e)
-{
- FcValue v, vl, vr;
- FcResult r;
- FcMatrix *m;
- FcChar8 *str;
-
- switch (e->op) {
- case FcOpInteger:
- v.type = FcTypeInteger;
- v.u.i = e->u.ival;
- break;
- case FcOpDouble:
- v.type = FcTypeDouble;
- v.u.d = e->u.dval;
- break;
- case FcOpString:
- v.type = FcTypeString;
- v.u.s = e->u.sval;
- v = FcValueSave (v);
- break;
- case FcOpMatrix:
- v.type = FcTypeMatrix;
- v.u.m = e->u.mval;
- v = FcValueSave (v);
- break;
- case FcOpCharSet:
- v.type = FcTypeCharSet;
- v.u.c = e->u.cval;
- v = FcValueSave (v);
- break;
- case FcOpBool:
- v.type = FcTypeBool;
- v.u.b = e->u.bval;
- break;
- case FcOpField:
- r = FcPatternObjectGet (p, e->u.object, 0, &v);
- if (r != FcResultMatch)
- v.type = FcTypeVoid;
- v = FcValueSave (v);
- break;
- case FcOpConst:
- if (FcNameConstant (e->u.constant, &v.u.i))
- v.type = FcTypeInteger;
- else
- v.type = FcTypeVoid;
- break;
- case FcOpQuest:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- if (vl.type == FcTypeBool)
- {
- if (vl.u.b)
- v = FcConfigEvaluate (p, e->u.tree.right->u.tree.left);
- else
- v = FcConfigEvaluate (p, e->u.tree.right->u.tree.right);
- }
- else
- v.type = FcTypeVoid;
- FcValueDestroy (vl);
- break;
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpNotContains:
- case FcOpListing:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- vr = FcConfigEvaluate (p, e->u.tree.right);
- v.type = FcTypeBool;
- v.u.b = FcConfigCompareValue (&vl, e->op, &vr);
- FcValueDestroy (vl);
- FcValueDestroy (vr);
- break;
- case FcOpOr:
- case FcOpAnd:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- vr = FcConfigEvaluate (p, e->u.tree.right);
- vl = FcConfigPromote (vl, vr);
- vr = FcConfigPromote (vr, vl);
- if (vl.type == vr.type)
- {
- switch (vl.type) {
- case FcTypeDouble:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d + vr.u.d;
- break;
- case FcOpMinus:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d - vr.u.d;
- break;
- case FcOpTimes:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d * vr.u.d;
- break;
- case FcOpDivide:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d / vr.u.d;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- if (v.type == FcTypeDouble &&
- v.u.d == (double) (int) v.u.d)
- {
- v.type = FcTypeInteger;
- v.u.i = (int) v.u.d;
- }
- break;
- case FcTypeBool:
- switch (e->op) {
- case FcOpOr:
- v.type = FcTypeBool;
- v.u.b = vl.u.b || vr.u.b;
- break;
- case FcOpAnd:
- v.type = FcTypeBool;
- v.u.b = vl.u.b && vr.u.b;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeString:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeString;
- str = FcStrPlus (vl.u.s, vr.u.s);
- v.u.s = FcStrStaticName (str);
- FcStrFree (str);
-
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeMatrix:
- switch (e->op) {
- case FcOpTimes:
- v.type = FcTypeMatrix;
- m = malloc (sizeof (FcMatrix));
- if (m)
- {
- FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix));
- FcMatrixMultiply (m, vl.u.m, vr.u.m);
- v.u.m = m;
- }
- else
- {
- v.type = FcTypeVoid;
- }
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- }
- else
- v.type = FcTypeVoid;
- FcValueDestroy (vl);
- FcValueDestroy (vr);
- break;
- case FcOpNot:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeBool:
- v.type = FcTypeBool;
- v.u.b = !vl.u.b;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpFloor:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleFloor (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpCeil:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleCeil (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpRound:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleRound (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpTrunc:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleTrunc (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- return v;
-}
-
-static FcValueList *
-FcConfigMatchValueList (FcPattern *p,
- FcTest *t,
- FcValueList *values)
-{
- FcValueList *ret = 0;
- FcExpr *e = t->expr;
- FcValue value;
- FcValueList *v;
-
- while (e)
- {
- /* Compute the value of the match expression */
- if (e->op == FcOpComma)
- {
- value = FcConfigEvaluate (p, e->u.tree.left);
- e = e->u.tree.right;
- }
- else
- {
- value = FcConfigEvaluate (p, e);
- e = 0;
- }
-
- for (v = values; v; v = FcValueListNext(v))
- {
- /* Compare the pattern value to the match expression value */
- if (FcConfigCompareValue (&v->value, t->op, &value))
- {
- if (!ret)
- ret = v;
- }
- else
- {
- if (t->qual == FcQualAll)
- {
- ret = 0;
- break;
- }
- }
- }
- FcValueDestroy (value);
- }
- return ret;
-}
-
-static FcValueList *
-FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding)
-{
- FcValueList *l;
-
- if (!e)
- return 0;
- l = (FcValueList *) malloc (sizeof (FcValueList));
- if (!l)
- return 0;
- FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
- if (e->op == FcOpComma)
- {
- l->value = FcConfigEvaluate (p, e->u.tree.left);
- l->next = FcConfigValues (p, e->u.tree.right, binding);
- }
- else
- {
- l->value = FcConfigEvaluate (p, e);
- l->next = NULL;
- }
- l->binding = binding;
- if (l->value.type == FcTypeVoid)
- {
- FcValueList *next = FcValueListNext(l);
-
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free (l);
- l = next;
- }
-
- return l;
-}
-
-static FcBool
-FcConfigAdd (FcValueListPtr *head,
- FcValueList *position,
- FcBool append,
- FcValueList *new)
-{
- FcValueListPtr *prev, last, v;
- FcValueBinding sameBinding;
-
- if (position)
- sameBinding = position->binding;
- else
- sameBinding = FcValueBindingWeak;
- for (v = new; v != NULL; v = FcValueListNext(v))
- if (v->binding == FcValueBindingSame)
- v->binding = sameBinding;
- if (append)
- {
- if (position)
- prev = &position->next;
- else
- for (prev = head; *prev != NULL;
- prev = &(*prev)->next)
- ;
- }
- else
- {
- if (position)
- {
- for (prev = head; *prev != NULL;
- prev = &(*prev)->next)
- {
- if (*prev == position)
- break;
- }
- }
- else
- prev = head;
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- if (*prev == NULL)
- printf ("position not on list\n");
- }
- }
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("%s list before ", append ? "Append" : "Prepend");
- FcValueListPrint (*head);
- printf ("\n");
- }
-
- if (new)
- {
- last = new;
- while (last->next != NULL)
- last = last->next;
-
- last->next = *prev;
- *prev = new;
- }
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("%s list after ", append ? "Append" : "Prepend");
- FcValueListPrint (*head);
- printf ("\n");
- }
-
- return FcTrue;
-}
-
-static void
-FcConfigDel (FcValueListPtr *head,
- FcValueList *position)
-{
- FcValueListPtr *prev;
-
- for (prev = head; *prev != NULL; prev = &(*prev)->next)
- {
- if (*prev == position)
- {
- *prev = position->next;
- position->next = NULL;
- FcValueListDestroy (position);
- break;
- }
- }
-}
-
-static void
-FcConfigPatternAdd (FcPattern *p,
- FcObject object,
- FcValueList *list,
- FcBool append)
-{
- if (list)
- {
- FcPatternElt *e = FcPatternObjectInsertElt (p, object);
-
- if (!e)
- return;
- FcConfigAdd (&e->values, 0, append, list);
- }
-}
-
-/*
- * Delete all values associated with a field
- */
-static void
-FcConfigPatternDel (FcPattern *p,
- FcObject object)
-{
- FcPatternElt *e = FcPatternObjectFindElt (p, object);
- if (!e)
- return;
- while (e->values != NULL)
- FcConfigDel (&e->values, e->values);
-}
-
-static void
-FcConfigPatternCanon (FcPattern *p,
- FcObject object)
-{
- FcPatternElt *e = FcPatternObjectFindElt (p, object);
- if (!e)
- return;
- if (e->values == NULL)
- FcPatternObjectDel (p, object);
-}
-
-FcBool
-FcConfigSubstituteWithPat (FcConfig *config,
- FcPattern *p,
- FcPattern *p_pat,
- FcMatchKind kind)
-{
- FcSubst *s;
- FcSubState *st;
- int i;
- FcTest *t;
- FcEdit *e;
- FcValueList *l;
- FcPattern *m;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- switch (kind) {
- case FcMatchPattern:
- s = config->substPattern;
- break;
- case FcMatchFont:
- s = config->substFont;
- break;
- case FcMatchScan:
- s = config->substScan;
- break;
- default:
- return FcFalse;
- }
-
- st = (FcSubState *) malloc (config->maxObjects * sizeof (FcSubState));
- if (!st && config->maxObjects)
- return FcFalse;
- FcMemAlloc (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute ");
- FcPatternPrint (p);
- }
- for (; s; s = s->next)
- {
- /*
- * Check the tests to see if
- * they all match the pattern
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute test ");
- FcTestPrint (t);
- }
- st[i].elt = 0;
- if (kind == FcMatchFont && t->kind == FcMatchPattern)
- m = p_pat;
- else
- m = p;
- if (m)
- st[i].elt = FcPatternObjectFindElt (m, t->object);
- else
- st[i].elt = 0;
- /*
- * If there's no such field in the font,
- * then FcQualAll matches while FcQualAny does not
- */
- if (!st[i].elt)
- {
- if (t->qual == FcQualAll)
- {
- st[i].value = 0;
- continue;
- }
- else
- break;
- }
- /*
- * Check to see if there is a match, mark the location
- * to apply match-relative edits
- */
- st[i].value = FcConfigMatchValueList (m, t, st[i].elt->values);
- if (!st[i].value)
- break;
- if (t->qual == FcQualFirst && st[i].value != st[i].elt->values)
- break;
- if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values)
- break;
- }
- if (t)
- {
- if (FcDebug () & FC_DBG_EDIT)
- printf ("No match\n");
- continue;
- }
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("Substitute ");
- FcSubstPrint (s);
- }
- for (e = s->edit; e; e = e->next)
- {
- /*
- * Evaluate the list of expressions
- */
- l = FcConfigValues (p, e->expr, e->binding);
- /*
- * Locate any test associated with this field, skipping
- * tests associated with the pattern when substituting in
- * the font
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if ((t->kind == FcMatchFont || kind == FcMatchPattern) &&
- t->object == e->object)
- {
- /*
- * KLUDGE - the pattern may have been reallocated or
- * things may have been inserted or deleted above
- * this element by other edits. Go back and find
- * the element again
- */
- if (e != s->edit && st[i].elt)
- st[i].elt = FcPatternObjectFindElt (p, t->object);
- if (!st[i].elt)
- t = 0;
- break;
- }
- }
- switch (e->op) {
- case FcOpAssign:
- /*
- * If there was a test, then replace the matched
- * value with the new list of values
- */
- if (t)
- {
- FcValueList *thisValue = st[i].value;
- FcValueList *nextValue = thisValue;
-
- /*
- * Append the new list of values after the current value
- */
- FcConfigAdd (&st[i].elt->values, thisValue, FcTrue, l);
- /*
- * Delete the marked value
- */
- if (thisValue)
- FcConfigDel (&st[i].elt->values, thisValue);
- /*
- * Adjust any pointers into the value list to ensure
- * future edits occur at the same place
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (st[i].value == thisValue)
- st[i].value = nextValue;
- }
- break;
- }
- /* fall through ... */
- case FcOpAssignReplace:
- /*
- * Delete all of the values and insert
- * the new set
- */
- FcConfigPatternDel (p, e->object);
- FcConfigPatternAdd (p, e->object, l, FcTrue);
- /*
- * Adjust any pointers into the value list as they no
- * longer point to anything valid
- */
- if (t)
- {
- FcPatternElt *thisElt = st[i].elt;
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (st[i].elt == thisElt)
- st[i].value = 0;
- }
- }
- break;
- case FcOpPrepend:
- if (t)
- {
- FcConfigAdd (&st[i].elt->values, st[i].value, FcFalse, l);
- break;
- }
- /* fall through ... */
- case FcOpPrependFirst:
- FcConfigPatternAdd (p, e->object, l, FcFalse);
- break;
- case FcOpAppend:
- if (t)
- {
- FcConfigAdd (&st[i].elt->values, st[i].value, FcTrue, l);
- break;
- }
- /* fall through ... */
- case FcOpAppendLast:
- FcConfigPatternAdd (p, e->object, l, FcTrue);
- break;
- default:
- FcValueListDestroy (l);
- break;
- }
- }
- /*
- * Now go through the pattern and eliminate
- * any properties without data
- */
- for (e = s->edit; e; e = e->next)
- FcConfigPatternCanon (p, e->object);
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute edit");
- FcPatternPrint (p);
- }
- }
- FcMemFree (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
- free (st);
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute done");
- FcPatternPrint (p);
- }
- return FcTrue;
-}
-
-FcBool
-FcConfigSubstitute (FcConfig *config,
- FcPattern *p,
- FcMatchKind kind)
-{
- return FcConfigSubstituteWithPat (config, p, 0, kind);
-}
-
-#if defined (_WIN32)
-
-# define WIN32_LEAN_AND_MEAN
-# define WIN32_EXTRA_LEAN
-# include <windows.h>
-
-static FcChar8 fontconfig_path[1000] = "";
-
-# if (defined (PIC) || defined (DLL_EXPORT))
-
-BOOL WINAPI
-DllMain (HINSTANCE hinstDLL,
- DWORD fdwReason,
- LPVOID lpvReserved)
-{
- FcChar8 *p;
-
- switch (fdwReason) {
- case DLL_PROCESS_ATTACH:
- if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path,
- sizeof (fontconfig_path)))
- break;
-
- /* If the fontconfig DLL is in a "bin" or "lib" subfolder,
- * assume it's a Unix-style installation tree, and use
- * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the
- * folder where the DLL is as FONTCONFIG_PATH.
- */
- p = strrchr (fontconfig_path, '\\');
- if (p)
- {
- *p = '\0';
- p = strrchr (fontconfig_path, '\\');
- if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 ||
- FcStrCmpIgnoreCase (p + 1, "lib") == 0))
- *p = '\0';
- strcat (fontconfig_path, "\\etc\\fonts");
- }
- else
- fontconfig_path[0] = '\0';
-
- break;
- }
-
- return TRUE;
-}
-
-# endif /* !PIC */
-
-#undef FONTCONFIG_PATH
-#define FONTCONFIG_PATH fontconfig_path
-
-#endif /* !_WIN32 */
-
-#ifndef FONTCONFIG_FILE
-#define FONTCONFIG_FILE "fonts.conf"
-#endif
-
-static FcChar8 *
-FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
-{
- FcChar8 *path;
-
- if (!dir)
- dir = (FcChar8 *) "";
- path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1);
- if (!path)
- return 0;
-
- strcpy ((char *) path, (const char *) dir);
- /* make sure there's a single separator */
-#ifdef _WIN32
- if ((!path[0] || (path[strlen((char *) path)-1] != '/' &&
- path[strlen((char *) path)-1] != '\\')) &&
- !(file[0] == '/' ||
- file[0] == '\\' ||
- (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\'))))
- strcat ((char *) path, "\\");
-#else
- if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/')
- strcat ((char *) path, "/");
-#endif
- strcat ((char *) path, (char *) file);
-
- FcMemAlloc (FC_MEM_STRING, strlen ((char *) path) + 1);
- if (access ((char *) path, R_OK) == 0)
- return path;
-
- FcStrFree (path);
- return 0;
-}
-
-static FcChar8 **
-FcConfigGetPath (void)
-{
- FcChar8 **path;
- FcChar8 *env, *e, *colon;
- FcChar8 *dir;
- int npath;
- int i;
-
- npath = 2; /* default dir + null */
- env = (FcChar8 *) getenv ("FONTCONFIG_PATH");
- if (env)
- {
- e = env;
- npath++;
- while (*e)
- if (*e++ == FC_SEARCH_PATH_SEPARATOR)
- npath++;
- }
- path = calloc (npath, sizeof (FcChar8 *));
- if (!path)
- goto bail0;
- i = 0;
-
- if (env)
- {
- e = env;
- while (*e)
- {
- colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR);
- if (!colon)
- colon = e + strlen ((char *) e);
- path[i] = malloc (colon - e + 1);
- if (!path[i])
- goto bail1;
- strncpy ((char *) path[i], (const char *) e, colon - e);
- path[i][colon - e] = '\0';
- if (*colon)
- e = colon + 1;
- else
- e = colon;
- i++;
- }
- }
-
-#ifdef _WIN32
- if (fontconfig_path[0] == '\0')
- {
- char *p;
- if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path)))
- goto bail1;
- p = strrchr (fontconfig_path, '\\');
- if (p) *p = '\0';
- strcat (fontconfig_path, "\\fonts");
- }
-#endif
- dir = (FcChar8 *) FONTCONFIG_PATH;
- path[i] = malloc (strlen ((char *) dir) + 1);
- if (!path[i])
- goto bail1;
- strcpy ((char *) path[i], (const char *) dir);
- return path;
-
-bail1:
- for (i = 0; path[i]; i++)
- free (path[i]);
- free (path);
-bail0:
- return 0;
-}
-
-static void
-FcConfigFreePath (FcChar8 **path)
-{
- FcChar8 **p;
-
- for (p = path; *p; p++)
- free (*p);
- free (path);
-}
-
-static FcBool _FcConfigHomeEnabled = FcTrue;
-
-FcChar8 *
-FcConfigHome (void)
-{
- if (_FcConfigHomeEnabled)
- {
- char *home = getenv ("HOME");
-
-#ifdef _WIN32
- if (home == NULL)
- home = getenv ("USERPROFILE");
-#endif
-
- return (FcChar8 *) home;
- }
- return 0;
-}
-
-FcBool
-FcConfigEnableHome (FcBool enable)
-{
- FcBool prev = _FcConfigHomeEnabled;
- _FcConfigHomeEnabled = enable;
- return prev;
-}
-
-FcChar8 *
-FcConfigFilename (const FcChar8 *url)
-{
- FcChar8 *file, *dir, **path, **p;
-
- if (!url || !*url)
- {
- url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
- if (!url)
- url = (FcChar8 *) FONTCONFIG_FILE;
- }
- file = 0;
-
-#ifdef _WIN32
- if (isalpha (*url) &&
- url[1] == ':' &&
- (url[2] == '/' || url[2] == '\\'))
- goto absolute_path;
-#endif
-
- switch (*url) {
- case '~':
- dir = FcConfigHome ();
- if (dir)
- file = FcConfigFileExists (dir, url + 1);
- else
- file = 0;
- break;
-#ifdef _WIN32
- case '\\':
- absolute_path:
-#endif
- case '/':
- file = FcConfigFileExists (0, url);
- break;
- default:
- path = FcConfigGetPath ();
- if (!path)
- return 0;
- for (p = path; *p; p++)
- {
- file = FcConfigFileExists (*p, url);
- if (file)
- break;
- }
- FcConfigFreePath (path);
- break;
- }
- return file;
-}
-
-/*
- * Manage the application-specific fonts
- */
-
-FcBool
-FcConfigAppFontAddFile (FcConfig *config,
- const FcChar8 *file)
-{
- FcFontSet *set;
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcChar8 *subdir;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- subdirs = FcStrSetCreate ();
- if (!subdirs)
- return FcFalse;
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
- {
- set = FcFontSetCreate ();
- if (!set)
- {
- FcStrSetDestroy (subdirs);
- return FcFalse;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-
- if (!FcFileScanConfig (set, subdirs, config->blanks, file, config))
- {
- FcStrSetDestroy (subdirs);
- return FcFalse;
- }
- if ((sublist = FcStrListCreate (subdirs)))
- {
- while ((subdir = FcStrListNext (sublist)))
- {
- FcConfigAppFontAddDir (config, subdir);
- }
- FcStrListDone (sublist);
- }
- FcStrSetDestroy (subdirs);
- return FcTrue;
-}
-
-FcBool
-FcConfigAppFontAddDir (FcConfig *config,
- const FcChar8 *dir)
-{
- FcFontSet *set;
- FcStrSet *dirs;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- dirs = FcStrSetCreate ();
- if (!dirs)
- return FcFalse;
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
- {
- set = FcFontSetCreate ();
- if (!set)
- {
- FcStrSetDestroy (dirs);
- return FcFalse;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-
- FcStrSetAddFilename (dirs, dir);
-
- if (!FcConfigAddDirList (config, FcSetApplication, dirs))
- {
- FcStrSetDestroy (dirs);
- return FcFalse;
- }
- FcStrSetDestroy (dirs);
- return FcTrue;
-}
-
-void
-FcConfigAppFontClear (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return;
- }
-
- FcConfigSetFonts (config, 0, FcSetApplication);
-}
-
-/*
- * Manage filename-based font source selectors
- */
-
-FcBool
-FcConfigGlobAdd (FcConfig *config,
- const FcChar8 *glob,
- FcBool accept)
-{
- FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs;
-
- return FcStrSetAdd (set, glob);
-}
-
-static FcBool
-FcConfigGlobMatch (const FcChar8 *glob,
- const FcChar8 *string)
-{
- FcChar8 c;
-
- while ((c = *glob++))
- {
- switch (c) {
- case '*':
- /* short circuit common case */
- if (!*glob)
- return FcTrue;
- /* short circuit another common case */
- if (strchr ((char *) glob, '*') == 0)
- string += strlen ((char *) string) - strlen ((char *) glob);
- while (*string)
- {
- if (FcConfigGlobMatch (glob, string))
- return FcTrue;
- string++;
- }
- return FcFalse;
- case '?':
- if (*string++ == '\0')
- return FcFalse;
- break;
- default:
- if (*string++ != c)
- return FcFalse;
- break;
- }
- }
- return *string == '\0';
-}
-
-static FcBool
-FcConfigGlobsMatch (const FcStrSet *globs,
- const FcChar8 *string)
-{
- int i;
-
- for (i = 0; i < globs->num; i++)
- if (FcConfigGlobMatch (globs->strs[i], string))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcConfigAcceptFilename (FcConfig *config,
- const FcChar8 *filename)
-{
- if (FcConfigGlobsMatch (config->acceptGlobs, filename))
- return FcTrue;
- if (FcConfigGlobsMatch (config->rejectGlobs, filename))
- return FcFalse;
- return FcTrue;
-}
-
-/*
- * Manage font-pattern based font source selectors
- */
-
-FcBool
-FcConfigPatternsAdd (FcConfig *config,
- FcPattern *pattern,
- FcBool accept)
-{
- FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns;
-
- return FcFontSetAdd (set, pattern);
-}
-
-static FcBool
-FcConfigPatternsMatch (const FcFontSet *patterns,
- const FcPattern *font)
-{
- int i;
-
- for (i = 0; i < patterns->nfont; i++)
- if (FcListPatternMatchAny (patterns->fonts[i], font))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcConfigAcceptFont (FcConfig *config,
- const FcPattern *font)
-{
- if (FcConfigPatternsMatch (config->acceptPatterns, font))
- return FcTrue;
- if (FcConfigPatternsMatch (config->rejectPatterns, font))
- return FcFalse;
- return FcTrue;
-}
-#define __fccfg__
-#include "fcaliastail.h"
-#undef __fccfg__
+/*
+ * fontconfig/src/fccfg.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <dirent.h>
+#include <sys/types.h>
+
+#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT))
+#define STRICT
+#include <windows.h>
+#undef STRICT
+#endif
+
+#if defined (_WIN32) && !defined (R_OK)
+#define R_OK 4
+#endif
+
+FcConfig *_fcConfig;
+
+FcConfig *
+FcConfigCreate (void)
+{
+ FcSetName set;
+ FcConfig *config;
+
+ config = malloc (sizeof (FcConfig));
+ if (!config)
+ goto bail0;
+ FcMemAlloc (FC_MEM_CONFIG, sizeof (FcConfig));
+
+ config->configDirs = FcStrSetCreate ();
+ if (!config->configDirs)
+ goto bail1;
+
+ config->configFiles = FcStrSetCreate ();
+ if (!config->configFiles)
+ goto bail2;
+
+ config->fontDirs = FcStrSetCreate ();
+ if (!config->fontDirs)
+ goto bail3;
+
+ config->acceptGlobs = FcStrSetCreate ();
+ if (!config->acceptGlobs)
+ goto bail4;
+
+ config->rejectGlobs = FcStrSetCreate ();
+ if (!config->rejectGlobs)
+ goto bail5;
+
+ config->acceptPatterns = FcFontSetCreate ();
+ if (!config->acceptPatterns)
+ goto bail6;
+
+ config->rejectPatterns = FcFontSetCreate ();
+ if (!config->rejectPatterns)
+ goto bail7;
+
+ config->cacheDirs = FcStrSetCreate ();
+ if (!config->cacheDirs)
+ goto bail8;
+
+ config->blanks = 0;
+
+ config->substPattern = 0;
+ config->substFont = 0;
+ config->substScan = 0;
+ config->maxObjects = 0;
+ for (set = FcSetSystem; set <= FcSetApplication; set++)
+ config->fonts[set] = 0;
+
+ config->rescanTime = time(0);
+ config->rescanInterval = 30;
+
+ config->expr_pool = NULL;
+
+ config->ref = 1;
+
+ return config;
+
+bail8:
+ FcFontSetDestroy (config->rejectPatterns);
+bail7:
+ FcFontSetDestroy (config->acceptPatterns);
+bail6:
+ FcStrSetDestroy (config->rejectGlobs);
+bail5:
+ FcStrSetDestroy (config->acceptGlobs);
+bail4:
+ FcStrSetDestroy (config->fontDirs);
+bail3:
+ FcStrSetDestroy (config->configFiles);
+bail2:
+ FcStrSetDestroy (config->configDirs);
+bail1:
+ free (config);
+ FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
+bail0:
+ return 0;
+}
+
+static FcFileTime
+FcConfigNewestFile (FcStrSet *files)
+{
+ FcStrList *list = FcStrListCreate (files);
+ FcFileTime newest = { 0, FcFalse };
+ FcChar8 *file;
+ struct stat statb;
+
+ if (list)
+ {
+ while ((file = FcStrListNext (list)))
+ if (FcStat (file, &statb) == 0)
+ if (!newest.set || statb.st_mtime - newest.time > 0)
+ {
+ newest.set = FcTrue;
+ newest.time = statb.st_mtime;
+ }
+ FcStrListDone (list);
+ }
+ return newest;
+}
+
+FcBool
+FcConfigUptoDate (FcConfig *config)
+{
+ FcFileTime config_time, config_dir_time, font_time;
+ time_t now = time(0);
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+ config_time = FcConfigNewestFile (config->configFiles);
+ config_dir_time = FcConfigNewestFile (config->configDirs);
+ font_time = FcConfigNewestFile (config->fontDirs);
+ if ((config_time.set && config_time.time - config->rescanTime > 0) ||
+ (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) ||
+ (font_time.set && (font_time.time - config->rescanTime) > 0))
+ {
+ /* We need to check for potential clock problems here (OLPC ticket #6046) */
+ if ((config_time.set && (config_time.time - now) > 0) ||
+ (config_dir_time.set && (config_dir_time.time - now) > 0) ||
+ (font_time.set && (font_time.time - now) > 0))
+ {
+ fprintf (stderr,
+ "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected\n");
+ config->rescanTime = now;
+ return FcTrue;
+ }
+ else
+ return FcFalse;
+ }
+ config->rescanTime = now;
+ return FcTrue;
+}
+
+static void
+FcSubstDestroy (FcSubst *s)
+{
+ FcSubst *n;
+
+ while (s)
+ {
+ n = s->next;
+ if (s->test)
+ FcTestDestroy (s->test);
+ if (s->edit)
+ FcEditDestroy (s->edit);
+ free (s);
+ FcMemFree (FC_MEM_SUBST, sizeof (FcSubst));
+ s = n;
+ }
+}
+
+FcExpr *
+FcConfigAllocExpr (FcConfig *config)
+{
+ if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end)
+ {
+ FcExprPage *new_page;
+
+ new_page = malloc (sizeof (FcExprPage));
+ if (!new_page)
+ return 0;
+ FcMemAlloc (FC_MEM_EXPR, sizeof (FcExprPage));
+
+ new_page->next_page = config->expr_pool;
+ new_page->next = new_page->exprs;
+ config->expr_pool = new_page;
+ }
+
+ return config->expr_pool->next++;
+}
+
+FcConfig *
+FcConfigReference (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+
+ config->ref++;
+
+ return config;
+}
+
+void
+FcConfigDestroy (FcConfig *config)
+{
+ FcSetName set;
+ FcExprPage *page;
+
+ if (--config->ref > 0)
+ return;
+
+ if (config == _fcConfig)
+ _fcConfig = 0;
+
+ FcStrSetDestroy (config->configDirs);
+ FcStrSetDestroy (config->fontDirs);
+ FcStrSetDestroy (config->cacheDirs);
+ FcStrSetDestroy (config->configFiles);
+ FcStrSetDestroy (config->acceptGlobs);
+ FcStrSetDestroy (config->rejectGlobs);
+ FcFontSetDestroy (config->acceptPatterns);
+ FcFontSetDestroy (config->rejectPatterns);
+
+ if (config->blanks)
+ FcBlanksDestroy (config->blanks);
+
+ FcSubstDestroy (config->substPattern);
+ FcSubstDestroy (config->substFont);
+ FcSubstDestroy (config->substScan);
+ for (set = FcSetSystem; set <= FcSetApplication; set++)
+ if (config->fonts[set])
+ FcFontSetDestroy (config->fonts[set]);
+
+ page = config->expr_pool;
+ while (page)
+ {
+ FcExprPage *next = page->next_page;
+ FcMemFree (FC_MEM_EXPR, sizeof (FcExprPage));
+ free (page);
+ page = next;
+ }
+
+ free (config);
+ FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
+}
+
+/*
+ * Add cache to configuration, adding fonts and directories
+ */
+
+FcBool
+FcConfigAddCache (FcConfig *config, FcCache *cache,
+ FcSetName set, FcStrSet *dirSet)
+{
+ FcFontSet *fs;
+ intptr_t *dirs;
+ int i;
+
+ /*
+ * Add fonts
+ */
+ fs = FcCacheSet (cache);
+ if (fs)
+ {
+ int nref = 0;
+
+ for (i = 0; i < fs->nfont; i++)
+ {
+ FcPattern *font = FcFontSetFont (fs, i);
+ FcChar8 *font_file;
+
+ /*
+ * Check to see if font is banned by filename
+ */
+ if (FcPatternObjectGetString (font, FC_FILE_OBJECT,
+ 0, &font_file) == FcResultMatch &&
+ !FcConfigAcceptFilename (config, font_file))
+ {
+ continue;
+ }
+
+ /*
+ * Check to see if font is banned by pattern
+ */
+ if (!FcConfigAcceptFont (config, font))
+ continue;
+
+ nref++;
+ FcFontSetAdd (config->fonts[set], font);
+ }
+ FcDirCacheReference (cache, nref);
+ }
+
+ /*
+ * Add directories
+ */
+ dirs = FcCacheDirs (cache);
+ if (dirs)
+ {
+ for (i = 0; i < cache->dirs_count; i++)
+ {
+ FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8);
+ if (FcConfigAcceptFilename (config, dir))
+ FcStrSetAddFilename (dirSet, dir);
+ }
+ }
+ return FcTrue;
+}
+
+static FcBool
+FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet)
+{
+ FcStrList *dirlist;
+ FcChar8 *dir;
+ FcCache *cache;
+
+ dirlist = FcStrListCreate (dirSet);
+ if (!dirlist)
+ return FcFalse;
+
+ while ((dir = FcStrListNext (dirlist)))
+ {
+ if (FcDebug () & FC_DBG_FONTSET)
+ printf ("adding fonts from%s\n", dir);
+ cache = FcDirCacheRead (dir, FcFalse, config);
+ if (!cache)
+ continue;
+ FcConfigAddCache (config, cache, set, dirSet);
+ FcDirCacheUnload (cache);
+ }
+ FcStrListDone (dirlist);
+ return FcTrue;
+}
+
+/*
+ * Scan the current list of directories in the configuration
+ * and build the set of available fonts.
+ */
+
+FcBool
+FcConfigBuildFonts (FcConfig *config)
+{
+ FcFontSet *fonts;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+
+ fonts = FcFontSetCreate ();
+ if (!fonts)
+ return FcFalse;
+
+ FcConfigSetFonts (config, fonts, FcSetSystem);
+
+ if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs))
+ return FcFalse;
+ if (FcDebug () & FC_DBG_FONTSET)
+ FcFontSetPrint (fonts);
+ return FcTrue;
+}
+
+FcBool
+FcConfigSetCurrent (FcConfig *config)
+{
+ if (config == _fcConfig)
+ return FcTrue;
+
+ if (!config->fonts)
+ if (!FcConfigBuildFonts (config))
+ return FcFalse;
+
+ if (_fcConfig)
+ FcConfigDestroy (_fcConfig);
+ _fcConfig = config;
+ return FcTrue;
+}
+
+FcConfig *
+FcConfigGetCurrent (void)
+{
+ if (!_fcConfig)
+ if (!FcInit ())
+ return 0;
+ return _fcConfig;
+}
+
+FcBool
+FcConfigAddConfigDir (FcConfig *config,
+ const FcChar8 *d)
+{
+ return FcStrSetAddFilename (config->configDirs, d);
+}
+
+FcStrList *
+FcConfigGetConfigDirs (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return FcStrListCreate (config->configDirs);
+}
+
+FcBool
+FcConfigAddFontDir (FcConfig *config,
+ const FcChar8 *d)
+{
+ return FcStrSetAddFilename (config->fontDirs, d);
+}
+
+FcBool
+FcConfigAddDir (FcConfig *config,
+ const FcChar8 *d)
+{
+ return (FcConfigAddConfigDir (config, d) &&
+ FcConfigAddFontDir (config, d));
+}
+
+FcStrList *
+FcConfigGetFontDirs (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return FcStrListCreate (config->fontDirs);
+}
+
+FcBool
+FcConfigAddCacheDir (FcConfig *config,
+ const FcChar8 *d)
+{
+ return FcStrSetAddFilename (config->cacheDirs, d);
+}
+
+FcStrList *
+FcConfigGetCacheDirs (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return FcStrListCreate (config->cacheDirs);
+}
+
+FcBool
+FcConfigAddConfigFile (FcConfig *config,
+ const FcChar8 *f)
+{
+ FcBool ret;
+ FcChar8 *file = FcConfigFilename (f);
+
+ if (!file)
+ return FcFalse;
+
+ ret = FcStrSetAdd (config->configFiles, file);
+ FcStrFree (file);
+ return ret;
+}
+
+FcStrList *
+FcConfigGetConfigFiles (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return FcStrListCreate (config->configFiles);
+}
+
+FcChar8 *
+FcConfigGetCache (FcConfig *config)
+{
+ return NULL;
+}
+
+FcFontSet *
+FcConfigGetFonts (FcConfig *config,
+ FcSetName set)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return config->fonts[set];
+}
+
+void
+FcConfigSetFonts (FcConfig *config,
+ FcFontSet *fonts,
+ FcSetName set)
+{
+ if (config->fonts[set])
+ FcFontSetDestroy (config->fonts[set]);
+ config->fonts[set] = fonts;
+}
+
+FcBlanks *
+FcConfigGetBlanks (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return config->blanks;
+}
+
+FcBool
+FcConfigAddBlank (FcConfig *config,
+ FcChar32 blank)
+{
+ FcBlanks *b, *freeme = 0;
+
+ b = config->blanks;
+ if (!b)
+ {
+ freeme = b = FcBlanksCreate ();
+ if (!b)
+ return FcFalse;
+ }
+ if (!FcBlanksAdd (b, blank))
+ {
+ if (freeme)
+ FcBlanksDestroy (freeme);
+ return FcFalse;
+ }
+ config->blanks = b;
+ return FcTrue;
+}
+
+int
+FcConfigGetRescanInterval (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ return config->rescanInterval;
+}
+
+FcBool
+FcConfigSetRescanInterval (FcConfig *config, int rescanInterval)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+ config->rescanInterval = rescanInterval;
+ return FcTrue;
+}
+
+/*
+ * A couple of typos escaped into the library
+ */
+int
+FcConfigGetRescanInverval (FcConfig *config)
+{
+ return FcConfigGetRescanInterval (config);
+}
+
+FcBool
+FcConfigSetRescanInverval (FcConfig *config, int rescanInterval)
+{
+ return FcConfigSetRescanInterval (config, rescanInterval);
+}
+
+
+FcBool
+FcConfigAddEdit (FcConfig *config,
+ FcTest *test,
+ FcEdit *edit,
+ FcMatchKind kind)
+{
+ FcSubst *subst, **prev;
+ FcTest *t;
+ int num;
+
+ switch (kind) {
+ case FcMatchPattern:
+ prev = &config->substPattern;
+ break;
+ case FcMatchFont:
+ prev = &config->substFont;
+ break;
+ case FcMatchScan:
+ prev = &config->substScan;
+ break;
+ default:
+ return FcFalse;
+ }
+ subst = (FcSubst *) malloc (sizeof (FcSubst));
+ if (!subst)
+ return FcFalse;
+ FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst));
+ for (; *prev; prev = &(*prev)->next);
+ *prev = subst;
+ subst->next = 0;
+ subst->test = test;
+ subst->edit = edit;
+ num = 0;
+ for (t = test; t; t = t->next)
+ {
+ if (t->kind == FcMatchDefault)
+ t->kind = kind;
+ num++;
+ }
+ if (config->maxObjects < num)
+ config->maxObjects = num;
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("Add Subst ");
+ FcSubstPrint (subst);
+ }
+ return FcTrue;
+}
+
+typedef struct _FcSubState {
+ FcPatternElt *elt;
+ FcValueList *value;
+} FcSubState;
+
+static FcValue
+FcConfigPromote (FcValue v, FcValue u)
+{
+ if (v.type == FcTypeInteger)
+ {
+ v.type = FcTypeDouble;
+ v.u.d = (double) v.u.i;
+ }
+ else if (v.type == FcTypeVoid && u.type == FcTypeMatrix)
+ {
+ v.u.m = &FcIdentityMatrix;
+ v.type = FcTypeMatrix;
+ }
+ else if (v.type == FcTypeString && u.type == FcTypeLangSet)
+ {
+ v.u.l = FcLangSetPromote (v.u.s);
+ v.type = FcTypeLangSet;
+ }
+ return v;
+}
+
+FcBool
+FcConfigCompareValue (const FcValue *left_o,
+ FcOp op,
+ const FcValue *right_o)
+{
+ FcValue left = FcValueCanonicalize(left_o);
+ FcValue right = FcValueCanonicalize(right_o);
+ FcBool ret = FcFalse;
+
+ left = FcConfigPromote (left, right);
+ right = FcConfigPromote (right, left);
+ if (left.type == right.type)
+ {
+ switch (left.type) {
+ case FcTypeInteger:
+ break; /* FcConfigPromote prevents this from happening */
+ case FcTypeDouble:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = left.u.d == right.u.d;
+ break;
+ case FcOpNotEqual:
+ case FcOpNotContains:
+ ret = left.u.d != right.u.d;
+ break;
+ case FcOpLess:
+ ret = left.u.d < right.u.d;
+ break;
+ case FcOpLessEqual:
+ ret = left.u.d <= right.u.d;
+ break;
+ case FcOpMore:
+ ret = left.u.d > right.u.d;
+ break;
+ case FcOpMoreEqual:
+ ret = left.u.d >= right.u.d;
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeBool:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = left.u.b == right.u.b;
+ break;
+ case FcOpNotEqual:
+ case FcOpNotContains:
+ ret = left.u.b != right.u.b;
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeString:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpListing:
+ ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0;
+ break;
+ case FcOpContains:
+ ret = FcStrStrIgnoreCase (left.u.s, right.u.s) != 0;
+ break;
+ case FcOpNotEqual:
+ ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) != 0;
+ break;
+ case FcOpNotContains:
+ ret = FcStrStrIgnoreCase (left.u.s, right.u.s) == 0;
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeMatrix:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = FcMatrixEqual (left.u.m, right.u.m);
+ break;
+ case FcOpNotEqual:
+ case FcOpNotContains:
+ ret = !FcMatrixEqual (left.u.m, right.u.m);
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeCharSet:
+ switch (op) {
+ case FcOpContains:
+ case FcOpListing:
+ /* left contains right if right is a subset of left */
+ ret = FcCharSetIsSubset (right.u.c, left.u.c);
+ break;
+ case FcOpNotContains:
+ /* left contains right if right is a subset of left */
+ ret = !FcCharSetIsSubset (right.u.c, left.u.c);
+ break;
+ case FcOpEqual:
+ ret = FcCharSetEqual (left.u.c, right.u.c);
+ break;
+ case FcOpNotEqual:
+ ret = !FcCharSetEqual (left.u.c, right.u.c);
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeLangSet:
+ switch (op) {
+ case FcOpContains:
+ case FcOpListing:
+ ret = FcLangSetContains (left.u.l, right.u.l);
+ break;
+ case FcOpNotContains:
+ ret = !FcLangSetContains (left.u.l, right.u.l);
+ break;
+ case FcOpEqual:
+ ret = FcLangSetEqual (left.u.l, right.u.l);
+ break;
+ case FcOpNotEqual:
+ ret = !FcLangSetEqual (left.u.l, right.u.l);
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeVoid:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = FcTrue;
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeFTFace:
+ switch (op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = left.u.f == right.u.f;
+ break;
+ case FcOpNotEqual:
+ case FcOpNotContains:
+ ret = left.u.f != right.u.f;
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+ }
+ else
+ {
+ if (op == FcOpNotEqual || op == FcOpNotContains)
+ ret = FcTrue;
+ }
+ return ret;
+}
+
+
+#define _FcDoubleFloor(d) ((int) (d))
+#define _FcDoubleCeil(d) ((double) (int) (d) == (d) ? (int) (d) : (int) ((d) + 1))
+#define FcDoubleFloor(d) ((d) >= 0 ? _FcDoubleFloor(d) : -_FcDoubleCeil(-(d)))
+#define FcDoubleCeil(d) ((d) >= 0 ? _FcDoubleCeil(d) : -_FcDoubleFloor(-(d)))
+#define FcDoubleRound(d) FcDoubleFloor ((d) + 0.5)
+#define FcDoubleTrunc(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleFloor (-(d)))
+
+static FcValue
+FcConfigEvaluate (FcPattern *p, FcExpr *e)
+{
+ FcValue v, vl, vr;
+ FcResult r;
+ FcMatrix *m;
+ FcChar8 *str;
+
+ switch (e->op) {
+ case FcOpInteger:
+ v.type = FcTypeInteger;
+ v.u.i = e->u.ival;
+ break;
+ case FcOpDouble:
+ v.type = FcTypeDouble;
+ v.u.d = e->u.dval;
+ break;
+ case FcOpString:
+ v.type = FcTypeString;
+ v.u.s = e->u.sval;
+ v = FcValueSave (v);
+ break;
+ case FcOpMatrix:
+ v.type = FcTypeMatrix;
+ v.u.m = e->u.mval;
+ v = FcValueSave (v);
+ break;
+ case FcOpCharSet:
+ v.type = FcTypeCharSet;
+ v.u.c = e->u.cval;
+ v = FcValueSave (v);
+ break;
+ case FcOpLangSet:
+ v.type = FcTypeLangSet;
+ v.u.l = e->u.lval;
+ v = FcValueSave (v);
+ break;
+ case FcOpBool:
+ v.type = FcTypeBool;
+ v.u.b = e->u.bval;
+ break;
+ case FcOpField:
+ r = FcPatternObjectGet (p, e->u.object, 0, &v);
+ if (r != FcResultMatch)
+ v.type = FcTypeVoid;
+ v = FcValueSave (v);
+ break;
+ case FcOpConst:
+ if (FcNameConstant (e->u.constant, &v.u.i))
+ v.type = FcTypeInteger;
+ else
+ v.type = FcTypeVoid;
+ break;
+ case FcOpQuest:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ if (vl.type == FcTypeBool)
+ {
+ if (vl.u.b)
+ v = FcConfigEvaluate (p, e->u.tree.right->u.tree.left);
+ else
+ v = FcConfigEvaluate (p, e->u.tree.right->u.tree.right);
+ }
+ else
+ v.type = FcTypeVoid;
+ FcValueDestroy (vl);
+ break;
+ case FcOpEqual:
+ case FcOpNotEqual:
+ case FcOpLess:
+ case FcOpLessEqual:
+ case FcOpMore:
+ case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpNotContains:
+ case FcOpListing:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ vr = FcConfigEvaluate (p, e->u.tree.right);
+ v.type = FcTypeBool;
+ v.u.b = FcConfigCompareValue (&vl, e->op, &vr);
+ FcValueDestroy (vl);
+ FcValueDestroy (vr);
+ break;
+ case FcOpOr:
+ case FcOpAnd:
+ case FcOpPlus:
+ case FcOpMinus:
+ case FcOpTimes:
+ case FcOpDivide:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ vr = FcConfigEvaluate (p, e->u.tree.right);
+ vl = FcConfigPromote (vl, vr);
+ vr = FcConfigPromote (vr, vl);
+ if (vl.type == vr.type)
+ {
+ switch (vl.type) {
+ case FcTypeDouble:
+ switch (e->op) {
+ case FcOpPlus:
+ v.type = FcTypeDouble;
+ v.u.d = vl.u.d + vr.u.d;
+ break;
+ case FcOpMinus:
+ v.type = FcTypeDouble;
+ v.u.d = vl.u.d - vr.u.d;
+ break;
+ case FcOpTimes:
+ v.type = FcTypeDouble;
+ v.u.d = vl.u.d * vr.u.d;
+ break;
+ case FcOpDivide:
+ v.type = FcTypeDouble;
+ v.u.d = vl.u.d / vr.u.d;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ if (v.type == FcTypeDouble &&
+ v.u.d == (double) (int) v.u.d)
+ {
+ v.type = FcTypeInteger;
+ v.u.i = (int) v.u.d;
+ }
+ break;
+ case FcTypeBool:
+ switch (e->op) {
+ case FcOpOr:
+ v.type = FcTypeBool;
+ v.u.b = vl.u.b || vr.u.b;
+ break;
+ case FcOpAnd:
+ v.type = FcTypeBool;
+ v.u.b = vl.u.b && vr.u.b;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ case FcTypeString:
+ switch (e->op) {
+ case FcOpPlus:
+ v.type = FcTypeString;
+ str = FcStrPlus (vl.u.s, vr.u.s);
+ v.u.s = FcStrStaticName (str);
+ FcStrFree (str);
+
+ if (!v.u.s)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ case FcTypeMatrix:
+ switch (e->op) {
+ case FcOpTimes:
+ v.type = FcTypeMatrix;
+ m = malloc (sizeof (FcMatrix));
+ if (m)
+ {
+ FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix));
+ FcMatrixMultiply (m, vl.u.m, vr.u.m);
+ v.u.m = m;
+ }
+ else
+ {
+ v.type = FcTypeVoid;
+ }
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ case FcTypeCharSet:
+ switch (e->op) {
+ case FcOpPlus:
+ v.type = FcTypeCharSet;
+ v.u.c = FcCharSetUnion (vl.u.c, vr.u.c);
+ if (!v.u.c)
+ v.type = FcTypeVoid;
+ break;
+ case FcOpMinus:
+ v.type = FcTypeCharSet;
+ v.u.c = FcCharSetSubtract (vl.u.c, vr.u.c);
+ if (!v.u.c)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ case FcTypeLangSet:
+ switch (e->op) {
+ case FcOpPlus:
+ v.type = FcTypeLangSet;
+ v.u.l = FcLangSetUnion (vl.u.l, vr.u.l);
+ if (!v.u.l)
+ v.type = FcTypeVoid;
+ break;
+ case FcOpMinus:
+ v.type = FcTypeLangSet;
+ v.u.l = FcLangSetSubtract (vl.u.l, vr.u.l);
+ if (!v.u.l)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ }
+ else
+ v.type = FcTypeVoid;
+ FcValueDestroy (vl);
+ FcValueDestroy (vr);
+ break;
+ case FcOpNot:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ switch (vl.type) {
+ case FcTypeBool:
+ v.type = FcTypeBool;
+ v.u.b = !vl.u.b;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ FcValueDestroy (vl);
+ break;
+ case FcOpFloor:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ switch (vl.type) {
+ case FcTypeInteger:
+ v = vl;
+ break;
+ case FcTypeDouble:
+ v.type = FcTypeInteger;
+ v.u.i = FcDoubleFloor (vl.u.d);
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ FcValueDestroy (vl);
+ break;
+ case FcOpCeil:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ switch (vl.type) {
+ case FcTypeInteger:
+ v = vl;
+ break;
+ case FcTypeDouble:
+ v.type = FcTypeInteger;
+ v.u.i = FcDoubleCeil (vl.u.d);
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ FcValueDestroy (vl);
+ break;
+ case FcOpRound:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ switch (vl.type) {
+ case FcTypeInteger:
+ v = vl;
+ break;
+ case FcTypeDouble:
+ v.type = FcTypeInteger;
+ v.u.i = FcDoubleRound (vl.u.d);
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ FcValueDestroy (vl);
+ break;
+ case FcOpTrunc:
+ vl = FcConfigEvaluate (p, e->u.tree.left);
+ switch (vl.type) {
+ case FcTypeInteger:
+ v = vl;
+ break;
+ case FcTypeDouble:
+ v.type = FcTypeInteger;
+ v.u.i = FcDoubleTrunc (vl.u.d);
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ FcValueDestroy (vl);
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ return v;
+}
+
+static FcValueList *
+FcConfigMatchValueList (FcPattern *p,
+ FcTest *t,
+ FcValueList *values)
+{
+ FcValueList *ret = 0;
+ FcExpr *e = t->expr;
+ FcValue value;
+ FcValueList *v;
+
+ while (e)
+ {
+ /* Compute the value of the match expression */
+ if (e->op == FcOpComma)
+ {
+ value = FcConfigEvaluate (p, e->u.tree.left);
+ e = e->u.tree.right;
+ }
+ else
+ {
+ value = FcConfigEvaluate (p, e);
+ e = 0;
+ }
+
+ for (v = values; v; v = FcValueListNext(v))
+ {
+ /* Compare the pattern value to the match expression value */
+ if (FcConfigCompareValue (&v->value, t->op, &value))
+ {
+ if (!ret)
+ ret = v;
+ }
+ else
+ {
+ if (t->qual == FcQualAll)
+ {
+ ret = 0;
+ break;
+ }
+ }
+ }
+ FcValueDestroy (value);
+ }
+ return ret;
+}
+
+static FcValueList *
+FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding)
+{
+ FcValueList *l;
+
+ if (!e)
+ return 0;
+ l = (FcValueList *) malloc (sizeof (FcValueList));
+ if (!l)
+ return 0;
+ FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
+ if (e->op == FcOpComma)
+ {
+ l->value = FcConfigEvaluate (p, e->u.tree.left);
+ l->next = FcConfigValues (p, e->u.tree.right, binding);
+ }
+ else
+ {
+ l->value = FcConfigEvaluate (p, e);
+ l->next = NULL;
+ }
+ l->binding = binding;
+ if (l->value.type == FcTypeVoid)
+ {
+ FcValueList *next = FcValueListNext(l);
+
+ FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
+ free (l);
+ l = next;
+ }
+
+ return l;
+}
+
+static FcBool
+FcConfigAdd (FcValueListPtr *head,
+ FcValueList *position,
+ FcBool append,
+ FcValueList *new)
+{
+ FcValueListPtr *prev, last, v;
+ FcValueBinding sameBinding;
+
+ if (position)
+ sameBinding = position->binding;
+ else
+ sameBinding = FcValueBindingWeak;
+ for (v = new; v != NULL; v = FcValueListNext(v))
+ if (v->binding == FcValueBindingSame)
+ v->binding = sameBinding;
+ if (append)
+ {
+ if (position)
+ prev = &position->next;
+ else
+ for (prev = head; *prev != NULL;
+ prev = &(*prev)->next)
+ ;
+ }
+ else
+ {
+ if (position)
+ {
+ for (prev = head; *prev != NULL;
+ prev = &(*prev)->next)
+ {
+ if (*prev == position)
+ break;
+ }
+ }
+ else
+ prev = head;
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ if (*prev == NULL)
+ printf ("position not on list\n");
+ }
+ }
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("%s list before ", append ? "Append" : "Prepend");
+ FcValueListPrint (*head);
+ printf ("\n");
+ }
+
+ if (new)
+ {
+ last = new;
+ while (last->next != NULL)
+ last = last->next;
+
+ last->next = *prev;
+ *prev = new;
+ }
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("%s list after ", append ? "Append" : "Prepend");
+ FcValueListPrint (*head);
+ printf ("\n");
+ }
+
+ return FcTrue;
+}
+
+static void
+FcConfigDel (FcValueListPtr *head,
+ FcValueList *position)
+{
+ FcValueListPtr *prev;
+
+ for (prev = head; *prev != NULL; prev = &(*prev)->next)
+ {
+ if (*prev == position)
+ {
+ *prev = position->next;
+ position->next = NULL;
+ FcValueListDestroy (position);
+ break;
+ }
+ }
+}
+
+static void
+FcConfigPatternAdd (FcPattern *p,
+ FcObject object,
+ FcValueList *list,
+ FcBool append)
+{
+ if (list)
+ {
+ FcPatternElt *e = FcPatternObjectInsertElt (p, object);
+
+ if (!e)
+ return;
+ FcConfigAdd (&e->values, 0, append, list);
+ }
+}
+
+/*
+ * Delete all values associated with a field
+ */
+static void
+FcConfigPatternDel (FcPattern *p,
+ FcObject object)
+{
+ FcPatternElt *e = FcPatternObjectFindElt (p, object);
+ if (!e)
+ return;
+ while (e->values != NULL)
+ FcConfigDel (&e->values, e->values);
+}
+
+static void
+FcConfigPatternCanon (FcPattern *p,
+ FcObject object)
+{
+ FcPatternElt *e = FcPatternObjectFindElt (p, object);
+ if (!e)
+ return;
+ if (e->values == NULL)
+ FcPatternObjectDel (p, object);
+}
+
+FcBool
+FcConfigSubstituteWithPat (FcConfig *config,
+ FcPattern *p,
+ FcPattern *p_pat,
+ FcMatchKind kind)
+{
+ FcSubst *s;
+ FcSubState *st;
+ int i;
+ FcTest *t;
+ FcEdit *e;
+ FcValueList *l;
+ FcPattern *m;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+
+ switch (kind) {
+ case FcMatchPattern:
+ s = config->substPattern;
+ break;
+ case FcMatchFont:
+ s = config->substFont;
+ break;
+ case FcMatchScan:
+ s = config->substScan;
+ break;
+ default:
+ return FcFalse;
+ }
+
+ st = (FcSubState *) malloc (config->maxObjects * sizeof (FcSubState));
+ if (!st && config->maxObjects)
+ return FcFalse;
+ FcMemAlloc (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute ");
+ FcPatternPrint (p);
+ }
+ for (; s; s = s->next)
+ {
+ /*
+ * Check the tests to see if
+ * they all match the pattern
+ */
+ for (t = s->test, i = 0; t; t = t->next, i++)
+ {
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute test ");
+ FcTestPrint (t);
+ }
+ st[i].elt = 0;
+ if (kind == FcMatchFont && t->kind == FcMatchPattern)
+ m = p_pat;
+ else
+ m = p;
+ if (m)
+ st[i].elt = FcPatternObjectFindElt (m, t->object);
+ else
+ st[i].elt = 0;
+ /*
+ * If there's no such field in the font,
+ * then FcQualAll matches while FcQualAny does not
+ */
+ if (!st[i].elt)
+ {
+ if (t->qual == FcQualAll)
+ {
+ st[i].value = 0;
+ continue;
+ }
+ else
+ break;
+ }
+ /*
+ * Check to see if there is a match, mark the location
+ * to apply match-relative edits
+ */
+ st[i].value = FcConfigMatchValueList (m, t, st[i].elt->values);
+ if (!st[i].value)
+ break;
+ if (t->qual == FcQualFirst && st[i].value != st[i].elt->values)
+ break;
+ if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values)
+ break;
+ }
+ if (t)
+ {
+ if (FcDebug () & FC_DBG_EDIT)
+ printf ("No match\n");
+ continue;
+ }
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("Substitute ");
+ FcSubstPrint (s);
+ }
+ for (e = s->edit; e; e = e->next)
+ {
+ /*
+ * Evaluate the list of expressions
+ */
+ l = FcConfigValues (p, e->expr, e->binding);
+ /*
+ * Locate any test associated with this field, skipping
+ * tests associated with the pattern when substituting in
+ * the font
+ */
+ for (t = s->test, i = 0; t; t = t->next, i++)
+ {
+ if ((t->kind == FcMatchFont || kind == FcMatchPattern) &&
+ t->object == e->object)
+ {
+ /*
+ * KLUDGE - the pattern may have been reallocated or
+ * things may have been inserted or deleted above
+ * this element by other edits. Go back and find
+ * the element again
+ */
+ if (e != s->edit && st[i].elt)
+ st[i].elt = FcPatternObjectFindElt (p, t->object);
+ if (!st[i].elt)
+ t = 0;
+ break;
+ }
+ }
+ switch (e->op) {
+ case FcOpAssign:
+ /*
+ * If there was a test, then replace the matched
+ * value with the new list of values
+ */
+ if (t)
+ {
+ FcValueList *thisValue = st[i].value;
+ FcValueList *nextValue = thisValue;
+
+ /*
+ * Append the new list of values after the current value
+ */
+ FcConfigAdd (&st[i].elt->values, thisValue, FcTrue, l);
+ /*
+ * Delete the marked value
+ */
+ if (thisValue)
+ FcConfigDel (&st[i].elt->values, thisValue);
+ /*
+ * Adjust any pointers into the value list to ensure
+ * future edits occur at the same place
+ */
+ for (t = s->test, i = 0; t; t = t->next, i++)
+ {
+ if (st[i].value == thisValue)
+ st[i].value = nextValue;
+ }
+ break;
+ }
+ /* fall through ... */
+ case FcOpAssignReplace:
+ /*
+ * Delete all of the values and insert
+ * the new set
+ */
+ FcConfigPatternDel (p, e->object);
+ FcConfigPatternAdd (p, e->object, l, FcTrue);
+ /*
+ * Adjust any pointers into the value list as they no
+ * longer point to anything valid
+ */
+ if (t)
+ {
+ FcPatternElt *thisElt = st[i].elt;
+ for (t = s->test, i = 0; t; t = t->next, i++)
+ {
+ if (st[i].elt == thisElt)
+ st[i].value = 0;
+ }
+ }
+ break;
+ case FcOpPrepend:
+ if (t)
+ {
+ FcConfigAdd (&st[i].elt->values, st[i].value, FcFalse, l);
+ break;
+ }
+ /* fall through ... */
+ case FcOpPrependFirst:
+ FcConfigPatternAdd (p, e->object, l, FcFalse);
+ break;
+ case FcOpAppend:
+ if (t)
+ {
+ FcConfigAdd (&st[i].elt->values, st[i].value, FcTrue, l);
+ break;
+ }
+ /* fall through ... */
+ case FcOpAppendLast:
+ FcConfigPatternAdd (p, e->object, l, FcTrue);
+ break;
+ default:
+ FcValueListDestroy (l);
+ break;
+ }
+ }
+ /*
+ * Now go through the pattern and eliminate
+ * any properties without data
+ */
+ for (e = s->edit; e; e = e->next)
+ FcConfigPatternCanon (p, e->object);
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute edit");
+ FcPatternPrint (p);
+ }
+ }
+ FcMemFree (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
+ free (st);
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute done");
+ FcPatternPrint (p);
+ }
+ return FcTrue;
+}
+
+FcBool
+FcConfigSubstitute (FcConfig *config,
+ FcPattern *p,
+ FcMatchKind kind)
+{
+ return FcConfigSubstituteWithPat (config, p, 0, kind);
+}
+
+#if defined (_WIN32)
+
+# define WIN32_LEAN_AND_MEAN
+# define WIN32_EXTRA_LEAN
+# include <windows.h>
+
+static FcChar8 fontconfig_path[1000] = "";
+
+# if (defined (PIC) || defined (DLL_EXPORT))
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ FcChar8 *p;
+
+ switch (fdwReason) {
+ case DLL_PROCESS_ATTACH:
+ if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path,
+ sizeof (fontconfig_path)))
+ break;
+
+ /* If the fontconfig DLL is in a "bin" or "lib" subfolder,
+ * assume it's a Unix-style installation tree, and use
+ * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the
+ * folder where the DLL is as FONTCONFIG_PATH.
+ */
+ p = strrchr (fontconfig_path, '\\');
+ if (p)
+ {
+ *p = '\0';
+ p = strrchr (fontconfig_path, '\\');
+ if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 ||
+ FcStrCmpIgnoreCase (p + 1, "lib") == 0))
+ *p = '\0';
+ strcat (fontconfig_path, "\\etc\\fonts");
+ }
+ else
+ fontconfig_path[0] = '\0';
+
+ break;
+ }
+
+ return TRUE;
+}
+
+# endif /* !PIC */
+
+#undef FONTCONFIG_PATH
+#define FONTCONFIG_PATH fontconfig_path
+
+#endif /* !_WIN32 */
+
+#ifndef FONTCONFIG_FILE
+#define FONTCONFIG_FILE "fonts.conf"
+#endif
+
+static FcChar8 *
+FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
+{
+ FcChar8 *path;
+
+ if (!dir)
+ dir = (FcChar8 *) "";
+ path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1);
+ if (!path)
+ return 0;
+
+ strcpy ((char *) path, (const char *) dir);
+ /* make sure there's a single separator */
+#ifdef _WIN32
+ if ((!path[0] || (path[strlen((char *) path)-1] != '/' &&
+ path[strlen((char *) path)-1] != '\\')) &&
+ !(file[0] == '/' ||
+ file[0] == '\\' ||
+ (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\'))))
+ strcat ((char *) path, "\\");
+#else
+ if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/')
+ strcat ((char *) path, "/");
+#endif
+ strcat ((char *) path, (char *) file);
+
+ FcMemAlloc (FC_MEM_STRING, strlen ((char *) path) + 1);
+ if (access ((char *) path, R_OK) == 0)
+ return path;
+
+ FcStrFree (path);
+ return 0;
+}
+
+static FcChar8 **
+FcConfigGetPath (void)
+{
+ FcChar8 **path;
+ FcChar8 *env, *e, *colon;
+ FcChar8 *dir;
+ int npath;
+ int i;
+
+ npath = 2; /* default dir + null */
+ env = (FcChar8 *) getenv ("FONTCONFIG_PATH");
+ if (env)
+ {
+ e = env;
+ npath++;
+ while (*e)
+ if (*e++ == FC_SEARCH_PATH_SEPARATOR)
+ npath++;
+ }
+ path = calloc (npath, sizeof (FcChar8 *));
+ if (!path)
+ goto bail0;
+ i = 0;
+
+ if (env)
+ {
+ e = env;
+ while (*e)
+ {
+ colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR);
+ if (!colon)
+ colon = e + strlen ((char *) e);
+ path[i] = malloc (colon - e + 1);
+ if (!path[i])
+ goto bail1;
+ strncpy ((char *) path[i], (const char *) e, colon - e);
+ path[i][colon - e] = '\0';
+ if (*colon)
+ e = colon + 1;
+ else
+ e = colon;
+ i++;
+ }
+ }
+
+#ifdef _WIN32
+ if (fontconfig_path[0] == '\0')
+ {
+ char *p;
+ if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path)))
+ goto bail1;
+ p = strrchr (fontconfig_path, '\\');
+ if (p) *p = '\0';
+ strcat (fontconfig_path, "\\fonts");
+ }
+#endif
+ dir = (FcChar8 *) FONTCONFIG_PATH;
+ path[i] = malloc (strlen ((char *) dir) + 1);
+ if (!path[i])
+ goto bail1;
+ strcpy ((char *) path[i], (const char *) dir);
+ return path;
+
+bail1:
+ for (i = 0; path[i]; i++)
+ free (path[i]);
+ free (path);
+bail0:
+ return 0;
+}
+
+static void
+FcConfigFreePath (FcChar8 **path)
+{
+ FcChar8 **p;
+
+ for (p = path; *p; p++)
+ free (*p);
+ free (path);
+}
+
+static FcBool _FcConfigHomeEnabled = FcTrue;
+
+FcChar8 *
+FcConfigHome (void)
+{
+ if (_FcConfigHomeEnabled)
+ {
+ char *home = getenv ("HOME");
+
+#ifdef _WIN32
+ if (home == NULL)
+ home = getenv ("USERPROFILE");
+#endif
+
+ return (FcChar8 *) home;
+ }
+ return 0;
+}
+
+FcBool
+FcConfigEnableHome (FcBool enable)
+{
+ FcBool prev = _FcConfigHomeEnabled;
+ _FcConfigHomeEnabled = enable;
+ return prev;
+}
+
+FcChar8 *
+FcConfigFilename (const FcChar8 *url)
+{
+ FcChar8 *file, *dir, **path, **p;
+
+ if (!url || !*url)
+ {
+ url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
+ if (!url)
+ url = (FcChar8 *) FONTCONFIG_FILE;
+ }
+ file = 0;
+
+#ifdef _WIN32
+ if (isalpha (*url) &&
+ url[1] == ':' &&
+ (url[2] == '/' || url[2] == '\\'))
+ goto absolute_path;
+#endif
+
+ switch (*url) {
+ case '~':
+ dir = FcConfigHome ();
+ if (dir)
+ file = FcConfigFileExists (dir, url + 1);
+ else
+ file = 0;
+ break;
+#ifdef _WIN32
+ case '\\':
+ absolute_path:
+#endif
+ case '/':
+ file = FcConfigFileExists (0, url);
+ break;
+ default:
+ path = FcConfigGetPath ();
+ if (!path)
+ return 0;
+ for (p = path; *p; p++)
+ {
+ file = FcConfigFileExists (*p, url);
+ if (file)
+ break;
+ }
+ FcConfigFreePath (path);
+ break;
+ }
+ return file;
+}
+
+/*
+ * Manage the application-specific fonts
+ */
+
+FcBool
+FcConfigAppFontAddFile (FcConfig *config,
+ const FcChar8 *file)
+{
+ FcFontSet *set;
+ FcStrSet *subdirs;
+ FcStrList *sublist;
+ FcChar8 *subdir;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+
+ subdirs = FcStrSetCreate ();
+ if (!subdirs)
+ return FcFalse;
+
+ set = FcConfigGetFonts (config, FcSetApplication);
+ if (!set)
+ {
+ set = FcFontSetCreate ();
+ if (!set)
+ {
+ FcStrSetDestroy (subdirs);
+ return FcFalse;
+ }
+ FcConfigSetFonts (config, set, FcSetApplication);
+ }
+
+ if (!FcFileScanConfig (set, subdirs, config->blanks, file, config))
+ {
+ FcStrSetDestroy (subdirs);
+ return FcFalse;
+ }
+ if ((sublist = FcStrListCreate (subdirs)))
+ {
+ while ((subdir = FcStrListNext (sublist)))
+ {
+ FcConfigAppFontAddDir (config, subdir);
+ }
+ FcStrListDone (sublist);
+ }
+ FcStrSetDestroy (subdirs);
+ return FcTrue;
+}
+
+FcBool
+FcConfigAppFontAddDir (FcConfig *config,
+ const FcChar8 *dir)
+{
+ FcFontSet *set;
+ FcStrSet *dirs;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+
+ dirs = FcStrSetCreate ();
+ if (!dirs)
+ return FcFalse;
+
+ set = FcConfigGetFonts (config, FcSetApplication);
+ if (!set)
+ {
+ set = FcFontSetCreate ();
+ if (!set)
+ {
+ FcStrSetDestroy (dirs);
+ return FcFalse;
+ }
+ FcConfigSetFonts (config, set, FcSetApplication);
+ }
+
+ FcStrSetAddFilename (dirs, dir);
+
+ if (!FcConfigAddDirList (config, FcSetApplication, dirs))
+ {
+ FcStrSetDestroy (dirs);
+ return FcFalse;
+ }
+ FcStrSetDestroy (dirs);
+ return FcTrue;
+}
+
+void
+FcConfigAppFontClear (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return;
+ }
+
+ FcConfigSetFonts (config, 0, FcSetApplication);
+}
+
+/*
+ * Manage filename-based font source selectors
+ */
+
+FcBool
+FcConfigGlobAdd (FcConfig *config,
+ const FcChar8 *glob,
+ FcBool accept)
+{
+ FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs;
+
+ return FcStrSetAdd (set, glob);
+}
+
+static FcBool
+FcConfigGlobMatch (const FcChar8 *glob,
+ const FcChar8 *string)
+{
+ FcChar8 c;
+
+ while ((c = *glob++))
+ {
+ switch (c) {
+ case '*':
+ /* short circuit common case */
+ if (!*glob)
+ return FcTrue;
+ /* short circuit another common case */
+ if (strchr ((char *) glob, '*') == 0)
+ string += strlen ((char *) string) - strlen ((char *) glob);
+ while (*string)
+ {
+ if (FcConfigGlobMatch (glob, string))
+ return FcTrue;
+ string++;
+ }
+ return FcFalse;
+ case '?':
+ if (*string++ == '\0')
+ return FcFalse;
+ break;
+ default:
+ if (*string++ != c)
+ return FcFalse;
+ break;
+ }
+ }
+ return *string == '\0';
+}
+
+static FcBool
+FcConfigGlobsMatch (const FcStrSet *globs,
+ const FcChar8 *string)
+{
+ int i;
+
+ for (i = 0; i < globs->num; i++)
+ if (FcConfigGlobMatch (globs->strs[i], string))
+ return FcTrue;
+ return FcFalse;
+}
+
+FcBool
+FcConfigAcceptFilename (FcConfig *config,
+ const FcChar8 *filename)
+{
+ if (FcConfigGlobsMatch (config->acceptGlobs, filename))
+ return FcTrue;
+ if (FcConfigGlobsMatch (config->rejectGlobs, filename))
+ return FcFalse;
+ return FcTrue;
+}
+
+/*
+ * Manage font-pattern based font source selectors
+ */
+
+FcBool
+FcConfigPatternsAdd (FcConfig *config,
+ FcPattern *pattern,
+ FcBool accept)
+{
+ FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns;
+
+ return FcFontSetAdd (set, pattern);
+}
+
+static FcBool
+FcConfigPatternsMatch (const FcFontSet *patterns,
+ const FcPattern *font)
+{
+ int i;
+
+ for (i = 0; i < patterns->nfont; i++)
+ if (FcListPatternMatchAny (patterns->fonts[i], font))
+ return FcTrue;
+ return FcFalse;
+}
+
+FcBool
+FcConfigAcceptFont (FcConfig *config,
+ const FcPattern *font)
+{
+ if (FcConfigPatternsMatch (config->acceptPatterns, font))
+ return FcTrue;
+ if (FcConfigPatternsMatch (config->rejectPatterns, font))
+ return FcFalse;
+ return FcTrue;
+}
+#define __fccfg__
+#include "fcaliastail.h"
+#undef __fccfg__
diff --git a/fontconfig/src/fccharset.c b/fontconfig/src/fccharset.c
index d30e1614a..54e396bce 100644
--- a/fontconfig/src/fccharset.c
+++ b/fontconfig/src/fccharset.c
@@ -1,1422 +1,1439 @@
-/*
- * fontconfig/src/fccharset.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-/* #define CHECK */
-
-FcCharSet *
-FcCharSetCreate (void)
-{
- FcCharSet *fcs;
-
- fcs = (FcCharSet *) malloc (sizeof (FcCharSet));
- if (!fcs)
- return 0;
- FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet));
- fcs->ref = 1;
- fcs->num = 0;
- fcs->leaves_offset = 0;
- fcs->numbers_offset = 0;
- return fcs;
-}
-
-FcCharSet *
-FcCharSetNew (void)
-{
- return FcCharSetCreate ();
-}
-
-void
-FcCharSetDestroy (FcCharSet *fcs)
-{
- int i;
-
- if (fcs->ref == FC_REF_CONSTANT)
- {
- FcCacheObjectDereference (fcs);
- return;
- }
- if (--fcs->ref > 0)
- return;
- for (i = 0; i < fcs->num; i++)
- {
- FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- free (FcCharSetLeaf (fcs, i));
- }
- if (fcs->num)
- {
- /* the numbers here are estimates */
- FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t));
- free (FcCharSetLeaves (fcs));
- FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16));
- free (FcCharSetNumbers (fcs));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (fcs);
-}
-
-/*
- * Search for the leaf containing with the specified num.
- * Return its index if it exists, otherwise return negative of
- * the (position + 1) where it should be inserted
- */
-
-
-static int
-FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num)
-{
- FcChar16 *numbers = FcCharSetNumbers(fcs);
- FcChar16 page;
- int low = start;
- int high = fcs->num - 1;
-
- if (!numbers)
- return -1;
- while (low <= high)
- {
- int mid = (low + high) >> 1;
- page = numbers[mid];
- if (page == num)
- return mid;
- if (page < num)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (high < 0 || (high < fcs->num && numbers[high] < num))
- high++;
- return -(high + 1);
-}
-
-/*
- * Locate the leaf containing the specified char, return
- * its index if it exists, otherwise return negative of
- * the (position + 1) where it should be inserted
- */
-
-static int
-FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4)
-{
- return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8);
-}
-
-static FcCharLeaf *
-FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4)
-{
- int pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- return FcCharSetLeaf(fcs, pos);
- return 0;
-}
-
-#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1)))
-
-static FcBool
-FcCharSetPutLeaf (FcCharSet *fcs,
- FcChar32 ucs4,
- FcCharLeaf *leaf,
- int pos)
-{
- intptr_t *leaves = FcCharSetLeaves (fcs);
- FcChar16 *numbers = FcCharSetNumbers (fcs);
-
- ucs4 >>= 8;
- if (ucs4 >= 0x10000)
- return FcFalse;
-
- if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num))
- {
- if (!fcs->num)
- {
- unsigned int alloced = 8;
- leaves = malloc (alloced * sizeof (*leaves));
- numbers = malloc (alloced * sizeof (*numbers));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
- }
- else
- {
- unsigned int alloced = fcs->num;
- intptr_t *new_leaves, distance;
-
- FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers));
-
- alloced *= 2;
- new_leaves = realloc (leaves, alloced * sizeof (*leaves));
- numbers = realloc (numbers, alloced * sizeof (*numbers));
-
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
-
- distance = (intptr_t) new_leaves - (intptr_t) leaves;
- if (new_leaves && distance)
- {
- int i;
- for (i = 0; i < fcs->num; i++)
- new_leaves[i] -= distance;
- }
- leaves = new_leaves;
- }
-
- if (!leaves || !numbers)
- return FcFalse;
-
- fcs->leaves_offset = FcPtrToOffset (fcs, leaves);
- fcs->numbers_offset = FcPtrToOffset (fcs, numbers);
- }
-
- memmove (leaves + pos + 1, leaves + pos,
- (fcs->num - pos) * sizeof (*leaves));
- memmove (numbers + pos + 1, numbers + pos,
- (fcs->num - pos) * sizeof (*numbers));
- numbers[pos] = (FcChar16) ucs4;
- leaves[pos] = FcPtrToOffset (leaves, leaf);
- fcs->num++;
- return FcTrue;
-}
-
-/*
- * Locate the leaf containing the specified char, creating it
- * if desired
- */
-
-FcCharLeaf *
-FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4)
-{
- int pos;
- FcCharLeaf *leaf;
-
- pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- return FcCharSetLeaf(fcs, pos);
-
- leaf = calloc (1, sizeof (FcCharLeaf));
- if (!leaf)
- return 0;
-
- pos = -pos - 1;
- if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos))
- {
- free (leaf);
- return 0;
- }
- FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- return leaf;
-}
-
-static FcBool
-FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf)
-{
- int pos;
-
- pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- {
- FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- free (FcCharSetLeaf (fcs, pos));
- FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs),
- leaf);
- return FcTrue;
- }
- pos = -pos - 1;
- return FcCharSetPutLeaf (fcs, ucs4, leaf, pos);
-}
-
-FcBool
-FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4)
-{
- FcCharLeaf *leaf;
- FcChar32 *b;
-
- if (fcs->ref == FC_REF_CONSTANT)
- return FcFalse;
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- return FcFalse;
- b = &leaf->map[(ucs4 & 0xff) >> 5];
- *b |= (1 << (ucs4 & 0x1f));
- return FcTrue;
-}
-
-/*
- * An iterator for the leaves of a charset
- */
-
-typedef struct _fcCharSetIter {
- FcCharLeaf *leaf;
- FcChar32 ucs4;
- int pos;
-} FcCharSetIter;
-
-/*
- * Set iter->leaf to the leaf containing iter->ucs4 or higher
- */
-
-static void
-FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- int pos = FcCharSetFindLeafPos (fcs, iter->ucs4);
-
- if (pos < 0)
- {
- pos = -pos - 1;
- if (pos == fcs->num)
- {
- iter->ucs4 = ~0;
- iter->leaf = 0;
- return;
- }
- iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
- }
- iter->leaf = FcCharSetLeaf(fcs, pos);
- iter->pos = pos;
-}
-
-static void
-FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- int pos = iter->pos + 1;
- if (pos >= fcs->num)
- {
- iter->ucs4 = ~0;
- iter->leaf = 0;
- }
- else
- {
- iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
- iter->leaf = FcCharSetLeaf(fcs, pos);
- iter->pos = pos;
- }
-}
-
-
-static void
-FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- iter->ucs4 = 0;
- iter->pos = 0;
- FcCharSetIterSet (fcs, iter);
-}
-
-FcCharSet *
-FcCharSetCopy (FcCharSet *src)
-{
- if (src->ref != FC_REF_CONSTANT)
- src->ref++;
- else
- FcCacheObjectReference (src);
- return src;
-}
-
-FcBool
-FcCharSetEqual (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- int i;
-
- if (a == b)
- return FcTrue;
- for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi);
- ai.leaf && bi.leaf;
- FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi))
- {
- if (ai.ucs4 != bi.ucs4)
- return FcFalse;
- for (i = 0; i < 256/32; i++)
- if (ai.leaf->map[i] != bi.leaf->map[i])
- return FcFalse;
- }
- return ai.leaf == bi.leaf;
-}
-
-static FcBool
-FcCharSetAddLeaf (FcCharSet *fcs,
- FcChar32 ucs4,
- FcCharLeaf *leaf)
-{
- FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!new)
- return FcFalse;
- *new = *leaf;
- return FcTrue;
-}
-
-static FcCharSet *
-FcCharSetOperate (const FcCharSet *a,
- const FcCharSet *b,
- FcBool (*overlap) (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl),
- FcBool aonly,
- FcBool bonly)
-{
- FcCharSet *fcs;
- FcCharSetIter ai, bi;
-
- fcs = FcCharSetCreate ();
- if (!fcs)
- goto bail0;
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf)))
- {
- if (ai.ucs4 < bi.ucs4)
- {
- if (aonly)
- {
- if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf))
- goto bail1;
- FcCharSetIterNext (a, &ai);
- }
- else
- {
- ai.ucs4 = bi.ucs4;
- FcCharSetIterSet (a, &ai);
- }
- }
- else if (bi.ucs4 < ai.ucs4 )
- {
- if (bonly)
- {
- if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf))
- goto bail1;
- FcCharSetIterNext (b, &bi);
- }
- else
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- else
- {
- FcCharLeaf leaf;
-
- if ((*overlap) (&leaf, ai.leaf, bi.leaf))
- {
- if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf))
- goto bail1;
- }
- FcCharSetIterNext (a, &ai);
- FcCharSetIterNext (b, &bi);
- }
- }
- return fcs;
-bail1:
- FcCharSetDestroy (fcs);
-bail0:
- return 0;
-}
-
-static FcBool
-FcCharSetIntersectLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
- FcBool nonempty = FcFalse;
-
- for (i = 0; i < 256/32; i++)
- if ((result->map[i] = al->map[i] & bl->map[i]))
- nonempty = FcTrue;
- return nonempty;
-}
-
-FcCharSet *
-FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse);
-}
-
-static FcBool
-FcCharSetUnionLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
-
- for (i = 0; i < 256/32; i++)
- result->map[i] = al->map[i] | bl->map[i];
- return FcTrue;
-}
-
-FcCharSet *
-FcCharSetUnion (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue);
-}
-
-FcBool
-FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed)
-{
- int ai = 0, bi = 0;
- FcChar16 an, bn;
-
- if (a->ref == FC_REF_CONSTANT) {
- if (changed)
- *changed = FcFalse;
- return FcFalse;
- }
-
- if (changed) {
- *changed = !FcCharSetIsSubset(b, a);
- if (!*changed)
- return FcTrue;
- }
-
- while (bi < b->num)
- {
- an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0;
- bn = FcCharSetNumbers(b)[bi];
-
- if (an < bn)
- {
- ai = FcCharSetFindLeafForward (a, ai + 1, bn);
- if (ai < 0)
- ai = -ai - 1;
- }
- else
- {
- FcCharLeaf *bl = FcCharSetLeaf(b, bi);
- if (bn < an)
- {
- if (!FcCharSetAddLeaf (a, bn << 8, bl))
- return FcFalse;
- }
- else
- {
- FcCharLeaf *al = FcCharSetLeaf(a, ai);
- FcCharSetUnionLeaf (al, al, bl);
- }
-
- ai++;
- bi++;
- }
- }
-
- return FcTrue;
-}
-
-static FcBool
-FcCharSetSubtractLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
- FcBool nonempty = FcFalse;
-
- for (i = 0; i < 256/32; i++)
- if ((result->map[i] = al->map[i] & ~bl->map[i]))
- nonempty = FcTrue;
- return nonempty;
-}
-
-FcCharSet *
-FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse);
-}
-
-FcBool
-FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4)
-{
- FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4);
- if (!leaf)
- return FcFalse;
- return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0;
-}
-
-static FcChar32
-FcCharSetPopCount (FcChar32 c1)
-{
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
- return __builtin_popcount (c1);
-#else
- /* hackmem 169 */
- FcChar32 c2 = (c1 >> 1) & 033333333333;
- c2 = c1 - c2 - ((c2 >> 1) & 033333333333);
- return (((c2 + (c2 >> 3)) & 030707070707) % 077);
-#endif
-}
-
-FcChar32
-FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- FcChar32 count = 0;
-
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while (ai.leaf && bi.leaf)
- {
- if (ai.ucs4 == bi.ucs4)
- {
- FcChar32 *am = ai.leaf->map;
- FcChar32 *bm = bi.leaf->map;
- int i = 256/32;
- while (i--)
- count += FcCharSetPopCount (*am++ & *bm++);
- FcCharSetIterNext (a, &ai);
- }
- else if (ai.ucs4 < bi.ucs4)
- {
- ai.ucs4 = bi.ucs4;
- FcCharSetIterSet (a, &ai);
- }
- if (bi.ucs4 < ai.ucs4)
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- return count;
-}
-
-FcChar32
-FcCharSetCount (const FcCharSet *a)
-{
- FcCharSetIter ai;
- FcChar32 count = 0;
-
- for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai))
- {
- int i = 256/32;
- FcChar32 *am = ai.leaf->map;
-
- while (i--)
- count += FcCharSetPopCount (*am++);
- }
- return count;
-}
-
-FcChar32
-FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- FcChar32 count = 0;
-
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while (ai.leaf)
- {
- if (ai.ucs4 <= bi.ucs4)
- {
- FcChar32 *am = ai.leaf->map;
- int i = 256/32;
- if (ai.ucs4 == bi.ucs4)
- {
- FcChar32 *bm = bi.leaf->map;
- while (i--)
- count += FcCharSetPopCount (*am++ & ~*bm++);
- }
- else
- {
- while (i--)
- count += FcCharSetPopCount (*am++);
- }
- FcCharSetIterNext (a, &ai);
- }
- else if (bi.leaf)
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- return count;
-}
-
-/*
- * return FcTrue iff a is a subset of b
- */
-FcBool
-FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
-{
- int ai, bi;
- FcChar16 an, bn;
-
- if (a == b) return FcTrue;
- bi = 0;
- ai = 0;
- while (ai < a->num && bi < b->num)
- {
- an = FcCharSetNumbers(a)[ai];
- bn = FcCharSetNumbers(b)[bi];
- /*
- * Check matching pages
- */
- if (an == bn)
- {
- FcChar32 *am = FcCharSetLeaf(a, ai)->map;
- FcChar32 *bm = FcCharSetLeaf(b, bi)->map;
-
- if (am != bm)
- {
- int i = 256/32;
- /*
- * Does am have any bits not in bm?
- */
- while (i--)
- if (*am++ & ~*bm++)
- return FcFalse;
- }
- ai++;
- bi++;
- }
- /*
- * Does a have any pages not in b?
- */
- else if (an < bn)
- return FcFalse;
- else
- {
- bi = FcCharSetFindLeafForward (b, bi + 1, an);
- if (bi < 0)
- bi = -bi - 1;
- }
- }
- /*
- * did we look at every page?
- */
- return ai >= a->num;
-}
-
-/*
- * These two functions efficiently walk the entire charmap for
- * other software (like pango) that want their own copy
- */
-
-FcChar32
-FcCharSetNextPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next)
-{
- FcCharSetIter ai;
- FcChar32 page;
-
- ai.ucs4 = *next;
- FcCharSetIterSet (a, &ai);
- if (!ai.leaf)
- return FC_CHARSET_DONE;
-
- /*
- * Save current information
- */
- page = ai.ucs4;
- memcpy (map, ai.leaf->map, sizeof (ai.leaf->map));
- /*
- * Step to next page
- */
- FcCharSetIterNext (a, &ai);
- *next = ai.ucs4;
-
- return page;
-}
-
-FcChar32
-FcCharSetFirstPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next)
-{
- *next = 0;
- return FcCharSetNextPage (a, map, next);
-}
-
-/*
- * old coverage API, rather hard to use correctly
- */
-
-FcChar32
-FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result)
-{
- FcCharSetIter ai;
-
- ai.ucs4 = page;
- FcCharSetIterSet (a, &ai);
- if (!ai.leaf)
- {
- memset (result, '\0', 256 / 8);
- page = 0;
- }
- else
- {
- memcpy (result, ai.leaf->map, sizeof (ai.leaf->map));
- FcCharSetIterNext (a, &ai);
- page = ai.ucs4;
- }
- return page;
-}
-
-/*
- * ASCII representation of charsets.
- *
- * Each leaf is represented as 9 32-bit values, the code of the first character followed
- * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters,
- * only 85 different values are used to avoid control characters as well as the other
- * characters used to encode font names. 85**5 > 2^32 so things work out, but
- * it's not exactly human readable output. As a special case, 0 is encoded as a space
- */
-
-static const unsigned char charToValue[256] = {
- /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff,
- /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a,
- /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
- /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18,
- /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
- /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
- /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
- /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff,
- /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
- /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
- /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
- /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff,
- /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-};
-
-static const FcChar8 valueToChar[0x55] = {
- /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*',
- /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4',
- /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>',
- /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F',
- /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
- /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
- /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a',
- /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
- /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
- /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
- /* 0x50 */ 'z', '{', '|', '}', '~',
-};
-
-static FcChar8 *
-FcCharSetParseValue (FcChar8 *string, FcChar32 *value)
-{
- int i;
- FcChar32 v;
- FcChar32 c;
-
- if (*string == ' ')
- {
- v = 0;
- string++;
- }
- else
- {
- v = 0;
- for (i = 0; i < 5; i++)
- {
- if (!(c = (FcChar32) (unsigned char) *string++))
- return 0;
- c = charToValue[c];
- if (c == 0xff)
- return 0;
- v = v * 85 + c;
- }
- }
- *value = v;
- return string;
-}
-
-static FcBool
-FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value)
-{
- int i;
- if (value == 0)
- {
- return FcStrBufChar (buf, ' ');
- }
- else
- {
- FcChar8 string[6];
- FcChar8 *s = string + 5;
- string[5] = '\0';
- for (i = 0; i < 5; i++)
- {
- *--s = valueToChar[value % 85];
- value /= 85;
- }
- for (i = 0; i < 5; i++)
- if (!FcStrBufChar (buf, *s++))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcCharSet *
-FcNameParseCharSet (FcChar8 *string)
-{
- FcCharSet *c;
- FcChar32 ucs4;
- FcCharLeaf *leaf;
- FcCharLeaf temp;
- FcChar32 bits;
- int i;
-
- c = FcCharSetCreate ();
- if (!c)
- goto bail0;
- while (*string)
- {
- string = FcCharSetParseValue (string, &ucs4);
- if (!string)
- goto bail1;
- bits = 0;
- for (i = 0; i < 256/32; i++)
- {
- string = FcCharSetParseValue (string, &temp.map[i]);
- if (!string)
- goto bail1;
- bits |= temp.map[i];
- }
- if (bits)
- {
- leaf = malloc (sizeof (FcCharLeaf));
- if (!leaf)
- goto bail1;
- *leaf = temp;
- if (!FcCharSetInsertLeaf (c, ucs4, leaf))
- goto bail1;
- }
- }
- return c;
-bail1:
- if (c->num)
- {
- FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *));
- free (FcCharSetLeaves (c));
- }
- if (c->num)
- {
- FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16));
- free (FcCharSetNumbers (c));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (c);
-bail0:
- return NULL;
-}
-
-FcBool
-FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c)
-{
- FcCharSetIter ci;
- int i;
-#ifdef CHECK
- int len = buf->len;
-#endif
-
- for (FcCharSetIterStart (c, &ci);
- ci.leaf;
- FcCharSetIterNext (c, &ci))
- {
- if (!FcCharSetUnparseValue (buf, ci.ucs4))
- return FcFalse;
- for (i = 0; i < 256/32; i++)
- if (!FcCharSetUnparseValue (buf, ci.leaf->map[i]))
- return FcFalse;
- }
-#ifdef CHECK
- {
- FcCharSet *check;
- FcChar32 missing;
- FcCharSetIter ci, checki;
-
- /* null terminate for parser */
- FcStrBufChar (buf, '\0');
- /* step back over null for life after test */
- buf->len--;
- check = FcNameParseCharSet (buf->buf + len);
- FcCharSetIterStart (c, &ci);
- FcCharSetIterStart (check, &checki);
- while (ci.leaf || checki.leaf)
- {
- if (ci.ucs4 < checki.ucs4)
- {
- printf ("Missing leaf node at 0x%x\n", ci.ucs4);
- FcCharSetIterNext (c, &ci);
- }
- else if (checki.ucs4 < ci.ucs4)
- {
- printf ("Extra leaf node at 0x%x\n", checki.ucs4);
- FcCharSetIterNext (check, &checki);
- }
- else
- {
- int i = 256/32;
- FcChar32 *cm = ci.leaf->map;
- FcChar32 *checkm = checki.leaf->map;
-
- for (i = 0; i < 256; i += 32)
- {
- if (*cm != *checkm)
- printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n",
- ci.ucs4 + i, *cm, *checkm);
- cm++;
- checkm++;
- }
- FcCharSetIterNext (c, &ci);
- FcCharSetIterNext (check, &checki);
- }
- }
- if ((missing = FcCharSetSubtractCount (c, check)))
- printf ("%d missing in reparsed result\n", missing);
- if ((missing = FcCharSetSubtractCount (check, c)))
- printf ("%d extra in reparsed result\n", missing);
- FcCharSetDestroy (check);
- }
-#endif
-
- return FcTrue;
-}
-
-typedef struct _FcCharLeafEnt FcCharLeafEnt;
-
-struct _FcCharLeafEnt {
- FcCharLeafEnt *next;
- FcChar32 hash;
- FcCharLeaf leaf;
-};
-
-#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt))
-#define FC_CHAR_LEAF_HASH_SIZE 257
-
-typedef struct _FcCharSetEnt FcCharSetEnt;
-
-struct _FcCharSetEnt {
- FcCharSetEnt *next;
- FcChar32 hash;
- FcCharSet set;
-};
-
-typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt;
-
-struct _FcCharSetOrigEnt {
- FcCharSetOrigEnt *next;
- const FcCharSet *orig;
- const FcCharSet *frozen;
-};
-
-#define FC_CHAR_SET_HASH_SIZE 67
-
-struct _FcCharSetFreezer {
- FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE];
- FcCharLeafEnt **leaf_blocks;
- int leaf_block_count;
- FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE];
- FcCharLeafEnt *current_block;
- int leaf_remain;
- int leaves_seen;
- int charsets_seen;
- int leaves_allocated;
- int charsets_allocated;
-};
-
-static FcCharLeafEnt *
-FcCharLeafEntCreate (FcCharSetFreezer *freezer)
-{
- if (!freezer->leaf_remain)
- {
- FcCharLeafEnt **newBlocks;
-
- freezer->leaf_block_count++;
- newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *));
- if (!newBlocks)
- return 0;
- freezer->leaf_blocks = newBlocks;
- freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- if (!freezer->current_block)
- return 0;
- FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- freezer->leaf_remain = FC_CHAR_LEAF_BLOCK;
- }
- freezer->leaf_remain--;
- freezer->leaves_allocated++;
- return freezer->current_block++;
-}
-
-static FcChar32
-FcCharLeafHash (FcCharLeaf *leaf)
-{
- FcChar32 hash = 0;
- int i;
-
- for (i = 0; i < 256/32; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i];
- return hash;
-}
-
-static FcCharLeaf *
-FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf)
-{
- FcChar32 hash = FcCharLeafHash (leaf);
- FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE];
- FcCharLeafEnt *ent;
-
- for (ent = *bucket; ent; ent = ent->next)
- {
- if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf)))
- return &ent->leaf;
- }
-
- ent = FcCharLeafEntCreate(freezer);
- if (!ent)
- return 0;
- ent->leaf = *leaf;
- ent->hash = hash;
- ent->next = *bucket;
- *bucket = ent;
- return &ent->leaf;
-}
-
-static FcChar32
-FcCharSetHash (FcCharSet *fcs)
-{
- FcChar32 hash = 0;
- int i;
-
- /* hash in leaves */
- for (i = 0; i < fcs->num; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i));
- /* hash in numbers */
- for (i = 0; i < fcs->num; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs);
- return hash;
-}
-
-static FcBool
-FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen)
-{
- FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *ent;
-
- ent = malloc (sizeof (FcCharSetOrigEnt));
- if (!ent)
- return FcFalse;
- ent->orig = orig;
- ent->frozen = frozen;
- ent->next = *bucket;
- *bucket = ent;
- return FcTrue;
-}
-
-static FcCharSet *
-FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig)
-{
- FcChar32 hash = FcCharSetHash (fcs);
- FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE];
- FcCharSetEnt *ent;
- int size;
- int i;
-
- for (ent = *bucket; ent; ent = ent->next)
- {
- if (ent->hash == hash &&
- ent->set.num == fcs->num &&
- !memcmp (FcCharSetNumbers(&ent->set),
- FcCharSetNumbers(fcs),
- fcs->num * sizeof (FcChar16)))
- {
- FcBool ok = FcTrue;
- int i;
-
- for (i = 0; i < fcs->num; i++)
- if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i))
- ok = FcFalse;
- if (ok)
- return &ent->set;
- }
- }
-
- size = (sizeof (FcCharSetEnt) +
- fcs->num * sizeof (FcCharLeaf *) +
- fcs->num * sizeof (FcChar16));
- ent = malloc (size);
- if (!ent)
- return 0;
- FcMemAlloc (FC_MEM_CHARSET, size);
-
- freezer->charsets_allocated++;
-
- ent->set.ref = FC_REF_CONSTANT;
- ent->set.num = fcs->num;
- if (fcs->num)
- {
- intptr_t *ent_leaves;
-
- ent->set.leaves_offset = sizeof (ent->set);
- ent->set.numbers_offset = (ent->set.leaves_offset +
- fcs->num * sizeof (intptr_t));
-
- ent_leaves = FcCharSetLeaves (&ent->set);
- for (i = 0; i < fcs->num; i++)
- ent_leaves[i] = FcPtrToOffset (ent_leaves,
- FcCharSetLeaf (fcs, i));
- memcpy (FcCharSetNumbers (&ent->set),
- FcCharSetNumbers (fcs),
- fcs->num * sizeof (FcChar16));
- }
- else
- {
- ent->set.leaves_offset = 0;
- ent->set.numbers_offset = 0;
- }
-
- ent->hash = hash;
- ent->next = *bucket;
- *bucket = ent;
-
- return &ent->set;
-}
-
-static const FcCharSet *
-FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig)
-{
- FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *ent;
-
- for (ent = *bucket; ent; ent = ent->next)
- if (ent->orig == orig)
- return ent->frozen;
- return NULL;
-}
-
-const FcCharSet *
-FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
-{
- FcCharSet *b;
- const FcCharSet *n = 0;
- FcCharLeaf *l;
- int i;
-
- b = FcCharSetCreate ();
- if (!b)
- goto bail0;
- for (i = 0; i < fcs->num; i++)
- {
- l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i));
- if (!l)
- goto bail1;
- if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l))
- goto bail1;
- }
- n = FcCharSetFreezeBase (freezer, b, fcs);
- if (!FcCharSetFreezeOrig (freezer, fcs, n))
- {
- n = NULL;
- goto bail1;
- }
- freezer->charsets_seen++;
- freezer->leaves_seen += fcs->num;
-bail1:
- if (b->num)
- {
- FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *));
- free (FcCharSetLeaves (b));
- }
- if (b->num)
- {
- FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16));
- free (FcCharSetNumbers (b));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (b);
-bail0:
- return n;
-}
-
-FcCharSetFreezer *
-FcCharSetFreezerCreate (void)
-{
- FcCharSetFreezer *freezer;
-
- freezer = calloc (1, sizeof (FcCharSetFreezer));
- return freezer;
-}
-
-void
-FcCharSetFreezerDestroy (FcCharSetFreezer *freezer)
-{
- int i;
-
- if (FcDebug() & FC_DBG_CACHE)
- {
- printf ("\ncharsets %d -> %d leaves %d -> %d\n",
- freezer->charsets_seen, freezer->charsets_allocated,
- freezer->leaves_seen, freezer->leaves_allocated);
- }
- for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
- {
- FcCharSetEnt *ent, *next;
- for (ent = freezer->set_hash_table[i]; ent; ent = next)
- {
- next = ent->next;
- FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) +
- ent->set.num * sizeof (FcCharLeaf *) +
- ent->set.num * sizeof (FcChar16)));
- free (ent);
- }
- }
-
- for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
- {
- FcCharSetOrigEnt *ent, *next;
- for (ent = freezer->orig_hash_table[i]; ent; ent = next)
- {
- next = ent->next;
- free (ent);
- }
- }
-
- for (i = 0; i < freezer->leaf_block_count; i++)
- {
- free (freezer->leaf_blocks[i]);
- FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- }
-
- free (freezer->leaf_blocks);
- free (freezer);
-}
-
-FcBool
-FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs)
-{
- intptr_t *leaves;
- FcChar16 *numbers;
- int i;
-
- if (cs->ref != FC_REF_CONSTANT)
- {
- if (!serialize->cs_freezer)
- {
- serialize->cs_freezer = FcCharSetFreezerCreate ();
- if (!serialize->cs_freezer)
- return FcFalse;
- }
- if (FcCharSetFindFrozen (serialize->cs_freezer, cs))
- return FcTrue;
-
- cs = FcCharSetFreeze (serialize->cs_freezer, cs);
- }
-
- leaves = FcCharSetLeaves (cs);
- numbers = FcCharSetNumbers (cs);
-
- if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16)))
- return FcFalse;
- for (i = 0; i < cs->num; i++)
- if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i),
- sizeof (FcCharLeaf)))
- return FcFalse;
- return FcTrue;
-}
-
-FcCharSet *
-FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs)
-{
- FcCharSet *cs_serialized;
- intptr_t *leaves, *leaves_serialized;
- FcChar16 *numbers, *numbers_serialized;
- FcCharLeaf *leaf, *leaf_serialized;
- int i;
-
- if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer)
- {
- cs = FcCharSetFindFrozen (serialize->cs_freezer, cs);
- if (!cs)
- return NULL;
- }
-
- cs_serialized = FcSerializePtr (serialize, cs);
- if (!cs_serialized)
- return NULL;
-
- cs_serialized->ref = FC_REF_CONSTANT;
- cs_serialized->num = cs->num;
-
- if (cs->num)
- {
- leaves = FcCharSetLeaves (cs);
- leaves_serialized = FcSerializePtr (serialize, leaves);
- if (!leaves_serialized)
- return NULL;
-
- cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized,
- leaves_serialized);
-
- numbers = FcCharSetNumbers (cs);
- numbers_serialized = FcSerializePtr (serialize, numbers);
- if (!numbers)
- return NULL;
-
- cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized,
- numbers_serialized);
-
- for (i = 0; i < cs->num; i++)
- {
- leaf = FcCharSetLeaf (cs, i);
- leaf_serialized = FcSerializePtr (serialize, leaf);
- if (!leaf_serialized)
- return NULL;
- *leaf_serialized = *leaf;
- leaves_serialized[i] = FcPtrToOffset (leaves_serialized,
- leaf_serialized);
- numbers_serialized[i] = numbers[i];
- }
- }
- else
- {
- cs_serialized->leaves_offset = 0;
- cs_serialized->numbers_offset = 0;
- }
-
- return cs_serialized;
-}
-#define __fccharset__
-#include "fcaliastail.h"
-#undef __fccharset__
+/*
+ * fontconfig/src/fccharset.c
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+
+/* #define CHECK */
+
+FcCharSet *
+FcCharSetCreate (void)
+{
+ FcCharSet *fcs;
+
+ fcs = (FcCharSet *) malloc (sizeof (FcCharSet));
+ if (!fcs)
+ return 0;
+ FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet));
+ fcs->ref = 1;
+ fcs->num = 0;
+ fcs->leaves_offset = 0;
+ fcs->numbers_offset = 0;
+ return fcs;
+}
+
+FcCharSet *
+FcCharSetNew (void)
+{
+ return FcCharSetCreate ();
+}
+
+void
+FcCharSetDestroy (FcCharSet *fcs)
+{
+ int i;
+
+ if (fcs->ref == FC_REF_CONSTANT)
+ {
+ FcCacheObjectDereference (fcs);
+ return;
+ }
+ if (--fcs->ref > 0)
+ return;
+ for (i = 0; i < fcs->num; i++)
+ {
+ FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
+ free (FcCharSetLeaf (fcs, i));
+ }
+ if (fcs->num)
+ {
+ /* the numbers here are estimates */
+ FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t));
+ free (FcCharSetLeaves (fcs));
+ FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16));
+ free (FcCharSetNumbers (fcs));
+ }
+ FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
+ free (fcs);
+}
+
+/*
+ * Search for the leaf containing with the specified num.
+ * Return its index if it exists, otherwise return negative of
+ * the (position + 1) where it should be inserted
+ */
+
+
+static int
+FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num)
+{
+ FcChar16 *numbers = FcCharSetNumbers(fcs);
+ FcChar16 page;
+ int low = start;
+ int high = fcs->num - 1;
+
+ if (!numbers)
+ return -1;
+ while (low <= high)
+ {
+ int mid = (low + high) >> 1;
+ page = numbers[mid];
+ if (page == num)
+ return mid;
+ if (page < num)
+ low = mid + 1;
+ else
+ high = mid - 1;
+ }
+ if (high < 0 || (high < fcs->num && numbers[high] < num))
+ high++;
+ return -(high + 1);
+}
+
+/*
+ * Locate the leaf containing the specified char, return
+ * its index if it exists, otherwise return negative of
+ * the (position + 1) where it should be inserted
+ */
+
+static int
+FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4)
+{
+ return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8);
+}
+
+static FcCharLeaf *
+FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4)
+{
+ int pos = FcCharSetFindLeafPos (fcs, ucs4);
+ if (pos >= 0)
+ return FcCharSetLeaf(fcs, pos);
+ return 0;
+}
+
+#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1)))
+
+static FcBool
+FcCharSetPutLeaf (FcCharSet *fcs,
+ FcChar32 ucs4,
+ FcCharLeaf *leaf,
+ int pos)
+{
+ intptr_t *leaves = FcCharSetLeaves (fcs);
+ FcChar16 *numbers = FcCharSetNumbers (fcs);
+
+ ucs4 >>= 8;
+ if (ucs4 >= 0x10000)
+ return FcFalse;
+
+ if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num))
+ {
+ if (!fcs->num)
+ {
+ unsigned int alloced = 8;
+ leaves = malloc (alloced * sizeof (*leaves));
+ numbers = malloc (alloced * sizeof (*numbers));
+ FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
+ FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
+ }
+ else
+ {
+ unsigned int alloced = fcs->num;
+ intptr_t *new_leaves, distance;
+
+ FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves));
+ FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers));
+
+ alloced *= 2;
+ new_leaves = realloc (leaves, alloced * sizeof (*leaves));
+ numbers = realloc (numbers, alloced * sizeof (*numbers));
+
+ FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
+ FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
+
+ distance = (intptr_t) new_leaves - (intptr_t) leaves;
+ if (new_leaves && distance)
+ {
+ int i;
+ for (i = 0; i < fcs->num; i++)
+ new_leaves[i] -= distance;
+ }
+ leaves = new_leaves;
+ }
+
+ if (!leaves || !numbers)
+ return FcFalse;
+
+ fcs->leaves_offset = FcPtrToOffset (fcs, leaves);
+ fcs->numbers_offset = FcPtrToOffset (fcs, numbers);
+ }
+
+ memmove (leaves + pos + 1, leaves + pos,
+ (fcs->num - pos) * sizeof (*leaves));
+ memmove (numbers + pos + 1, numbers + pos,
+ (fcs->num - pos) * sizeof (*numbers));
+ numbers[pos] = (FcChar16) ucs4;
+ leaves[pos] = FcPtrToOffset (leaves, leaf);
+ fcs->num++;
+ return FcTrue;
+}
+
+/*
+ * Locate the leaf containing the specified char, creating it
+ * if desired
+ */
+
+FcCharLeaf *
+FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4)
+{
+ int pos;
+ FcCharLeaf *leaf;
+
+ pos = FcCharSetFindLeafPos (fcs, ucs4);
+ if (pos >= 0)
+ return FcCharSetLeaf(fcs, pos);
+
+ leaf = calloc (1, sizeof (FcCharLeaf));
+ if (!leaf)
+ return 0;
+
+ pos = -pos - 1;
+ if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos))
+ {
+ free (leaf);
+ return 0;
+ }
+ FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
+ return leaf;
+}
+
+static FcBool
+FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf)
+{
+ int pos;
+
+ pos = FcCharSetFindLeafPos (fcs, ucs4);
+ if (pos >= 0)
+ {
+ FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
+ free (FcCharSetLeaf (fcs, pos));
+ FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs),
+ leaf);
+ return FcTrue;
+ }
+ pos = -pos - 1;
+ return FcCharSetPutLeaf (fcs, ucs4, leaf, pos);
+}
+
+FcBool
+FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4)
+{
+ FcCharLeaf *leaf;
+ FcChar32 *b;
+
+ if (fcs->ref == FC_REF_CONSTANT)
+ return FcFalse;
+ leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+ if (!leaf)
+ return FcFalse;
+ b = &leaf->map[(ucs4 & 0xff) >> 5];
+ *b |= (1 << (ucs4 & 0x1f));
+ return FcTrue;
+}
+
+FcBool
+FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4)
+{
+ FcCharLeaf *leaf;
+ FcChar32 *b;
+
+ if (fcs->ref == FC_REF_CONSTANT)
+ return FcFalse;
+ leaf = FcCharSetFindLeaf (fcs, ucs4);
+ if (!leaf)
+ return FcTrue;
+ b = &leaf->map[(ucs4 & 0xff) >> 5];
+ *b &= ~(1 << (ucs4 & 0x1f));
+ /* We don't bother removing the leaf if it's empty */
+ return FcTrue;
+}
+
+/*
+ * An iterator for the leaves of a charset
+ */
+
+typedef struct _fcCharSetIter {
+ FcCharLeaf *leaf;
+ FcChar32 ucs4;
+ int pos;
+} FcCharSetIter;
+
+/*
+ * Set iter->leaf to the leaf containing iter->ucs4 or higher
+ */
+
+static void
+FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter)
+{
+ int pos = FcCharSetFindLeafPos (fcs, iter->ucs4);
+
+ if (pos < 0)
+ {
+ pos = -pos - 1;
+ if (pos == fcs->num)
+ {
+ iter->ucs4 = ~0;
+ iter->leaf = 0;
+ return;
+ }
+ iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
+ }
+ iter->leaf = FcCharSetLeaf(fcs, pos);
+ iter->pos = pos;
+}
+
+static void
+FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter)
+{
+ int pos = iter->pos + 1;
+ if (pos >= fcs->num)
+ {
+ iter->ucs4 = ~0;
+ iter->leaf = 0;
+ }
+ else
+ {
+ iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
+ iter->leaf = FcCharSetLeaf(fcs, pos);
+ iter->pos = pos;
+ }
+}
+
+
+static void
+FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter)
+{
+ iter->ucs4 = 0;
+ iter->pos = 0;
+ FcCharSetIterSet (fcs, iter);
+}
+
+FcCharSet *
+FcCharSetCopy (FcCharSet *src)
+{
+ if (src->ref != FC_REF_CONSTANT)
+ src->ref++;
+ else
+ FcCacheObjectReference (src);
+ return src;
+}
+
+FcBool
+FcCharSetEqual (const FcCharSet *a, const FcCharSet *b)
+{
+ FcCharSetIter ai, bi;
+ int i;
+
+ if (a == b)
+ return FcTrue;
+ for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi);
+ ai.leaf && bi.leaf;
+ FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi))
+ {
+ if (ai.ucs4 != bi.ucs4)
+ return FcFalse;
+ for (i = 0; i < 256/32; i++)
+ if (ai.leaf->map[i] != bi.leaf->map[i])
+ return FcFalse;
+ }
+ return ai.leaf == bi.leaf;
+}
+
+static FcBool
+FcCharSetAddLeaf (FcCharSet *fcs,
+ FcChar32 ucs4,
+ FcCharLeaf *leaf)
+{
+ FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4);
+ if (!new)
+ return FcFalse;
+ *new = *leaf;
+ return FcTrue;
+}
+
+static FcCharSet *
+FcCharSetOperate (const FcCharSet *a,
+ const FcCharSet *b,
+ FcBool (*overlap) (FcCharLeaf *result,
+ const FcCharLeaf *al,
+ const FcCharLeaf *bl),
+ FcBool aonly,
+ FcBool bonly)
+{
+ FcCharSet *fcs;
+ FcCharSetIter ai, bi;
+
+ fcs = FcCharSetCreate ();
+ if (!fcs)
+ goto bail0;
+ FcCharSetIterStart (a, &ai);
+ FcCharSetIterStart (b, &bi);
+ while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf)))
+ {
+ if (ai.ucs4 < bi.ucs4)
+ {
+ if (aonly)
+ {
+ if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf))
+ goto bail1;
+ FcCharSetIterNext (a, &ai);
+ }
+ else
+ {
+ ai.ucs4 = bi.ucs4;
+ FcCharSetIterSet (a, &ai);
+ }
+ }
+ else if (bi.ucs4 < ai.ucs4 )
+ {
+ if (bonly)
+ {
+ if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf))
+ goto bail1;
+ FcCharSetIterNext (b, &bi);
+ }
+ else
+ {
+ bi.ucs4 = ai.ucs4;
+ FcCharSetIterSet (b, &bi);
+ }
+ }
+ else
+ {
+ FcCharLeaf leaf;
+
+ if ((*overlap) (&leaf, ai.leaf, bi.leaf))
+ {
+ if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf))
+ goto bail1;
+ }
+ FcCharSetIterNext (a, &ai);
+ FcCharSetIterNext (b, &bi);
+ }
+ }
+ return fcs;
+bail1:
+ FcCharSetDestroy (fcs);
+bail0:
+ return 0;
+}
+
+static FcBool
+FcCharSetIntersectLeaf (FcCharLeaf *result,
+ const FcCharLeaf *al,
+ const FcCharLeaf *bl)
+{
+ int i;
+ FcBool nonempty = FcFalse;
+
+ for (i = 0; i < 256/32; i++)
+ if ((result->map[i] = al->map[i] & bl->map[i]))
+ nonempty = FcTrue;
+ return nonempty;
+}
+
+FcCharSet *
+FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b)
+{
+ return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse);
+}
+
+static FcBool
+FcCharSetUnionLeaf (FcCharLeaf *result,
+ const FcCharLeaf *al,
+ const FcCharLeaf *bl)
+{
+ int i;
+
+ for (i = 0; i < 256/32; i++)
+ result->map[i] = al->map[i] | bl->map[i];
+ return FcTrue;
+}
+
+FcCharSet *
+FcCharSetUnion (const FcCharSet *a, const FcCharSet *b)
+{
+ return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue);
+}
+
+FcBool
+FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed)
+{
+ int ai = 0, bi = 0;
+ FcChar16 an, bn;
+
+ if (a->ref == FC_REF_CONSTANT) {
+ if (changed)
+ *changed = FcFalse;
+ return FcFalse;
+ }
+
+ if (changed) {
+ *changed = !FcCharSetIsSubset(b, a);
+ if (!*changed)
+ return FcTrue;
+ }
+
+ while (bi < b->num)
+ {
+ an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0;
+ bn = FcCharSetNumbers(b)[bi];
+
+ if (an < bn)
+ {
+ ai = FcCharSetFindLeafForward (a, ai + 1, bn);
+ if (ai < 0)
+ ai = -ai - 1;
+ }
+ else
+ {
+ FcCharLeaf *bl = FcCharSetLeaf(b, bi);
+ if (bn < an)
+ {
+ if (!FcCharSetAddLeaf (a, bn << 8, bl))
+ return FcFalse;
+ }
+ else
+ {
+ FcCharLeaf *al = FcCharSetLeaf(a, ai);
+ FcCharSetUnionLeaf (al, al, bl);
+ }
+
+ ai++;
+ bi++;
+ }
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+FcCharSetSubtractLeaf (FcCharLeaf *result,
+ const FcCharLeaf *al,
+ const FcCharLeaf *bl)
+{
+ int i;
+ FcBool nonempty = FcFalse;
+
+ for (i = 0; i < 256/32; i++)
+ if ((result->map[i] = al->map[i] & ~bl->map[i]))
+ nonempty = FcTrue;
+ return nonempty;
+}
+
+FcCharSet *
+FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b)
+{
+ return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse);
+}
+
+FcBool
+FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4)
+{
+ FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4);
+ if (!leaf)
+ return FcFalse;
+ return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0;
+}
+
+static FcChar32
+FcCharSetPopCount (FcChar32 c1)
+{
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ return __builtin_popcount (c1);
+#else
+ /* hackmem 169 */
+ FcChar32 c2 = (c1 >> 1) & 033333333333;
+ c2 = c1 - c2 - ((c2 >> 1) & 033333333333);
+ return (((c2 + (c2 >> 3)) & 030707070707) % 077);
+#endif
+}
+
+FcChar32
+FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b)
+{
+ FcCharSetIter ai, bi;
+ FcChar32 count = 0;
+
+ FcCharSetIterStart (a, &ai);
+ FcCharSetIterStart (b, &bi);
+ while (ai.leaf && bi.leaf)
+ {
+ if (ai.ucs4 == bi.ucs4)
+ {
+ FcChar32 *am = ai.leaf->map;
+ FcChar32 *bm = bi.leaf->map;
+ int i = 256/32;
+ while (i--)
+ count += FcCharSetPopCount (*am++ & *bm++);
+ FcCharSetIterNext (a, &ai);
+ }
+ else if (ai.ucs4 < bi.ucs4)
+ {
+ ai.ucs4 = bi.ucs4;
+ FcCharSetIterSet (a, &ai);
+ }
+ if (bi.ucs4 < ai.ucs4)
+ {
+ bi.ucs4 = ai.ucs4;
+ FcCharSetIterSet (b, &bi);
+ }
+ }
+ return count;
+}
+
+FcChar32
+FcCharSetCount (const FcCharSet *a)
+{
+ FcCharSetIter ai;
+ FcChar32 count = 0;
+
+ for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai))
+ {
+ int i = 256/32;
+ FcChar32 *am = ai.leaf->map;
+
+ while (i--)
+ count += FcCharSetPopCount (*am++);
+ }
+ return count;
+}
+
+FcChar32
+FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b)
+{
+ FcCharSetIter ai, bi;
+ FcChar32 count = 0;
+
+ FcCharSetIterStart (a, &ai);
+ FcCharSetIterStart (b, &bi);
+ while (ai.leaf)
+ {
+ if (ai.ucs4 <= bi.ucs4)
+ {
+ FcChar32 *am = ai.leaf->map;
+ int i = 256/32;
+ if (ai.ucs4 == bi.ucs4)
+ {
+ FcChar32 *bm = bi.leaf->map;
+ while (i--)
+ count += FcCharSetPopCount (*am++ & ~*bm++);
+ }
+ else
+ {
+ while (i--)
+ count += FcCharSetPopCount (*am++);
+ }
+ FcCharSetIterNext (a, &ai);
+ }
+ else if (bi.leaf)
+ {
+ bi.ucs4 = ai.ucs4;
+ FcCharSetIterSet (b, &bi);
+ }
+ }
+ return count;
+}
+
+/*
+ * return FcTrue iff a is a subset of b
+ */
+FcBool
+FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
+{
+ int ai, bi;
+ FcChar16 an, bn;
+
+ if (a == b) return FcTrue;
+ bi = 0;
+ ai = 0;
+ while (ai < a->num && bi < b->num)
+ {
+ an = FcCharSetNumbers(a)[ai];
+ bn = FcCharSetNumbers(b)[bi];
+ /*
+ * Check matching pages
+ */
+ if (an == bn)
+ {
+ FcChar32 *am = FcCharSetLeaf(a, ai)->map;
+ FcChar32 *bm = FcCharSetLeaf(b, bi)->map;
+
+ if (am != bm)
+ {
+ int i = 256/32;
+ /*
+ * Does am have any bits not in bm?
+ */
+ while (i--)
+ if (*am++ & ~*bm++)
+ return FcFalse;
+ }
+ ai++;
+ bi++;
+ }
+ /*
+ * Does a have any pages not in b?
+ */
+ else if (an < bn)
+ return FcFalse;
+ else
+ {
+ bi = FcCharSetFindLeafForward (b, bi + 1, an);
+ if (bi < 0)
+ bi = -bi - 1;
+ }
+ }
+ /*
+ * did we look at every page?
+ */
+ return ai >= a->num;
+}
+
+/*
+ * These two functions efficiently walk the entire charmap for
+ * other software (like pango) that want their own copy
+ */
+
+FcChar32
+FcCharSetNextPage (const FcCharSet *a,
+ FcChar32 map[FC_CHARSET_MAP_SIZE],
+ FcChar32 *next)
+{
+ FcCharSetIter ai;
+ FcChar32 page;
+
+ ai.ucs4 = *next;
+ FcCharSetIterSet (a, &ai);
+ if (!ai.leaf)
+ return FC_CHARSET_DONE;
+
+ /*
+ * Save current information
+ */
+ page = ai.ucs4;
+ memcpy (map, ai.leaf->map, sizeof (ai.leaf->map));
+ /*
+ * Step to next page
+ */
+ FcCharSetIterNext (a, &ai);
+ *next = ai.ucs4;
+
+ return page;
+}
+
+FcChar32
+FcCharSetFirstPage (const FcCharSet *a,
+ FcChar32 map[FC_CHARSET_MAP_SIZE],
+ FcChar32 *next)
+{
+ *next = 0;
+ return FcCharSetNextPage (a, map, next);
+}
+
+/*
+ * old coverage API, rather hard to use correctly
+ */
+
+FcChar32
+FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result)
+{
+ FcCharSetIter ai;
+
+ ai.ucs4 = page;
+ FcCharSetIterSet (a, &ai);
+ if (!ai.leaf)
+ {
+ memset (result, '\0', 256 / 8);
+ page = 0;
+ }
+ else
+ {
+ memcpy (result, ai.leaf->map, sizeof (ai.leaf->map));
+ FcCharSetIterNext (a, &ai);
+ page = ai.ucs4;
+ }
+ return page;
+}
+
+/*
+ * ASCII representation of charsets.
+ *
+ * Each leaf is represented as 9 32-bit values, the code of the first character followed
+ * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters,
+ * only 85 different values are used to avoid control characters as well as the other
+ * characters used to encode font names. 85**5 > 2^32 so things work out, but
+ * it's not exactly human readable output. As a special case, 0 is encoded as a space
+ */
+
+static const unsigned char charToValue[256] = {
+ /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff,
+ /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a,
+ /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
+ /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18,
+ /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
+ /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
+ /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
+ /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff,
+ /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
+ /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
+ /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
+ /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff,
+ /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+};
+
+static const FcChar8 valueToChar[0x55] = {
+ /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*',
+ /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4',
+ /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>',
+ /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F',
+ /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+ /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
+ /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a',
+ /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
+ /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+ /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
+ /* 0x50 */ 'z', '{', '|', '}', '~',
+};
+
+static FcChar8 *
+FcCharSetParseValue (FcChar8 *string, FcChar32 *value)
+{
+ int i;
+ FcChar32 v;
+ FcChar32 c;
+
+ if (*string == ' ')
+ {
+ v = 0;
+ string++;
+ }
+ else
+ {
+ v = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (!(c = (FcChar32) (unsigned char) *string++))
+ return 0;
+ c = charToValue[c];
+ if (c == 0xff)
+ return 0;
+ v = v * 85 + c;
+ }
+ }
+ *value = v;
+ return string;
+}
+
+static FcBool
+FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value)
+{
+ int i;
+ if (value == 0)
+ {
+ return FcStrBufChar (buf, ' ');
+ }
+ else
+ {
+ FcChar8 string[6];
+ FcChar8 *s = string + 5;
+ string[5] = '\0';
+ for (i = 0; i < 5; i++)
+ {
+ *--s = valueToChar[value % 85];
+ value /= 85;
+ }
+ for (i = 0; i < 5; i++)
+ if (!FcStrBufChar (buf, *s++))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcCharSet *
+FcNameParseCharSet (FcChar8 *string)
+{
+ FcCharSet *c;
+ FcChar32 ucs4;
+ FcCharLeaf *leaf;
+ FcCharLeaf temp;
+ FcChar32 bits;
+ int i;
+
+ c = FcCharSetCreate ();
+ if (!c)
+ goto bail0;
+ while (*string)
+ {
+ string = FcCharSetParseValue (string, &ucs4);
+ if (!string)
+ goto bail1;
+ bits = 0;
+ for (i = 0; i < 256/32; i++)
+ {
+ string = FcCharSetParseValue (string, &temp.map[i]);
+ if (!string)
+ goto bail1;
+ bits |= temp.map[i];
+ }
+ if (bits)
+ {
+ leaf = malloc (sizeof (FcCharLeaf));
+ if (!leaf)
+ goto bail1;
+ *leaf = temp;
+ if (!FcCharSetInsertLeaf (c, ucs4, leaf))
+ goto bail1;
+ }
+ }
+ return c;
+bail1:
+ if (c->num)
+ {
+ FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *));
+ free (FcCharSetLeaves (c));
+ }
+ if (c->num)
+ {
+ FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16));
+ free (FcCharSetNumbers (c));
+ }
+ FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
+ free (c);
+bail0:
+ return NULL;
+}
+
+FcBool
+FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c)
+{
+ FcCharSetIter ci;
+ int i;
+#ifdef CHECK
+ int len = buf->len;
+#endif
+
+ for (FcCharSetIterStart (c, &ci);
+ ci.leaf;
+ FcCharSetIterNext (c, &ci))
+ {
+ if (!FcCharSetUnparseValue (buf, ci.ucs4))
+ return FcFalse;
+ for (i = 0; i < 256/32; i++)
+ if (!FcCharSetUnparseValue (buf, ci.leaf->map[i]))
+ return FcFalse;
+ }
+#ifdef CHECK
+ {
+ FcCharSet *check;
+ FcChar32 missing;
+ FcCharSetIter ci, checki;
+
+ /* null terminate for parser */
+ FcStrBufChar (buf, '\0');
+ /* step back over null for life after test */
+ buf->len--;
+ check = FcNameParseCharSet (buf->buf + len);
+ FcCharSetIterStart (c, &ci);
+ FcCharSetIterStart (check, &checki);
+ while (ci.leaf || checki.leaf)
+ {
+ if (ci.ucs4 < checki.ucs4)
+ {
+ printf ("Missing leaf node at 0x%x\n", ci.ucs4);
+ FcCharSetIterNext (c, &ci);
+ }
+ else if (checki.ucs4 < ci.ucs4)
+ {
+ printf ("Extra leaf node at 0x%x\n", checki.ucs4);
+ FcCharSetIterNext (check, &checki);
+ }
+ else
+ {
+ int i = 256/32;
+ FcChar32 *cm = ci.leaf->map;
+ FcChar32 *checkm = checki.leaf->map;
+
+ for (i = 0; i < 256; i += 32)
+ {
+ if (*cm != *checkm)
+ printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n",
+ ci.ucs4 + i, *cm, *checkm);
+ cm++;
+ checkm++;
+ }
+ FcCharSetIterNext (c, &ci);
+ FcCharSetIterNext (check, &checki);
+ }
+ }
+ if ((missing = FcCharSetSubtractCount (c, check)))
+ printf ("%d missing in reparsed result\n", missing);
+ if ((missing = FcCharSetSubtractCount (check, c)))
+ printf ("%d extra in reparsed result\n", missing);
+ FcCharSetDestroy (check);
+ }
+#endif
+
+ return FcTrue;
+}
+
+typedef struct _FcCharLeafEnt FcCharLeafEnt;
+
+struct _FcCharLeafEnt {
+ FcCharLeafEnt *next;
+ FcChar32 hash;
+ FcCharLeaf leaf;
+};
+
+#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt))
+#define FC_CHAR_LEAF_HASH_SIZE 257
+
+typedef struct _FcCharSetEnt FcCharSetEnt;
+
+struct _FcCharSetEnt {
+ FcCharSetEnt *next;
+ FcChar32 hash;
+ FcCharSet set;
+};
+
+typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt;
+
+struct _FcCharSetOrigEnt {
+ FcCharSetOrigEnt *next;
+ const FcCharSet *orig;
+ const FcCharSet *frozen;
+};
+
+#define FC_CHAR_SET_HASH_SIZE 67
+
+struct _FcCharSetFreezer {
+ FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE];
+ FcCharLeafEnt **leaf_blocks;
+ int leaf_block_count;
+ FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE];
+ FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE];
+ FcCharLeafEnt *current_block;
+ int leaf_remain;
+ int leaves_seen;
+ int charsets_seen;
+ int leaves_allocated;
+ int charsets_allocated;
+};
+
+static FcCharLeafEnt *
+FcCharLeafEntCreate (FcCharSetFreezer *freezer)
+{
+ if (!freezer->leaf_remain)
+ {
+ FcCharLeafEnt **newBlocks;
+
+ freezer->leaf_block_count++;
+ newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *));
+ if (!newBlocks)
+ return 0;
+ freezer->leaf_blocks = newBlocks;
+ freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
+ if (!freezer->current_block)
+ return 0;
+ FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
+ freezer->leaf_remain = FC_CHAR_LEAF_BLOCK;
+ }
+ freezer->leaf_remain--;
+ freezer->leaves_allocated++;
+ return freezer->current_block++;
+}
+
+static FcChar32
+FcCharLeafHash (FcCharLeaf *leaf)
+{
+ FcChar32 hash = 0;
+ int i;
+
+ for (i = 0; i < 256/32; i++)
+ hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i];
+ return hash;
+}
+
+static FcCharLeaf *
+FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf)
+{
+ FcChar32 hash = FcCharLeafHash (leaf);
+ FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE];
+ FcCharLeafEnt *ent;
+
+ for (ent = *bucket; ent; ent = ent->next)
+ {
+ if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf)))
+ return &ent->leaf;
+ }
+
+ ent = FcCharLeafEntCreate(freezer);
+ if (!ent)
+ return 0;
+ ent->leaf = *leaf;
+ ent->hash = hash;
+ ent->next = *bucket;
+ *bucket = ent;
+ return &ent->leaf;
+}
+
+static FcChar32
+FcCharSetHash (FcCharSet *fcs)
+{
+ FcChar32 hash = 0;
+ int i;
+
+ /* hash in leaves */
+ for (i = 0; i < fcs->num; i++)
+ hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i));
+ /* hash in numbers */
+ for (i = 0; i < fcs->num; i++)
+ hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs);
+ return hash;
+}
+
+static FcBool
+FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen)
+{
+ FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
+ FcCharSetOrigEnt *ent;
+
+ ent = malloc (sizeof (FcCharSetOrigEnt));
+ if (!ent)
+ return FcFalse;
+ ent->orig = orig;
+ ent->frozen = frozen;
+ ent->next = *bucket;
+ *bucket = ent;
+ return FcTrue;
+}
+
+static FcCharSet *
+FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig)
+{
+ FcChar32 hash = FcCharSetHash (fcs);
+ FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE];
+ FcCharSetEnt *ent;
+ int size;
+ int i;
+
+ for (ent = *bucket; ent; ent = ent->next)
+ {
+ if (ent->hash == hash &&
+ ent->set.num == fcs->num &&
+ !memcmp (FcCharSetNumbers(&ent->set),
+ FcCharSetNumbers(fcs),
+ fcs->num * sizeof (FcChar16)))
+ {
+ FcBool ok = FcTrue;
+ int i;
+
+ for (i = 0; i < fcs->num; i++)
+ if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i))
+ ok = FcFalse;
+ if (ok)
+ return &ent->set;
+ }
+ }
+
+ size = (sizeof (FcCharSetEnt) +
+ fcs->num * sizeof (FcCharLeaf *) +
+ fcs->num * sizeof (FcChar16));
+ ent = malloc (size);
+ if (!ent)
+ return 0;
+ FcMemAlloc (FC_MEM_CHARSET, size);
+
+ freezer->charsets_allocated++;
+
+ ent->set.ref = FC_REF_CONSTANT;
+ ent->set.num = fcs->num;
+ if (fcs->num)
+ {
+ intptr_t *ent_leaves;
+
+ ent->set.leaves_offset = sizeof (ent->set);
+ ent->set.numbers_offset = (ent->set.leaves_offset +
+ fcs->num * sizeof (intptr_t));
+
+ ent_leaves = FcCharSetLeaves (&ent->set);
+ for (i = 0; i < fcs->num; i++)
+ ent_leaves[i] = FcPtrToOffset (ent_leaves,
+ FcCharSetLeaf (fcs, i));
+ memcpy (FcCharSetNumbers (&ent->set),
+ FcCharSetNumbers (fcs),
+ fcs->num * sizeof (FcChar16));
+ }
+ else
+ {
+ ent->set.leaves_offset = 0;
+ ent->set.numbers_offset = 0;
+ }
+
+ ent->hash = hash;
+ ent->next = *bucket;
+ *bucket = ent;
+
+ return &ent->set;
+}
+
+static const FcCharSet *
+FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig)
+{
+ FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
+ FcCharSetOrigEnt *ent;
+
+ for (ent = *bucket; ent; ent = ent->next)
+ if (ent->orig == orig)
+ return ent->frozen;
+ return NULL;
+}
+
+const FcCharSet *
+FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
+{
+ FcCharSet *b;
+ const FcCharSet *n = 0;
+ FcCharLeaf *l;
+ int i;
+
+ b = FcCharSetCreate ();
+ if (!b)
+ goto bail0;
+ for (i = 0; i < fcs->num; i++)
+ {
+ l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i));
+ if (!l)
+ goto bail1;
+ if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l))
+ goto bail1;
+ }
+ n = FcCharSetFreezeBase (freezer, b, fcs);
+ if (!FcCharSetFreezeOrig (freezer, fcs, n))
+ {
+ n = NULL;
+ goto bail1;
+ }
+ freezer->charsets_seen++;
+ freezer->leaves_seen += fcs->num;
+bail1:
+ if (b->num)
+ {
+ FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *));
+ free (FcCharSetLeaves (b));
+ }
+ if (b->num)
+ {
+ FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16));
+ free (FcCharSetNumbers (b));
+ }
+ FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
+ free (b);
+bail0:
+ return n;
+}
+
+FcCharSetFreezer *
+FcCharSetFreezerCreate (void)
+{
+ FcCharSetFreezer *freezer;
+
+ freezer = calloc (1, sizeof (FcCharSetFreezer));
+ return freezer;
+}
+
+void
+FcCharSetFreezerDestroy (FcCharSetFreezer *freezer)
+{
+ int i;
+
+ if (FcDebug() & FC_DBG_CACHE)
+ {
+ printf ("\ncharsets %d -> %d leaves %d -> %d\n",
+ freezer->charsets_seen, freezer->charsets_allocated,
+ freezer->leaves_seen, freezer->leaves_allocated);
+ }
+ for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
+ {
+ FcCharSetEnt *ent, *next;
+ for (ent = freezer->set_hash_table[i]; ent; ent = next)
+ {
+ next = ent->next;
+ FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) +
+ ent->set.num * sizeof (FcCharLeaf *) +
+ ent->set.num * sizeof (FcChar16)));
+ free (ent);
+ }
+ }
+
+ for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
+ {
+ FcCharSetOrigEnt *ent, *next;
+ for (ent = freezer->orig_hash_table[i]; ent; ent = next)
+ {
+ next = ent->next;
+ free (ent);
+ }
+ }
+
+ for (i = 0; i < freezer->leaf_block_count; i++)
+ {
+ free (freezer->leaf_blocks[i]);
+ FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
+ }
+
+ free (freezer->leaf_blocks);
+ free (freezer);
+}
+
+FcBool
+FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs)
+{
+ intptr_t *leaves;
+ FcChar16 *numbers;
+ int i;
+
+ if (cs->ref != FC_REF_CONSTANT)
+ {
+ if (!serialize->cs_freezer)
+ {
+ serialize->cs_freezer = FcCharSetFreezerCreate ();
+ if (!serialize->cs_freezer)
+ return FcFalse;
+ }
+ if (FcCharSetFindFrozen (serialize->cs_freezer, cs))
+ return FcTrue;
+
+ cs = FcCharSetFreeze (serialize->cs_freezer, cs);
+ }
+
+ leaves = FcCharSetLeaves (cs);
+ numbers = FcCharSetNumbers (cs);
+
+ if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet)))
+ return FcFalse;
+ if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t)))
+ return FcFalse;
+ if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16)))
+ return FcFalse;
+ for (i = 0; i < cs->num; i++)
+ if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i),
+ sizeof (FcCharLeaf)))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcCharSet *
+FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs)
+{
+ FcCharSet *cs_serialized;
+ intptr_t *leaves, *leaves_serialized;
+ FcChar16 *numbers, *numbers_serialized;
+ FcCharLeaf *leaf, *leaf_serialized;
+ int i;
+
+ if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer)
+ {
+ cs = FcCharSetFindFrozen (serialize->cs_freezer, cs);
+ if (!cs)
+ return NULL;
+ }
+
+ cs_serialized = FcSerializePtr (serialize, cs);
+ if (!cs_serialized)
+ return NULL;
+
+ cs_serialized->ref = FC_REF_CONSTANT;
+ cs_serialized->num = cs->num;
+
+ if (cs->num)
+ {
+ leaves = FcCharSetLeaves (cs);
+ leaves_serialized = FcSerializePtr (serialize, leaves);
+ if (!leaves_serialized)
+ return NULL;
+
+ cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized,
+ leaves_serialized);
+
+ numbers = FcCharSetNumbers (cs);
+ numbers_serialized = FcSerializePtr (serialize, numbers);
+ if (!numbers)
+ return NULL;
+
+ cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized,
+ numbers_serialized);
+
+ for (i = 0; i < cs->num; i++)
+ {
+ leaf = FcCharSetLeaf (cs, i);
+ leaf_serialized = FcSerializePtr (serialize, leaf);
+ if (!leaf_serialized)
+ return NULL;
+ *leaf_serialized = *leaf;
+ leaves_serialized[i] = FcPtrToOffset (leaves_serialized,
+ leaf_serialized);
+ numbers_serialized[i] = numbers[i];
+ }
+ }
+ else
+ {
+ cs_serialized->leaves_offset = 0;
+ cs_serialized->numbers_offset = 0;
+ }
+
+ return cs_serialized;
+}
+#define __fccharset__
+#include "fcaliastail.h"
+#undef __fccharset__
diff --git a/fontconfig/src/fcdbg.c b/fontconfig/src/fcdbg.c
index fd2d55a6b..b8cb079fc 100644
--- a/fontconfig/src/fcdbg.c
+++ b/fontconfig/src/fcdbg.c
@@ -1,398 +1,406 @@
-/*
- * fontconfig/src/fcdbg.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-void
-FcValuePrint (const FcValue v)
-{
- switch (v.type) {
- case FcTypeVoid:
- printf (" <void>");
- break;
- case FcTypeInteger:
- printf (" %d(i)", v.u.i);
- break;
- case FcTypeDouble:
- printf (" %g(f)", v.u.d);
- break;
- case FcTypeString:
- printf (" \"%s\"", v.u.s);
- break;
- case FcTypeBool:
- printf (" %s", v.u.b ? "FcTrue" : "FcFalse");
- break;
- case FcTypeMatrix:
- printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
- break;
- case FcTypeCharSet: /* XXX */
- printf (" ");
- FcCharSetPrint (v.u.c);
- break;
- case FcTypeLangSet:
- printf (" ");
- FcLangSetPrint (v.u.l);
- break;
- case FcTypeFTFace:
- printf (" face");
- break;
- }
-}
-
-void
-FcValueListPrint (FcValueListPtr l)
-{
- for (; l != NULL; l = FcValueListNext(l))
- {
- FcValuePrint (FcValueCanonicalize(&l->value));
- switch (l->binding) {
- case FcValueBindingWeak:
- printf ("(w)");
- break;
- case FcValueBindingStrong:
- printf ("(s)");
- break;
- case FcValueBindingSame:
- printf ("(=)");
- break;
- }
- }
-}
-
-void
-FcLangSetPrint (const FcLangSet *ls)
-{
- FcStrBuf buf;
- FcChar8 init_buf[1024];
-
- FcStrBufInit (&buf, init_buf, sizeof (init_buf));
- if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0'))
- printf ("%s", buf.buf);
- else
- printf ("langset (alloc error)");
- FcStrBufDestroy (&buf);
-}
-
-void
-FcCharSetPrint (const FcCharSet *c)
-{
- int i, j;
- intptr_t *leaves = FcCharSetLeaves (c);
- FcChar16 *numbers = FcCharSetNumbers (c);
-
-#if 0
- printf ("CharSet 0x%x\n", (intptr_t) c);
- printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves);
- printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers);
-
- for (i = 0; i < c->num; i++)
- {
- printf ("Page %d: %04x +%d = 0x%x\n",
- i, numbers[i], leaves[i],
- (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf));
- }
-#endif
-
- printf ("\n");
- for (i = 0; i < c->num; i++)
- {
- intptr_t leaf_offset = leaves[i];
- FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf);
-
- printf ("\t");
- printf ("%04x:", numbers[i]);
- for (j = 0; j < 256/32; j++)
- printf (" %08x", leaf->map[j]);
- printf ("\n");
- }
-}
-
-void
-FcPatternPrint (const FcPattern *p)
-{
- int i;
- FcPatternElt *e;
-
- if (!p)
- {
- printf ("Null pattern\n");
- return;
- }
- printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
- for (i = 0; i < p->num; i++)
- {
- e = &FcPatternElts(p)[i];
- printf ("\t%s:", FcObjectName(e->object));
- FcValueListPrint (FcPatternEltValues(e));
- printf ("\n");
- }
- printf ("\n");
-}
-
-void
-FcOpPrint (FcOp op)
-{
- switch (op) {
- case FcOpInteger: printf ("Integer"); break;
- case FcOpDouble: printf ("Double"); break;
- case FcOpString: printf ("String"); break;
- case FcOpMatrix: printf ("Matrix"); break;
- case FcOpBool: printf ("Bool"); break;
- case FcOpCharSet: printf ("CharSet"); break;
- case FcOpField: printf ("Field"); break;
- case FcOpConst: printf ("Const"); break;
- case FcOpAssign: printf ("Assign"); break;
- case FcOpAssignReplace: printf ("AssignReplace"); break;
- case FcOpPrepend: printf ("Prepend"); break;
- case FcOpPrependFirst: printf ("PrependFirst"); break;
- case FcOpAppend: printf ("Append"); break;
- case FcOpAppendLast: printf ("AppendLast"); break;
- case FcOpQuest: printf ("Quest"); break;
- case FcOpOr: printf ("Or"); break;
- case FcOpAnd: printf ("And"); break;
- case FcOpEqual: printf ("Equal"); break;
- case FcOpNotEqual: printf ("NotEqual"); break;
- case FcOpLess: printf ("Less"); break;
- case FcOpLessEqual: printf ("LessEqual"); break;
- case FcOpMore: printf ("More"); break;
- case FcOpMoreEqual: printf ("MoreEqual"); break;
- case FcOpContains: printf ("Contains"); break;
- case FcOpNotContains: printf ("NotContains"); break;
- case FcOpPlus: printf ("Plus"); break;
- case FcOpMinus: printf ("Minus"); break;
- case FcOpTimes: printf ("Times"); break;
- case FcOpDivide: printf ("Divide"); break;
- case FcOpNot: printf ("Not"); break;
- case FcOpNil: printf ("Nil"); break;
- case FcOpComma: printf ("Comma"); break;
- case FcOpFloor: printf ("Floor"); break;
- case FcOpCeil: printf ("Ceil"); break;
- case FcOpRound: printf ("Round"); break;
- case FcOpTrunc: printf ("Trunc"); break;
- case FcOpListing: printf ("Listing"); break;
- case FcOpInvalid: printf ("Invalid"); break;
- }
-}
-
-void
-FcExprPrint (const FcExpr *expr)
-{
- if (!expr) printf ("none");
- else switch (expr->op) {
- case FcOpInteger: printf ("%d", expr->u.ival); break;
- case FcOpDouble: printf ("%g", expr->u.dval); break;
- case FcOpString: printf ("\"%s\"", expr->u.sval); break;
- case FcOpMatrix: printf ("[%g %g %g %g]",
- expr->u.mval->xx,
- expr->u.mval->xy,
- expr->u.mval->yx,
- expr->u.mval->yy); break;
- case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
- case FcOpCharSet: printf ("charset\n"); break;
- case FcOpNil: printf ("nil\n"); break;
- case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break;
- case FcOpConst: printf ("%s", expr->u.constant); break;
- case FcOpQuest:
- FcExprPrint (expr->u.tree.left);
- printf (" quest ");
- FcExprPrint (expr->u.tree.right->u.tree.left);
- printf (" colon ");
- FcExprPrint (expr->u.tree.right->u.tree.right);
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- case FcOpPrependFirst:
- case FcOpPrepend:
- case FcOpAppend:
- case FcOpAppendLast:
- case FcOpOr:
- case FcOpAnd:
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpListing:
- case FcOpNotContains:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- case FcOpComma:
- FcExprPrint (expr->u.tree.left);
- printf (" ");
- switch (expr->op) {
- case FcOpAssign: printf ("Assign"); break;
- case FcOpAssignReplace: printf ("AssignReplace"); break;
- case FcOpPrependFirst: printf ("PrependFirst"); break;
- case FcOpPrepend: printf ("Prepend"); break;
- case FcOpAppend: printf ("Append"); break;
- case FcOpAppendLast: printf ("AppendLast"); break;
- case FcOpOr: printf ("Or"); break;
- case FcOpAnd: printf ("And"); break;
- case FcOpEqual: printf ("Equal"); break;
- case FcOpNotEqual: printf ("NotEqual"); break;
- case FcOpLess: printf ("Less"); break;
- case FcOpLessEqual: printf ("LessEqual"); break;
- case FcOpMore: printf ("More"); break;
- case FcOpMoreEqual: printf ("MoreEqual"); break;
- case FcOpContains: printf ("Contains"); break;
- case FcOpListing: printf ("Listing"); break;
- case FcOpNotContains: printf ("NotContains"); break;
- case FcOpPlus: printf ("Plus"); break;
- case FcOpMinus: printf ("Minus"); break;
- case FcOpTimes: printf ("Times"); break;
- case FcOpDivide: printf ("Divide"); break;
- case FcOpComma: printf ("Comma"); break;
- default: break;
- }
- printf (" ");
- FcExprPrint (expr->u.tree.right);
- break;
- case FcOpNot:
- printf ("Not ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpFloor:
- printf ("Floor ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpCeil:
- printf ("Ceil ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpRound:
- printf ("Round ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpTrunc:
- printf ("Trunc ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpInvalid: printf ("Invalid"); break;
- }
-}
-
-void
-FcTestPrint (const FcTest *test)
-{
- switch (test->kind) {
- case FcMatchPattern:
- printf ("pattern ");
- break;
- case FcMatchFont:
- printf ("font ");
- break;
- case FcMatchScan:
- printf ("scan ");
- break;
- }
- switch (test->qual) {
- case FcQualAny:
- printf ("any ");
- break;
- case FcQualAll:
- printf ("all ");
- break;
- case FcQualFirst:
- printf ("first ");
- break;
- case FcQualNotFirst:
- printf ("not_first ");
- break;
- }
- printf ("%s ", FcObjectName (test->object));
- FcOpPrint (test->op);
- printf (" ");
- FcExprPrint (test->expr);
- printf ("\n");
-}
-
-void
-FcEditPrint (const FcEdit *edit)
-{
- printf ("Edit %s ", FcObjectName (edit->object));
- FcOpPrint (edit->op);
- printf (" ");
- FcExprPrint (edit->expr);
-}
-
-void
-FcSubstPrint (const FcSubst *subst)
-{
- FcEdit *e;
- FcTest *t;
-
- printf ("match\n");
- for (t = subst->test; t; t = t->next)
- {
- printf ("\t");
- FcTestPrint (t);
- }
- printf ("edit\n");
- for (e = subst->edit; e; e = e->next)
- {
- printf ("\t");
- FcEditPrint (e);
- printf (";\n");
- }
- printf ("\n");
-}
-
-void
-FcFontSetPrint (const FcFontSet *s)
-{
- int i;
-
- printf ("FontSet %d of %d\n", s->nfont, s->sfont);
- for (i = 0; i < s->nfont; i++)
- {
- printf ("Font %d ", i);
- FcPatternPrint (s->fonts[i]);
- }
-}
-
-int FcDebugVal;
-
-void
-FcInitDebug (void)
-{
- char *e;
-
- e = getenv ("FC_DEBUG");
- if (e)
- {
- printf ("FC_DEBUG=%s\n", e);
- FcDebugVal = atoi (e);
- if (FcDebugVal < 0)
- FcDebugVal = 0;
- }
-}
-#define __fcdbg__
-#include "fcaliastail.h"
-#undef __fcdbg__
+/*
+ * fontconfig/src/fcdbg.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+void
+FcValuePrint (const FcValue v)
+{
+ switch (v.type) {
+ case FcTypeVoid:
+ printf (" <void>");
+ break;
+ case FcTypeInteger:
+ printf (" %d(i)", v.u.i);
+ break;
+ case FcTypeDouble:
+ printf (" %g(f)", v.u.d);
+ break;
+ case FcTypeString:
+ printf (" \"%s\"", v.u.s);
+ break;
+ case FcTypeBool:
+ printf (" %s", v.u.b ? "FcTrue" : "FcFalse");
+ break;
+ case FcTypeMatrix:
+ printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
+ break;
+ case FcTypeCharSet: /* XXX */
+ printf (" ");
+ FcCharSetPrint (v.u.c);
+ break;
+ case FcTypeLangSet:
+ printf (" ");
+ FcLangSetPrint (v.u.l);
+ break;
+ case FcTypeFTFace:
+ printf (" face");
+ break;
+ }
+}
+
+void
+FcValueListPrint (FcValueListPtr l)
+{
+ for (; l != NULL; l = FcValueListNext(l))
+ {
+ FcValuePrint (FcValueCanonicalize(&l->value));
+ switch (l->binding) {
+ case FcValueBindingWeak:
+ printf ("(w)");
+ break;
+ case FcValueBindingStrong:
+ printf ("(s)");
+ break;
+ case FcValueBindingSame:
+ printf ("(=)");
+ break;
+ }
+ }
+}
+
+void
+FcLangSetPrint (const FcLangSet *ls)
+{
+ FcStrBuf buf;
+ FcChar8 init_buf[1024];
+
+ FcStrBufInit (&buf, init_buf, sizeof (init_buf));
+ if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0'))
+ printf ("%s", buf.buf);
+ else
+ printf ("langset (alloc error)");
+ FcStrBufDestroy (&buf);
+}
+
+void
+FcCharSetPrint (const FcCharSet *c)
+{
+ int i, j;
+ intptr_t *leaves = FcCharSetLeaves (c);
+ FcChar16 *numbers = FcCharSetNumbers (c);
+
+#if 0
+ printf ("CharSet 0x%x\n", (intptr_t) c);
+ printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves);
+ printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers);
+
+ for (i = 0; i < c->num; i++)
+ {
+ printf ("Page %d: %04x +%d = 0x%x\n",
+ i, numbers[i], leaves[i],
+ (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf));
+ }
+#endif
+
+ printf ("\n");
+ for (i = 0; i < c->num; i++)
+ {
+ intptr_t leaf_offset = leaves[i];
+ FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf);
+
+ printf ("\t");
+ printf ("%04x:", numbers[i]);
+ for (j = 0; j < 256/32; j++)
+ printf (" %08x", leaf->map[j]);
+ printf ("\n");
+ }
+}
+
+void
+FcPatternPrint (const FcPattern *p)
+{
+ int i;
+ FcPatternElt *e;
+
+ if (!p)
+ {
+ printf ("Null pattern\n");
+ return;
+ }
+ printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
+ for (i = 0; i < p->num; i++)
+ {
+ e = &FcPatternElts(p)[i];
+ printf ("\t%s:", FcObjectName(e->object));
+ FcValueListPrint (FcPatternEltValues(e));
+ printf ("\n");
+ }
+ printf ("\n");
+}
+
+void
+FcOpPrint (FcOp op)
+{
+ switch (op) {
+ case FcOpInteger: printf ("Integer"); break;
+ case FcOpDouble: printf ("Double"); break;
+ case FcOpString: printf ("String"); break;
+ case FcOpMatrix: printf ("Matrix"); break;
+ case FcOpRange: printf ("Range"); break;
+ case FcOpBool: printf ("Bool"); break;
+ case FcOpCharSet: printf ("CharSet"); break;
+ case FcOpLangSet: printf ("LangSet"); break;
+ case FcOpField: printf ("Field"); break;
+ case FcOpConst: printf ("Const"); break;
+ case FcOpAssign: printf ("Assign"); break;
+ case FcOpAssignReplace: printf ("AssignReplace"); break;
+ case FcOpPrepend: printf ("Prepend"); break;
+ case FcOpPrependFirst: printf ("PrependFirst"); break;
+ case FcOpAppend: printf ("Append"); break;
+ case FcOpAppendLast: printf ("AppendLast"); break;
+ case FcOpQuest: printf ("Quest"); break;
+ case FcOpOr: printf ("Or"); break;
+ case FcOpAnd: printf ("And"); break;
+ case FcOpEqual: printf ("Equal"); break;
+ case FcOpNotEqual: printf ("NotEqual"); break;
+ case FcOpLess: printf ("Less"); break;
+ case FcOpLessEqual: printf ("LessEqual"); break;
+ case FcOpMore: printf ("More"); break;
+ case FcOpMoreEqual: printf ("MoreEqual"); break;
+ case FcOpContains: printf ("Contains"); break;
+ case FcOpNotContains: printf ("NotContains"); break;
+ case FcOpPlus: printf ("Plus"); break;
+ case FcOpMinus: printf ("Minus"); break;
+ case FcOpTimes: printf ("Times"); break;
+ case FcOpDivide: printf ("Divide"); break;
+ case FcOpNot: printf ("Not"); break;
+ case FcOpNil: printf ("Nil"); break;
+ case FcOpComma: printf ("Comma"); break;
+ case FcOpFloor: printf ("Floor"); break;
+ case FcOpCeil: printf ("Ceil"); break;
+ case FcOpRound: printf ("Round"); break;
+ case FcOpTrunc: printf ("Trunc"); break;
+ case FcOpListing: printf ("Listing"); break;
+ case FcOpInvalid: printf ("Invalid"); break;
+ }
+}
+
+void
+FcExprPrint (const FcExpr *expr)
+{
+ if (!expr) printf ("none");
+ else switch (expr->op) {
+ case FcOpInteger: printf ("%d", expr->u.ival); break;
+ case FcOpDouble: printf ("%g", expr->u.dval); break;
+ case FcOpString: printf ("\"%s\"", expr->u.sval); break;
+ case FcOpMatrix: printf ("[%g %g %g %g]",
+ expr->u.mval->xx,
+ expr->u.mval->xy,
+ expr->u.mval->yx,
+ expr->u.mval->yy); break;
+ case FcOpRange: break;
+ case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
+ case FcOpCharSet: printf ("charset\n"); break;
+ case FcOpLangSet:
+ printf ("langset:");
+ FcLangSetPrint(expr->u.lval);
+ printf ("\n");
+ break;
+ case FcOpNil: printf ("nil\n"); break;
+ case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break;
+ case FcOpConst: printf ("%s", expr->u.constant); break;
+ case FcOpQuest:
+ FcExprPrint (expr->u.tree.left);
+ printf (" quest ");
+ FcExprPrint (expr->u.tree.right->u.tree.left);
+ printf (" colon ");
+ FcExprPrint (expr->u.tree.right->u.tree.right);
+ break;
+ case FcOpAssign:
+ case FcOpAssignReplace:
+ case FcOpPrependFirst:
+ case FcOpPrepend:
+ case FcOpAppend:
+ case FcOpAppendLast:
+ case FcOpOr:
+ case FcOpAnd:
+ case FcOpEqual:
+ case FcOpNotEqual:
+ case FcOpLess:
+ case FcOpLessEqual:
+ case FcOpMore:
+ case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpListing:
+ case FcOpNotContains:
+ case FcOpPlus:
+ case FcOpMinus:
+ case FcOpTimes:
+ case FcOpDivide:
+ case FcOpComma:
+ FcExprPrint (expr->u.tree.left);
+ printf (" ");
+ switch (expr->op) {
+ case FcOpAssign: printf ("Assign"); break;
+ case FcOpAssignReplace: printf ("AssignReplace"); break;
+ case FcOpPrependFirst: printf ("PrependFirst"); break;
+ case FcOpPrepend: printf ("Prepend"); break;
+ case FcOpAppend: printf ("Append"); break;
+ case FcOpAppendLast: printf ("AppendLast"); break;
+ case FcOpOr: printf ("Or"); break;
+ case FcOpAnd: printf ("And"); break;
+ case FcOpEqual: printf ("Equal"); break;
+ case FcOpNotEqual: printf ("NotEqual"); break;
+ case FcOpLess: printf ("Less"); break;
+ case FcOpLessEqual: printf ("LessEqual"); break;
+ case FcOpMore: printf ("More"); break;
+ case FcOpMoreEqual: printf ("MoreEqual"); break;
+ case FcOpContains: printf ("Contains"); break;
+ case FcOpListing: printf ("Listing"); break;
+ case FcOpNotContains: printf ("NotContains"); break;
+ case FcOpPlus: printf ("Plus"); break;
+ case FcOpMinus: printf ("Minus"); break;
+ case FcOpTimes: printf ("Times"); break;
+ case FcOpDivide: printf ("Divide"); break;
+ case FcOpComma: printf ("Comma"); break;
+ default: break;
+ }
+ printf (" ");
+ FcExprPrint (expr->u.tree.right);
+ break;
+ case FcOpNot:
+ printf ("Not ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpFloor:
+ printf ("Floor ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpCeil:
+ printf ("Ceil ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpRound:
+ printf ("Round ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpTrunc:
+ printf ("Trunc ");
+ FcExprPrint (expr->u.tree.left);
+ break;
+ case FcOpInvalid: printf ("Invalid"); break;
+ }
+}
+
+void
+FcTestPrint (const FcTest *test)
+{
+ switch (test->kind) {
+ case FcMatchPattern:
+ printf ("pattern ");
+ break;
+ case FcMatchFont:
+ printf ("font ");
+ break;
+ case FcMatchScan:
+ printf ("scan ");
+ break;
+ }
+ switch (test->qual) {
+ case FcQualAny:
+ printf ("any ");
+ break;
+ case FcQualAll:
+ printf ("all ");
+ break;
+ case FcQualFirst:
+ printf ("first ");
+ break;
+ case FcQualNotFirst:
+ printf ("not_first ");
+ break;
+ }
+ printf ("%s ", FcObjectName (test->object));
+ FcOpPrint (test->op);
+ printf (" ");
+ FcExprPrint (test->expr);
+ printf ("\n");
+}
+
+void
+FcEditPrint (const FcEdit *edit)
+{
+ printf ("Edit %s ", FcObjectName (edit->object));
+ FcOpPrint (edit->op);
+ printf (" ");
+ FcExprPrint (edit->expr);
+}
+
+void
+FcSubstPrint (const FcSubst *subst)
+{
+ FcEdit *e;
+ FcTest *t;
+
+ printf ("match\n");
+ for (t = subst->test; t; t = t->next)
+ {
+ printf ("\t");
+ FcTestPrint (t);
+ }
+ printf ("edit\n");
+ for (e = subst->edit; e; e = e->next)
+ {
+ printf ("\t");
+ FcEditPrint (e);
+ printf (";\n");
+ }
+ printf ("\n");
+}
+
+void
+FcFontSetPrint (const FcFontSet *s)
+{
+ int i;
+
+ printf ("FontSet %d of %d\n", s->nfont, s->sfont);
+ for (i = 0; i < s->nfont; i++)
+ {
+ printf ("Font %d ", i);
+ FcPatternPrint (s->fonts[i]);
+ }
+}
+
+int FcDebugVal;
+
+void
+FcInitDebug (void)
+{
+ char *e;
+
+ e = getenv ("FC_DEBUG");
+ if (e)
+ {
+ printf ("FC_DEBUG=%s\n", e);
+ FcDebugVal = atoi (e);
+ if (FcDebugVal < 0)
+ FcDebugVal = 0;
+ }
+}
+#define __fcdbg__
+#include "fcaliastail.h"
+#undef __fcdbg__
diff --git a/fontconfig/src/fcdefault.c b/fontconfig/src/fcdefault.c
index 091276b70..92ab8f0e6 100644
--- a/fontconfig/src/fcdefault.c
+++ b/fontconfig/src/fcdefault.c
@@ -1,181 +1,181 @@
-/*
- * fontconfig/src/fcdefault.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <locale.h>
-
-static const struct {
- FcObject field;
- FcBool value;
-} FcBoolDefaults[] = {
- { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */
- { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */
- { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */
- { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
- { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */
- { FC_DECORATIVE_OBJECT, FcFalse },
-};
-
-#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0])
-
-FcChar8 *
-FcGetDefaultLang (void)
-{
- static char lang_local [128] = {0};
- char *ctype;
- char *territory;
- char *after;
- int lang_len, territory_len;
-
- if (lang_local [0])
- return (FcChar8 *) lang_local;
-
- ctype = setlocale (LC_CTYPE, NULL);
-
- /*
- * Check if setlocale (LC_ALL, "") has been called
- */
- if (!ctype || !strcmp (ctype, "C"))
- {
- ctype = getenv ("LC_ALL");
- if (!ctype)
- {
- ctype = getenv ("LC_CTYPE");
- if (!ctype)
- ctype = getenv ("LANG");
- }
- }
-
- /* ignore missing or empty ctype */
- if (ctype && *ctype != '\0')
- {
- territory = strchr (ctype, '_');
- if (territory)
- {
- lang_len = territory - ctype;
- territory = territory + 1;
- after = strchr (territory, '.');
- if (!after)
- {
- after = strchr (territory, '@');
- if (!after)
- after = territory + strlen (territory);
- }
- territory_len = after - territory;
- if (lang_len + 1 + territory_len + 1 <= (int) sizeof (lang_local))
- {
- strncpy (lang_local, ctype, lang_len);
- lang_local[lang_len] = '-';
- strncpy (lang_local + lang_len + 1, territory, territory_len);
- lang_local[lang_len + 1 + territory_len] = '\0';
- }
- }
- else
- {
- after = strchr (ctype, '.');
- if (!after)
- {
- after = strchr (ctype, '@');
- if (!after)
- after = ctype + strlen (ctype);
- }
- lang_len = after - ctype;
- if (lang_len + 1 <= (int) sizeof (lang_local))
- {
- strncpy (lang_local, ctype, lang_len);
- lang_local[lang_len] = '\0';
- }
- }
- }
-
- /* set default lang to en */
- if (!lang_local [0])
- strcpy (lang_local, "en");
-
- return (FcChar8 *) lang_local;
-}
-
-void
-FcDefaultSubstitute (FcPattern *pattern)
-{
- FcValue v;
- int i;
-
- if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch )
- FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_MEDIUM);
-
- if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN);
-
- if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL);
-
- for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++)
- if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value);
-
- if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) == FcResultNoMatch)
- {
- double dpi, size, scale;
-
- if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch)
- {
- size = 12.0;
- (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size);
- }
- if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch)
- {
- scale = 1.0;
- (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale);
- }
- size *= scale;
- if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch)
- {
- dpi = 75.0;
- (void) FcPatternObjectDel (pattern, FC_DPI_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi);
- }
- size *= dpi / 72.0;
- FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, size);
- }
-
- if (FcPatternObjectGet (pattern, FC_LANG_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddString (pattern, FC_LANG_OBJECT, FcGetDefaultLang ());
- }
- if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff);
- }
-
- if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL);
- }
-}
-#define __fcdefault__
-#include "fcaliastail.h"
-#undef __fcdefault__
+/*
+ * fontconfig/src/fcdefault.c
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <locale.h>
+
+static const struct {
+ FcObject field;
+ FcBool value;
+} FcBoolDefaults[] = {
+ { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */
+ { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */
+ { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */
+ { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
+ { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */
+ { FC_DECORATIVE_OBJECT, FcFalse },
+};
+
+#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0])
+
+FcChar8 *
+FcGetDefaultLang (void)
+{
+ static char lang_local [128] = {0};
+ char *ctype;
+ char *territory;
+ char *after;
+ int lang_len, territory_len;
+
+ if (lang_local [0])
+ return (FcChar8 *) lang_local;
+
+ ctype = setlocale (LC_CTYPE, NULL);
+
+ /*
+ * Check if setlocale (LC_ALL, "") has been called
+ */
+ if (!ctype || !strcmp (ctype, "C"))
+ {
+ ctype = getenv ("LC_ALL");
+ if (!ctype)
+ {
+ ctype = getenv ("LC_CTYPE");
+ if (!ctype)
+ ctype = getenv ("LANG");
+ }
+ }
+
+ /* ignore missing or empty ctype */
+ if (ctype && *ctype != '\0')
+ {
+ territory = strchr (ctype, '_');
+ if (territory)
+ {
+ lang_len = territory - ctype;
+ territory = territory + 1;
+ after = strchr (territory, '.');
+ if (!after)
+ {
+ after = strchr (territory, '@');
+ if (!after)
+ after = territory + strlen (territory);
+ }
+ territory_len = after - territory;
+ if (lang_len + 1 + territory_len + 1 <= (int) sizeof (lang_local))
+ {
+ strncpy (lang_local, ctype, lang_len);
+ lang_local[lang_len] = '-';
+ strncpy (lang_local + lang_len + 1, territory, territory_len);
+ lang_local[lang_len + 1 + territory_len] = '\0';
+ }
+ }
+ else
+ {
+ after = strchr (ctype, '.');
+ if (!after)
+ {
+ after = strchr (ctype, '@');
+ if (!after)
+ after = ctype + strlen (ctype);
+ }
+ lang_len = after - ctype;
+ if (lang_len + 1 <= (int) sizeof (lang_local))
+ {
+ strncpy (lang_local, ctype, lang_len);
+ lang_local[lang_len] = '\0';
+ }
+ }
+ }
+
+ /* set default lang to en */
+ if (!lang_local [0])
+ strcpy (lang_local, "en");
+
+ return (FcChar8 *) lang_local;
+}
+
+void
+FcDefaultSubstitute (FcPattern *pattern)
+{
+ FcValue v;
+ int i;
+
+ if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch )
+ FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_MEDIUM);
+
+ if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch)
+ FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN);
+
+ if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch)
+ FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL);
+
+ for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++)
+ if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch)
+ FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value);
+
+ if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ double dpi, size, scale;
+
+ if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch)
+ {
+ size = 12.0;
+ (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT);
+ FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size);
+ }
+ if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch)
+ {
+ scale = 1.0;
+ (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT);
+ FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale);
+ }
+ size *= scale;
+ if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch)
+ {
+ dpi = 75.0;
+ (void) FcPatternObjectDel (pattern, FC_DPI_OBJECT);
+ FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi);
+ }
+ size *= dpi / 72.0;
+ FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, size);
+ }
+
+ if (FcPatternObjectGet (pattern, FC_LANG_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAddString (pattern, FC_LANG_OBJECT, FcGetDefaultLang ());
+ }
+ if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff);
+ }
+
+ if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL);
+ }
+}
+#define __fcdefault__
+#include "fcaliastail.h"
+#undef __fcdefault__
diff --git a/fontconfig/src/fcdir.c b/fontconfig/src/fcdir.c
index f927c0b28..56fc94453 100644
--- a/fontconfig/src/fcdir.c
+++ b/fontconfig/src/fcdir.c
@@ -1,328 +1,328 @@
-/*
- * fontconfig/src/fcdir.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <dirent.h>
-
-FcBool
-FcFileIsDir (const FcChar8 *file)
-{
- struct stat statb;
-
- if (FcStat ((const char *) file, &statb) != 0)
- return FcFalse;
- return S_ISDIR(statb.st_mode);
-}
-
-static FcBool
-FcFileScanFontConfig (FcFontSet *set,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config)
-{
- FcPattern *font;
- FcBool ret = FcTrue;
- int id;
- int count = 0;
-
- id = 0;
- do
- {
- font = 0;
- /*
- * Nothing in the cache, scan the file
- */
- if (FcDebug () & FC_DBG_SCAN)
- {
- printf ("\tScanning file %s...", file);
- fflush (stdout);
- }
- font = FcFreeTypeQuery (file, id, blanks, &count);
- if (FcDebug () & FC_DBG_SCAN)
- printf ("done\n");
-
- /*
- * Edit pattern with user-defined rules
- */
- if (font && config && !FcConfigSubstituteWithPat (config, font, NULL, FcMatchScan))
- {
- FcPatternDestroy (font);
- font = NULL;
- ret = FcFalse;
- }
-
- /*
- * Add the font
- */
- if (font && (!config || FcConfigAcceptFont (config, font)))
- {
- if (FcDebug() & FC_DBG_SCANV)
- {
- printf ("Final font pattern:\n");
- FcPatternPrint (font);
- }
- if (!FcFontSetAdd (set, font))
- {
- FcPatternDestroy (font);
- font = NULL;
- ret = FcFalse;
- }
- }
- else if (font)
- FcPatternDestroy (font);
- id++;
- } while (font && ret && id < count);
- return ret;
-}
-
-FcBool
-FcFileScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config)
-{
- if (FcFileIsDir (file))
- return FcStrSetAdd (dirs, file);
- else
- return FcFileScanFontConfig (set, blanks, file, config);
-}
-
-FcBool
-FcFileScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache, /* XXX unused */
- FcBlanks *blanks,
- const FcChar8 *file,
- FcBool force)
-{
- return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ());
-}
-
-/*
- * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage
- */
-static int
-cmpstringp(const void *p1, const void *p2)
-{
- return strcmp(* (char **) p1, * (char **) p2);
-}
-
-FcBool
-FcDirScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force, /* XXX unused */
- FcConfig *config)
-{
- DIR *d;
- struct dirent *e;
- FcStrSet *files;
- FcChar8 *file;
- FcChar8 *base;
- FcBool ret = FcTrue;
- int i;
-
- if (!force)
- return FcFalse;
-
- if (!set && !dirs)
- return FcTrue;
-
- if (!blanks)
- blanks = FcConfigGetBlanks (config);
-
- /* freed below */
- file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
- if (!file) {
- ret = FcFalse;
- goto bail;
- }
-
- strcpy ((char *) file, (char *) dir);
- strcat ((char *) file, "/");
- base = file + strlen ((char *) file);
-
- if (FcDebug () & FC_DBG_SCAN)
- printf ("\tScanning dir %s\n", dir);
-
- d = opendir ((char *) dir);
- if (!d)
- {
- /* Don't complain about missing directories */
- if (errno != ENOENT)
- ret = FcFalse;
- goto bail;
- }
-
- files = FcStrSetCreate ();
- if (!files)
- {
- ret = FcFalse;
- goto bail1;
- }
- while ((e = readdir (d)))
- {
- if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN)
- {
- strcpy ((char *) base, (char *) e->d_name);
- if (!FcStrSetAdd (files, file)) {
- ret = FcFalse;
- goto bail2;
- }
- }
- }
-
- /*
- * Sort files to make things prettier
- */
- qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp);
-
- /*
- * Scan file files to build font patterns
- */
- for (i = 0; i < files->num; i++)
- FcFileScanConfig (set, dirs, blanks, files->strs[i], config);
-
-bail2:
- FcStrSetDestroy (files);
-bail1:
- closedir (d);
-bail:
- return ret;
-}
-
-FcBool
-FcDirScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache, /* XXX unused */
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force /* XXX unused */)
-{
- if (cache || !force)
- return FcFalse;
-
- return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ());
-}
-
-/*
- * Scan the specified directory and construct a cache of its contents
- */
-FcCache *
-FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
-{
- FcStrSet *dirs;
- FcBool ret = FcTrue;
- FcFontSet *set;
- FcCache *cache = NULL;
- struct stat dir_stat;
-
- if (FcDebug () & FC_DBG_FONTSET)
- printf ("cache scan dir %s\n", dir);
-
- if (FcStat ((char *) dir, &dir_stat) < 0)
- {
- if (errno != ENOENT)
- ret = FcFalse;
- goto bail;
- }
-
- set = FcFontSetCreate();
- if (!set)
- {
- ret = FcFalse;
- goto bail;
- }
-
- dirs = FcStrSetCreate ();
- if (!dirs)
- {
- ret = FcFalse;
- goto bail1;
- }
-
- /*
- * Scan the dir
- */
- if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
- {
- ret = FcFalse;
- goto bail2;
- }
-
- /*
- * Build the cache object
- */
- cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
- if (!cache)
- {
- ret = FcFalse;
- goto bail2;
- }
-
- /*
- * Write out the cache file, ignoring any troubles
- */
- FcDirCacheWrite (cache, config);
-
- bail2:
- FcStrSetDestroy (dirs);
- bail1:
- FcFontSetDestroy (set);
- bail:
- return cache;
-}
-
-/*
- * Read (or construct) the cache for a directory
- */
-FcCache *
-FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
-{
- FcCache *cache = NULL;
-
- if (config && !FcConfigAcceptFilename (config, dir))
- return NULL;
-
- /* Try to use existing cache file */
- if (!force)
- cache = FcDirCacheLoad (dir, config, NULL);
-
- /* Not using existing cache file, construct new cache */
- if (!cache)
- cache = FcDirCacheScan (dir, config);
-
- return cache;
-}
-
-FcBool
-FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir)
-{
- return FcFalse; /* XXX deprecated */
-}
-#define __fcdir__
-#include "fcaliastail.h"
-#undef __fcdir__
+/*
+ * fontconfig/src/fcdir.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <dirent.h>
+
+FcBool
+FcFileIsDir (const FcChar8 *file)
+{
+ struct stat statb;
+
+ if (FcStat (file, &statb) != 0)
+ return FcFalse;
+ return S_ISDIR(statb.st_mode);
+}
+
+static FcBool
+FcFileScanFontConfig (FcFontSet *set,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcConfig *config)
+{
+ FcPattern *font;
+ FcBool ret = FcTrue;
+ int id;
+ int count = 0;
+
+ id = 0;
+ do
+ {
+ font = 0;
+ /*
+ * Nothing in the cache, scan the file
+ */
+ if (FcDebug () & FC_DBG_SCAN)
+ {
+ printf ("\tScanning file %s...", file);
+ fflush (stdout);
+ }
+ font = FcFreeTypeQuery (file, id, blanks, &count);
+ if (FcDebug () & FC_DBG_SCAN)
+ printf ("done\n");
+
+ /*
+ * Edit pattern with user-defined rules
+ */
+ if (font && config && !FcConfigSubstituteWithPat (config, font, NULL, FcMatchScan))
+ {
+ FcPatternDestroy (font);
+ font = NULL;
+ ret = FcFalse;
+ }
+
+ /*
+ * Add the font
+ */
+ if (font && (!config || FcConfigAcceptFont (config, font)))
+ {
+ if (FcDebug() & FC_DBG_SCANV)
+ {
+ printf ("Final font pattern:\n");
+ FcPatternPrint (font);
+ }
+ if (!FcFontSetAdd (set, font))
+ {
+ FcPatternDestroy (font);
+ font = NULL;
+ ret = FcFalse;
+ }
+ }
+ else if (font)
+ FcPatternDestroy (font);
+ id++;
+ } while (font && ret && id < count);
+ return ret;
+}
+
+FcBool
+FcFileScanConfig (FcFontSet *set,
+ FcStrSet *dirs,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcConfig *config)
+{
+ if (FcFileIsDir (file))
+ return FcStrSetAdd (dirs, file);
+ else
+ return FcFileScanFontConfig (set, blanks, file, config);
+}
+
+FcBool
+FcFileScan (FcFontSet *set,
+ FcStrSet *dirs,
+ FcFileCache *cache, /* XXX unused */
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcBool force)
+{
+ return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ());
+}
+
+/*
+ * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage
+ */
+static int
+cmpstringp(const void *p1, const void *p2)
+{
+ return strcmp(* (char **) p1, * (char **) p2);
+}
+
+FcBool
+FcDirScanConfig (FcFontSet *set,
+ FcStrSet *dirs,
+ FcBlanks *blanks,
+ const FcChar8 *dir,
+ FcBool force, /* XXX unused */
+ FcConfig *config)
+{
+ DIR *d;
+ struct dirent *e;
+ FcStrSet *files;
+ FcChar8 *file;
+ FcChar8 *base;
+ FcBool ret = FcTrue;
+ int i;
+
+ if (!force)
+ return FcFalse;
+
+ if (!set && !dirs)
+ return FcTrue;
+
+ if (!blanks)
+ blanks = FcConfigGetBlanks (config);
+
+ /* freed below */
+ file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
+ if (!file) {
+ ret = FcFalse;
+ goto bail;
+ }
+
+ strcpy ((char *) file, (char *) dir);
+ strcat ((char *) file, "/");
+ base = file + strlen ((char *) file);
+
+ if (FcDebug () & FC_DBG_SCAN)
+ printf ("\tScanning dir %s\n", dir);
+
+ d = opendir ((char *) dir);
+ if (!d)
+ {
+ /* Don't complain about missing directories */
+ if (errno != ENOENT)
+ ret = FcFalse;
+ goto bail;
+ }
+
+ files = FcStrSetCreate ();
+ if (!files)
+ {
+ ret = FcFalse;
+ goto bail1;
+ }
+ while ((e = readdir (d)))
+ {
+ if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN)
+ {
+ strcpy ((char *) base, (char *) e->d_name);
+ if (!FcStrSetAdd (files, file)) {
+ ret = FcFalse;
+ goto bail2;
+ }
+ }
+ }
+
+ /*
+ * Sort files to make things prettier
+ */
+ qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp);
+
+ /*
+ * Scan file files to build font patterns
+ */
+ for (i = 0; i < files->num; i++)
+ FcFileScanConfig (set, dirs, blanks, files->strs[i], config);
+
+bail2:
+ FcStrSetDestroy (files);
+bail1:
+ closedir (d);
+bail:
+ return ret;
+}
+
+FcBool
+FcDirScan (FcFontSet *set,
+ FcStrSet *dirs,
+ FcFileCache *cache, /* XXX unused */
+ FcBlanks *blanks,
+ const FcChar8 *dir,
+ FcBool force /* XXX unused */)
+{
+ if (cache || !force)
+ return FcFalse;
+
+ return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ());
+}
+
+/*
+ * Scan the specified directory and construct a cache of its contents
+ */
+FcCache *
+FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
+{
+ FcStrSet *dirs;
+ FcBool ret = FcTrue;
+ FcFontSet *set;
+ FcCache *cache = NULL;
+ struct stat dir_stat;
+
+ if (FcDebug () & FC_DBG_FONTSET)
+ printf ("cache scan dir %s\n", dir);
+
+ if (FcStat (dir, &dir_stat) < 0)
+ {
+ if (errno != ENOENT)
+ ret = FcFalse;
+ goto bail;
+ }
+
+ set = FcFontSetCreate();
+ if (!set)
+ {
+ ret = FcFalse;
+ goto bail;
+ }
+
+ dirs = FcStrSetCreate ();
+ if (!dirs)
+ {
+ ret = FcFalse;
+ goto bail1;
+ }
+
+ /*
+ * Scan the dir
+ */
+ if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
+ {
+ ret = FcFalse;
+ goto bail2;
+ }
+
+ /*
+ * Build the cache object
+ */
+ cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
+ if (!cache)
+ {
+ ret = FcFalse;
+ goto bail2;
+ }
+
+ /*
+ * Write out the cache file, ignoring any troubles
+ */
+ FcDirCacheWrite (cache, config);
+
+ bail2:
+ FcStrSetDestroy (dirs);
+ bail1:
+ FcFontSetDestroy (set);
+ bail:
+ return cache;
+}
+
+/*
+ * Read (or construct) the cache for a directory
+ */
+FcCache *
+FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
+{
+ FcCache *cache = NULL;
+
+ if (config && !FcConfigAcceptFilename (config, dir))
+ return NULL;
+
+ /* Try to use existing cache file */
+ if (!force)
+ cache = FcDirCacheLoad (dir, config, NULL);
+
+ /* Not using existing cache file, construct new cache */
+ if (!cache)
+ cache = FcDirCacheScan (dir, config);
+
+ return cache;
+}
+
+FcBool
+FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir)
+{
+ return FcFalse; /* XXX deprecated */
+}
+#define __fcdir__
+#include "fcaliastail.h"
+#undef __fcdir__
diff --git a/fontconfig/src/fcformat.c b/fontconfig/src/fcformat.c
index bf9401740..28433a705 100644
--- a/fontconfig/src/fcformat.c
+++ b/fontconfig/src/fcformat.c
@@ -1,1203 +1,1211 @@
-/*
- * Copyright © 2008,2009 Red Hat, Inc.
- *
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-
-/* The language is documented in doc/fcformat.fncs
- * These are the features implemented:
- *
- * simple %{elt}
- * width %width{elt}
- * index %{elt[idx]}
- * name= %{elt=}
- * :name= %{:elt}
- * default %{elt:-word}
- * count %{#elt}
- * subexpr %{{expr}}
- * filter-out %{-elt1,elt2,elt3{expr}}
- * filter-in %{+elt1,elt2,elt3{expr}}
- * conditional %{?elt1,elt2,!elt3{}{}}
- * enumerate %{[]elt1,elt2{expr}}
- * langset langset enumeration using the same syntax
- * builtin %{=blt}
- * convert %{elt|conv1|conv2|conv3}
- *
- * converters:
- * basename FcStrBasename
- * dirname FcStrDirname
- * downcase FcStrDowncase
- * shescape
- * cescape
- * xmlescape
- * delete delete chars
- * escape escape chars
- * translate translate chars
- *
- * builtins:
- * unparse FcNameUnparse
- * fcmatch fc-match default
- * fclist fc-list default
- * pkgkit PackageKit package tag format
- *
- *
- * Some ideas for future syntax extensions:
- *
- * - verbose builtin that is like FcPatternPrint
- * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}'
- * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation)
- */
-
-
-#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
-#define FCLIST_FORMAT "%{?file{%{file}: }}%{=unparse}"
-#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}"
-
-
-static void
-message (const char *fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- fprintf (stderr, "Fontconfig: Pattern format error: ");
- vfprintf (stderr, fmt, args);
- fprintf (stderr, ".\n");
- va_end (args);
-}
-
-
-typedef struct _FcFormatContext
-{
- const FcChar8 *format_orig;
- const FcChar8 *format;
- int format_len;
- FcChar8 *word;
- FcBool word_allocated;
-} FcFormatContext;
-
-static FcBool
-FcFormatContextInit (FcFormatContext *c,
- const FcChar8 *format,
- FcChar8 *scratch,
- int scratch_len)
-{
- c->format_orig = c->format = format;
- c->format_len = strlen ((const char *) format);
-
- if (c->format_len < scratch_len)
- {
- c->word = scratch;
- c->word_allocated = FcFalse;
- }
- else
- {
- c->word = malloc (c->format_len + 1);
- c->word_allocated = FcTrue;
- }
-
- return c->word != NULL;
-}
-
-static void
-FcFormatContextDone (FcFormatContext *c)
-{
- if (c && c->word_allocated)
- {
- free (c->word);
- }
-}
-
-static FcBool
-consume_char (FcFormatContext *c,
- FcChar8 term)
-{
- if (*c->format != term)
- return FcFalse;
-
- c->format++;
- return FcTrue;
-}
-
-static FcBool
-expect_char (FcFormatContext *c,
- FcChar8 term)
-{
- FcBool res = consume_char (c, term);
- if (!res)
- {
- if (c->format == c->format_orig + c->format_len)
- message ("format ended while expecting '%c'",
- term);
- else
- message ("expected '%c' at %d",
- term, c->format - c->format_orig + 1);
- }
- return res;
-}
-
-static FcBool
-FcCharIsPunct (const FcChar8 c)
-{
- if (c < '0')
- return FcTrue;
- if (c <= '9')
- return FcFalse;
- if (c < 'A')
- return FcTrue;
- if (c <= 'Z')
- return FcFalse;
- if (c < 'a')
- return FcTrue;
- if (c <= 'z')
- return FcFalse;
- if (c <= '~')
- return FcTrue;
- return FcFalse;
-}
-
-static char escaped_char(const char ch)
-{
- switch (ch) {
- case 'a': return '\a';
- case 'b': return '\b';
- case 'f': return '\f';
- case 'n': return '\n';
- case 'r': return '\r';
- case 't': return '\t';
- case 'v': return '\v';
- default: return ch;
- }
-}
-
-static FcBool
-read_word (FcFormatContext *c)
-{
- FcChar8 *p;
-
- p = c->word;
-
- while (*c->format)
- {
- if (*c->format == '\\')
- {
- c->format++;
- if (*c->format)
- *p++ = escaped_char (*c->format++);
- continue;
- }
- else if (FcCharIsPunct (*c->format))
- break;
-
- *p++ = *c->format++;
- }
- *p = '\0';
-
- if (p == c->word)
- {
- message ("expected identifier at %d",
- c->format - c->format_orig + 1);
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-read_chars (FcFormatContext *c,
- FcChar8 term)
-{
- FcChar8 *p;
-
- p = c->word;
-
- while (*c->format && *c->format != '}' && *c->format != term)
- {
- if (*c->format == '\\')
- {
- c->format++;
- if (*c->format)
- *p++ = escaped_char (*c->format++);
- continue;
- }
-
- *p++ = *c->format++;
- }
- *p = '\0';
-
- if (p == c->word)
- {
- message ("expected character data at %d",
- c->format - c->format_orig + 1);
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-FcPatternFormatToBuf (FcPattern *pat,
- const FcChar8 *format,
- FcStrBuf *buf);
-
-static FcBool
-interpret_builtin (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcChar8 *new_str;
- FcBool ret;
-
- if (!expect_char (c, '=') ||
- !read_word (c))
- return FcFalse;
-
- /* try simple builtins first */
- if (0) { }
-#define BUILTIN(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- do { new_str = func (pat); ret = FcTrue; } while (0)
- BUILTIN ("unparse", FcNameUnparse);
- /* BUILTIN ("verbose", FcPatternPrint); XXX */
-#undef BUILTIN
- else
- ret = FcFalse;
-
- if (ret)
- {
- if (new_str)
- {
- FcStrBufString (buf, new_str);
- free (new_str);
- return FcTrue;
- }
- else
- return FcFalse;
- }
-
- /* now try our custom formats */
- if (0) { }
-#define BUILTIN(name, format) \
- else if (0 == strcmp ((const char *) c->word, name))\
- ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf)
- BUILTIN ("fcmatch", FCMATCH_FORMAT);
- BUILTIN ("fclist", FCLIST_FORMAT);
- BUILTIN ("pkgkit", PKGKIT_FORMAT);
-#undef BUILTIN
- else
- ret = FcFalse;
-
- if (!ret)
- message ("unknown builtin \"%s\"",
- c->word);
-
- return ret;
-}
-
-static FcBool
-interpret_expr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf,
- FcChar8 term);
-
-static FcBool
-interpret_subexpr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- return expect_char (c, '{') &&
- interpret_expr (c, pat, buf, '}') &&
- expect_char (c, '}');
-}
-
-static FcBool
-maybe_interpret_subexpr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- return (*c->format == '{') ?
- interpret_subexpr (c, pat, buf) :
- FcTrue;
-}
-
-static FcBool
-skip_subexpr (FcFormatContext *c);
-
-static FcBool
-skip_percent (FcFormatContext *c)
-{
- int width;
-
- if (!expect_char (c, '%'))
- return FcFalse;
-
- /* skip an optional width specifier */
- width = strtol ((const char *) c->format, (char **) &c->format, 10);
-
- if (!expect_char (c, '{'))
- return FcFalse;
-
- while(*c->format && *c->format != '}')
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- c->format++;
- continue;
- case '{':
- if (!skip_subexpr (c))
- return FcFalse;
- continue;
- }
- c->format++;
- }
-
- return expect_char (c, '}');
-}
-
-static FcBool
-skip_expr (FcFormatContext *c)
-{
- while(*c->format && *c->format != '}')
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- c->format++;
- continue;
- case '%':
- if (!skip_percent (c))
- return FcFalse;
- continue;
- }
- c->format++;
- }
-
- return FcTrue;
-}
-
-static FcBool
-skip_subexpr (FcFormatContext *c)
-{
- return expect_char (c, '{') &&
- skip_expr (c) &&
- expect_char (c, '}');
-}
-
-static FcBool
-maybe_skip_subexpr (FcFormatContext *c)
-{
- return (*c->format == '{') ?
- skip_subexpr (c) :
- FcTrue;
-}
-
-static FcBool
-interpret_filter_in (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcObjectSet *os;
- FcPattern *subpat;
-
- if (!expect_char (c, '+'))
- return FcFalse;
-
- os = FcObjectSetCreate ();
- if (!os)
- return FcFalse;
-
- do
- {
- if (!read_word (c) ||
- !FcObjectSetAdd (os, (const char *) c->word))
- {
- FcObjectSetDestroy (os);
- return FcFalse;
- }
- }
- while (consume_char (c, ','));
-
- subpat = FcPatternFilter (pat, os);
- FcObjectSetDestroy (os);
-
- if (!subpat ||
- !interpret_subexpr (c, subpat, buf))
- return FcFalse;
-
- FcPatternDestroy (subpat);
- return FcTrue;
-}
-
-static FcBool
-interpret_filter_out (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcPattern *subpat;
-
- if (!expect_char (c, '-'))
- return FcFalse;
-
- subpat = FcPatternDuplicate (pat);
- if (!subpat)
- return FcFalse;
-
- do
- {
- if (!read_word (c))
- {
- FcPatternDestroy (subpat);
- return FcFalse;
- }
-
- FcPatternDel (subpat, (const char *) c->word);
- }
- while (consume_char (c, ','));
-
- if (!interpret_subexpr (c, subpat, buf))
- return FcFalse;
-
- FcPatternDestroy (subpat);
- return FcTrue;
-}
-
-static FcBool
-interpret_cond (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcBool pass;
-
- if (!expect_char (c, '?'))
- return FcFalse;
-
- pass = FcTrue;
-
- do
- {
- FcBool negate;
- FcValue v;
-
- negate = consume_char (c, '!');
-
- if (!read_word (c))
- return FcFalse;
-
- pass = pass &&
- (negate ^
- (FcResultMatch ==
- FcPatternGet (pat, (const char *) c->word, 0, &v)));
- }
- while (consume_char (c, ','));
-
- if (pass)
- {
- if (!interpret_subexpr (c, pat, buf) ||
- !maybe_skip_subexpr (c))
- return FcFalse;
- }
- else
- {
- if (!skip_subexpr (c) ||
- !maybe_interpret_subexpr (c, pat, buf))
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-interpret_count (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- int count;
- FcPatternElt *e;
- FcChar8 buf_static[64];
-
- if (!expect_char (c, '#'))
- return FcFalse;
-
- if (!read_word (c))
- return FcFalse;
-
- count = 0;
- e = FcPatternObjectFindElt (pat,
- FcObjectFromName ((const char *) c->word));
- if (e)
- {
- FcValueListPtr l;
- count++;
- for (l = FcPatternEltValues(e);
- l->next;
- l = l->next)
- count++;
- }
-
- snprintf ((char *) buf_static, sizeof (buf_static), "%d", count);
- FcStrBufString (buf, buf_static);
-
- return FcTrue;
-}
-
-static FcBool
-interpret_enumerate (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcObjectSet *os;
- FcPattern *subpat;
- const FcChar8 *format_save;
- int idx;
- FcBool ret, done;
- FcStrList *lang_strs;
-
- if (!expect_char (c, '[') ||
- !expect_char (c, ']'))
- return FcFalse;
-
- os = FcObjectSetCreate ();
- if (!os)
- return FcFalse;
-
- ret = FcTrue;
-
- do
- {
- if (!read_word (c) ||
- !FcObjectSetAdd (os, (const char *) c->word))
- {
- FcObjectSetDestroy (os);
- return FcFalse;
- }
- }
- while (consume_char (c, ','));
-
- /* If we have one element and it's of type FcLangSet, we want
- * to enumerate the languages in it. */
- lang_strs = NULL;
- if (os->nobject == 1)
- {
- FcLangSet *langset;
- if (FcResultMatch ==
- FcPatternGetLangSet (pat, os->objects[0], idx, &langset))
- {
- FcStrSet *ss;
- if (!(ss = FcLangSetGetLangs (langset)) ||
- !(lang_strs = FcStrListCreate (ss)))
- goto bail0;
- }
- }
-
- subpat = FcPatternDuplicate (pat);
- if (!subpat)
- goto bail0;
-
- format_save = c->format;
- idx = 0;
- do
- {
- int i;
-
- done = FcTrue;
-
- if (lang_strs)
- {
- FcChar8 *lang;
-
- FcPatternDel (subpat, os->objects[0]);
- if ((lang = FcStrListNext (lang_strs)))
- {
- FcPatternAddString (subpat, os->objects[0], lang);
- done = FcFalse;
- }
- }
- else
- {
- for (i = 0; i < os->nobject; i++)
- {
- FcValue v;
-
- /* XXX this can be optimized by accessing valuelist linked lists
- * directly and remembering where we were. Most (all) value lists
- * in normal uses are pretty short though (language tags are
- * stored as a LangSet, not separate values.). */
- FcPatternDel (subpat, os->objects[i]);
- if (FcResultMatch ==
- FcPatternGet (pat, os->objects[i], idx, &v))
- {
- FcPatternAdd (subpat, os->objects[i], v, FcFalse);
- done = FcFalse;
- }
- }
- }
-
- if (!done)
- {
- c->format = format_save;
- ret = interpret_subexpr (c, subpat, buf);
- if (!ret)
- goto bail;
- }
-
- idx++;
- } while (!done);
-
- if (c->format == format_save)
- skip_subexpr (c);
-
-bail:
- FcPatternDestroy (subpat);
-bail0:
- if (lang_strs)
- FcStrListDone (lang_strs);
- FcObjectSetDestroy (os);
-
- return ret;
-}
-
-static FcBool
-interpret_simple (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcPatternElt *e;
- FcBool add_colon = FcFalse;
- FcBool add_elt_name = FcFalse;
- int idx;
- FcChar8 *else_string;
-
- if (consume_char (c, ':'))
- add_colon = FcTrue;
-
- if (!read_word (c))
- return FcFalse;
-
- idx = -1;
- if (consume_char (c, '['))
- {
- idx = strtol ((const char *) c->format, (char **) &c->format, 10);
- if (idx < 0)
- {
- message ("expected non-negative number at %d",
- c->format-1 - c->format_orig + 1);
- return FcFalse;
- }
- if (!expect_char (c, ']'))
- return FcFalse;
- }
-
- if (consume_char (c, '='))
- add_elt_name = FcTrue;
-
- /* modifiers */
- else_string = NULL;
- if (consume_char (c, ':'))
- {
- FcChar8 *orig;
- /* divert the c->word for now */
- orig = c->word;
- c->word = c->word + strlen ((const char *) c->word) + 1;
- /* for now we just support 'default value' */
- if (!expect_char (c, '-') ||
- !read_chars (c, '\0'))
- {
- c->word = orig;
- return FcFalse;
- }
- else_string = c->word;
- c->word = orig;
- }
-
- e = FcPatternObjectFindElt (pat,
- FcObjectFromName ((const char *) c->word));
- if (e || else_string)
- {
- FcValueListPtr l = NULL;
-
- if (add_colon)
- FcStrBufChar (buf, ':');
- if (add_elt_name)
- {
- FcStrBufString (buf, c->word);
- FcStrBufChar (buf, '=');
- }
-
- if (e)
- l = FcPatternEltValues(e);
-
- if (idx != -1)
- {
- while (l && idx > 0)
- {
- l = FcValueListNext(l);
- idx--;
- }
- if (l && idx == 0)
- {
- if (!FcNameUnparseValue (buf, &l->value, '\0'))
- return FcFalse;
- }
- else goto notfound;
- }
- else if (l)
- {
- FcNameUnparseValueList (buf, l, '\0');
- }
- else
- {
- notfound:
- if (else_string)
- FcStrBufString (buf, else_string);
- }
- }
-
- return FcTrue;
-}
-
-static FcBool
-cescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- while(*str)
- {
- switch (*str)
- {
- case '\\':
- case '"':
- FcStrBufChar (buf, '\\');
- break;
- }
- FcStrBufChar (buf, *str++);
- }
- return FcTrue;
-}
-
-static FcBool
-shescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- FcStrBufChar (buf, '\'');
- while(*str)
- {
- if (*str == '\'')
- FcStrBufString (buf, (const FcChar8 *) "'\\''");
- else
- FcStrBufChar (buf, *str);
- str++;
- }
- FcStrBufChar (buf, '\'');
- return FcTrue;
-}
-
-static FcBool
-xmlescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- while(*str)
- {
- switch (*str)
- {
- case '&': FcStrBufString (buf, (const FcChar8 *) "&amp;"); break;
- case '<': FcStrBufString (buf, (const FcChar8 *) "&lt;"); break;
- case '>': FcStrBufString (buf, (const FcChar8 *) "&gt;"); break;
- default: FcStrBufChar (buf, *str); break;
- }
- str++;
- }
- return FcTrue;
-}
-
-static FcBool
-delete_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ')') ||
- !expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
- if (p)
- {
- FcStrBufData (buf, str, p - str);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-escape_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ')') ||
- !expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
- if (p)
- {
- FcStrBufData (buf, str, p - str);
- FcStrBufChar (buf, c->word[0]);
- FcStrBufChar (buf, *p);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-translate_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- char *from, *to, repeat;
- int from_len, to_len;
-
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ',') ||
- !expect_char (c, ','))
- return FcFalse;
-
- from = (char *) c->word;
- from_len = strlen (from);
- to = from + from_len + 1;
-
- /* hack: we temporarily divert c->word */
- c->word = (FcChar8 *) to;
- if (!read_chars (c, ')'))
- {
- c->word = (FcChar8 *) from;
- return FcFalse;
- }
- c->word = (FcChar8 *) from;
-
- to_len = strlen (to);
- repeat = to[to_len - 1];
-
- if (!expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from);
- if (p)
- {
- int i;
- FcStrBufData (buf, str, p - str);
- i = strchr (from, *p) - from;
- FcStrBufChar (buf, i < to_len ? to[i] : repeat);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-interpret_convert (FcFormatContext *c,
- FcStrBuf *buf,
- int start)
-{
- const FcChar8 *str;
- FcChar8 *new_str;
- FcStrBuf new_buf;
- FcChar8 buf_static[8192];
- FcBool ret;
-
- if (!expect_char (c, '|') ||
- !read_word (c))
- return FcFalse;
-
- /* prepare the buffer */
- FcStrBufChar (buf, '\0');
- if (buf->failed)
- return FcFalse;
- str = buf->buf + start;
- buf->len = start;
-
- /* try simple converters first */
- if (0) { }
-#define CONVERTER(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- do { new_str = func (str); ret = FcTrue; } while (0)
- CONVERTER ("downcase", FcStrDowncase);
- CONVERTER ("basename", FcStrBasename);
- CONVERTER ("dirname", FcStrDirname);
-#undef CONVERTER
- else
- ret = FcFalse;
-
- if (ret)
- {
- if (new_str)
- {
- FcStrBufString (buf, new_str);
- free (new_str);
- return FcTrue;
- }
- else
- return FcFalse;
- }
-
- FcStrBufInit (&new_buf, buf_static, sizeof (buf_static));
-
- /* now try our custom converters */
- if (0) { }
-#define CONVERTER(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- ret = func (c, str, &new_buf)
- CONVERTER ("cescape", cescape);
- CONVERTER ("shescape", shescape);
- CONVERTER ("xmlescape", xmlescape);
- CONVERTER ("delete", delete_chars);
- CONVERTER ("escape", escape_chars);
- CONVERTER ("translate", translate_chars);
-#undef CONVERTER
- else
- ret = FcFalse;
-
- if (ret)
- {
- FcStrBufChar (&new_buf, '\0');
- FcStrBufString (buf, new_buf.buf);
- }
- else
- message ("unknown converter \"%s\"",
- c->word);
-
- FcStrBufDestroy (&new_buf);
-
- return ret;
-}
-
-static FcBool
-maybe_interpret_converts (FcFormatContext *c,
- FcStrBuf *buf,
- int start)
-{
- while (*c->format == '|')
- if (!interpret_convert (c, buf, start))
- return FcFalse;
-
- return FcTrue;
-}
-
-static FcBool
-align_to_width (FcStrBuf *buf,
- int start,
- int width)
-{
- int len;
-
- if (buf->failed)
- return FcFalse;
-
- len = buf->len - start;
- if (len < -width)
- {
- /* left align */
- while (len++ < -width)
- FcStrBufChar (buf, ' ');
- }
- else if (len < width)
- {
- int old_len;
- old_len = len;
- /* right align */
- while (len++ < width)
- FcStrBufChar (buf, ' ');
- if (buf->failed)
- return FcFalse;
- len = old_len;
- memmove (buf->buf + buf->len - len,
- buf->buf + buf->len - width,
- len);
- memset (buf->buf + buf->len - width,
- ' ',
- width - len);
- }
-
- return !buf->failed;
-}
-static FcBool
-interpret_percent (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- int width, start;
- FcBool ret;
-
- if (!expect_char (c, '%'))
- return FcFalse;
-
- if (consume_char (c, '%')) /* "%%" */
- {
- FcStrBufChar (buf, '%');
- return FcTrue;
- }
-
- /* parse an optional width specifier */
- width = strtol ((const char *) c->format, (char **) &c->format, 10);
-
- if (!expect_char (c, '{'))
- return FcFalse;
-
- start = buf->len;
-
- switch (*c->format) {
- case '=': ret = interpret_builtin (c, pat, buf); break;
- case '{': ret = interpret_subexpr (c, pat, buf); break;
- case '+': ret = interpret_filter_in (c, pat, buf); break;
- case '-': ret = interpret_filter_out (c, pat, buf); break;
- case '?': ret = interpret_cond (c, pat, buf); break;
- case '#': ret = interpret_count (c, pat, buf); break;
- case '[': ret = interpret_enumerate (c, pat, buf); break;
- default: ret = interpret_simple (c, pat, buf); break;
- }
-
- return ret &&
- maybe_interpret_converts (c, buf, start) &&
- align_to_width (buf, start, width) &&
- expect_char (c, '}');
-}
-
-static FcBool
-interpret_expr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf,
- FcChar8 term)
-{
- while (*c->format && *c->format != term)
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- FcStrBufChar (buf, escaped_char (*c->format++));
- continue;
- case '%':
- if (!interpret_percent (c, pat, buf))
- return FcFalse;
- continue;
- }
- FcStrBufChar (buf, *c->format++);
- }
- return FcTrue;
-}
-
-static FcBool
-FcPatternFormatToBuf (FcPattern *pat,
- const FcChar8 *format,
- FcStrBuf *buf)
-{
- FcFormatContext c;
- FcChar8 word_static[1024];
- FcBool ret;
-
- if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static)))
- return FcFalse;
-
- ret = interpret_expr (&c, pat, buf, '\0');
-
- FcFormatContextDone (&c);
-
- return ret;
-}
-
-FcChar8 *
-FcPatternFormat (FcPattern *pat,
- const FcChar8 *format)
-{
- FcStrBuf buf;
- FcChar8 buf_static[8192 - 1024];
- FcBool ret;
-
- FcStrBufInit (&buf, buf_static, sizeof (buf_static));
-
- ret = FcPatternFormatToBuf (pat, format, &buf);
-
- if (ret)
- return FcStrBufDone (&buf);
- else
- {
- FcStrBufDestroy (&buf);
- return NULL;
- }
-}
-
-#define __fcformat__
-#include "fcaliastail.h"
-#undef __fcformat__
+/*
+ * Copyright © 2008,2009 Red Hat, Inc.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+
+/* The language is documented in doc/fcformat.fncs
+ * These are the features implemented:
+ *
+ * simple %{elt}
+ * width %width{elt}
+ * index %{elt[idx]}
+ * name= %{elt=}
+ * :name= %{:elt}
+ * default %{elt:-word}
+ * count %{#elt}
+ * subexpr %{{expr}}
+ * filter-out %{-elt1,elt2,elt3{expr}}
+ * filter-in %{+elt1,elt2,elt3{expr}}
+ * conditional %{?elt1,elt2,!elt3{}{}}
+ * enumerate %{[]elt1,elt2{expr}}
+ * langset langset enumeration using the same syntax
+ * builtin %{=blt}
+ * convert %{elt|conv1|conv2|conv3}
+ *
+ * converters:
+ * basename FcStrBasename
+ * dirname FcStrDirname
+ * downcase FcStrDowncase
+ * shescape
+ * cescape
+ * xmlescape
+ * delete delete chars
+ * escape escape chars
+ * translate translate chars
+ *
+ * builtins:
+ * unparse FcNameUnparse
+ * fcmatch fc-match default
+ * fclist fc-list default
+ * pkgkit PackageKit package tag format
+ *
+ *
+ * Some ideas for future syntax extensions:
+ *
+ * - verbose builtin that is like FcPatternPrint
+ * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}'
+ * - allow indexing in +, -, ? filtering?
+ * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation)
+ */
+
+
+#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
+#define FCLIST_FORMAT "%{?file{%{file}: }}%{=unparse}"
+#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}"
+
+
+static void
+message (const char *fmt, ...)
+{
+ va_list args;
+ va_start (args, fmt);
+ fprintf (stderr, "Fontconfig: Pattern format error: ");
+ vfprintf (stderr, fmt, args);
+ fprintf (stderr, ".\n");
+ va_end (args);
+}
+
+
+typedef struct _FcFormatContext
+{
+ const FcChar8 *format_orig;
+ const FcChar8 *format;
+ int format_len;
+ FcChar8 *word;
+ FcBool word_allocated;
+} FcFormatContext;
+
+static FcBool
+FcFormatContextInit (FcFormatContext *c,
+ const FcChar8 *format,
+ FcChar8 *scratch,
+ int scratch_len)
+{
+ c->format_orig = c->format = format;
+ c->format_len = strlen ((const char *) format);
+
+ if (c->format_len < scratch_len)
+ {
+ c->word = scratch;
+ c->word_allocated = FcFalse;
+ }
+ else
+ {
+ c->word = malloc (c->format_len + 1);
+ c->word_allocated = FcTrue;
+ }
+
+ return c->word != NULL;
+}
+
+static void
+FcFormatContextDone (FcFormatContext *c)
+{
+ if (c && c->word_allocated)
+ {
+ free (c->word);
+ }
+}
+
+static FcBool
+consume_char (FcFormatContext *c,
+ FcChar8 term)
+{
+ if (*c->format != term)
+ return FcFalse;
+
+ c->format++;
+ return FcTrue;
+}
+
+static FcBool
+expect_char (FcFormatContext *c,
+ FcChar8 term)
+{
+ FcBool res = consume_char (c, term);
+ if (!res)
+ {
+ if (c->format == c->format_orig + c->format_len)
+ message ("format ended while expecting '%c'",
+ term);
+ else
+ message ("expected '%c' at %d",
+ term, c->format - c->format_orig + 1);
+ }
+ return res;
+}
+
+static FcBool
+FcCharIsPunct (const FcChar8 c)
+{
+ if (c < '0')
+ return FcTrue;
+ if (c <= '9')
+ return FcFalse;
+ if (c < 'A')
+ return FcTrue;
+ if (c <= 'Z')
+ return FcFalse;
+ if (c < 'a')
+ return FcTrue;
+ if (c <= 'z')
+ return FcFalse;
+ if (c <= '~')
+ return FcTrue;
+ return FcFalse;
+}
+
+static char escaped_char(const char ch)
+{
+ switch (ch) {
+ case 'a': return '\a';
+ case 'b': return '\b';
+ case 'f': return '\f';
+ case 'n': return '\n';
+ case 'r': return '\r';
+ case 't': return '\t';
+ case 'v': return '\v';
+ default: return ch;
+ }
+}
+
+static FcBool
+read_word (FcFormatContext *c)
+{
+ FcChar8 *p;
+
+ p = c->word;
+
+ while (*c->format)
+ {
+ if (*c->format == '\\')
+ {
+ c->format++;
+ if (*c->format)
+ *p++ = escaped_char (*c->format++);
+ continue;
+ }
+ else if (FcCharIsPunct (*c->format))
+ break;
+
+ *p++ = *c->format++;
+ }
+ *p = '\0';
+
+ if (p == c->word)
+ {
+ message ("expected identifier at %d",
+ c->format - c->format_orig + 1);
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+read_chars (FcFormatContext *c,
+ FcChar8 term)
+{
+ FcChar8 *p;
+
+ p = c->word;
+
+ while (*c->format && *c->format != '}' && *c->format != term)
+ {
+ if (*c->format == '\\')
+ {
+ c->format++;
+ if (*c->format)
+ *p++ = escaped_char (*c->format++);
+ continue;
+ }
+
+ *p++ = *c->format++;
+ }
+ *p = '\0';
+
+ if (p == c->word)
+ {
+ message ("expected character data at %d",
+ c->format - c->format_orig + 1);
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+FcPatternFormatToBuf (FcPattern *pat,
+ const FcChar8 *format,
+ FcStrBuf *buf);
+
+static FcBool
+interpret_builtin (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcChar8 *new_str;
+ FcBool ret;
+
+ if (!expect_char (c, '=') ||
+ !read_word (c))
+ return FcFalse;
+
+ /* try simple builtins first */
+ if (0) { }
+#define BUILTIN(name, func) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ do { new_str = func (pat); ret = FcTrue; } while (0)
+ BUILTIN ("unparse", FcNameUnparse);
+ /* BUILTIN ("verbose", FcPatternPrint); XXX */
+#undef BUILTIN
+ else
+ ret = FcFalse;
+
+ if (ret)
+ {
+ if (new_str)
+ {
+ FcStrBufString (buf, new_str);
+ free (new_str);
+ return FcTrue;
+ }
+ else
+ return FcFalse;
+ }
+
+ /* now try our custom formats */
+ if (0) { }
+#define BUILTIN(name, format) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf)
+ BUILTIN ("fcmatch", FCMATCH_FORMAT);
+ BUILTIN ("fclist", FCLIST_FORMAT);
+ BUILTIN ("pkgkit", PKGKIT_FORMAT);
+#undef BUILTIN
+ else
+ ret = FcFalse;
+
+ if (!ret)
+ message ("unknown builtin \"%s\"",
+ c->word);
+
+ return ret;
+}
+
+static FcBool
+interpret_expr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf,
+ FcChar8 term);
+
+static FcBool
+interpret_subexpr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ return expect_char (c, '{') &&
+ interpret_expr (c, pat, buf, '}') &&
+ expect_char (c, '}');
+}
+
+static FcBool
+maybe_interpret_subexpr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ return (*c->format == '{') ?
+ interpret_subexpr (c, pat, buf) :
+ FcTrue;
+}
+
+static FcBool
+skip_subexpr (FcFormatContext *c);
+
+static FcBool
+skip_percent (FcFormatContext *c)
+{
+ int width;
+
+ if (!expect_char (c, '%'))
+ return FcFalse;
+
+ /* skip an optional width specifier */
+ width = strtol ((const char *) c->format, (char **) &c->format, 10);
+
+ if (!expect_char (c, '{'))
+ return FcFalse;
+
+ while(*c->format && *c->format != '}')
+ {
+ switch (*c->format)
+ {
+ case '\\':
+ c->format++; /* skip over '\\' */
+ if (*c->format)
+ c->format++;
+ continue;
+ case '{':
+ if (!skip_subexpr (c))
+ return FcFalse;
+ continue;
+ }
+ c->format++;
+ }
+
+ return expect_char (c, '}');
+}
+
+static FcBool
+skip_expr (FcFormatContext *c)
+{
+ while(*c->format && *c->format != '}')
+ {
+ switch (*c->format)
+ {
+ case '\\':
+ c->format++; /* skip over '\\' */
+ if (*c->format)
+ c->format++;
+ continue;
+ case '%':
+ if (!skip_percent (c))
+ return FcFalse;
+ continue;
+ }
+ c->format++;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+skip_subexpr (FcFormatContext *c)
+{
+ return expect_char (c, '{') &&
+ skip_expr (c) &&
+ expect_char (c, '}');
+}
+
+static FcBool
+maybe_skip_subexpr (FcFormatContext *c)
+{
+ return (*c->format == '{') ?
+ skip_subexpr (c) :
+ FcTrue;
+}
+
+static FcBool
+interpret_filter_in (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcObjectSet *os;
+ FcPattern *subpat;
+
+ if (!expect_char (c, '+'))
+ return FcFalse;
+
+ os = FcObjectSetCreate ();
+ if (!os)
+ return FcFalse;
+
+ do
+ {
+ /* XXX binding */
+ if (!read_word (c) ||
+ !FcObjectSetAdd (os, (const char *) c->word))
+ {
+ FcObjectSetDestroy (os);
+ return FcFalse;
+ }
+ }
+ while (consume_char (c, ','));
+
+ subpat = FcPatternFilter (pat, os);
+ FcObjectSetDestroy (os);
+
+ if (!subpat ||
+ !interpret_subexpr (c, subpat, buf))
+ return FcFalse;
+
+ FcPatternDestroy (subpat);
+ return FcTrue;
+}
+
+static FcBool
+interpret_filter_out (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcPattern *subpat;
+
+ if (!expect_char (c, '-'))
+ return FcFalse;
+
+ subpat = FcPatternDuplicate (pat);
+ if (!subpat)
+ return FcFalse;
+
+ do
+ {
+ if (!read_word (c))
+ {
+ FcPatternDestroy (subpat);
+ return FcFalse;
+ }
+
+ FcPatternDel (subpat, (const char *) c->word);
+ }
+ while (consume_char (c, ','));
+
+ if (!interpret_subexpr (c, subpat, buf))
+ return FcFalse;
+
+ FcPatternDestroy (subpat);
+ return FcTrue;
+}
+
+static FcBool
+interpret_cond (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcBool pass;
+
+ if (!expect_char (c, '?'))
+ return FcFalse;
+
+ pass = FcTrue;
+
+ do
+ {
+ FcBool negate;
+ FcValue v;
+
+ negate = consume_char (c, '!');
+
+ if (!read_word (c))
+ return FcFalse;
+
+ pass = pass &&
+ (negate ^
+ (FcResultMatch ==
+ FcPatternGet (pat, (const char *) c->word, 0, &v)));
+ }
+ while (consume_char (c, ','));
+
+ if (pass)
+ {
+ if (!interpret_subexpr (c, pat, buf) ||
+ !maybe_skip_subexpr (c))
+ return FcFalse;
+ }
+ else
+ {
+ if (!skip_subexpr (c) ||
+ !maybe_interpret_subexpr (c, pat, buf))
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+interpret_count (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ int count;
+ FcPatternElt *e;
+ FcChar8 buf_static[64];
+
+ if (!expect_char (c, '#'))
+ return FcFalse;
+
+ if (!read_word (c))
+ return FcFalse;
+
+ count = 0;
+ e = FcPatternObjectFindElt (pat,
+ FcObjectFromName ((const char *) c->word));
+ if (e)
+ {
+ FcValueListPtr l;
+ count++;
+ for (l = FcPatternEltValues(e);
+ l->next;
+ l = l->next)
+ count++;
+ }
+
+ snprintf ((char *) buf_static, sizeof (buf_static), "%d", count);
+ FcStrBufString (buf, buf_static);
+
+ return FcTrue;
+}
+
+static FcBool
+interpret_enumerate (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcObjectSet *os;
+ FcPattern *subpat;
+ const FcChar8 *format_save;
+ int idx;
+ FcBool ret, done;
+ FcStrList *lang_strs;
+
+ if (!expect_char (c, '[') ||
+ !expect_char (c, ']'))
+ return FcFalse;
+
+ os = FcObjectSetCreate ();
+ if (!os)
+ return FcFalse;
+
+ ret = FcTrue;
+
+ do
+ {
+ if (!read_word (c) ||
+ !FcObjectSetAdd (os, (const char *) c->word))
+ {
+ FcObjectSetDestroy (os);
+ return FcFalse;
+ }
+ }
+ while (consume_char (c, ','));
+
+ /* If we have one element and it's of type FcLangSet, we want
+ * to enumerate the languages in it. */
+ lang_strs = NULL;
+ if (os->nobject == 1)
+ {
+ FcLangSet *langset;
+ if (FcResultMatch ==
+ FcPatternGetLangSet (pat, os->objects[0], 0, &langset))
+ {
+ FcStrSet *ss;
+ if (!(ss = FcLangSetGetLangs (langset)) ||
+ !(lang_strs = FcStrListCreate (ss)))
+ goto bail0;
+ }
+ }
+
+ subpat = FcPatternDuplicate (pat);
+ if (!subpat)
+ goto bail0;
+
+ format_save = c->format;
+ idx = 0;
+ do
+ {
+ int i;
+
+ done = FcTrue;
+
+ if (lang_strs)
+ {
+ FcChar8 *lang;
+
+ FcPatternDel (subpat, os->objects[0]);
+ if ((lang = FcStrListNext (lang_strs)))
+ {
+ /* XXX binding? */
+ FcPatternAddString (subpat, os->objects[0], lang);
+ done = FcFalse;
+ }
+ }
+ else
+ {
+ for (i = 0; i < os->nobject; i++)
+ {
+ FcValue v;
+
+ /* XXX this can be optimized by accessing valuelist linked lists
+ * directly and remembering where we were. Most (all) value lists
+ * in normal uses are pretty short though (language tags are
+ * stored as a LangSet, not separate values.). */
+ FcPatternDel (subpat, os->objects[i]);
+ if (FcResultMatch ==
+ FcPatternGet (pat, os->objects[i], idx, &v))
+ {
+ /* XXX binding */
+ FcPatternAdd (subpat, os->objects[i], v, FcFalse);
+ done = FcFalse;
+ }
+ }
+ }
+
+ if (!done)
+ {
+ c->format = format_save;
+ ret = interpret_subexpr (c, subpat, buf);
+ if (!ret)
+ goto bail;
+ }
+
+ idx++;
+ } while (!done);
+
+ if (c->format == format_save)
+ skip_subexpr (c);
+
+bail:
+ FcPatternDestroy (subpat);
+bail0:
+ if (lang_strs)
+ FcStrListDone (lang_strs);
+ FcObjectSetDestroy (os);
+
+ return ret;
+}
+
+static FcBool
+interpret_simple (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcPatternElt *e;
+ FcBool add_colon = FcFalse;
+ FcBool add_elt_name = FcFalse;
+ int idx;
+ FcChar8 *else_string;
+
+ if (consume_char (c, ':'))
+ add_colon = FcTrue;
+
+ if (!read_word (c))
+ return FcFalse;
+
+ idx = -1;
+ if (consume_char (c, '['))
+ {
+ idx = strtol ((const char *) c->format, (char **) &c->format, 10);
+ if (idx < 0)
+ {
+ message ("expected non-negative number at %d",
+ c->format-1 - c->format_orig + 1);
+ return FcFalse;
+ }
+ if (!expect_char (c, ']'))
+ return FcFalse;
+ }
+
+ if (consume_char (c, '='))
+ add_elt_name = FcTrue;
+
+ /* modifiers */
+ else_string = NULL;
+ if (consume_char (c, ':'))
+ {
+ FcChar8 *orig;
+ /* divert the c->word for now */
+ orig = c->word;
+ c->word = c->word + strlen ((const char *) c->word) + 1;
+ /* for now we just support 'default value' */
+ if (!expect_char (c, '-') ||
+ !read_chars (c, '\0'))
+ {
+ c->word = orig;
+ return FcFalse;
+ }
+ else_string = c->word;
+ c->word = orig;
+ }
+
+ e = FcPatternObjectFindElt (pat,
+ FcObjectFromName ((const char *) c->word));
+ if (e || else_string)
+ {
+ FcValueListPtr l = NULL;
+
+ if (add_colon)
+ FcStrBufChar (buf, ':');
+ if (add_elt_name)
+ {
+ FcStrBufString (buf, c->word);
+ FcStrBufChar (buf, '=');
+ }
+
+ if (e)
+ l = FcPatternEltValues(e);
+
+ if (idx != -1)
+ {
+ while (l && idx > 0)
+ {
+ l = FcValueListNext(l);
+ idx--;
+ }
+ if (l && idx == 0)
+ {
+ if (!FcNameUnparseValue (buf, &l->value, '\0'))
+ return FcFalse;
+ }
+ else goto notfound;
+ }
+ else if (l)
+ {
+ FcNameUnparseValueList (buf, l, '\0');
+ }
+ else
+ {
+ notfound:
+ if (else_string)
+ FcStrBufString (buf, else_string);
+ }
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+cescape (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ /* XXX escape \n etc? */
+
+ while(*str)
+ {
+ switch (*str)
+ {
+ case '\\':
+ case '"':
+ FcStrBufChar (buf, '\\');
+ break;
+ }
+ FcStrBufChar (buf, *str++);
+ }
+ return FcTrue;
+}
+
+static FcBool
+shescape (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ FcStrBufChar (buf, '\'');
+ while(*str)
+ {
+ if (*str == '\'')
+ FcStrBufString (buf, (const FcChar8 *) "'\\''");
+ else
+ FcStrBufChar (buf, *str);
+ str++;
+ }
+ FcStrBufChar (buf, '\'');
+ return FcTrue;
+}
+
+static FcBool
+xmlescape (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ /* XXX escape \n etc? */
+
+ while(*str)
+ {
+ switch (*str)
+ {
+ case '&': FcStrBufString (buf, (const FcChar8 *) "&amp;"); break;
+ case '<': FcStrBufString (buf, (const FcChar8 *) "&lt;"); break;
+ case '>': FcStrBufString (buf, (const FcChar8 *) "&gt;"); break;
+ default: FcStrBufChar (buf, *str); break;
+ }
+ str++;
+ }
+ return FcTrue;
+}
+
+static FcBool
+delete_chars (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ /* XXX not UTF-8 aware */
+
+ if (!expect_char (c, '(') ||
+ !read_chars (c, ')') ||
+ !expect_char (c, ')'))
+ return FcFalse;
+
+ while(*str)
+ {
+ FcChar8 *p;
+
+ p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
+ if (p)
+ {
+ FcStrBufData (buf, str, p - str);
+ str = p + 1;
+ }
+ else
+ {
+ FcStrBufString (buf, str);
+ break;
+ }
+
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+escape_chars (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ /* XXX not UTF-8 aware */
+
+ if (!expect_char (c, '(') ||
+ !read_chars (c, ')') ||
+ !expect_char (c, ')'))
+ return FcFalse;
+
+ while(*str)
+ {
+ FcChar8 *p;
+
+ p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
+ if (p)
+ {
+ FcStrBufData (buf, str, p - str);
+ FcStrBufChar (buf, c->word[0]);
+ FcStrBufChar (buf, *p);
+ str = p + 1;
+ }
+ else
+ {
+ FcStrBufString (buf, str);
+ break;
+ }
+
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+translate_chars (FcFormatContext *c,
+ const FcChar8 *str,
+ FcStrBuf *buf)
+{
+ char *from, *to, repeat;
+ int from_len, to_len;
+
+ /* XXX not UTF-8 aware */
+
+ if (!expect_char (c, '(') ||
+ !read_chars (c, ',') ||
+ !expect_char (c, ','))
+ return FcFalse;
+
+ from = (char *) c->word;
+ from_len = strlen (from);
+ to = from + from_len + 1;
+
+ /* hack: we temporarily divert c->word */
+ c->word = (FcChar8 *) to;
+ if (!read_chars (c, ')'))
+ {
+ c->word = (FcChar8 *) from;
+ return FcFalse;
+ }
+ c->word = (FcChar8 *) from;
+
+ to_len = strlen (to);
+ repeat = to[to_len - 1];
+
+ if (!expect_char (c, ')'))
+ return FcFalse;
+
+ while(*str)
+ {
+ FcChar8 *p;
+
+ p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from);
+ if (p)
+ {
+ int i;
+ FcStrBufData (buf, str, p - str);
+ i = strchr (from, *p) - from;
+ FcStrBufChar (buf, i < to_len ? to[i] : repeat);
+ str = p + 1;
+ }
+ else
+ {
+ FcStrBufString (buf, str);
+ break;
+ }
+
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+interpret_convert (FcFormatContext *c,
+ FcStrBuf *buf,
+ int start)
+{
+ const FcChar8 *str;
+ FcChar8 *new_str;
+ FcStrBuf new_buf;
+ FcChar8 buf_static[8192];
+ FcBool ret;
+
+ if (!expect_char (c, '|') ||
+ !read_word (c))
+ return FcFalse;
+
+ /* prepare the buffer */
+ FcStrBufChar (buf, '\0');
+ if (buf->failed)
+ return FcFalse;
+ str = buf->buf + start;
+ buf->len = start;
+
+ /* try simple converters first */
+ if (0) { }
+#define CONVERTER(name, func) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ do { new_str = func (str); ret = FcTrue; } while (0)
+ CONVERTER ("downcase", FcStrDowncase);
+ CONVERTER ("basename", FcStrBasename);
+ CONVERTER ("dirname", FcStrDirname);
+#undef CONVERTER
+ else
+ ret = FcFalse;
+
+ if (ret)
+ {
+ if (new_str)
+ {
+ FcStrBufString (buf, new_str);
+ free (new_str);
+ return FcTrue;
+ }
+ else
+ return FcFalse;
+ }
+
+ FcStrBufInit (&new_buf, buf_static, sizeof (buf_static));
+
+ /* now try our custom converters */
+ if (0) { }
+#define CONVERTER(name, func) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ ret = func (c, str, &new_buf)
+ CONVERTER ("cescape", cescape);
+ CONVERTER ("shescape", shescape);
+ CONVERTER ("xmlescape", xmlescape);
+ CONVERTER ("delete", delete_chars);
+ CONVERTER ("escape", escape_chars);
+ CONVERTER ("translate", translate_chars);
+#undef CONVERTER
+ else
+ ret = FcFalse;
+
+ if (ret)
+ {
+ FcStrBufChar (&new_buf, '\0');
+ FcStrBufString (buf, new_buf.buf);
+ }
+ else
+ message ("unknown converter \"%s\"",
+ c->word);
+
+ FcStrBufDestroy (&new_buf);
+
+ return ret;
+}
+
+static FcBool
+maybe_interpret_converts (FcFormatContext *c,
+ FcStrBuf *buf,
+ int start)
+{
+ while (*c->format == '|')
+ if (!interpret_convert (c, buf, start))
+ return FcFalse;
+
+ return FcTrue;
+}
+
+static FcBool
+align_to_width (FcStrBuf *buf,
+ int start,
+ int width)
+{
+ int len;
+
+ if (buf->failed)
+ return FcFalse;
+
+ len = buf->len - start;
+ if (len < -width)
+ {
+ /* left align */
+ while (len++ < -width)
+ FcStrBufChar (buf, ' ');
+ }
+ else if (len < width)
+ {
+ int old_len;
+ old_len = len;
+ /* right align */
+ while (len++ < width)
+ FcStrBufChar (buf, ' ');
+ if (buf->failed)
+ return FcFalse;
+ len = old_len;
+ memmove (buf->buf + buf->len - len,
+ buf->buf + buf->len - width,
+ len);
+ memset (buf->buf + buf->len - width,
+ ' ',
+ width - len);
+ }
+
+ return !buf->failed;
+}
+static FcBool
+interpret_percent (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ int width, start;
+ FcBool ret;
+
+ if (!expect_char (c, '%'))
+ return FcFalse;
+
+ if (consume_char (c, '%')) /* "%%" */
+ {
+ FcStrBufChar (buf, '%');
+ return FcTrue;
+ }
+
+ /* parse an optional width specifier */
+ width = strtol ((const char *) c->format, (char **) &c->format, 10);
+
+ if (!expect_char (c, '{'))
+ return FcFalse;
+
+ start = buf->len;
+
+ switch (*c->format) {
+ case '=': ret = interpret_builtin (c, pat, buf); break;
+ case '{': ret = interpret_subexpr (c, pat, buf); break;
+ case '+': ret = interpret_filter_in (c, pat, buf); break;
+ case '-': ret = interpret_filter_out (c, pat, buf); break;
+ case '?': ret = interpret_cond (c, pat, buf); break;
+ case '#': ret = interpret_count (c, pat, buf); break;
+ case '[': ret = interpret_enumerate (c, pat, buf); break;
+ default: ret = interpret_simple (c, pat, buf); break;
+ }
+
+ return ret &&
+ maybe_interpret_converts (c, buf, start) &&
+ align_to_width (buf, start, width) &&
+ expect_char (c, '}');
+}
+
+static FcBool
+interpret_expr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf,
+ FcChar8 term)
+{
+ while (*c->format && *c->format != term)
+ {
+ switch (*c->format)
+ {
+ case '\\':
+ c->format++; /* skip over '\\' */
+ if (*c->format)
+ FcStrBufChar (buf, escaped_char (*c->format++));
+ continue;
+ case '%':
+ if (!interpret_percent (c, pat, buf))
+ return FcFalse;
+ continue;
+ }
+ FcStrBufChar (buf, *c->format++);
+ }
+ return FcTrue;
+}
+
+static FcBool
+FcPatternFormatToBuf (FcPattern *pat,
+ const FcChar8 *format,
+ FcStrBuf *buf)
+{
+ FcFormatContext c;
+ FcChar8 word_static[1024];
+ FcBool ret;
+
+ if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static)))
+ return FcFalse;
+
+ ret = interpret_expr (&c, pat, buf, '\0');
+
+ FcFormatContextDone (&c);
+
+ return ret;
+}
+
+FcChar8 *
+FcPatternFormat (FcPattern *pat,
+ const FcChar8 *format)
+{
+ FcStrBuf buf;
+ FcChar8 buf_static[8192 - 1024];
+ FcBool ret;
+
+ FcStrBufInit (&buf, buf_static, sizeof (buf_static));
+
+ ret = FcPatternFormatToBuf (pat, format, &buf);
+
+ if (ret)
+ return FcStrBufDone (&buf);
+ else
+ {
+ FcStrBufDestroy (&buf);
+ return NULL;
+ }
+}
+
+#define __fcformat__
+#include "fcaliastail.h"
+#undef __fcformat__
diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c
index 68596f5a4..78a37b0a9 100644
--- a/fontconfig/src/fcfreetype.c
+++ b/fontconfig/src/fcfreetype.c
@@ -1,3004 +1,3005 @@
-/*
- * fontconfig/src/fcfreetype.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- Copyright © 2002-2003 by Juliusz Chroboczek
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-*/
-
-#include "fcint.h"
-#include "fcftint.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_SFNT_NAMES_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TYPE1_TABLES_H
-#if HAVE_FT_GET_X11_FONT_FORMAT
-#include FT_XFREE86_H
-#endif
-#if HAVE_FT_GET_BDF_PROPERTY
-#include FT_BDF_H
-#include FT_MODULE_H
-#endif
-
-#include "ftglue.h"
-
-#if HAVE_WARNING_CPP_DIRECTIVE
-#if !HAVE_FT_GET_BDF_PROPERTY
-#warning "No FT_Get_BDF_Property: Please install freetype 2.1.4 or later"
-#endif
-
-#if !HAVE_FT_GET_PS_FONT_INFO
-#warning "No FT_Get_PS_Font_Info: Please install freetype 2.1.1 or later"
-#endif
-#endif
-
-/*
- * Keep Han languages separated by eliminating languages
- * that the codePageRange bits says aren't supported
- */
-
-static const struct {
- char bit;
- const FcChar8 lang[6];
-} FcCodePageRange[] = {
- { 17, "ja" },
- { 18, "zh-cn" },
- { 19, "ko" },
- { 20, "zh-tw" },
-};
-
-#define NUM_CODE_PAGE_RANGE (int) (sizeof FcCodePageRange / sizeof FcCodePageRange[0])
-
-FcBool
-FcFreeTypeIsExclusiveLang (const FcChar8 *lang)
-{
- int i;
-
- for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
- {
- if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual)
- return FcTrue;
- }
- return FcFalse;
-}
-
-typedef struct {
- const FT_UShort platform_id;
- const FT_UShort encoding_id;
- const char fromcode[12];
-} FcFtEncoding;
-
-#define TT_ENCODING_DONT_CARE 0xffff
-#define FC_ENCODING_MAC_ROMAN "MACINTOSH"
-
-static const FcFtEncoding fcFtEncoding[] = {
- { TT_PLATFORM_APPLE_UNICODE, TT_ENCODING_DONT_CARE, "UCS-2BE" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, "UTF-16BE" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, "SJIS-WIN" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, "GB2312" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UCS-2BE" },
- { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" },
- { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UCS-2BE" },
- { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" },
-};
-
-#define NUM_FC_FT_ENCODING (int) (sizeof (fcFtEncoding) / sizeof (fcFtEncoding[0]))
-
-typedef struct {
- const FT_UShort platform_id;
- const FT_UShort language_id;
- const char lang[8];
-} FcFtLanguage;
-
-#define TT_LANGUAGE_DONT_CARE 0xffff
-
-static const FcFtLanguage fcFtLanguage[] = {
- { TT_PLATFORM_APPLE_UNICODE, TT_LANGUAGE_DONT_CARE, "" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ENGLISH, "en" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FRENCH, "fr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GERMAN, "de" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ITALIAN, "it" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DUTCH, "nl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWEDISH, "sv" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SPANISH, "es" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DANISH, "da" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PORTUGUESE, "pt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NORWEGIAN, "no" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HEBREW, "he" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAPANESE, "ja" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARABIC, "ar" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FINNISH, "fi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK, "el" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ICELANDIC, "is" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALTESE, "mt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKISH, "tr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CROATIAN, "hr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_TRADITIONAL, "zh-tw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_URDU, "ur" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HINDI, "hi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_THAI, "th" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KOREAN, "ko" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LITHUANIAN, "lt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_POLISH, "pl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HUNGARIAN, "hu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESTONIAN, "et" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LETTISH, "lv" },
-/* { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SAAMISK, ??? */
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FAEROESE, "fo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FARSI, "fa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUSSIAN, "ru" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_SIMPLIFIED, "zh-cn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FLEMISH, "nl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH, "ga" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ALBANIAN, "sq" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ROMANIAN, "ro" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CZECH, "cs" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVAK, "sk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVENIAN, "sl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_YIDDISH, "yi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SERBIAN, "sr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MACEDONIAN, "mk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BULGARIAN, "bg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UKRAINIAN, "uk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BYELORUSSIAN, "be" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UZBEK, "uz" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KAZAKH, "kk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI, "az" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT, "az" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT, "ar" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARMENIAN, "hy" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GEORGIAN, "ka" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MOLDAVIAN, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KIRGHIZ, "ky" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAJIKI, "tg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKMEN, "tk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT,"mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PASHTO, "ps" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KURDISH, "ku" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KASHMIRI, "ks" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINDHI, "sd" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIBETAN, "bo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NEPALI, "ne" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SANSKRIT, "sa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MARATHI, "mr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BENGALI, "bn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ASSAMESE, "as" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUJARATI, "gu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PUNJABI, "pa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ORIYA, "or" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAYALAM, "ml" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KANNADA, "kn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAMIL, "ta" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TELUGU, "te" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINHALESE, "si" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BURMESE, "my" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KHMER, "km" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LAO, "lo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_VIETNAMESE, "vi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INDONESIAN, "id" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAGALOG, "tl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ROMAN_SCRIPT, "ms" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ARABIC_SCRIPT, "ms" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AMHARIC, "am" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIGRINYA, "ti" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALLA, "om" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SOMALI, "so" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWAHILI, "sw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUANDA, "rw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUNDI, "rn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHEWA, "ny" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAGASY, "mg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESPERANTO, "eo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_WELSH, "cy" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BASQUE, "eu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CATALAN, "ca" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LATIN, "la" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_QUECHUA, "qu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUARANI, "gn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AYMARA, "ay" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TATAR, "tt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UIGHUR, "ug" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DZONGKHA, "dz" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAVANESE, "jw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SUNDANESE, "su" },
-
-#if 0 /* these seem to be errors that have been dropped */
-
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC },
-
-#endif
-
- /* The following codes are new as of 2000-03-10 */
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALICIAN, "gl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AFRIKAANS, "af" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BRETON, "br" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INUKTITUT, "iu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC, "gd" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MANX_GAELIC, "gv" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC, "ga" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TONGAN, "to" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK_POLYTONIC, "el" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREELANDIC, "ik" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT,"az" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SAUDI_ARABIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_IRAQ, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_EGYPT, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LIBYA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_ALGERIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_MOROCCO, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_TUNISIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_OMAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_YEMEN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SYRIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_JORDAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LEBANON, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_KUWAIT, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_UAE, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_BAHRAIN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_QATAR, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BULGARIAN_BULGARIA, "bg" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CATALAN_SPAIN, "ca" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_TAIWAN, "zh-tw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_PRC, "zh-cn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_HONG_KONG, "zh-hk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_SINGAPORE, "zh-sg" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_MACAU, "zh-mo" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CZECH_CZECH_REPUBLIC, "cs" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DANISH_DENMARK, "da" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_GERMANY, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_SWITZERLAND, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_AUSTRIA, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LUXEMBOURG, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LIECHTENSTEI, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE, "el" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_STATES, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_KINGDOM, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_AUSTRALIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CANADA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_NEW_ZEALAND, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_IRELAND, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SOUTH_AFRICA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_JAMAICA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CARIBBEAN, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_BELIZE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_TRINIDAD, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_ZIMBABWE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_PHILIPPINES, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_MEXICO, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_GUATEMALA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COSTA_RICA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PANAMA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_VENEZUELA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COLOMBIA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PERU, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ARGENTINA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ECUADOR, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_CHILE, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_URUGUAY, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PARAGUAY, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_BOLIVIA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_EL_SALVADOR, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_HONDURAS, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_NICARAGUA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PUERTO_RICO, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FINNISH_FINLAND, "fi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_FRANCE, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_BELGIUM, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CANADA, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SWITZERLAND, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_LUXEMBOURG, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MONACO, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HEBREW_ISRAEL, "he" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HUNGARIAN_HUNGARY, "hu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ICELANDIC_ICELAND, "is" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_ITALY, "it" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_SWITZERLAND, "it" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_JAPANESE_JAPAN, "ja" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA,"ko" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_JOHAB_KOREA, "ko" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_NETHERLANDS, "nl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_BELGIUM, "nl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL, "no" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK, "nn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_POLISH_POLAND, "pl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_BRAZIL, "pt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_PORTUGAL, "pt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND,"rm" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ROMANIAN_ROMANIA, "ro" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MOLDAVIAN_MOLDAVIA, "mo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_RUSSIA, "ru" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_MOLDAVIA, "ru" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CROATIAN_CROATIA, "hr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_LATIN, "sr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC, "sr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVAK_SLOVAKIA, "sk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ALBANIAN_ALBANIA, "sq" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_SWEDEN, "sv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_FINLAND, "sv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_THAI_THAILAND, "th" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKISH_TURKEY, "tr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_PAKISTAN, "ur" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INDONESIAN_INDONESIA, "id" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UKRAINIAN_UKRAINE, "uk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BELARUSIAN_BELARUS, "be" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVENE_SLOVENIA, "sl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ESTONIAN_ESTONIA, "et" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATVIAN_LATVIA, "lv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LITHUANIAN_LITHUANIA, "lt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA,"lt" },
-
-#ifdef TT_MS_LANGID_MAORI_NEW_ZELAND
- /* this seems to be an error that have been dropped */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MAORI_NEW_ZEALAND, "mi" },
-#endif
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FARSI_IRAN, "fa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VIETNAMESE_VIET_NAM, "vi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARMENIAN_ARMENIA, "hy" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN, "az" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC, "az" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BASQUE_SPAIN, "eu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SORBIAN_GERMANY, "wen" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MACEDONIAN_MACEDONIA, "mk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SUTU_SOUTH_AFRICA, "st" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSONGA_SOUTH_AFRICA, "ts" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSWANA_SOUTH_AFRICA, "tn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VENDA_SOUTH_AFRICA, "ven" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_XHOSA_SOUTH_AFRICA, "xh" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ZULU_SOUTH_AFRICA, "zu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA, "af" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GEORGIAN_GEORGIA, "ka" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS, "fo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HINDI_INDIA, "hi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALTESE_MALTA, "mt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SAAMI_LAPONIA, "se" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM,"gd" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IRISH_GAELIC_IRELAND, "ga" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_MALAYSIA, "ms" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM, "ms" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KAZAK_KAZAKSTAN, "kk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWAHILI_KENYA, "sw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN, "uz" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC, "uz" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TATAR_TATARSTAN, "tt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_INDIA, "bn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_INDIA, "pa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUJARATI_INDIA, "gu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ORIYA_INDIA, "or" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMIL_INDIA, "ta" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TELUGU_INDIA, "te" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANNADA_INDIA, "kn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAYALAM_INDIA, "ml" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ASSAMESE_INDIA, "as" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MARATHI_INDIA, "mr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SANSKRIT_INDIA, "sa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KONKANI_INDIA, "kok" },
-
- /* new as of 2001-01-01 */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_GENERAL, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_GENERAL, "zh" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_GENERAL, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_WEST_INDIES, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_REUNION, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CONGO, "fr" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SENEGAL, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CAMEROON, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_COTE_D_IVOIRE, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MALI, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA,"bs" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_INDIA, "ur" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAJIK_TAJIKISTAN, "tg" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YIDDISH_GERMANY, "yi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN, "ky" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKMEN_TURKMENISTAN, "tk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA, "mn" },
-
- /* the following seems to be inconsistent;
- here is the current "official" way: */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_BHUTAN, "bo" },
- /* and here is what is used by Passport SDK */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_CHINA, "bo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DZONGHKA_BHUTAN, "dz" },
- /* end of inconsistency */
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_WELSH_WALES, "cy" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KHMER_CAMBODIA, "km" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LAO_LAOS, "lo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BURMESE_MYANMAR, "my" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GALICIAN_SPAIN, "gl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MANIPURI_INDIA, "mni" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINDHI_INDIA, "sd" },
- /* the following one is only encountered in Microsoft RTF specification */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_PAKISTAN, "ks" },
- /* the following one is not in the Passport list, looks like an omission */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_INDIA, "ks" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_NEPAL, "ne" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_INDIA, "ne" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRISIAN_NETHERLANDS, "fy" },
-
- /* new as of 2001-03-01 (from Office Xp) */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_HONG_KONG, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_INDIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_MALAYSIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SINGAPORE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SYRIAC_SYRIA, "syr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINHALESE_SRI_LANKA, "si" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHEROKEE_UNITED_STATES, "chr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INUKTITUT_CANADA, "iu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AMHARIC_ETHIOPIA, "am" },
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PASHTO_AFGHANISTAN, "ps" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FILIPINO_PHILIPPINES, "phi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DHIVEHI_MALDIVES, "div" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_OROMO_ETHIOPIA, "om" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ETHIOPIA, "ti" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ERYTHREA, "ti" },
-
- /* New additions from Windows Xp/Passport SDK 2001-11-10. */
-
- /* don't ask what this one means... It is commented out currently. */
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE2 },
-#endif
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_UNITED_STATES, "es" },
- /* The following two IDs blatantly violate MS specs by using a */
- /* sublanguage >,. */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_LATIN_AMERICA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_NORTH_AFRICA, "fr" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MOROCCO, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_HAITI, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_BANGLADESH, "bn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN,"mn" },
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_EDO_NIGERIA },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FULFULDE_NIGERIA },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IBIBIO_NIGERIA },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAUSA_NIGERIA, "ha" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YORUBA_NIGERIA, "yo" },
- /* language codes from, to, are (still) unknown. */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IGBO_NIGERIA, "ibo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANURI_NIGERIA, "kau" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUARANI_PARAGUAY, "gn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAWAIIAN_UNITED_STATES, "haw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATIN, "la" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SOMALI_SOMALIA, "so" },
-#if 0
- /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
- /* not written (but OTOH the peculiar writing system is worth */
- /* studying). */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YI_CHINA },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES,"pap" },
-};
-
-#define NUM_FC_FT_LANGUAGE (int) (sizeof (fcFtLanguage) / sizeof (fcFtLanguage[0]))
-
-typedef struct {
- FT_UShort language_id;
- char fromcode[12];
-} FcMacRomanFake;
-
-static const FcMacRomanFake fcMacRomanFake[] = {
- { TT_MS_LANGID_JAPANESE_JAPAN, "SJIS-WIN" },
- { TT_MS_LANGID_ENGLISH_UNITED_STATES, "ASCII" },
-};
-
-static FcChar8 *
-FcFontCapabilities(FT_Face face);
-
-#define NUM_FC_MAC_ROMAN_FAKE (int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0]))
-
-#if USE_ICONV
-#include <iconv.h>
-#endif
-
-/*
- * A shift-JIS will have many high bits turned on
- */
-static FcBool
-FcLooksLikeSJIS (FcChar8 *string, int len)
-{
- int nhigh = 0, nlow = 0;
-
- while (len-- > 0)
- {
- if (*string++ & 0x80) nhigh++;
- else nlow++;
- }
- /*
- * Heuristic -- if more than 1/3 of the bytes have the high-bit set,
- * this is likely to be SJIS and not ROMAN
- */
- if (nhigh * 2 > nlow)
- return FcTrue;
- return FcFalse;
-}
-
-static FcChar8 *
-FcSfntNameTranscode (FT_SfntName *sname)
-{
- int i;
- const char *fromcode;
-#if USE_ICONV
- iconv_t cd;
-#endif
- FcChar8 *utf8;
-
- for (i = 0; i < NUM_FC_FT_ENCODING; i++)
- if (fcFtEncoding[i].platform_id == sname->platform_id &&
- (fcFtEncoding[i].encoding_id == TT_ENCODING_DONT_CARE ||
- fcFtEncoding[i].encoding_id == sname->encoding_id))
- break;
- if (i == NUM_FC_FT_ENCODING)
- return 0;
- fromcode = fcFtEncoding[i].fromcode;
-
- /*
- * Many names encoded for TT_PLATFORM_MACINTOSH are broken
- * in various ways. Kludge around them.
- */
- if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
- {
- if (sname->language_id == TT_MAC_LANGID_ENGLISH &&
- FcLooksLikeSJIS (sname->string, sname->string_len))
- {
- fromcode = "SJIS";
- }
- else if (sname->language_id >= 0x100)
- {
- /*
- * "real" Mac language IDs are all less than 150.
- * Names using one of the MS language IDs are assumed
- * to use an associated encoding (Yes, this is a kludge)
- */
- int f;
-
- fromcode = NULL;
- for (f = 0; f < NUM_FC_MAC_ROMAN_FAKE; f++)
- if (fcMacRomanFake[f].language_id == sname->language_id)
- {
- fromcode = fcMacRomanFake[f].fromcode;
- break;
- }
- if (!fromcode)
- return 0;
- }
- }
- if (!strcmp (fromcode, "UCS-2BE") || !strcmp (fromcode, "UTF-16BE"))
- {
- FcChar8 *src = sname->string;
- int src_len = sname->string_len;
- int len;
- int wchar;
- int ilen, olen;
- FcChar8 *u8;
- FcChar32 ucs4;
-
- /*
- * Convert Utf16 to Utf8
- */
-
- if (!FcUtf16Len (src, FcEndianBig, src_len, &len, &wchar))
- return 0;
-
- /*
- * Allocate plenty of space. Freed below
- */
- utf8 = malloc (len * FC_UTF8_MAX_LEN + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
-
- while ((ilen = FcUtf16ToUcs4 (src, FcEndianBig, &ucs4, src_len)) > 0)
- {
- src_len -= ilen;
- src += ilen;
- olen = FcUcs4ToUtf8 (ucs4, u8);
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
- if (!strcmp (fromcode, "ASCII") || !strcmp (fromcode, "ISO-8859-1"))
- {
- FcChar8 *src = sname->string;
- int src_len = sname->string_len;
- int olen;
- FcChar8 *u8;
- FcChar32 ucs4;
-
- /*
- * Convert Latin1 to Utf8. Freed below
- */
- utf8 = malloc (src_len * 2 + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
- while (src_len > 0)
- {
- ucs4 = *src++;
- src_len--;
- olen = FcUcs4ToUtf8 (ucs4, u8);
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
- if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
- {
- FcChar8 *u8;
- const FcCharMap *map = FcFreeTypeGetPrivateMap (ft_encoding_apple_roman);
- FcChar8 *src = (FcChar8 *) sname->string;
- int src_len = sname->string_len;
-
- /*
- * Convert AppleRoman to Utf8
- */
- if (!map)
- return 0;
-
- utf8 = malloc (sname->string_len * 3 + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
- while (src_len > 0)
- {
- FcChar32 ucs4 = FcFreeTypePrivateToUcs4 (*src++, map);
- int olen = FcUcs4ToUtf8 (ucs4, u8);
- src_len--;
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
-#if USE_ICONV
- cd = iconv_open ("UTF-8", fromcode);
- if (cd && cd != (iconv_t) (-1))
- {
- size_t in_bytes_left = sname->string_len;
- size_t out_bytes_left = sname->string_len * FC_UTF8_MAX_LEN;
- char *inbuf, *outbuf;
-
- utf8 = malloc (out_bytes_left + 1);
- if (!utf8)
- {
- iconv_close (cd);
- return 0;
- }
-
- outbuf = (char *) utf8;
- inbuf = (char *) sname->string;
-
- while (in_bytes_left)
- {
- size_t did = iconv (cd,
- &inbuf, &in_bytes_left,
- &outbuf, &out_bytes_left);
- if (did == (size_t) (-1))
- {
- iconv_close (cd);
- free (utf8);
- return 0;
- }
- }
- iconv_close (cd);
- *outbuf = '\0';
- goto done;
- }
-#endif
- return 0;
-done:
- if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0)
- {
- free (utf8);
- return 0;
- }
- return utf8;
-}
-
-static const FcChar8 *
-FcSfntNameLanguage (FT_SfntName *sname)
-{
- int i;
- FT_UShort platform_id = sname->platform_id;
- FT_UShort language_id = sname->language_id;
-
- /*
- * Many names encoded for TT_PLATFORM_MACINTOSH are broken
- * in various ways. Kludge around them.
- */
- if (platform_id == TT_PLATFORM_MACINTOSH &&
- sname->encoding_id == TT_MAC_ID_ROMAN &&
- FcLooksLikeSJIS (sname->string, sname->string_len))
- {
- language_id = TT_MAC_LANGID_JAPANESE;
- }
-
- for (i = 0; i < NUM_FC_FT_LANGUAGE; i++)
- if (fcFtLanguage[i].platform_id == platform_id &&
- (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE ||
- fcFtLanguage[i].language_id == language_id))
- {
- if (fcFtLanguage[i].lang[0] == '\0')
- return NULL;
- else
- return (FcChar8 *) fcFtLanguage[i].lang;
- }
- return 0;
-}
-
-/* Order is significant. For example, some B&H fonts are hinted by
- URW++, and both strings appear in the notice. */
-
-static const char notice_foundry_data[] =
- "Bigelow\0b&h\0"
- "Adobe\0adobe\0"
- "Bitstream\0bitstream\0"
- "Monotype\0monotype\0"
- "Linotype\0linotype\0"
- "LINOTYPE-HELL\0linotype\0"
- "IBM\0ibm\0"
- "URW\0urw\0"
- "International Typeface Corporation\0itc\0"
- "Tiro Typeworks\0tiro\0"
- "XFree86\0xfree86\0"
- "Microsoft\0microsoft\0"
- "Omega\0omega\0"
- "Font21\0hwan\0"
- "HanYang System\0hanyang";
-
-struct _notice_foundry {
- /* these are the offsets into the
- * notice_foundry_data array.
- */
- unsigned char notice_offset;
- unsigned char foundry_offset;
-};
-
-static const struct _notice_foundry FcNoticeFoundries[] = {
- { 0, 8 },
- { 12, 18 },
- { 24, 34 },
- { 44, 53 },
- { 62, 71 },
- { 80, 94 },
- { 103, 107 },
- { 111, 115 },
- { 119, 154 },
- { 158, 173 },
- { 178, 186 },
- { 194, 204 },
- { 214, 220 },
- { 226, 233 },
- { 238, 253 }
-};
-
-#define NUM_NOTICE_FOUNDRIES (int) (sizeof (FcNoticeFoundries) / sizeof (FcNoticeFoundries[0]))
-
-static const FcChar8 *
-FcNoticeFoundry(const FT_String *notice)
-{
- int i;
-
- if (notice)
- for(i = 0; i < NUM_NOTICE_FOUNDRIES; i++)
- {
- const struct _notice_foundry *nf = &FcNoticeFoundries[i];
- const char *n = notice_foundry_data + nf->notice_offset;
- const char *f = notice_foundry_data + nf->foundry_offset;
-
- if (strstr ((const char *) notice, n))
- return (const FcChar8 *) f;
- }
- return 0;
-}
-
-static FcBool
-FcVendorMatch(const FT_Char vendor[4], const FT_Char *vendor_string)
-{
- /* vendor is not necessarily NUL-terminated. */
- int i, len;
-
- len = strlen((char *) vendor_string);
- if (memcmp(vendor, vendor_string, len) != 0)
- return FcFalse;
- for (i = len; i < 4; i++)
- if (vendor[i] != ' ' && vendor[i] != '\0')
- return FcFalse;
- return FcTrue;
-}
-
-/* This table is partly taken from ttmkfdir by Joerg Pommnitz. */
-
-/* It should not contain useless entries (such as UNKN) nor duplicate
- entries for padding both with spaces and NULs. */
-
-static const struct {
- const FT_Char vendor[5];
- const FcChar8 foundry[13];
-} FcVendorFoundries[] = {
- { "ADBE", "adobe"},
- { "AGFA", "agfa"},
- { "ALTS", "altsys"},
- { "APPL", "apple"},
- { "ARPH", "arphic"},
- { "ATEC", "alltype"},
- { "B&H", "b&h"},
- { "BITS", "bitstream"},
- { "CANO", "cannon"},
- { "DYNA", "dynalab"},
- { "EPSN", "epson"},
- { "FJ", "fujitsu"},
- { "IBM", "ibm"},
- { "ITC", "itc"},
- { "IMPR", "impress"},
- { "LARA", "larabiefonts"},
- { "LEAF", "interleaf"},
- { "LETR", "letraset"},
- { "LINO", "linotype"},
- { "MACR", "macromedia"},
- { "MONO", "monotype"},
- { "MS", "microsoft"},
- { "MT", "monotype"},
- { "NEC", "nec"},
- { "PARA", "paratype"},
- { "QMSI", "qms"},
- { "RICO", "ricoh"},
- { "URW", "urw"},
- { "Y&Y", "y&y"}
-};
-
-#define NUM_VENDOR_FOUNDRIES (int) (sizeof (FcVendorFoundries) / sizeof (FcVendorFoundries[0]))
-
-static const FcChar8 *
-FcVendorFoundry(const FT_Char vendor[4])
-{
- int i;
-
- if (vendor)
- for(i = 0; i < NUM_VENDOR_FOUNDRIES; i++)
- if (FcVendorMatch (vendor, FcVendorFoundries[i].vendor))
- return FcVendorFoundries[i].foundry;
- return 0;
-}
-
-typedef struct _FcStringConst {
- const FcChar8 *name;
- int value;
-} FcStringConst;
-
-static int
-FcStringIsConst (const FcChar8 *string,
- const FcStringConst *c,
- int nc)
-{
- int i;
-
- for (i = 0; i < nc; i++)
- if (FcStrCmpIgnoreBlanksAndCase (string, c[i].name) == 0)
- return c[i].value;
- return -1;
-}
-
-static int
-FcStringContainsConst (const FcChar8 *string,
- const FcStringConst *c,
- int nc)
-{
- int i;
-
- for (i = 0; i < nc; i++)
- {
- if (c[i].name[0] == '<')
- {
- if (FcStrContainsWord (string, c[i].name + 1))
- return c[i].value;
- }
- else
- {
- if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name))
- return c[i].value;
- }
- }
- return -1;
-}
-
-typedef FcChar8 *FC8;
-
-static const FcStringConst weightConsts[] = {
- { (FC8) "thin", FC_WEIGHT_THIN },
- { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT },
- { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT },
- { (FC8) "light", FC_WEIGHT_LIGHT },
- { (FC8) "book", FC_WEIGHT_BOOK },
- { (FC8) "regular", FC_WEIGHT_REGULAR },
- { (FC8) "normal", FC_WEIGHT_NORMAL },
- { (FC8) "medium", FC_WEIGHT_MEDIUM },
- { (FC8) "demibold", FC_WEIGHT_DEMIBOLD },
- { (FC8) "demi", FC_WEIGHT_DEMIBOLD },
- { (FC8) "semibold", FC_WEIGHT_SEMIBOLD },
- { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD },
- { (FC8) "superbold", FC_WEIGHT_EXTRABOLD },
- { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD },
- { (FC8) "bold", FC_WEIGHT_BOLD },
- { (FC8) "ultrablack", FC_WEIGHT_ULTRABLACK },
- { (FC8) "superblack", FC_WEIGHT_EXTRABLACK },
- { (FC8) "extrablack", FC_WEIGHT_EXTRABLACK },
- { (FC8) "<ultra", FC_WEIGHT_ULTRABOLD }, /* only if a word */
- { (FC8) "black", FC_WEIGHT_BLACK },
- { (FC8) "heavy", FC_WEIGHT_HEAVY },
-};
-
-#define NUM_WEIGHT_CONSTS (int) (sizeof (weightConsts) / sizeof (weightConsts[0]))
-
-#define FcIsWeight(s) FcStringIsConst(s,weightConsts,NUM_WEIGHT_CONSTS)
-#define FcContainsWeight(s) FcStringContainsConst (s,weightConsts,NUM_WEIGHT_CONSTS)
-
-static const FcStringConst widthConsts[] = {
- { (FC8) "ultracondensed", FC_WIDTH_ULTRACONDENSED },
- { (FC8) "extracondensed", FC_WIDTH_EXTRACONDENSED },
- { (FC8) "semicondensed", FC_WIDTH_SEMICONDENSED },
- { (FC8) "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */
- { (FC8) "normal", FC_WIDTH_NORMAL },
- { (FC8) "semiexpanded", FC_WIDTH_SEMIEXPANDED },
- { (FC8) "extraexpanded", FC_WIDTH_EXTRAEXPANDED },
- { (FC8) "ultraexpanded", FC_WIDTH_ULTRAEXPANDED },
- { (FC8) "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */
- { (FC8) "extended", FC_WIDTH_EXPANDED },
-};
-
-#define NUM_WIDTH_CONSTS (int) (sizeof (widthConsts) / sizeof (widthConsts[0]))
-
-#define FcIsWidth(s) FcStringIsConst(s,widthConsts,NUM_WIDTH_CONSTS)
-#define FcContainsWidth(s) FcStringContainsConst (s,widthConsts,NUM_WIDTH_CONSTS)
-
-static const FcStringConst slantConsts[] = {
- { (FC8) "italic", FC_SLANT_ITALIC },
- { (FC8) "kursiv", FC_SLANT_ITALIC },
- { (FC8) "oblique", FC_SLANT_OBLIQUE },
-};
-
-#define NUM_SLANT_CONSTS (int) (sizeof (slantConsts) / sizeof (slantConsts[0]))
-
-#define FcIsSlant(s) FcStringIsConst(s,slantConsts,NUM_SLANT_CONSTS)
-#define FcContainsSlant(s) FcStringContainsConst (s,slantConsts,NUM_SLANT_CONSTS)
-
-static const FcStringConst decorativeConsts[] = {
- { (FC8) "shadow", FcTrue },
- { (FC8) "caps", FcTrue },
- { (FC8) "antiqua", FcTrue },
- { (FC8) "romansc", FcTrue },
- { (FC8) "embosed", FcTrue },
- { (FC8) "dunhill", FcTrue },
-};
-
-#define NUM_DECORATIVE_CONSTS (int) (sizeof (decorativeConsts) / sizeof (decorativeConsts[0]))
-
-#define FcIsDecorative(s) FcStringIsConst(s,decorativeConsts,NUM_DECORATIVE_CONSTS)
-#define FcContainsDecorative(s) FcStringContainsConst (s,decorativeConsts,NUM_DECORATIVE_CONSTS)
-
-static double
-FcGetPixelSize (FT_Face face, int i)
-{
-#if HAVE_FT_GET_BDF_PROPERTY
- if (face->num_fixed_sizes == 1)
- {
- BDF_PropertyRec prop;
- int rc;
-
- rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop);
- if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER)
- return (double) prop.u.integer;
- }
-#endif
-#if HAVE_FT_BITMAP_SIZE_Y_PPEM
- return (double) face->available_sizes[i].y_ppem / 64.0;
-#else
- return (double) face->available_sizes[i].height;
-#endif
-}
-
-static FcBool
-FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string)
-{
- int e;
- FcChar8 *old;
- for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++)
- if (!FcStrCmpIgnoreBlanksAndCase (old, string))
- {
- return FcTrue;
- }
- return FcFalse;
-}
-
-static const FT_UShort platform_order[] = {
- TT_PLATFORM_MICROSOFT,
- TT_PLATFORM_APPLE_UNICODE,
- TT_PLATFORM_MACINTOSH,
-};
-#define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0]))
-
-static const FT_UShort nameid_order[] = {
-#ifdef TT_NAME_ID_WWS_FAMILY
- TT_NAME_ID_WWS_FAMILY,
-#endif
- TT_NAME_ID_PREFERRED_FAMILY,
- TT_NAME_ID_FONT_FAMILY,
- TT_NAME_ID_MAC_FULL_NAME,
- TT_NAME_ID_FULL_NAME,
-#ifdef TT_NAME_ID_WWS_SUBFAMILY
- TT_NAME_ID_WWS_SUBFAMILY,
-#endif
- TT_NAME_ID_PREFERRED_SUBFAMILY,
- TT_NAME_ID_FONT_SUBFAMILY,
- TT_NAME_ID_TRADEMARK,
- TT_NAME_ID_MANUFACTURER,
-};
-
-#define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0]))
-FcPattern *
-FcFreeTypeQueryFace (const FT_Face face,
- const FcChar8 *file,
- int id,
- FcBlanks *blanks)
-{
- FcPattern *pat;
- int slant = -1;
- int weight = -1;
- int width = -1;
- FcBool decorative = FcFalse;
- int i;
- FcCharSet *cs;
- FcLangSet *ls;
-#if 0
- FcChar8 *family = 0;
-#endif
- FcChar8 *complex_;
- const FcChar8 *foundry = 0;
- int spacing;
- TT_OS2 *os2;
-#if HAVE_FT_GET_PS_FONT_INFO
- PS_FontInfoRec psfontinfo;
-#endif
-#if HAVE_FT_GET_BDF_PROPERTY
- BDF_PropertyRec prop;
-#endif
- TT_Header *head;
- const FcChar8 *exclusiveLang = 0;
- FT_SfntName sname;
- FT_UInt snamei, snamec;
-
- int nfamily = 0;
- int nfamily_lang = 0;
- int nstyle = 0;
- int nstyle_lang = 0;
- int nfullname = 0;
- int nfullname_lang = 0;
- int p, platform;
- int n, nameid;
-
- FcChar8 *style = 0;
- int st;
-
- pat = FcPatternCreate ();
- if (!pat)
- goto bail0;
-
- if (!FcPatternAddBool (pat, FC_OUTLINE,
- (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
- goto bail1;
-
- if (!FcPatternAddBool (pat, FC_SCALABLE,
- (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
- goto bail1;
-
-
- /*
- * Get the OS/2 table
- */
- os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2);
-
- /*
- * Look first in the OS/2 table for the foundry, if
- * not found here, the various notices will be searched for
- * that information, either from the sfnt name tables or
- * the Postscript FontInfo dictionary. Finally, the
- * BDF properties will queried.
- */
-
- if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
- foundry = FcVendorFoundry(os2->achVendID);
-
- if (FcDebug () & FC_DBG_SCANV)
- printf ("\n");
- /*
- * Grub through the name table looking for family
- * and style names. FreeType makes quite a hash
- * of them
- */
- snamec = FT_Get_Sfnt_Name_Count (face);
- for (p = 0; p <= NUM_PLATFORM_ORDER; p++)
- {
- if (p < NUM_PLATFORM_ORDER)
- platform = platform_order[p];
- else
- platform = 0xffff;
-
- /*
- * Order nameids so preferred names appear first
- * in the resulting list
- */
- for (n = 0; n < NUM_NAMEID_ORDER; n++)
- {
- nameid = nameid_order[n];
-
- for (snamei = 0; snamei < snamec; snamei++)
- {
- FcChar8 *utf8;
- const FcChar8 *lang;
- const char *elt = 0, *eltlang = 0;
- int *np = 0, *nlangp = 0;
-
- if (FT_Get_Sfnt_Name (face, snamei, &sname) != 0)
- continue;
- if (sname.name_id != nameid)
- continue;
-
- /*
- * Sort platforms in preference order, accepting
- * all other platforms last
- */
- if (p < NUM_PLATFORM_ORDER)
- {
- if (sname.platform_id != platform)
- continue;
- }
- else
- {
- int sp;
-
- for (sp = 0; sp < NUM_PLATFORM_ORDER; sp++)
- if (sname.platform_id == platform_order[sp])
- break;
- if (sp != NUM_PLATFORM_ORDER)
- continue;
- }
- utf8 = FcSfntNameTranscode (&sname);
- lang = FcSfntNameLanguage (&sname);
-
- if (!utf8)
- continue;
-
- switch (sname.name_id) {
-#ifdef TT_NAME_ID_WWS_FAMILY
- case TT_NAME_ID_WWS_FAMILY:
-#endif
- case TT_NAME_ID_PREFERRED_FAMILY:
- case TT_NAME_ID_FONT_FAMILY:
-#if 0
- case TT_NAME_ID_PS_NAME:
- case TT_NAME_ID_UNIQUE_ID:
-#endif
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found family (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_FAMILY;
- eltlang = FC_FAMILYLANG;
- np = &nfamily;
- nlangp = &nfamily_lang;
- break;
- case TT_NAME_ID_MAC_FULL_NAME:
- case TT_NAME_ID_FULL_NAME:
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found full (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_FULLNAME;
- eltlang = FC_FULLNAMELANG;
- np = &nfullname;
- nlangp = &nfullname_lang;
- break;
-#ifdef TT_NAME_ID_WWS_SUBFAMILY
- case TT_NAME_ID_WWS_SUBFAMILY:
-#endif
- case TT_NAME_ID_PREFERRED_SUBFAMILY:
- case TT_NAME_ID_FONT_SUBFAMILY:
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found style (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_STYLE;
- eltlang = FC_STYLELANG;
- np = &nstyle;
- nlangp = &nstyle_lang;
- break;
- case TT_NAME_ID_TRADEMARK:
- case TT_NAME_ID_MANUFACTURER:
- /* If the foundry wasn't found in the OS/2 table, look here */
- if(!foundry)
- foundry = FcNoticeFoundry((FT_String *) utf8);
- break;
- }
- if (elt)
- {
- if (FcStringInPatternElement (pat, elt, utf8))
- {
- free (utf8);
- continue;
- }
-
- /* add new element */
- if (!FcPatternAddString (pat, elt, utf8))
- {
- free (utf8);
- goto bail1;
- }
- free (utf8);
- if (lang)
- {
- /* pad lang list with 'xx' to line up with elt */
- while (*nlangp < *np)
- {
- if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx"))
- goto bail1;
- ++*nlangp;
- }
- if (!FcPatternAddString (pat, eltlang, lang))
- goto bail1;
- ++*nlangp;
- }
- ++*np;
- }
- else
- free (utf8);
- }
- }
- }
-
- if (!nfamily && face->family_name &&
- FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0)
- {
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using FreeType family \"%s\"\n", face->family_name);
- if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name))
- goto bail1;
- ++nfamily;
- }
-
- if (!nstyle && face->style_name &&
- FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0)
- {
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using FreeType style \"%s\"\n", face->style_name);
- if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name))
- goto bail1;
- ++nstyle;
- }
-
- if (!nfamily)
- {
- FcChar8 *start, *end;
- FcChar8 *family;
-
- start = (FcChar8 *) strrchr ((char *) file, '/');
- if (start)
- start++;
- else
- start = (FcChar8 *) file;
- end = (FcChar8 *) strrchr ((char *) start, '.');
- if (!end)
- end = start + strlen ((char *) start);
- /* freed below */
- family = malloc (end - start + 1);
- strncpy ((char *) family, (char *) start, end - start);
- family[end - start] = '\0';
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using filename for family %s\n", family);
- if (!FcPatternAddString (pat, FC_FAMILY, family))
- {
- free (family);
- goto bail1;
- }
- free (family);
- ++nfamily;
- }
-
- if (!FcPatternAddString (pat, FC_FILE, file))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_INDEX, id))
- goto bail1;
-
-#if 0
- /*
- * don't even try this -- CJK 'monospace' fonts are really
- * dual width, and most other fonts don't bother to set
- * the attribute. Sigh.
- */
- if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0)
- if (!FcPatternAddInteger (pat, FC_SPACING, FC_MONO))
- goto bail1;
-#endif
-
- /*
- * Find the font revision (if available)
- */
- head = (TT_Header *) FT_Get_Sfnt_Table (face, ft_sfnt_head);
- if (head)
- {
- if (!FcPatternAddInteger (pat, FC_FONTVERSION, head->Font_Revision))
- goto bail1;
- }
- else
- {
- if (!FcPatternAddInteger (pat, FC_FONTVERSION, 0))
- goto bail1;
- }
-
- if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
- {
- for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
- {
- FT_ULong bits;
- int bit;
- if (FcCodePageRange[i].bit < 32)
- {
- bits = os2->ulCodePageRange1;
- bit = FcCodePageRange[i].bit;
- }
- else
- {
- bits = os2->ulCodePageRange2;
- bit = FcCodePageRange[i].bit - 32;
- }
- if (bits & (1 << bit))
- {
- /*
- * If the font advertises support for multiple
- * "exclusive" languages, then include support
- * for any language found to have coverage
- */
- if (exclusiveLang)
- {
- exclusiveLang = 0;
- break;
- }
- exclusiveLang = FcCodePageRange[i].lang;
- }
- }
- }
-
- if (os2 && os2->version != 0xffff)
- {
- if (os2->usWeightClass == 0)
- ;
- else if (os2->usWeightClass < 150)
- weight = FC_WEIGHT_THIN;
- else if (os2->usWeightClass < 250)
- weight = FC_WEIGHT_EXTRALIGHT;
- else if (os2->usWeightClass < 350)
- weight = FC_WEIGHT_LIGHT;
- else if (os2->usWeightClass < 450)
- weight = FC_WEIGHT_REGULAR;
- else if (os2->usWeightClass < 550)
- weight = FC_WEIGHT_MEDIUM;
- else if (os2->usWeightClass < 650)
- weight = FC_WEIGHT_SEMIBOLD;
- else if (os2->usWeightClass < 750)
- weight = FC_WEIGHT_BOLD;
- else if (os2->usWeightClass < 850)
- weight = FC_WEIGHT_EXTRABOLD;
- else if (os2->usWeightClass < 925)
- weight = FC_WEIGHT_BLACK;
- else if (os2->usWeightClass < 1000)
- weight = FC_WEIGHT_EXTRABLACK;
- if ((FcDebug() & FC_DBG_SCANV) && weight != -1)
- printf ("\tos2 weight class %d maps to weight %d\n",
- os2->usWeightClass, weight);
-
- switch (os2->usWidthClass) {
- case 1: width = FC_WIDTH_ULTRACONDENSED; break;
- case 2: width = FC_WIDTH_EXTRACONDENSED; break;
- case 3: width = FC_WIDTH_CONDENSED; break;
- case 4: width = FC_WIDTH_SEMICONDENSED; break;
- case 5: width = FC_WIDTH_NORMAL; break;
- case 6: width = FC_WIDTH_SEMIEXPANDED; break;
- case 7: width = FC_WIDTH_EXPANDED; break;
- case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
- case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
- }
- if ((FcDebug() & FC_DBG_SCANV) && width != -1)
- printf ("\tos2 width class %d maps to width %d\n",
- os2->usWidthClass, width);
- }
- if (os2 && (complex_ = FcFontCapabilities(face)))
- {
- if (!FcPatternAddString (pat, FC_CAPABILITY, complex_))
- {
- free (complex_);
- goto bail1;
- }
- free (complex_);
- }
-
- /*
- * Type 1: Check for FontInfo dictionary information
- * Code from g2@magestudios.net (Gerard Escalante)
- */
-
-#if HAVE_FT_GET_PS_FONT_INFO
- if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0)
- {
- if (weight == -1 && psfontinfo.weight)
- {
- weight = FcIsWeight ((FcChar8 *) psfontinfo.weight);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tType1 weight %s maps to %d\n",
- psfontinfo.weight, weight);
- }
-
-#if 0
- /*
- * Don't bother with italic_angle; FreeType already extracts that
- * information for us and sticks it into style_flags
- */
- if (psfontinfo.italic_angle)
- slant = FC_SLANT_ITALIC;
- else
- slant = FC_SLANT_ROMAN;
-#endif
-
- if(!foundry)
- foundry = FcNoticeFoundry(psfontinfo.notice);
- }
-#endif /* HAVE_FT_GET_PS_FONT_INFO */
-
-#if HAVE_FT_GET_BDF_PROPERTY
- /*
- * Finally, look for a FOUNDRY BDF property if no other
- * mechanism has managed to locate a foundry
- */
-
- if (!foundry)
- {
- int rc;
- rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop);
- if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM)
- foundry = (FcChar8 *) prop.u.atom;
- }
-
- if (width == -1)
- {
- if (FT_Get_BDF_Property(face, "RELATIVE_SETWIDTH", &prop) == 0 &&
- (prop.type == BDF_PROPERTY_TYPE_INTEGER ||
- prop.type == BDF_PROPERTY_TYPE_CARDINAL))
- {
- FT_Int32 value;
-
- if (prop.type == BDF_PROPERTY_TYPE_INTEGER)
- value = prop.u.integer;
- else
- value = (FT_Int32) prop.u.cardinal;
- switch ((value + 5) / 10) {
- case 1: width = FC_WIDTH_ULTRACONDENSED; break;
- case 2: width = FC_WIDTH_EXTRACONDENSED; break;
- case 3: width = FC_WIDTH_CONDENSED; break;
- case 4: width = FC_WIDTH_SEMICONDENSED; break;
- case 5: width = FC_WIDTH_NORMAL; break;
- case 6: width = FC_WIDTH_SEMIEXPANDED; break;
- case 7: width = FC_WIDTH_EXPANDED; break;
- case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
- case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
- }
- }
- if (width == -1 &&
- FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 &&
- prop.type == BDF_PROPERTY_TYPE_ATOM)
- {
- width = FcIsWidth ((FcChar8 *) prop.u.atom);
- if (FcDebug () & FC_DBG_SCANV)
- printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width);
- }
- }
-#endif
-
- /*
- * Look for weight, width and slant names in the style value
- */
- for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++)
- {
- if (weight == -1)
- {
- weight = FcContainsWeight (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to weight %d\n", style, weight);
- }
- if (width == -1)
- {
- width = FcContainsWidth (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to width %d\n", style, width);
- }
- if (slant == -1)
- {
- slant = FcContainsSlant (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to slant %d\n", style, slant);
- }
- if (decorative == FcFalse)
- {
- decorative = FcContainsDecorative (style) > 0;
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to decorative %d\n", style, decorative);
- }
- }
- /*
- * Pull default values from the FreeType flags if more
- * specific values not found above
- */
- if (slant == -1)
- {
- slant = FC_SLANT_ROMAN;
- if (face->style_flags & FT_STYLE_FLAG_ITALIC)
- slant = FC_SLANT_ITALIC;
- }
-
- if (weight == -1)
- {
- weight = FC_WEIGHT_MEDIUM;
- if (face->style_flags & FT_STYLE_FLAG_BOLD)
- weight = FC_WEIGHT_BOLD;
- }
-
- if (width == -1)
- width = FC_WIDTH_NORMAL;
-
- if (foundry == 0)
- foundry = (FcChar8 *) "unknown";
-
- if (!FcPatternAddInteger (pat, FC_SLANT, slant))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_WEIGHT, weight))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_WIDTH, width))
- goto bail1;
-
- if (!FcPatternAddString (pat, FC_FOUNDRY, foundry))
- goto bail1;
-
- if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative))
- goto bail1;
-
- /*
- * Compute the unicode coverage for the font
- */
- cs = FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
- if (!cs)
- goto bail1;
-
-#if HAVE_FT_GET_BDF_PROPERTY
- /* For PCF fonts, override the computed spacing with the one from
- the property */
- if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 &&
- prop.type == BDF_PROPERTY_TYPE_ATOM) {
- if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C"))
- spacing = FC_CHARCELL;
- else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M"))
- spacing = FC_MONO;
- else if(!strcmp(prop.u.atom, "p") || !strcmp(prop.u.atom, "P"))
- spacing = FC_PROPORTIONAL;
- }
-#endif
-
- /*
- * Skip over PCF fonts that have no encoded characters; they're
- * usually just Unicode fonts transcoded to some legacy encoding
- * FT forces us to approximate whether a font is a PCF font
- * or not by whether it has any BDF properties. Try PIXEL_SIZE;
- * I don't know how to get a list of BDF properties on the font. -PL
- */
- if (FcCharSetCount (cs) == 0)
- {
-#if HAVE_FT_GET_BDF_PROPERTY
- if(FT_Get_BDF_Property(face, "PIXEL_SIZE", &prop) == 0)
- goto bail2;
-#endif
- }
-
- if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
- goto bail2;
-
- ls = FcFreeTypeLangSet (cs, exclusiveLang);
- if (!ls)
- goto bail2;
-
- if (!FcPatternAddLangSet (pat, FC_LANG, ls))
- {
- FcLangSetDestroy (ls);
- goto bail2;
- }
-
- FcLangSetDestroy (ls);
-
- if (spacing != FC_PROPORTIONAL)
- if (!FcPatternAddInteger (pat, FC_SPACING, spacing))
- goto bail2;
-
- if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
- {
- for (i = 0; i < face->num_fixed_sizes; i++)
- if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE,
- FcGetPixelSize (face, i)))
- goto bail2;
- if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse))
- goto bail2;
- }
-#if HAVE_FT_GET_X11_FONT_FORMAT
- /*
- * Use the (not well documented or supported) X-specific function
- * from FreeType to figure out the font format
- */
- {
- const char *font_format = FT_Get_X11_Font_Format (face);
- if (font_format)
- FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format);
- }
-#endif
-
- /*
- * Drop our reference to the charset
- */
- FcCharSetDestroy (cs);
-
- return pat;
-
-bail2:
- FcCharSetDestroy (cs);
-bail1:
- FcPatternDestroy (pat);
-bail0:
- return NULL;
-}
-
-FcPattern *
-FcFreeTypeQuery(const FcChar8 *file,
- int id,
- FcBlanks *blanks,
- int *count)
-{
- FT_Face face;
- FT_Library ftLibrary;
- FcPattern *pat = NULL;
-
- if (FT_Init_FreeType (&ftLibrary))
- return NULL;
-
- if (FT_New_Face (ftLibrary, (char *) file, id, &face))
- goto bail;
-
- *count = face->num_faces;
-
- pat = FcFreeTypeQueryFace (face, file, id, blanks);
-
- FT_Done_Face (face);
-bail:
- FT_Done_FreeType (ftLibrary);
- return pat;
-}
-
-/*
- * For our purposes, this approximation is sufficient
- */
-#if !HAVE_FT_GET_NEXT_CHAR
-#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \
- (*(gi) = 0), 0 : \
- (*(gi) = 1), (ucs4) + 1)
-#warning "No FT_Get_Next_Char: Please install freetype version 2.1.0 or newer"
-#endif
-
-typedef struct _FcCharEnt {
- FcChar16 bmp;
- unsigned char encode;
-} FcCharEnt;
-
-struct _FcCharMap {
- const FcCharEnt *ent;
- int nent;
-};
-
-typedef struct _FcFontDecode {
- FT_Encoding encoding;
- const FcCharMap *map;
- FcChar32 max;
-} FcFontDecode;
-
-static const FcCharEnt AppleRomanEnt[] = {
- { 0x0020, 0x20 }, /* SPACE */
- { 0x0021, 0x21 }, /* EXCLAMATION MARK */
- { 0x0022, 0x22 }, /* QUOTATION MARK */
- { 0x0023, 0x23 }, /* NUMBER SIGN */
- { 0x0024, 0x24 }, /* DOLLAR SIGN */
- { 0x0025, 0x25 }, /* PERCENT SIGN */
- { 0x0026, 0x26 }, /* AMPERSAND */
- { 0x0027, 0x27 }, /* APOSTROPHE */
- { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
- { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
- { 0x002A, 0x2A }, /* ASTERISK */
- { 0x002B, 0x2B }, /* PLUS SIGN */
- { 0x002C, 0x2C }, /* COMMA */
- { 0x002D, 0x2D }, /* HYPHEN-MINUS */
- { 0x002E, 0x2E }, /* FULL STOP */
- { 0x002F, 0x2F }, /* SOLIDUS */
- { 0x0030, 0x30 }, /* DIGIT ZERO */
- { 0x0031, 0x31 }, /* DIGIT ONE */
- { 0x0032, 0x32 }, /* DIGIT TWO */
- { 0x0033, 0x33 }, /* DIGIT THREE */
- { 0x0034, 0x34 }, /* DIGIT FOUR */
- { 0x0035, 0x35 }, /* DIGIT FIVE */
- { 0x0036, 0x36 }, /* DIGIT SIX */
- { 0x0037, 0x37 }, /* DIGIT SEVEN */
- { 0x0038, 0x38 }, /* DIGIT EIGHT */
- { 0x0039, 0x39 }, /* DIGIT NINE */
- { 0x003A, 0x3A }, /* COLON */
- { 0x003B, 0x3B }, /* SEMICOLON */
- { 0x003C, 0x3C }, /* LESS-THAN SIGN */
- { 0x003D, 0x3D }, /* EQUALS SIGN */
- { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
- { 0x003F, 0x3F }, /* QUESTION MARK */
- { 0x0040, 0x40 }, /* COMMERCIAL AT */
- { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
- { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
- { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
- { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
- { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
- { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
- { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
- { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
- { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
- { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
- { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
- { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
- { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
- { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
- { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
- { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
- { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
- { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
- { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
- { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
- { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
- { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
- { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
- { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
- { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
- { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
- { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
- { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
- { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
- { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
- { 0x005F, 0x5F }, /* LOW LINE */
- { 0x0060, 0x60 }, /* GRAVE ACCENT */
- { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
- { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
- { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
- { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
- { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
- { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
- { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
- { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
- { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
- { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
- { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
- { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
- { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
- { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
- { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
- { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
- { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
- { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
- { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
- { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
- { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
- { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
- { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
- { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
- { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
- { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
- { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
- { 0x007C, 0x7C }, /* VERTICAL LINE */
- { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
- { 0x007E, 0x7E }, /* TILDE */
- { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
- { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
- { 0x00A2, 0xA2 }, /* CENT SIGN */
- { 0x00A3, 0xA3 }, /* POUND SIGN */
- { 0x00A5, 0xB4 }, /* YEN SIGN */
- { 0x00A7, 0xA4 }, /* SECTION SIGN */
- { 0x00A8, 0xAC }, /* DIAERESIS */
- { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
- { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
- { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00AC, 0xC2 }, /* NOT SIGN */
- { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
- { 0x00AF, 0xF8 }, /* MACRON */
- { 0x00B0, 0xA1 }, /* DEGREE SIGN */
- { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
- { 0x00B4, 0xAB }, /* ACUTE ACCENT */
- { 0x00B5, 0xB5 }, /* MICRO SIGN */
- { 0x00B6, 0xA6 }, /* PILCROW SIGN */
- { 0x00B7, 0xE1 }, /* MIDDLE DOT */
- { 0x00B8, 0xFC }, /* CEDILLA */
- { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
- { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
- { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
- { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
- { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
- { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
- { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
- { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
- { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
- { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
- { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
- { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
- { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
- { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
- { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
- { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
- { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
- { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
- { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
- { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
- { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
- { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
- { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
- { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
- { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
- { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
- { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
- { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
- { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
- { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
- { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
- { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
- { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
- { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
- { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
- { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
- { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
- { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
- { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
- { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
- { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
- { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
- { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
- { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
- { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
- { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
- { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
- { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
- { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
- { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
- { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
- { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
- { 0x00F7, 0xD6 }, /* DIVISION SIGN */
- { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
- { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
- { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
- { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
- { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
- { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
- { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
- { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
- { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
- { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
- { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
- { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
- { 0x02C7, 0xFF }, /* CARON */
- { 0x02D8, 0xF9 }, /* BREVE */
- { 0x02D9, 0xFA }, /* DOT ABOVE */
- { 0x02DA, 0xFB }, /* RING ABOVE */
- { 0x02DB, 0xFE }, /* OGONEK */
- { 0x02DC, 0xF7 }, /* SMALL TILDE */
- { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
- { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
- { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
- { 0x2013, 0xD0 }, /* EN DASH */
- { 0x2014, 0xD1 }, /* EM DASH */
- { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
- { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
- { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
- { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
- { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
- { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
- { 0x2020, 0xA0 }, /* DAGGER */
- { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
- { 0x2022, 0xA5 }, /* BULLET */
- { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
- { 0x2030, 0xE4 }, /* PER MILLE SIGN */
- { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
- { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
- { 0x2044, 0xDA }, /* FRACTION SLASH */
- { 0x20AC, 0xDB }, /* EURO SIGN */
- { 0x2122, 0xAA }, /* TRADE MARK SIGN */
- { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
- { 0x2206, 0xC6 }, /* INCREMENT */
- { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
- { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
- { 0x221A, 0xC3 }, /* SQUARE ROOT */
- { 0x221E, 0xB0 }, /* INFINITY */
- { 0x222B, 0xBA }, /* INTEGRAL */
- { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
- { 0x2260, 0xAD }, /* NOT EQUAL TO */
- { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
- { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
- { 0x25CA, 0xD7 }, /* LOZENGE */
- { 0xF8FF, 0xF0 }, /* Apple logo */
- { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
- { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
-};
-
-static const FcCharMap AppleRoman = {
- AppleRomanEnt,
- sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
-};
-
-static const FcCharEnt AdobeSymbolEnt[] = {
- { 0x0020, 0x20 }, /* SPACE # space */
- { 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */
- { 0x0023, 0x23 }, /* NUMBER SIGN # numbersign */
- { 0x0025, 0x25 }, /* PERCENT SIGN # percent */
- { 0x0026, 0x26 }, /* AMPERSAND # ampersand */
- { 0x0028, 0x28 }, /* LEFT PARENTHESIS # parenleft */
- { 0x0029, 0x29 }, /* RIGHT PARENTHESIS # parenright */
- { 0x002B, 0x2B }, /* PLUS SIGN # plus */
- { 0x002C, 0x2C }, /* COMMA # comma */
- { 0x002E, 0x2E }, /* FULL STOP # period */
- { 0x002F, 0x2F }, /* SOLIDUS # slash */
- { 0x0030, 0x30 }, /* DIGIT ZERO # zero */
- { 0x0031, 0x31 }, /* DIGIT ONE # one */
- { 0x0032, 0x32 }, /* DIGIT TWO # two */
- { 0x0033, 0x33 }, /* DIGIT THREE # three */
- { 0x0034, 0x34 }, /* DIGIT FOUR # four */
- { 0x0035, 0x35 }, /* DIGIT FIVE # five */
- { 0x0036, 0x36 }, /* DIGIT SIX # six */
- { 0x0037, 0x37 }, /* DIGIT SEVEN # seven */
- { 0x0038, 0x38 }, /* DIGIT EIGHT # eight */
- { 0x0039, 0x39 }, /* DIGIT NINE # nine */
- { 0x003A, 0x3A }, /* COLON # colon */
- { 0x003B, 0x3B }, /* SEMICOLON # semicolon */
- { 0x003C, 0x3C }, /* LESS-THAN SIGN # less */
- { 0x003D, 0x3D }, /* EQUALS SIGN # equal */
- { 0x003E, 0x3E }, /* GREATER-THAN SIGN # greater */
- { 0x003F, 0x3F }, /* QUESTION MARK # question */
- { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET # bracketleft */
- { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET # bracketright */
- { 0x005F, 0x5F }, /* LOW LINE # underscore */
- { 0x007B, 0x7B }, /* LEFT CURLY BRACKET # braceleft */
- { 0x007C, 0x7C }, /* VERTICAL LINE # bar */
- { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET # braceright */
- { 0x00A0, 0x20 }, /* NO-BREAK SPACE # space */
- { 0x00AC, 0xD8 }, /* NOT SIGN # logicalnot */
- { 0x00B0, 0xB0 }, /* DEGREE SIGN # degree */
- { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN # plusminus */
- { 0x00B5, 0x6D }, /* MICRO SIGN # mu */
- { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN # multiply */
- { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */
- { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK # florin */
- { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA # Alpha */
- { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA # Beta */
- { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA # Gamma */
- { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA # Delta */
- { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON # Epsilon */
- { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA # Zeta */
- { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA # Eta */
- { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA # Theta */
- { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA # Iota */
- { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA # Kappa */
- { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA # Lambda */
- { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU # Mu */
- { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU # Nu */
- { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI # Xi */
- { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON # Omicron */
- { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI # Pi */
- { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO # Rho */
- { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA # Sigma */
- { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU # Tau */
- { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON # Upsilon */
- { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI # Phi */
- { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI # Chi */
- { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI # Psi */
- { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA # Omega */
- { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA # alpha */
- { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA # beta */
- { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA # gamma */
- { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA # delta */
- { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON # epsilon */
- { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA # zeta */
- { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA # eta */
- { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA # theta */
- { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA # iota */
- { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA # kappa */
- { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA # lambda */
- { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */
- { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */
- { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */
- { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON # omicron */
- { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */
- { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO # rho */
- { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA # sigma1 */
- { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA # sigma */
- { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU # tau */
- { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON # upsilon */
- { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI # phi */
- { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI # chi */
- { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI # psi */
- { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA # omega */
- { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL # theta1 */
- { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL # Upsilon1 */
- { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL # phi1 */
- { 0x03D6, 0x76 }, /* GREEK PI SYMBOL # omega1 */
- { 0x2022, 0xB7 }, /* BULLET # bullet */
- { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS # ellipsis */
- { 0x2032, 0xA2 }, /* PRIME # minute */
- { 0x2033, 0xB2 }, /* DOUBLE PRIME # second */
- { 0x2044, 0xA4 }, /* FRACTION SLASH # fraction */
- { 0x20AC, 0xA0 }, /* EURO SIGN # Euro */
- { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I # Ifraktur */
- { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P # weierstrass */
- { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R # Rfraktur */
- { 0x2126, 0x57 }, /* OHM SIGN # Omega */
- { 0x2135, 0xC0 }, /* ALEF SYMBOL # aleph */
- { 0x2190, 0xAC }, /* LEFTWARDS ARROW # arrowleft */
- { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */
- { 0x2192, 0xAE }, /* RIGHTWARDS ARROW # arrowright */
- { 0x2193, 0xAF }, /* DOWNWARDS ARROW # arrowdown */
- { 0x2194, 0xAB }, /* LEFT RIGHT ARROW # arrowboth */
- { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */
- { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW # arrowdblleft */
- { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW # arrowdblup */
- { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW # arrowdblright */
- { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW # arrowdbldown */
- { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW # arrowdblboth */
- { 0x2200, 0x22 }, /* FOR ALL # universal */
- { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL # partialdiff */
- { 0x2203, 0x24 }, /* THERE EXISTS # existential */
- { 0x2205, 0xC6 }, /* EMPTY SET # emptyset */
- { 0x2206, 0x44 }, /* INCREMENT # Delta */
- { 0x2207, 0xD1 }, /* NABLA # gradient */
- { 0x2208, 0xCE }, /* ELEMENT OF # element */
- { 0x2209, 0xCF }, /* NOT AN ELEMENT OF # notelement */
- { 0x220B, 0x27 }, /* CONTAINS AS MEMBER # suchthat */
- { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */
- { 0x2211, 0xE5 }, /* N-ARY SUMMATION # summation */
- { 0x2212, 0x2D }, /* MINUS SIGN # minus */
- { 0x2215, 0xA4 }, /* DIVISION SLASH # fraction */
- { 0x2217, 0x2A }, /* ASTERISK OPERATOR # asteriskmath */
- { 0x221A, 0xD6 }, /* SQUARE ROOT # radical */
- { 0x221D, 0xB5 }, /* PROPORTIONAL TO # proportional */
- { 0x221E, 0xA5 }, /* INFINITY # infinity */
- { 0x2220, 0xD0 }, /* ANGLE # angle */
- { 0x2227, 0xD9 }, /* LOGICAL AND # logicaland */
- { 0x2228, 0xDA }, /* LOGICAL OR # logicalor */
- { 0x2229, 0xC7 }, /* INTERSECTION # intersection */
- { 0x222A, 0xC8 }, /* UNION # union */
- { 0x222B, 0xF2 }, /* INTEGRAL # integral */
- { 0x2234, 0x5C }, /* THEREFORE # therefore */
- { 0x223C, 0x7E }, /* TILDE OPERATOR # similar */
- { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO # congruent */
- { 0x2248, 0xBB }, /* ALMOST EQUAL TO # approxequal */
- { 0x2260, 0xB9 }, /* NOT EQUAL TO # notequal */
- { 0x2261, 0xBA }, /* IDENTICAL TO # equivalence */
- { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */
- { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO # greaterequal */
- { 0x2282, 0xCC }, /* SUBSET OF # propersubset */
- { 0x2283, 0xC9 }, /* SUPERSET OF # propersuperset */
- { 0x2284, 0xCB }, /* NOT A SUBSET OF # notsubset */
- { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */
- { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO # reflexsuperset */
- { 0x2295, 0xC5 }, /* CIRCLED PLUS # circleplus */
- { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */
- { 0x22A5, 0x5E }, /* UP TACK # perpendicular */
- { 0x22C5, 0xD7 }, /* DOT OPERATOR # dotmath */
- { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL # integraltp */
- { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL # integralbt */
- { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET # angleleft */
- { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET # angleright */
- { 0x25CA, 0xE0 }, /* LOZENGE # lozenge */
- { 0x2660, 0xAA }, /* BLACK SPADE SUIT # spade */
- { 0x2663, 0xA7 }, /* BLACK CLUB SUIT # club */
- { 0x2665, 0xA9 }, /* BLACK HEART SUIT # heart */
- { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT # diamond */
- { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF # copyrightserif (CUS) */
- { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */
- { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */
- { 0xF8E5, 0x60 }, /* RADICAL EXTENDER # radicalex (CUS) */
- { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER # arrowvertex (CUS) */
- { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER # arrowhorizex (CUS) */
- { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF # registersans (CUS) */
- { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF # copyrightsans (CUS) */
- { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF # trademarksans (CUS) */
- { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP # parenlefttp (CUS) */
- { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER # parenleftex (CUS) */
- { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM # parenleftbt (CUS) */
- { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP # bracketlefttp (CUS) */
- { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER # bracketleftex (CUS) */
- { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM # bracketleftbt (CUS) */
- { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP # bracelefttp (CUS) */
- { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID # braceleftmid (CUS) */
- { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM # braceleftbt (CUS) */
- { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER # braceex (CUS) */
- { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER # integralex (CUS) */
- { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP # parenrighttp (CUS) */
- { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER # parenrightex (CUS) */
- { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM # parenrightbt (CUS) */
- { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP # bracketrighttp (CUS) */
- { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */
- { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM # bracketrightbt (CUS) */
- { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP # bracerighttp (CUS) */
- { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID # bracerightmid (CUS) */
- { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM # bracerightbt (CUS) */
-};
-
-static const FcCharMap AdobeSymbol = {
- AdobeSymbolEnt,
- sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]),
-};
-
-static const FcFontDecode fcFontDecoders[] = {
- { ft_encoding_unicode, 0, (1 << 21) - 1 },
- { ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 },
- { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 },
-};
-
-#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
-
-static const FcChar32 prefer_unicode[] = {
- 0x20ac, /* EURO SIGN */
-};
-
-#define NUM_PREFER_UNICODE (int) (sizeof (prefer_unicode) / sizeof (prefer_unicode[0]))
-
-FcChar32
-FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map)
-{
- int low, high, mid;
- FcChar16 bmp;
-
- low = 0;
- high = map->nent - 1;
- if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4)
- return ~0;
- while (low <= high)
- {
- mid = (high + low) >> 1;
- bmp = map->ent[mid].bmp;
- if (ucs4 == bmp)
- return (FT_ULong) map->ent[mid].encode;
- if (ucs4 < bmp)
- high = mid - 1;
- else
- low = mid + 1;
- }
- return ~0;
-}
-
-FcChar32
-FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map)
-{
- int i;
-
- for (i = 0; i < map->nent; i++)
- if (map->ent[i].encode == private)
- return (FcChar32) map->ent[i].bmp;
- return ~0;
-}
-
-const FcCharMap *
-FcFreeTypeGetPrivateMap (FT_Encoding encoding)
-{
- int i;
-
- for (i = 0; i < NUM_DECODE; i++)
- if (fcFontDecoders[i].encoding == encoding)
- return fcFontDecoders[i].map;
- return 0;
-}
-
-#include "../fc-glyphname/fcglyphname.h"
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name)
-{
- FcChar32 h = 0;
- FcChar8 c;
-
- while ((c = *name++))
- {
- h = ((h << 1) | (h >> 31)) ^ c;
- }
- return h;
-}
-
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
-/*
- * Use Type1 glyph names for fonts which have reliable names
- * and which export an Adobe Custom mapping
- */
-static FcBool
-FcFreeTypeUseNames (FT_Face face)
-{
- FT_Int map;
-
- if (!FT_Has_PS_Glyph_Names (face))
- return FcFalse;
- for (map = 0; map < face->num_charmaps; map++)
- if (face->charmaps[map]->encoding == ft_encoding_adobe_custom)
- return FcTrue;
- return FcFalse;
-}
-
-static const FcChar8 *
-FcUcs4ToGlyphName (FcChar32 ucs4)
-{
- int i = (int) (ucs4 % FC_GLYPHNAME_HASH);
- int r = 0;
- FcGlyphId gn;
-
- while ((gn = _fc_ucs_to_name[i]) != -1)
- {
- if (_fc_glyph_names[gn].ucs == ucs4)
- return _fc_glyph_names[gn].name;
- if (!r)
- {
- r = (int) (ucs4 % FC_GLYPHNAME_REHASH);
- if (!r)
- r = 1;
- }
- i += r;
- if (i >= FC_GLYPHNAME_HASH)
- i -= FC_GLYPHNAME_HASH;
- }
- return 0;
-}
-
-static FcChar32
-FcGlyphNameToUcs4 (FcChar8 *name)
-{
- FcChar32 h = FcHashGlyphName (name);
- int i = (int) (h % FC_GLYPHNAME_HASH);
- int r = 0;
- FcGlyphId gn;
-
- while ((gn = _fc_name_to_ucs[i]) != -1)
- {
- if (!strcmp ((char *) name, (char *) _fc_glyph_names[gn].name))
- return _fc_glyph_names[gn].ucs;
- if (!r)
- {
- r = (int) (h % FC_GLYPHNAME_REHASH);
- if (!r)
- r = 1;
- }
- i += r;
- if (i >= FC_GLYPHNAME_HASH)
- i -= FC_GLYPHNAME_HASH;
- }
- return 0xffff;
-}
-
-/*
- * Work around a bug in some FreeType versions which fail
- * to correctly bounds check glyph name buffers and overwrite
- * the stack. As Postscript names have a limit of 127 characters,
- * this should be sufficient.
- */
-
-#if FC_GLYPHNAME_MAXLEN < 127
-# define FC_GLYPHNAME_BUFLEN 127
-#else
-# define FC_GLYPHNAME_BUFLEN FC_GLYPHNAME_MAXLEN
-#endif
-
-/*
- * Search through a font for a glyph by name. This is
- * currently a linear search as there doesn't appear to be
- * any defined order within the font
- */
-static FT_UInt
-FcFreeTypeGlyphNameIndex (FT_Face face, const FcChar8 *name)
-{
- FT_UInt gindex;
- FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
-
- for (gindex = 0; gindex < (FT_UInt) face->num_glyphs; gindex++)
- {
- if (FT_Get_Glyph_Name (face, gindex, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
- if (!strcmp ((char *) name, (char *) name_buf))
- return gindex;
- }
- return 0;
-}
-#endif
-
-/*
- * Map a UCS4 glyph to a glyph index. Use all available encoding
- * tables to try and find one that works. This information is expected
- * to be cached by higher levels, so performance isn't critical
- */
-
-FT_UInt
-FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
-{
- int initial, offset, decode;
- FT_UInt glyphindex;
- FcChar32 charcode;
- int p;
-
- initial = 0;
-
- if (!face)
- return 0;
-
- /*
- * Find the current encoding
- */
- if (face->charmap)
- {
- for (; initial < NUM_DECODE; initial++)
- if (fcFontDecoders[initial].encoding == face->charmap->encoding)
- break;
- if (initial == NUM_DECODE)
- initial = 0;
- }
- for (p = 0; p < NUM_PREFER_UNICODE; p++)
- if (ucs4 == prefer_unicode[p])
- {
- initial = 0;
- break;
- }
- /*
- * Check each encoding for the glyph, starting with the current one
- */
- for (offset = 0; offset < NUM_DECODE; offset++)
- {
- decode = (initial + offset) % NUM_DECODE;
- if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding)
- if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0)
- continue;
- if (fcFontDecoders[decode].map)
- {
- charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map);
- if (charcode == ~0U)
- continue;
- }
- else
- charcode = ucs4;
- glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode);
- if (glyphindex)
- return glyphindex;
- }
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
- /*
- * Check postscript name table if present
- */
- if (FcFreeTypeUseNames (face))
- {
- const FcChar8 *name = FcUcs4ToGlyphName (ucs4);
- if (name)
- {
- glyphindex = FcFreeTypeGlyphNameIndex (face, name);
- if (glyphindex)
- return glyphindex;
- }
- }
-#endif
- return 0;
-}
-
-static FcBool
-FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4,
- FT_UInt glyph, FcBlanks *blanks,
- FT_Pos *advance,
- FcBool using_strike)
-{
- FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
- FT_GlyphSlot slot;
-
- if (using_strike)
- load_flags &= ~FT_LOAD_NO_SCALE;
-
- /*
- * When using scalable fonts, only report those glyphs
- * which can be scaled; otherwise those fonts will
- * only be available at some sizes, and never when
- * transformed. Avoid this by simply reporting bitmap-only
- * glyphs as missing
- */
- if (face->face_flags & FT_FACE_FLAG_SCALABLE)
- load_flags |= FT_LOAD_NO_BITMAP;
-
- if (FT_Load_Glyph (face, glyph, load_flags))
- return FcFalse;
-
- slot = face->glyph;
- if (!glyph)
- return FcFalse;
-
- *advance = slot->metrics.horiAdvance;
-
- switch (slot->format) {
- case ft_glyph_format_bitmap:
- /*
- * Bitmaps are assumed to be reasonable; if
- * this proves to be a rash assumption, this
- * code can be easily modified
- */
- return FcTrue;
- case ft_glyph_format_outline:
- /*
- * Glyphs with contours are always OK
- */
- if (slot->outline.n_contours != 0)
- return FcTrue;
- /*
- * Glyphs with no contours are only OK if
- * they're members of the Blanks set specified
- * in the configuration. If blanks isn't set,
- * then allow any glyph to be blank
- */
- if (!blanks || FcBlanksIsMember (blanks, ucs4))
- return FcTrue;
- /* fall through ... */
- default:
- break;
- }
- return FcFalse;
-}
-
-#define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33)
-
-static FcCharSet *
-FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing, FT_Int strike_index)
-{
- FcChar32 page, off, ucs4;
-#ifdef CHECK
- FcChar32 font_max = 0;
-#endif
- FcCharSet *fcs;
- FcCharLeaf *leaf;
- const FcCharMap *map;
- int o;
- int i;
- FT_UInt glyph;
- FT_Pos advance, advance_one = 0, advance_two = 0;
- FcBool has_advance = FcFalse, fixed_advance = FcTrue, dual_advance = FcFalse;
- FcBool using_strike = FcFalse;
-
- fcs = FcCharSetCreate ();
- if (!fcs)
- goto bail0;
-
-#if HAVE_FT_SELECT_SIZE
- if (strike_index >= 0) {
- if (FT_Select_Size (face, strike_index) != FT_Err_Ok)
- goto bail1;
- using_strike = FcTrue;
- }
-#endif
-
-#ifdef CHECK
- printf ("Family %s style %s\n", face->family_name, face->style_name);
-#endif
- for (o = 0; o < NUM_DECODE; o++)
- {
- if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0)
- continue;
- map = fcFontDecoders[o].map;
- if (map)
- {
- /*
- * Non-Unicode tables are easy; there's a list of all possible
- * characters
- */
- for (i = 0; i < map->nent; i++)
- {
- ucs4 = map->ent[i].bmp;
- glyph = FT_Get_Char_Index (face, map->ent[i].encode);
- if (glyph &&
- FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- /*
- * ignore glyphs with zero advance. They’re
- * combining characters, and while their behaviour
- * isn’t well defined for monospaced applications in
- * Unicode, there are many fonts which include
- * zero-width combining characters in otherwise
- * monospaced fonts.
- */
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
-
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- }
- }
- else
- {
- page = ~0;
- leaf = NULL;
- ucs4 = FT_Get_First_Char (face, &glyph);
- while (glyph != 0)
- {
- if (FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
-
- if ((ucs4 >> 8) != page)
- {
- page = (ucs4 >> 8);
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- }
- off = ucs4 & 0xff;
- leaf->map[off >> 5] |= (1 << (off & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- ucs4 = FT_Get_Next_Char (face, ucs4, &glyph);
- }
-#ifdef CHECK
- for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
- {
- FcBool FT_Has, FC_Has;
-
- FT_Has = FT_Get_Char_Index (face, ucs4) != 0;
- FC_Has = FcCharSetHasChar (fcs, ucs4);
- if (FT_Has != FC_Has)
- {
- printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has);
- }
- }
-#endif
- }
- }
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
- /*
- * Add mapping from PS glyph names if available
- */
- if (FcFreeTypeUseNames (face))
- {
- FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
-
- for (glyph = 0; glyph < (FT_UInt) face->num_glyphs; glyph++)
- {
- if (FT_Get_Glyph_Name (face, glyph, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
- {
- ucs4 = FcGlyphNameToUcs4 (name_buf);
- if (ucs4 != 0xffff &&
- FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- }
- }
- }
-#endif
-#ifdef CHECK
- printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs));
- for (ucs4 = 0; ucs4 <= font_max; ucs4++)
- {
- FcBool has_char = (glyph = FcFreeTypeCharIndex (face, ucs4)) != 0;
- FcBool has_bit = FcCharSetHasChar (fcs, ucs4);
-
- if (has_char && !has_bit)
- {
- if (!FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- printf ("Bitmap missing broken char 0x%x\n", ucs4);
- else
- printf ("Bitmap missing char 0x%x\n", ucs4);
- }
- else if (!has_char && has_bit)
- printf ("Bitmap extra char 0x%x\n", ucs4);
- }
-#endif
- if (fixed_advance)
- *spacing = FC_MONO;
- else if (dual_advance && APPROXIMATELY_EQUAL (2 * FC_MIN (advance_one, advance_two), FC_MAX (advance_one, advance_two)))
- *spacing = FC_DUAL;
- else
- *spacing = FC_PROPORTIONAL;
- return fcs;
-bail1:
- FcCharSetDestroy (fcs);
-bail0:
- return 0;
-}
-
-FcCharSet *
-FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing)
-{
- FcCharSet *cs;
-
- cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1);
- /*
- * Check for bitmap-only ttf fonts that are missing the glyf table.
- * In that case, pick a size and look for glyphs in that size instead
- */
- if (FcCharSetCount (cs) == 0)
- {
- /* Check for non-scalable TT fonts */
- if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) &&
- face->num_fixed_sizes > 0 &&
- FT_Get_Sfnt_Table (face, ft_sfnt_head))
- {
- FT_Int strike_index = 0;
- int i;
-
- /* Select the face closest to 16 pixels tall */
- for (i = 1; i < face->num_fixed_sizes; i++) {
- if (abs (face->available_sizes[i].height - 16) <
- abs (face->available_sizes[strike_index].height - 16))
- strike_index = i;
- }
- FcCharSetDestroy (cs);
- cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index);
- }
- }
- return cs;
-}
-
-FcCharSet *
-FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
-{
- int spacing;
-
- return FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
-}
-
-
-#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
-#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f')
-
-#define OTLAYOUT_HEAD "otlayout:"
-#define OTLAYOUT_HEAD_LEN 9
-#define OTLAYOUT_ID_LEN 4
-/* space + head + id */
-#define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN)
-
-/*
- * This is a bit generous; the registry has only lower case and space
- * except for 'DFLT'.
- */
-#define FcIsSpace(x) (040 == (x))
-#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x))
-
-static void
-addtag(FcChar8 *complex_, FT_ULong tag)
-{
- FcChar8 tagstring[OTLAYOUT_ID_LEN + 1];
-
- tagstring[0] = (FcChar8)(tag >> 24),
- tagstring[1] = (FcChar8)(tag >> 16),
- tagstring[2] = (FcChar8)(tag >> 8),
- tagstring[3] = (FcChar8)(tag);
- tagstring[4] = '\0';
-
- /* skip tags which aren't alphabetic, under the assumption that
- * they're probably broken
- */
- if (!FcIsValidScript(tagstring[0]) ||
- !FcIsValidScript(tagstring[1]) ||
- !FcIsValidScript(tagstring[2]) ||
- !FcIsValidScript(tagstring[3]))
- return;
-
- if (*complex_ != '\0')
- strcat ((char *) complex_, " ");
- strcat ((char *) complex_, "otlayout:");
- strcat ((char *) complex_, (char *) tagstring);
-}
-
-static int
-compareulong (const void *a, const void *b)
-{
- const FT_ULong *ua = (const FT_ULong *) a;
- const FT_ULong *ub = (const FT_ULong *) b;
- return *ua - *ub;
-}
-
-
-static int
-GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
-{
- FT_ULong cur_offset, new_offset, base_offset;
- FT_Stream stream = face->stream;
- FT_Error error;
- FT_UShort n, p;
- FT_Memory memory;
- int script_count;
-
- if (!stream)
- return 0;
-
- memory = stream->memory;
-
- if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
- return 0;
-
- base_offset = ftglue_stream_pos ( stream );
-
- /* skip version */
-
- if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) )
- return 0;
-
- new_offset = GET_UShort() + base_offset;
-
- ftglue_stream_frame_exit( stream );
-
- cur_offset = ftglue_stream_pos( stream );
-
- if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok )
- return 0;
-
- base_offset = ftglue_stream_pos( stream );
-
- if ( ftglue_stream_frame_enter( stream, 2L ) )
- return 0;
-
- script_count = GET_UShort ();
-
- ftglue_stream_frame_exit( stream );
-
- *stags = malloc(script_count * sizeof (FT_ULong));
- if (!stags)
- return 0;
-
- p = 0;
- for ( n = 0; n < script_count; n++ )
- {
- if ( ftglue_stream_frame_enter( stream, 6L ) )
- goto Fail;
-
- (*stags)[p] = GET_ULong ();
- new_offset = GET_UShort () + base_offset;
-
- ftglue_stream_frame_exit( stream );
-
- cur_offset = ftglue_stream_pos( stream );
-
- error = ftglue_stream_seek( stream, new_offset );
-
- if ( error == FT_Err_Ok )
- p++;
-
- (void)ftglue_stream_seek( stream, cur_offset );
- }
-
- if (!p)
- goto Fail;
-
- /* sort the tag list before returning it */
- qsort(*stags, script_count, sizeof(FT_ULong), compareulong);
-
- return script_count;
-
-Fail:
- free(*stags);
- *stags = NULL;
- return 0;
-}
-
-static FcChar8 *
-FcFontCapabilities(FT_Face face)
-{
- FcBool issilgraphitefont = 0;
- FT_Error err;
- FT_ULong len = 0;
- FT_ULong *gsubtags=NULL, *gpostags=NULL;
- FT_UShort gsub_count=0, gpos_count=0;
- FT_ULong maxsize;
- FcChar8 *complex_ = NULL;
- int indx1 = 0, indx2 = 0;
-
- err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len);
- issilgraphitefont = ( err == FT_Err_Ok);
-
- gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags);
- gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags);
-
- if (!issilgraphitefont && !gsub_count && !gpos_count)
- goto bail;
-
- maxsize = (((FT_ULong) gpos_count + (FT_ULong) gsub_count) * OTLAYOUT_LEN +
- (issilgraphitefont ? 13 : 0));
- complex_ = malloc (sizeof (FcChar8) * maxsize);
- if (!complex_)
- goto bail;
-
- complex_[0] = '\0';
- if (issilgraphitefont)
- strcpy((char *) complex_, "ttable:Silf ");
-
- while ((indx1 < gsub_count) || (indx2 < gpos_count)) {
- if (indx1 == gsub_count) {
- addtag(complex_, gpostags[indx2]);
- indx2++;
- } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) {
- addtag(complex_, gsubtags[indx1]);
- indx1++;
- } else if (gsubtags[indx1] == gpostags[indx2]) {
- addtag(complex_, gsubtags[indx1]);
- indx1++;
- indx2++;
- } else {
- addtag(complex_, gpostags[indx2]);
- indx2++;
- }
- }
- if (FcDebug () & FC_DBG_SCANV)
- printf("complex_ features in this font: %s\n", complex_);
-bail:
- free(gsubtags);
- free(gpostags);
- return complex_;
-}
-
-#define __fcfreetype__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fcfreetype__
+/*
+ * fontconfig/src/fcfreetype.c
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ Copyright © 2002-2003 by Juliusz Chroboczek
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#include "fcint.h"
+#include "fcftint.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_TRUETYPE_TABLES_H
+#include FT_SFNT_NAMES_H
+#include FT_TRUETYPE_IDS_H
+#include FT_TYPE1_TABLES_H
+#if HAVE_FT_GET_X11_FONT_FORMAT
+#include FT_XFREE86_H
+#endif
+#if HAVE_FT_GET_BDF_PROPERTY
+#include FT_BDF_H
+#include FT_MODULE_H
+#endif
+
+#include "ftglue.h"
+
+#if HAVE_WARNING_CPP_DIRECTIVE
+#if !HAVE_FT_GET_BDF_PROPERTY
+#warning "No FT_Get_BDF_Property: Please install freetype 2.1.4 or later"
+#endif
+
+#if !HAVE_FT_GET_PS_FONT_INFO
+#warning "No FT_Get_PS_Font_Info: Please install freetype 2.1.1 or later"
+#endif
+#endif
+
+/*
+ * Keep Han languages separated by eliminating languages
+ * that the codePageRange bits says aren't supported
+ */
+
+static const struct {
+ char bit;
+ const FcChar8 lang[6];
+} FcCodePageRange[] = {
+ { 17, "ja" },
+ { 18, "zh-cn" },
+ { 19, "ko" },
+ { 20, "zh-tw" },
+};
+
+#define NUM_CODE_PAGE_RANGE (int) (sizeof FcCodePageRange / sizeof FcCodePageRange[0])
+
+FcBool
+FcFreeTypeIsExclusiveLang (const FcChar8 *lang)
+{
+ int i;
+
+ for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
+ {
+ if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual)
+ return FcTrue;
+ }
+ return FcFalse;
+}
+
+typedef struct {
+ const FT_UShort platform_id;
+ const FT_UShort encoding_id;
+ const char fromcode[12];
+} FcFtEncoding;
+
+#define TT_ENCODING_DONT_CARE 0xffff
+#define FC_ENCODING_MAC_ROMAN "MACINTOSH"
+
+static const FcFtEncoding fcFtEncoding[] = {
+ { TT_PLATFORM_APPLE_UNICODE, TT_ENCODING_DONT_CARE, "UTF-16BE" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, "UTF-16BE" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, "UTF-16BE" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, "SJIS-WIN" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, "GB2312" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UTF-16BE" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UTF-16BE" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" },
+};
+
+#define NUM_FC_FT_ENCODING (int) (sizeof (fcFtEncoding) / sizeof (fcFtEncoding[0]))
+
+typedef struct {
+ const FT_UShort platform_id;
+ const FT_UShort language_id;
+ const char lang[8];
+} FcFtLanguage;
+
+#define TT_LANGUAGE_DONT_CARE 0xffff
+
+static const FcFtLanguage fcFtLanguage[] = {
+ { TT_PLATFORM_APPLE_UNICODE, TT_LANGUAGE_DONT_CARE, "" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ENGLISH, "en" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FRENCH, "fr" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GERMAN, "de" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ITALIAN, "it" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DUTCH, "nl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWEDISH, "sv" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SPANISH, "es" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DANISH, "da" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PORTUGUESE, "pt" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NORWEGIAN, "no" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HEBREW, "he" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAPANESE, "ja" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARABIC, "ar" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FINNISH, "fi" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK, "el" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ICELANDIC, "is" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALTESE, "mt" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKISH, "tr" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CROATIAN, "hr" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_TRADITIONAL, "zh-tw" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_URDU, "ur" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HINDI, "hi" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_THAI, "th" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KOREAN, "ko" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LITHUANIAN, "lt" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_POLISH, "pl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HUNGARIAN, "hu" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESTONIAN, "et" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LETTISH, "lv" },
+/* { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SAAMISK, ??? */
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FAEROESE, "fo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FARSI, "fa" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUSSIAN, "ru" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_SIMPLIFIED, "zh-cn" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FLEMISH, "nl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH, "ga" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ALBANIAN, "sq" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ROMANIAN, "ro" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CZECH, "cs" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVAK, "sk" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVENIAN, "sl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_YIDDISH, "yi" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SERBIAN, "sr" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MACEDONIAN, "mk" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BULGARIAN, "bg" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UKRAINIAN, "uk" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BYELORUSSIAN, "be" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UZBEK, "uz" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KAZAKH, "kk" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI, "az" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT, "az" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT, "ar" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARMENIAN, "hy" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GEORGIAN, "ka" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MOLDAVIAN, "mo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KIRGHIZ, "ky" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAJIKI, "tg" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKMEN, "tk" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN, "mo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT,"mo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT, "mo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PASHTO, "ps" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KURDISH, "ku" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KASHMIRI, "ks" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINDHI, "sd" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIBETAN, "bo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NEPALI, "ne" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SANSKRIT, "sa" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MARATHI, "mr" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BENGALI, "bn" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ASSAMESE, "as" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUJARATI, "gu" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PUNJABI, "pa" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ORIYA, "or" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAYALAM, "ml" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KANNADA, "kn" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAMIL, "ta" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TELUGU, "te" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINHALESE, "si" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BURMESE, "my" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KHMER, "km" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LAO, "lo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_VIETNAMESE, "vi" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INDONESIAN, "id" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAGALOG, "tl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ROMAN_SCRIPT, "ms" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ARABIC_SCRIPT, "ms" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AMHARIC, "am" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIGRINYA, "ti" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALLA, "om" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SOMALI, "so" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWAHILI, "sw" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUANDA, "rw" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUNDI, "rn" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHEWA, "ny" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAGASY, "mg" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESPERANTO, "eo" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_WELSH, "cy" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BASQUE, "eu" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CATALAN, "ca" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LATIN, "la" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_QUECHUA, "qu" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUARANI, "gn" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AYMARA, "ay" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TATAR, "tt" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UIGHUR, "ug" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DZONGKHA, "dz" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAVANESE, "jw" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SUNDANESE, "su" },
+
+#if 0 /* these seem to be errors that have been dropped */
+
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC },
+
+#endif
+
+ /* The following codes are new as of 2000-03-10 */
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALICIAN, "gl" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AFRIKAANS, "af" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BRETON, "br" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INUKTITUT, "iu" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC, "gd" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MANX_GAELIC, "gv" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC, "ga" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TONGAN, "to" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK_POLYTONIC, "el" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREELANDIC, "ik" },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT,"az" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SAUDI_ARABIA, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_IRAQ, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_EGYPT, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LIBYA, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_ALGERIA, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_MOROCCO, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_TUNISIA, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_OMAN, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_YEMEN, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SYRIA, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_JORDAN, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LEBANON, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_KUWAIT, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_UAE, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_BAHRAIN, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_QATAR, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BULGARIAN_BULGARIA, "bg" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CATALAN_SPAIN, "ca" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_TAIWAN, "zh-tw" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_PRC, "zh-cn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_HONG_KONG, "zh-hk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_SINGAPORE, "zh-sg" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_MACAU, "zh-mo" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CZECH_CZECH_REPUBLIC, "cs" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DANISH_DENMARK, "da" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_GERMANY, "de" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_SWITZERLAND, "de" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_AUSTRIA, "de" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LUXEMBOURG, "de" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LIECHTENSTEI, "de" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE, "el" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_STATES, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_KINGDOM, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_AUSTRALIA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CANADA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_NEW_ZEALAND, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_IRELAND, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SOUTH_AFRICA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_JAMAICA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CARIBBEAN, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_BELIZE, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_TRINIDAD, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_ZIMBABWE, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_PHILIPPINES, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT,"es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_MEXICO, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT,"es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_GUATEMALA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COSTA_RICA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PANAMA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC,"es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_VENEZUELA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COLOMBIA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PERU, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ARGENTINA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ECUADOR, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_CHILE, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_URUGUAY, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PARAGUAY, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_BOLIVIA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_EL_SALVADOR, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_HONDURAS, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_NICARAGUA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PUERTO_RICO, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FINNISH_FINLAND, "fi" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_FRANCE, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_BELGIUM, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CANADA, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SWITZERLAND, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_LUXEMBOURG, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MONACO, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HEBREW_ISRAEL, "he" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HUNGARIAN_HUNGARY, "hu" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ICELANDIC_ICELAND, "is" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_ITALY, "it" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_SWITZERLAND, "it" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_JAPANESE_JAPAN, "ja" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA,"ko" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_JOHAB_KOREA, "ko" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_NETHERLANDS, "nl" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_BELGIUM, "nl" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL, "no" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK, "nn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_POLISH_POLAND, "pl" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_BRAZIL, "pt" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_PORTUGAL, "pt" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND,"rm" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ROMANIAN_ROMANIA, "ro" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MOLDAVIAN_MOLDAVIA, "mo" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_RUSSIA, "ru" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_MOLDAVIA, "ru" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CROATIAN_CROATIA, "hr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_LATIN, "sr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC, "sr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVAK_SLOVAKIA, "sk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ALBANIAN_ALBANIA, "sq" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_SWEDEN, "sv" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_FINLAND, "sv" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_THAI_THAILAND, "th" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKISH_TURKEY, "tr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_PAKISTAN, "ur" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INDONESIAN_INDONESIA, "id" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UKRAINIAN_UKRAINE, "uk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BELARUSIAN_BELARUS, "be" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVENE_SLOVENIA, "sl" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ESTONIAN_ESTONIA, "et" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATVIAN_LATVIA, "lv" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LITHUANIAN_LITHUANIA, "lt" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA,"lt" },
+
+#ifdef TT_MS_LANGID_MAORI_NEW_ZELAND
+ /* this seems to be an error that have been dropped */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MAORI_NEW_ZEALAND, "mi" },
+#endif
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FARSI_IRAN, "fa" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VIETNAMESE_VIET_NAM, "vi" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARMENIAN_ARMENIA, "hy" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN, "az" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC, "az" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BASQUE_SPAIN, "eu" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SORBIAN_GERMANY, "wen" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MACEDONIAN_MACEDONIA, "mk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SUTU_SOUTH_AFRICA, "st" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSONGA_SOUTH_AFRICA, "ts" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSWANA_SOUTH_AFRICA, "tn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VENDA_SOUTH_AFRICA, "ven" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_XHOSA_SOUTH_AFRICA, "xh" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ZULU_SOUTH_AFRICA, "zu" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA, "af" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GEORGIAN_GEORGIA, "ka" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS, "fo" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HINDI_INDIA, "hi" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALTESE_MALTA, "mt" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SAAMI_LAPONIA, "se" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM,"gd" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IRISH_GAELIC_IRELAND, "ga" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_MALAYSIA, "ms" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM, "ms" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KAZAK_KAZAKSTAN, "kk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWAHILI_KENYA, "sw" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN, "uz" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC, "uz" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TATAR_TATARSTAN, "tt" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_INDIA, "bn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_INDIA, "pa" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUJARATI_INDIA, "gu" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ORIYA_INDIA, "or" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMIL_INDIA, "ta" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TELUGU_INDIA, "te" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANNADA_INDIA, "kn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAYALAM_INDIA, "ml" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ASSAMESE_INDIA, "as" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MARATHI_INDIA, "mr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SANSKRIT_INDIA, "sa" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KONKANI_INDIA, "kok" },
+
+ /* new as of 2001-01-01 */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_GENERAL, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_GENERAL, "zh" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_GENERAL, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_WEST_INDIES, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_REUNION, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CONGO, "fr" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SENEGAL, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CAMEROON, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_COTE_D_IVOIRE, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MALI, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA,"bs" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_INDIA, "ur" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAJIK_TAJIKISTAN, "tg" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YIDDISH_GERMANY, "yi" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN, "ky" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKMEN_TURKMENISTAN, "tk" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA, "mn" },
+
+ /* the following seems to be inconsistent;
+ here is the current "official" way: */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_BHUTAN, "bo" },
+ /* and here is what is used by Passport SDK */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_CHINA, "bo" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DZONGHKA_BHUTAN, "dz" },
+ /* end of inconsistency */
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_WELSH_WALES, "cy" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KHMER_CAMBODIA, "km" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LAO_LAOS, "lo" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BURMESE_MYANMAR, "my" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GALICIAN_SPAIN, "gl" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MANIPURI_INDIA, "mni" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINDHI_INDIA, "sd" },
+ /* the following one is only encountered in Microsoft RTF specification */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_PAKISTAN, "ks" },
+ /* the following one is not in the Passport list, looks like an omission */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_INDIA, "ks" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_NEPAL, "ne" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_INDIA, "ne" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRISIAN_NETHERLANDS, "fy" },
+
+ /* new as of 2001-03-01 (from Office Xp) */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_HONG_KONG, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_INDIA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_MALAYSIA, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SINGAPORE, "en" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SYRIAC_SYRIA, "syr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINHALESE_SRI_LANKA, "si" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHEROKEE_UNITED_STATES, "chr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INUKTITUT_CANADA, "iu" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AMHARIC_ETHIOPIA, "am" },
+#if 0
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN },
+#endif
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PASHTO_AFGHANISTAN, "ps" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FILIPINO_PHILIPPINES, "phi" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DHIVEHI_MALDIVES, "div" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_OROMO_ETHIOPIA, "om" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ETHIOPIA, "ti" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ERYTHREA, "ti" },
+
+ /* New additions from Windows Xp/Passport SDK 2001-11-10. */
+
+ /* don't ask what this one means... It is commented out currently. */
+#if 0
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE2 },
+#endif
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_UNITED_STATES, "es" },
+ /* The following two IDs blatantly violate MS specs by using a */
+ /* sublanguage >,. */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_LATIN_AMERICA, "es" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_NORTH_AFRICA, "fr" },
+
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MOROCCO, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_HAITI, "fr" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_BANGLADESH, "bn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN, "ar" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN,"mn" },
+#if 0
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_EDO_NIGERIA },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FULFULDE_NIGERIA },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IBIBIO_NIGERIA },
+#endif
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAUSA_NIGERIA, "ha" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YORUBA_NIGERIA, "yo" },
+ /* language codes from, to, are (still) unknown. */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IGBO_NIGERIA, "ibo" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANURI_NIGERIA, "kau" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUARANI_PARAGUAY, "gn" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAWAIIAN_UNITED_STATES, "haw" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATIN, "la" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SOMALI_SOMALIA, "so" },
+#if 0
+ /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
+ /* not written (but OTOH the peculiar writing system is worth */
+ /* studying). */
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YI_CHINA },
+#endif
+ { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES,"pap" },
+};
+
+#define NUM_FC_FT_LANGUAGE (int) (sizeof (fcFtLanguage) / sizeof (fcFtLanguage[0]))
+
+typedef struct {
+ FT_UShort language_id;
+ char fromcode[12];
+} FcMacRomanFake;
+
+static const FcMacRomanFake fcMacRomanFake[] = {
+ { TT_MS_LANGID_JAPANESE_JAPAN, "SJIS-WIN" },
+ { TT_MS_LANGID_ENGLISH_UNITED_STATES, "ASCII" },
+};
+
+static FcChar8 *
+FcFontCapabilities(FT_Face face);
+
+#define NUM_FC_MAC_ROMAN_FAKE (int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0]))
+
+#if USE_ICONV
+#include <iconv.h>
+#endif
+
+/*
+ * A shift-JIS will have many high bits turned on
+ */
+static FcBool
+FcLooksLikeSJIS (FcChar8 *string, int len)
+{
+ int nhigh = 0, nlow = 0;
+
+ while (len-- > 0)
+ {
+ if (*string++ & 0x80) nhigh++;
+ else nlow++;
+ }
+ /*
+ * Heuristic -- if more than 1/3 of the bytes have the high-bit set,
+ * this is likely to be SJIS and not ROMAN
+ */
+ if (nhigh * 2 > nlow)
+ return FcTrue;
+ return FcFalse;
+}
+
+static FcChar8 *
+FcSfntNameTranscode (FT_SfntName *sname)
+{
+ int i;
+ const char *fromcode;
+#if USE_ICONV
+ iconv_t cd;
+#endif
+ FcChar8 *utf8;
+
+ for (i = 0; i < NUM_FC_FT_ENCODING; i++)
+ if (fcFtEncoding[i].platform_id == sname->platform_id &&
+ (fcFtEncoding[i].encoding_id == TT_ENCODING_DONT_CARE ||
+ fcFtEncoding[i].encoding_id == sname->encoding_id))
+ break;
+ if (i == NUM_FC_FT_ENCODING)
+ return 0;
+ fromcode = fcFtEncoding[i].fromcode;
+
+ /*
+ * Many names encoded for TT_PLATFORM_MACINTOSH are broken
+ * in various ways. Kludge around them.
+ */
+ if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
+ {
+ if (sname->language_id == TT_MAC_LANGID_ENGLISH &&
+ FcLooksLikeSJIS (sname->string, sname->string_len))
+ {
+ fromcode = "SJIS";
+ }
+ else if (sname->language_id >= 0x100)
+ {
+ /*
+ * "real" Mac language IDs are all less than 150.
+ * Names using one of the MS language IDs are assumed
+ * to use an associated encoding (Yes, this is a kludge)
+ */
+ int f;
+
+ fromcode = NULL;
+ for (f = 0; f < NUM_FC_MAC_ROMAN_FAKE; f++)
+ if (fcMacRomanFake[f].language_id == sname->language_id)
+ {
+ fromcode = fcMacRomanFake[f].fromcode;
+ break;
+ }
+ if (!fromcode)
+ return 0;
+ }
+ }
+ if (!strcmp (fromcode, "UCS-2BE") || !strcmp (fromcode, "UTF-16BE"))
+ {
+ FcChar8 *src = sname->string;
+ int src_len = sname->string_len;
+ int len;
+ int wchar;
+ int ilen, olen;
+ FcChar8 *u8;
+ FcChar32 ucs4;
+
+ /*
+ * Convert Utf16 to Utf8
+ */
+
+ if (!FcUtf16Len (src, FcEndianBig, src_len, &len, &wchar))
+ return 0;
+
+ /*
+ * Allocate plenty of space. Freed below
+ */
+ utf8 = malloc (len * FC_UTF8_MAX_LEN + 1);
+ if (!utf8)
+ return 0;
+
+ u8 = utf8;
+
+ while ((ilen = FcUtf16ToUcs4 (src, FcEndianBig, &ucs4, src_len)) > 0)
+ {
+ src_len -= ilen;
+ src += ilen;
+ olen = FcUcs4ToUtf8 (ucs4, u8);
+ u8 += olen;
+ }
+ *u8 = '\0';
+ goto done;
+ }
+ if (!strcmp (fromcode, "ASCII") || !strcmp (fromcode, "ISO-8859-1"))
+ {
+ FcChar8 *src = sname->string;
+ int src_len = sname->string_len;
+ int olen;
+ FcChar8 *u8;
+ FcChar32 ucs4;
+
+ /*
+ * Convert Latin1 to Utf8. Freed below
+ */
+ utf8 = malloc (src_len * 2 + 1);
+ if (!utf8)
+ return 0;
+
+ u8 = utf8;
+ while (src_len > 0)
+ {
+ ucs4 = *src++;
+ src_len--;
+ olen = FcUcs4ToUtf8 (ucs4, u8);
+ u8 += olen;
+ }
+ *u8 = '\0';
+ goto done;
+ }
+ if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
+ {
+ FcChar8 *u8;
+ const FcCharMap *map = FcFreeTypeGetPrivateMap (ft_encoding_apple_roman);
+ FcChar8 *src = (FcChar8 *) sname->string;
+ int src_len = sname->string_len;
+
+ /*
+ * Convert AppleRoman to Utf8
+ */
+ if (!map)
+ return 0;
+
+ utf8 = malloc (sname->string_len * 3 + 1);
+ if (!utf8)
+ return 0;
+
+ u8 = utf8;
+ while (src_len > 0)
+ {
+ FcChar32 ucs4 = FcFreeTypePrivateToUcs4 (*src++, map);
+ int olen = FcUcs4ToUtf8 (ucs4, u8);
+ src_len--;
+ u8 += olen;
+ }
+ *u8 = '\0';
+ goto done;
+ }
+#if USE_ICONV
+ cd = iconv_open ("UTF-8", fromcode);
+ if (cd && cd != (iconv_t) (-1))
+ {
+ size_t in_bytes_left = sname->string_len;
+ size_t out_bytes_left = sname->string_len * FC_UTF8_MAX_LEN;
+ char *inbuf, *outbuf;
+
+ utf8 = malloc (out_bytes_left + 1);
+ if (!utf8)
+ {
+ iconv_close (cd);
+ return 0;
+ }
+
+ outbuf = (char *) utf8;
+ inbuf = (char *) sname->string;
+
+ while (in_bytes_left)
+ {
+ size_t did = iconv (cd,
+ &inbuf, &in_bytes_left,
+ &outbuf, &out_bytes_left);
+ if (did == (size_t) (-1))
+ {
+ iconv_close (cd);
+ free (utf8);
+ return 0;
+ }
+ }
+ iconv_close (cd);
+ *outbuf = '\0';
+ goto done;
+ }
+#endif
+ return 0;
+done:
+ if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0)
+ {
+ free (utf8);
+ return 0;
+ }
+ return utf8;
+}
+
+static const FcChar8 *
+FcSfntNameLanguage (FT_SfntName *sname)
+{
+ int i;
+ FT_UShort platform_id = sname->platform_id;
+ FT_UShort language_id = sname->language_id;
+
+ /*
+ * Many names encoded for TT_PLATFORM_MACINTOSH are broken
+ * in various ways. Kludge around them.
+ */
+ if (platform_id == TT_PLATFORM_MACINTOSH &&
+ sname->encoding_id == TT_MAC_ID_ROMAN &&
+ FcLooksLikeSJIS (sname->string, sname->string_len))
+ {
+ language_id = TT_MAC_LANGID_JAPANESE;
+ }
+
+ for (i = 0; i < NUM_FC_FT_LANGUAGE; i++)
+ if (fcFtLanguage[i].platform_id == platform_id &&
+ (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE ||
+ fcFtLanguage[i].language_id == language_id))
+ {
+ if (fcFtLanguage[i].lang[0] == '\0')
+ return NULL;
+ else
+ return (FcChar8 *) fcFtLanguage[i].lang;
+ }
+ return 0;
+}
+
+/* Order is significant. For example, some B&H fonts are hinted by
+ URW++, and both strings appear in the notice. */
+
+static const char notice_foundry_data[] =
+ "Bigelow\0b&h\0"
+ "Adobe\0adobe\0"
+ "Bitstream\0bitstream\0"
+ "Monotype\0monotype\0"
+ "Linotype\0linotype\0"
+ "LINOTYPE-HELL\0linotype\0"
+ "IBM\0ibm\0"
+ "URW\0urw\0"
+ "International Typeface Corporation\0itc\0"
+ "Tiro Typeworks\0tiro\0"
+ "XFree86\0xfree86\0"
+ "Microsoft\0microsoft\0"
+ "Omega\0omega\0"
+ "Font21\0hwan\0"
+ "HanYang System\0hanyang";
+
+struct _notice_foundry {
+ /* these are the offsets into the
+ * notice_foundry_data array.
+ */
+ unsigned char notice_offset;
+ unsigned char foundry_offset;
+};
+
+static const struct _notice_foundry FcNoticeFoundries[] = {
+ { 0, 8 },
+ { 12, 18 },
+ { 24, 34 },
+ { 44, 53 },
+ { 62, 71 },
+ { 80, 94 },
+ { 103, 107 },
+ { 111, 115 },
+ { 119, 154 },
+ { 158, 173 },
+ { 178, 186 },
+ { 194, 204 },
+ { 214, 220 },
+ { 226, 233 },
+ { 238, 253 }
+};
+
+#define NUM_NOTICE_FOUNDRIES (int) (sizeof (FcNoticeFoundries) / sizeof (FcNoticeFoundries[0]))
+
+static const FcChar8 *
+FcNoticeFoundry(const FT_String *notice)
+{
+ int i;
+
+ if (notice)
+ for(i = 0; i < NUM_NOTICE_FOUNDRIES; i++)
+ {
+ const struct _notice_foundry *nf = &FcNoticeFoundries[i];
+ const char *n = notice_foundry_data + nf->notice_offset;
+ const char *f = notice_foundry_data + nf->foundry_offset;
+
+ if (strstr ((const char *) notice, n))
+ return (const FcChar8 *) f;
+ }
+ return 0;
+}
+
+static FcBool
+FcVendorMatch(const FT_Char vendor[4], const FT_Char *vendor_string)
+{
+ /* vendor is not necessarily NUL-terminated. */
+ int i, len;
+
+ len = strlen((char *) vendor_string);
+ if (memcmp(vendor, vendor_string, len) != 0)
+ return FcFalse;
+ for (i = len; i < 4; i++)
+ if (vendor[i] != ' ' && vendor[i] != '\0')
+ return FcFalse;
+ return FcTrue;
+}
+
+/* This table is partly taken from ttmkfdir by Joerg Pommnitz. */
+
+/* It should not contain useless entries (such as UNKN) nor duplicate
+ entries for padding both with spaces and NULs. */
+
+static const struct {
+ const FT_Char vendor[5];
+ const FcChar8 foundry[13];
+} FcVendorFoundries[] = {
+ { "ADBE", "adobe"},
+ { "AGFA", "agfa"},
+ { "ALTS", "altsys"},
+ { "APPL", "apple"},
+ { "ARPH", "arphic"},
+ { "ATEC", "alltype"},
+ { "B&H", "b&h"},
+ { "BITS", "bitstream"},
+ { "CANO", "cannon"},
+ { "DYNA", "dynalab"},
+ { "EPSN", "epson"},
+ { "FJ", "fujitsu"},
+ { "IBM", "ibm"},
+ { "ITC", "itc"},
+ { "IMPR", "impress"},
+ { "LARA", "larabiefonts"},
+ { "LEAF", "interleaf"},
+ { "LETR", "letraset"},
+ { "LINO", "linotype"},
+ { "MACR", "macromedia"},
+ { "MONO", "monotype"},
+ { "MS", "microsoft"},
+ { "MT", "monotype"},
+ { "NEC", "nec"},
+ { "PARA", "paratype"},
+ { "QMSI", "qms"},
+ { "RICO", "ricoh"},
+ { "URW", "urw"},
+ { "Y&Y", "y&y"}
+};
+
+#define NUM_VENDOR_FOUNDRIES (int) (sizeof (FcVendorFoundries) / sizeof (FcVendorFoundries[0]))
+
+static const FcChar8 *
+FcVendorFoundry(const FT_Char vendor[4])
+{
+ int i;
+
+ if (vendor)
+ for(i = 0; i < NUM_VENDOR_FOUNDRIES; i++)
+ if (FcVendorMatch (vendor, FcVendorFoundries[i].vendor))
+ return FcVendorFoundries[i].foundry;
+ return 0;
+}
+
+typedef struct _FcStringConst {
+ const FcChar8 *name;
+ int value;
+} FcStringConst;
+
+static int
+FcStringIsConst (const FcChar8 *string,
+ const FcStringConst *c,
+ int nc)
+{
+ int i;
+
+ for (i = 0; i < nc; i++)
+ if (FcStrCmpIgnoreBlanksAndCase (string, c[i].name) == 0)
+ return c[i].value;
+ return -1;
+}
+
+static int
+FcStringContainsConst (const FcChar8 *string,
+ const FcStringConst *c,
+ int nc)
+{
+ int i;
+
+ for (i = 0; i < nc; i++)
+ {
+ if (c[i].name[0] == '<')
+ {
+ if (FcStrContainsWord (string, c[i].name + 1))
+ return c[i].value;
+ }
+ else
+ {
+ if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name))
+ return c[i].value;
+ }
+ }
+ return -1;
+}
+
+typedef FcChar8 *FC8;
+
+static const FcStringConst weightConsts[] = {
+ { (FC8) "thin", FC_WEIGHT_THIN },
+ { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT },
+ { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT },
+ { (FC8) "light", FC_WEIGHT_LIGHT },
+ { (FC8) "book", FC_WEIGHT_BOOK },
+ { (FC8) "regular", FC_WEIGHT_REGULAR },
+ { (FC8) "normal", FC_WEIGHT_NORMAL },
+ { (FC8) "medium", FC_WEIGHT_MEDIUM },
+ { (FC8) "demibold", FC_WEIGHT_DEMIBOLD },
+ { (FC8) "demi", FC_WEIGHT_DEMIBOLD },
+ { (FC8) "semibold", FC_WEIGHT_SEMIBOLD },
+ { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD },
+ { (FC8) "superbold", FC_WEIGHT_EXTRABOLD },
+ { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD },
+ { (FC8) "bold", FC_WEIGHT_BOLD },
+ { (FC8) "ultrablack", FC_WEIGHT_ULTRABLACK },
+ { (FC8) "superblack", FC_WEIGHT_EXTRABLACK },
+ { (FC8) "extrablack", FC_WEIGHT_EXTRABLACK },
+ { (FC8) "<ultra", FC_WEIGHT_ULTRABOLD }, /* only if a word */
+ { (FC8) "black", FC_WEIGHT_BLACK },
+ { (FC8) "heavy", FC_WEIGHT_HEAVY },
+};
+
+#define NUM_WEIGHT_CONSTS (int) (sizeof (weightConsts) / sizeof (weightConsts[0]))
+
+#define FcIsWeight(s) FcStringIsConst(s,weightConsts,NUM_WEIGHT_CONSTS)
+#define FcContainsWeight(s) FcStringContainsConst (s,weightConsts,NUM_WEIGHT_CONSTS)
+
+static const FcStringConst widthConsts[] = {
+ { (FC8) "ultracondensed", FC_WIDTH_ULTRACONDENSED },
+ { (FC8) "extracondensed", FC_WIDTH_EXTRACONDENSED },
+ { (FC8) "semicondensed", FC_WIDTH_SEMICONDENSED },
+ { (FC8) "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */
+ { (FC8) "normal", FC_WIDTH_NORMAL },
+ { (FC8) "semiexpanded", FC_WIDTH_SEMIEXPANDED },
+ { (FC8) "extraexpanded", FC_WIDTH_EXTRAEXPANDED },
+ { (FC8) "ultraexpanded", FC_WIDTH_ULTRAEXPANDED },
+ { (FC8) "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */
+ { (FC8) "extended", FC_WIDTH_EXPANDED },
+};
+
+#define NUM_WIDTH_CONSTS (int) (sizeof (widthConsts) / sizeof (widthConsts[0]))
+
+#define FcIsWidth(s) FcStringIsConst(s,widthConsts,NUM_WIDTH_CONSTS)
+#define FcContainsWidth(s) FcStringContainsConst (s,widthConsts,NUM_WIDTH_CONSTS)
+
+static const FcStringConst slantConsts[] = {
+ { (FC8) "italic", FC_SLANT_ITALIC },
+ { (FC8) "kursiv", FC_SLANT_ITALIC },
+ { (FC8) "oblique", FC_SLANT_OBLIQUE },
+};
+
+#define NUM_SLANT_CONSTS (int) (sizeof (slantConsts) / sizeof (slantConsts[0]))
+
+#define FcIsSlant(s) FcStringIsConst(s,slantConsts,NUM_SLANT_CONSTS)
+#define FcContainsSlant(s) FcStringContainsConst (s,slantConsts,NUM_SLANT_CONSTS)
+
+static const FcStringConst decorativeConsts[] = {
+ { (FC8) "shadow", FcTrue },
+ { (FC8) "caps", FcTrue },
+ { (FC8) "antiqua", FcTrue },
+ { (FC8) "romansc", FcTrue },
+ { (FC8) "embosed", FcTrue },
+ { (FC8) "dunhill", FcTrue },
+};
+
+#define NUM_DECORATIVE_CONSTS (int) (sizeof (decorativeConsts) / sizeof (decorativeConsts[0]))
+
+#define FcIsDecorative(s) FcStringIsConst(s,decorativeConsts,NUM_DECORATIVE_CONSTS)
+#define FcContainsDecorative(s) FcStringContainsConst (s,decorativeConsts,NUM_DECORATIVE_CONSTS)
+
+static double
+FcGetPixelSize (FT_Face face, int i)
+{
+#if HAVE_FT_GET_BDF_PROPERTY
+ if (face->num_fixed_sizes == 1)
+ {
+ BDF_PropertyRec prop;
+ int rc;
+
+ rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop);
+ if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER)
+ return (double) prop.u.integer;
+ }
+#endif
+#if HAVE_FT_BITMAP_SIZE_Y_PPEM
+ return (double) face->available_sizes[i].y_ppem / 64.0;
+#else
+ return (double) face->available_sizes[i].height;
+#endif
+}
+
+static FcBool
+FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string)
+{
+ int e;
+ FcChar8 *old;
+ for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++)
+ if (!FcStrCmpIgnoreBlanksAndCase (old, string))
+ {
+ return FcTrue;
+ }
+ return FcFalse;
+}
+
+static const FT_UShort platform_order[] = {
+ TT_PLATFORM_MICROSOFT,
+ TT_PLATFORM_APPLE_UNICODE,
+ TT_PLATFORM_MACINTOSH,
+};
+#define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0]))
+
+static const FT_UShort nameid_order[] = {
+#ifdef TT_NAME_ID_WWS_FAMILY
+ TT_NAME_ID_WWS_FAMILY,
+#endif
+ TT_NAME_ID_PREFERRED_FAMILY,
+ TT_NAME_ID_FONT_FAMILY,
+ TT_NAME_ID_MAC_FULL_NAME,
+ TT_NAME_ID_FULL_NAME,
+#ifdef TT_NAME_ID_WWS_SUBFAMILY
+ TT_NAME_ID_WWS_SUBFAMILY,
+#endif
+ TT_NAME_ID_PREFERRED_SUBFAMILY,
+ TT_NAME_ID_FONT_SUBFAMILY,
+ TT_NAME_ID_TRADEMARK,
+ TT_NAME_ID_MANUFACTURER,
+};
+
+#define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0]))
+FcPattern *
+FcFreeTypeQueryFace (const FT_Face face,
+ const FcChar8 *file,
+ int id,
+ FcBlanks *blanks)
+{
+ FcPattern *pat;
+ int slant = -1;
+ int weight = -1;
+ int width = -1;
+ FcBool decorative = FcFalse;
+ int i;
+ FcCharSet *cs;
+ FcLangSet *ls;
+#if 0
+ FcChar8 *family = 0;
+#endif
+ FcChar8 *complex_;
+ const FcChar8 *foundry = 0;
+ int spacing;
+ TT_OS2 *os2;
+#if HAVE_FT_GET_PS_FONT_INFO
+ PS_FontInfoRec psfontinfo;
+#endif
+#if HAVE_FT_GET_BDF_PROPERTY
+ BDF_PropertyRec prop;
+#endif
+ TT_Header *head;
+ const FcChar8 *exclusiveLang = 0;
+ FT_SfntName sname;
+ FT_UInt snamei, snamec;
+
+ int nfamily = 0;
+ int nfamily_lang = 0;
+ int nstyle = 0;
+ int nstyle_lang = 0;
+ int nfullname = 0;
+ int nfullname_lang = 0;
+ int p, platform;
+ int n, nameid;
+
+ FcChar8 *style = 0;
+ int st;
+
+ pat = FcPatternCreate ();
+ if (!pat)
+ goto bail0;
+
+ if (!FcPatternAddBool (pat, FC_OUTLINE,
+ (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
+ goto bail1;
+
+ if (!FcPatternAddBool (pat, FC_SCALABLE,
+ (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
+ goto bail1;
+
+
+ /*
+ * Get the OS/2 table
+ */
+ os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2);
+
+ /*
+ * Look first in the OS/2 table for the foundry, if
+ * not found here, the various notices will be searched for
+ * that information, either from the sfnt name tables or
+ * the Postscript FontInfo dictionary. Finally, the
+ * BDF properties will queried.
+ */
+
+ if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
+ foundry = FcVendorFoundry(os2->achVendID);
+
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("\n");
+ /*
+ * Grub through the name table looking for family
+ * and style names. FreeType makes quite a hash
+ * of them
+ */
+ snamec = FT_Get_Sfnt_Name_Count (face);
+ for (p = 0; p <= NUM_PLATFORM_ORDER; p++)
+ {
+ if (p < NUM_PLATFORM_ORDER)
+ platform = platform_order[p];
+ else
+ platform = 0xffff;
+
+ /*
+ * Order nameids so preferred names appear first
+ * in the resulting list
+ */
+ for (n = 0; n < NUM_NAMEID_ORDER; n++)
+ {
+ nameid = nameid_order[n];
+
+ for (snamei = 0; snamei < snamec; snamei++)
+ {
+ FcChar8 *utf8;
+ const FcChar8 *lang;
+ const char *elt = 0, *eltlang = 0;
+ int *np = 0, *nlangp = 0;
+
+ if (FT_Get_Sfnt_Name (face, snamei, &sname) != 0)
+ continue;
+ if (sname.name_id != nameid)
+ continue;
+
+ /*
+ * Sort platforms in preference order, accepting
+ * all other platforms last
+ */
+ if (p < NUM_PLATFORM_ORDER)
+ {
+ if (sname.platform_id != platform)
+ continue;
+ }
+ else
+ {
+ int sp;
+
+ for (sp = 0; sp < NUM_PLATFORM_ORDER; sp++)
+ if (sname.platform_id == platform_order[sp])
+ break;
+ if (sp != NUM_PLATFORM_ORDER)
+ continue;
+ }
+ utf8 = FcSfntNameTranscode (&sname);
+ lang = FcSfntNameLanguage (&sname);
+
+ if (!utf8)
+ continue;
+
+ switch (sname.name_id) {
+#ifdef TT_NAME_ID_WWS_FAMILY
+ case TT_NAME_ID_WWS_FAMILY:
+#endif
+ case TT_NAME_ID_PREFERRED_FAMILY:
+ case TT_NAME_ID_FONT_FAMILY:
+#if 0
+ case TT_NAME_ID_PS_NAME:
+ case TT_NAME_ID_UNIQUE_ID:
+#endif
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("found family (n %2d p %d e %d l 0x%04x) %s\n",
+ sname.name_id, sname.platform_id,
+ sname.encoding_id, sname.language_id,
+ utf8);
+
+ elt = FC_FAMILY;
+ eltlang = FC_FAMILYLANG;
+ np = &nfamily;
+ nlangp = &nfamily_lang;
+ break;
+ case TT_NAME_ID_MAC_FULL_NAME:
+ case TT_NAME_ID_FULL_NAME:
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("found full (n %2d p %d e %d l 0x%04x) %s\n",
+ sname.name_id, sname.platform_id,
+ sname.encoding_id, sname.language_id,
+ utf8);
+
+ elt = FC_FULLNAME;
+ eltlang = FC_FULLNAMELANG;
+ np = &nfullname;
+ nlangp = &nfullname_lang;
+ break;
+#ifdef TT_NAME_ID_WWS_SUBFAMILY
+ case TT_NAME_ID_WWS_SUBFAMILY:
+#endif
+ case TT_NAME_ID_PREFERRED_SUBFAMILY:
+ case TT_NAME_ID_FONT_SUBFAMILY:
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("found style (n %2d p %d e %d l 0x%04x) %s\n",
+ sname.name_id, sname.platform_id,
+ sname.encoding_id, sname.language_id,
+ utf8);
+
+ elt = FC_STYLE;
+ eltlang = FC_STYLELANG;
+ np = &nstyle;
+ nlangp = &nstyle_lang;
+ break;
+ case TT_NAME_ID_TRADEMARK:
+ case TT_NAME_ID_MANUFACTURER:
+ /* If the foundry wasn't found in the OS/2 table, look here */
+ if(!foundry)
+ foundry = FcNoticeFoundry((FT_String *) utf8);
+ break;
+ }
+ if (elt)
+ {
+ if (FcStringInPatternElement (pat, elt, utf8))
+ {
+ free (utf8);
+ continue;
+ }
+
+ /* add new element */
+ if (!FcPatternAddString (pat, elt, utf8))
+ {
+ free (utf8);
+ goto bail1;
+ }
+ free (utf8);
+ if (lang)
+ {
+ /* pad lang list with 'xx' to line up with elt */
+ while (*nlangp < *np)
+ {
+ if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx"))
+ goto bail1;
+ ++*nlangp;
+ }
+ if (!FcPatternAddString (pat, eltlang, lang))
+ goto bail1;
+ ++*nlangp;
+ }
+ ++*np;
+ }
+ else
+ free (utf8);
+ }
+ }
+ }
+
+ if (!nfamily && face->family_name &&
+ FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0)
+ {
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("using FreeType family \"%s\"\n", face->family_name);
+ if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name))
+ goto bail1;
+ ++nfamily;
+ }
+
+ if (!nstyle && face->style_name &&
+ FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0)
+ {
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("using FreeType style \"%s\"\n", face->style_name);
+ if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name))
+ goto bail1;
+ ++nstyle;
+ }
+
+ if (!nfamily)
+ {
+ FcChar8 *start, *end;
+ FcChar8 *family;
+
+ start = (FcChar8 *) strrchr ((char *) file, '/');
+ if (start)
+ start++;
+ else
+ start = (FcChar8 *) file;
+ end = (FcChar8 *) strrchr ((char *) start, '.');
+ if (!end)
+ end = start + strlen ((char *) start);
+ /* freed below */
+ family = malloc (end - start + 1);
+ strncpy ((char *) family, (char *) start, end - start);
+ family[end - start] = '\0';
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("using filename for family %s\n", family);
+ if (!FcPatternAddString (pat, FC_FAMILY, family))
+ {
+ free (family);
+ goto bail1;
+ }
+ free (family);
+ ++nfamily;
+ }
+
+ if (!FcPatternAddString (pat, FC_FILE, file))
+ goto bail1;
+
+ if (!FcPatternAddInteger (pat, FC_INDEX, id))
+ goto bail1;
+
+#if 0
+ /*
+ * don't even try this -- CJK 'monospace' fonts are really
+ * dual width, and most other fonts don't bother to set
+ * the attribute. Sigh.
+ */
+ if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0)
+ if (!FcPatternAddInteger (pat, FC_SPACING, FC_MONO))
+ goto bail1;
+#endif
+
+ /*
+ * Find the font revision (if available)
+ */
+ head = (TT_Header *) FT_Get_Sfnt_Table (face, ft_sfnt_head);
+ if (head)
+ {
+ if (!FcPatternAddInteger (pat, FC_FONTVERSION, head->Font_Revision))
+ goto bail1;
+ }
+ else
+ {
+ if (!FcPatternAddInteger (pat, FC_FONTVERSION, 0))
+ goto bail1;
+ }
+
+ if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
+ {
+ for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
+ {
+ FT_ULong bits;
+ int bit;
+ if (FcCodePageRange[i].bit < 32)
+ {
+ bits = os2->ulCodePageRange1;
+ bit = FcCodePageRange[i].bit;
+ }
+ else
+ {
+ bits = os2->ulCodePageRange2;
+ bit = FcCodePageRange[i].bit - 32;
+ }
+ if (bits & (1 << bit))
+ {
+ /*
+ * If the font advertises support for multiple
+ * "exclusive" languages, then include support
+ * for any language found to have coverage
+ */
+ if (exclusiveLang)
+ {
+ exclusiveLang = 0;
+ break;
+ }
+ exclusiveLang = FcCodePageRange[i].lang;
+ }
+ }
+ }
+
+ if (os2 && os2->version != 0xffff)
+ {
+ if (os2->usWeightClass == 0)
+ ;
+ else if (os2->usWeightClass < 150)
+ weight = FC_WEIGHT_THIN;
+ else if (os2->usWeightClass < 250)
+ weight = FC_WEIGHT_EXTRALIGHT;
+ else if (os2->usWeightClass < 350)
+ weight = FC_WEIGHT_LIGHT;
+ else if (os2->usWeightClass < 450)
+ weight = FC_WEIGHT_REGULAR;
+ else if (os2->usWeightClass < 550)
+ weight = FC_WEIGHT_MEDIUM;
+ else if (os2->usWeightClass < 650)
+ weight = FC_WEIGHT_SEMIBOLD;
+ else if (os2->usWeightClass < 750)
+ weight = FC_WEIGHT_BOLD;
+ else if (os2->usWeightClass < 850)
+ weight = FC_WEIGHT_EXTRABOLD;
+ else if (os2->usWeightClass < 925)
+ weight = FC_WEIGHT_BLACK;
+ else if (os2->usWeightClass < 1000)
+ weight = FC_WEIGHT_EXTRABLACK;
+ if ((FcDebug() & FC_DBG_SCANV) && weight != -1)
+ printf ("\tos2 weight class %d maps to weight %d\n",
+ os2->usWeightClass, weight);
+
+ switch (os2->usWidthClass) {
+ case 1: width = FC_WIDTH_ULTRACONDENSED; break;
+ case 2: width = FC_WIDTH_EXTRACONDENSED; break;
+ case 3: width = FC_WIDTH_CONDENSED; break;
+ case 4: width = FC_WIDTH_SEMICONDENSED; break;
+ case 5: width = FC_WIDTH_NORMAL; break;
+ case 6: width = FC_WIDTH_SEMIEXPANDED; break;
+ case 7: width = FC_WIDTH_EXPANDED; break;
+ case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
+ case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
+ }
+ if ((FcDebug() & FC_DBG_SCANV) && width != -1)
+ printf ("\tos2 width class %d maps to width %d\n",
+ os2->usWidthClass, width);
+ }
+ if (os2 && (complex_ = FcFontCapabilities(face)))
+ {
+ if (!FcPatternAddString (pat, FC_CAPABILITY, complex_))
+ {
+ free (complex_);
+ goto bail1;
+ }
+ free (complex_);
+ }
+
+ /*
+ * Type 1: Check for FontInfo dictionary information
+ * Code from g2@magestudios.net (Gerard Escalante)
+ */
+
+#if HAVE_FT_GET_PS_FONT_INFO
+ if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0)
+ {
+ if (weight == -1 && psfontinfo.weight)
+ {
+ weight = FcIsWeight ((FcChar8 *) psfontinfo.weight);
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\tType1 weight %s maps to %d\n",
+ psfontinfo.weight, weight);
+ }
+
+#if 0
+ /*
+ * Don't bother with italic_angle; FreeType already extracts that
+ * information for us and sticks it into style_flags
+ */
+ if (psfontinfo.italic_angle)
+ slant = FC_SLANT_ITALIC;
+ else
+ slant = FC_SLANT_ROMAN;
+#endif
+
+ if(!foundry)
+ foundry = FcNoticeFoundry(psfontinfo.notice);
+ }
+#endif /* HAVE_FT_GET_PS_FONT_INFO */
+
+#if HAVE_FT_GET_BDF_PROPERTY
+ /*
+ * Finally, look for a FOUNDRY BDF property if no other
+ * mechanism has managed to locate a foundry
+ */
+
+ if (!foundry)
+ {
+ int rc;
+ rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop);
+ if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM)
+ foundry = (FcChar8 *) prop.u.atom;
+ }
+
+ if (width == -1)
+ {
+ if (FT_Get_BDF_Property(face, "RELATIVE_SETWIDTH", &prop) == 0 &&
+ (prop.type == BDF_PROPERTY_TYPE_INTEGER ||
+ prop.type == BDF_PROPERTY_TYPE_CARDINAL))
+ {
+ FT_Int32 value;
+
+ if (prop.type == BDF_PROPERTY_TYPE_INTEGER)
+ value = prop.u.integer;
+ else
+ value = (FT_Int32) prop.u.cardinal;
+ switch ((value + 5) / 10) {
+ case 1: width = FC_WIDTH_ULTRACONDENSED; break;
+ case 2: width = FC_WIDTH_EXTRACONDENSED; break;
+ case 3: width = FC_WIDTH_CONDENSED; break;
+ case 4: width = FC_WIDTH_SEMICONDENSED; break;
+ case 5: width = FC_WIDTH_NORMAL; break;
+ case 6: width = FC_WIDTH_SEMIEXPANDED; break;
+ case 7: width = FC_WIDTH_EXPANDED; break;
+ case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
+ case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
+ }
+ }
+ if (width == -1 &&
+ FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 &&
+ prop.type == BDF_PROPERTY_TYPE_ATOM)
+ {
+ width = FcIsWidth ((FcChar8 *) prop.u.atom);
+ if (FcDebug () & FC_DBG_SCANV)
+ printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width);
+ }
+ }
+#endif
+
+ /*
+ * Look for weight, width and slant names in the style value
+ */
+ for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++)
+ {
+ if (weight == -1)
+ {
+ weight = FcContainsWeight (style);
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\tStyle %s maps to weight %d\n", style, weight);
+ }
+ if (width == -1)
+ {
+ width = FcContainsWidth (style);
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\tStyle %s maps to width %d\n", style, width);
+ }
+ if (slant == -1)
+ {
+ slant = FcContainsSlant (style);
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\tStyle %s maps to slant %d\n", style, slant);
+ }
+ if (decorative == FcFalse)
+ {
+ decorative = FcContainsDecorative (style) > 0;
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\tStyle %s maps to decorative %d\n", style, decorative);
+ }
+ }
+ /*
+ * Pull default values from the FreeType flags if more
+ * specific values not found above
+ */
+ if (slant == -1)
+ {
+ slant = FC_SLANT_ROMAN;
+ if (face->style_flags & FT_STYLE_FLAG_ITALIC)
+ slant = FC_SLANT_ITALIC;
+ }
+
+ if (weight == -1)
+ {
+ weight = FC_WEIGHT_MEDIUM;
+ if (face->style_flags & FT_STYLE_FLAG_BOLD)
+ weight = FC_WEIGHT_BOLD;
+ }
+
+ if (width == -1)
+ width = FC_WIDTH_NORMAL;
+
+ if (foundry == 0)
+ foundry = (FcChar8 *) "unknown";
+
+ if (!FcPatternAddInteger (pat, FC_SLANT, slant))
+ goto bail1;
+
+ if (!FcPatternAddInteger (pat, FC_WEIGHT, weight))
+ goto bail1;
+
+ if (!FcPatternAddInteger (pat, FC_WIDTH, width))
+ goto bail1;
+
+ if (!FcPatternAddString (pat, FC_FOUNDRY, foundry))
+ goto bail1;
+
+ if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative))
+ goto bail1;
+
+ /*
+ * Compute the unicode coverage for the font
+ */
+ cs = FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
+ if (!cs)
+ goto bail1;
+
+#if HAVE_FT_GET_BDF_PROPERTY
+ /* For PCF fonts, override the computed spacing with the one from
+ the property */
+ if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 &&
+ prop.type == BDF_PROPERTY_TYPE_ATOM) {
+ if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C"))
+ spacing = FC_CHARCELL;
+ else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M"))
+ spacing = FC_MONO;
+ else if(!strcmp(prop.u.atom, "p") || !strcmp(prop.u.atom, "P"))
+ spacing = FC_PROPORTIONAL;
+ }
+#endif
+
+ /*
+ * Skip over PCF fonts that have no encoded characters; they're
+ * usually just Unicode fonts transcoded to some legacy encoding
+ * FT forces us to approximate whether a font is a PCF font
+ * or not by whether it has any BDF properties. Try PIXEL_SIZE;
+ * I don't know how to get a list of BDF properties on the font. -PL
+ */
+ if (FcCharSetCount (cs) == 0)
+ {
+#if HAVE_FT_GET_BDF_PROPERTY
+ if(FT_Get_BDF_Property(face, "PIXEL_SIZE", &prop) == 0)
+ goto bail2;
+#endif
+ }
+
+ if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
+ goto bail2;
+
+ ls = FcFreeTypeLangSet (cs, exclusiveLang);
+ if (!ls)
+ goto bail2;
+
+ if (!FcPatternAddLangSet (pat, FC_LANG, ls))
+ {
+ FcLangSetDestroy (ls);
+ goto bail2;
+ }
+
+ FcLangSetDestroy (ls);
+
+ if (spacing != FC_PROPORTIONAL)
+ if (!FcPatternAddInteger (pat, FC_SPACING, spacing))
+ goto bail2;
+
+ if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
+ {
+ for (i = 0; i < face->num_fixed_sizes; i++)
+ if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE,
+ FcGetPixelSize (face, i)))
+ goto bail2;
+ if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse))
+ goto bail2;
+ }
+#if HAVE_FT_GET_X11_FONT_FORMAT
+ /*
+ * Use the (not well documented or supported) X-specific function
+ * from FreeType to figure out the font format
+ */
+ {
+ const char *font_format = FT_Get_X11_Font_Format (face);
+ if (font_format)
+ FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format);
+ }
+#endif
+
+ /*
+ * Drop our reference to the charset
+ */
+ FcCharSetDestroy (cs);
+
+ return pat;
+
+bail2:
+ FcCharSetDestroy (cs);
+bail1:
+ FcPatternDestroy (pat);
+bail0:
+ return NULL;
+}
+
+FcPattern *
+FcFreeTypeQuery(const FcChar8 *file,
+ int id,
+ FcBlanks *blanks,
+ int *count)
+{
+ FT_Face face;
+ FT_Library ftLibrary;
+ FcPattern *pat = NULL;
+
+ if (FT_Init_FreeType (&ftLibrary))
+ return NULL;
+
+ if (FT_New_Face (ftLibrary, (char *) file, id, &face))
+ goto bail;
+
+ *count = face->num_faces;
+
+ pat = FcFreeTypeQueryFace (face, file, id, blanks);
+
+ FT_Done_Face (face);
+bail:
+ FT_Done_FreeType (ftLibrary);
+ return pat;
+}
+
+/*
+ * For our purposes, this approximation is sufficient
+ */
+#if !HAVE_FT_GET_NEXT_CHAR
+#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \
+ (*(gi) = 0), 0 : \
+ (*(gi) = 1), (ucs4) + 1)
+#warning "No FT_Get_Next_Char: Please install freetype version 2.1.0 or newer"
+#endif
+
+typedef struct _FcCharEnt {
+ FcChar16 bmp;
+ unsigned char encode;
+} FcCharEnt;
+
+struct _FcCharMap {
+ const FcCharEnt *ent;
+ int nent;
+};
+
+typedef struct _FcFontDecode {
+ FT_Encoding encoding;
+ const FcCharMap *map;
+ FcChar32 max;
+} FcFontDecode;
+
+static const FcCharEnt AppleRomanEnt[] = {
+ { 0x0020, 0x20 }, /* SPACE */
+ { 0x0021, 0x21 }, /* EXCLAMATION MARK */
+ { 0x0022, 0x22 }, /* QUOTATION MARK */
+ { 0x0023, 0x23 }, /* NUMBER SIGN */
+ { 0x0024, 0x24 }, /* DOLLAR SIGN */
+ { 0x0025, 0x25 }, /* PERCENT SIGN */
+ { 0x0026, 0x26 }, /* AMPERSAND */
+ { 0x0027, 0x27 }, /* APOSTROPHE */
+ { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
+ { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
+ { 0x002A, 0x2A }, /* ASTERISK */
+ { 0x002B, 0x2B }, /* PLUS SIGN */
+ { 0x002C, 0x2C }, /* COMMA */
+ { 0x002D, 0x2D }, /* HYPHEN-MINUS */
+ { 0x002E, 0x2E }, /* FULL STOP */
+ { 0x002F, 0x2F }, /* SOLIDUS */
+ { 0x0030, 0x30 }, /* DIGIT ZERO */
+ { 0x0031, 0x31 }, /* DIGIT ONE */
+ { 0x0032, 0x32 }, /* DIGIT TWO */
+ { 0x0033, 0x33 }, /* DIGIT THREE */
+ { 0x0034, 0x34 }, /* DIGIT FOUR */
+ { 0x0035, 0x35 }, /* DIGIT FIVE */
+ { 0x0036, 0x36 }, /* DIGIT SIX */
+ { 0x0037, 0x37 }, /* DIGIT SEVEN */
+ { 0x0038, 0x38 }, /* DIGIT EIGHT */
+ { 0x0039, 0x39 }, /* DIGIT NINE */
+ { 0x003A, 0x3A }, /* COLON */
+ { 0x003B, 0x3B }, /* SEMICOLON */
+ { 0x003C, 0x3C }, /* LESS-THAN SIGN */
+ { 0x003D, 0x3D }, /* EQUALS SIGN */
+ { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
+ { 0x003F, 0x3F }, /* QUESTION MARK */
+ { 0x0040, 0x40 }, /* COMMERCIAL AT */
+ { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
+ { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
+ { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
+ { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
+ { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
+ { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
+ { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
+ { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
+ { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
+ { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
+ { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
+ { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
+ { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
+ { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
+ { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
+ { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
+ { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
+ { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
+ { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
+ { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
+ { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
+ { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
+ { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
+ { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
+ { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
+ { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
+ { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
+ { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
+ { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
+ { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
+ { 0x005F, 0x5F }, /* LOW LINE */
+ { 0x0060, 0x60 }, /* GRAVE ACCENT */
+ { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
+ { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
+ { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
+ { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
+ { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
+ { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
+ { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
+ { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
+ { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
+ { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
+ { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
+ { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
+ { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
+ { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
+ { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
+ { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
+ { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
+ { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
+ { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
+ { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
+ { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
+ { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
+ { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
+ { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
+ { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
+ { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
+ { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
+ { 0x007C, 0x7C }, /* VERTICAL LINE */
+ { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
+ { 0x007E, 0x7E }, /* TILDE */
+ { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
+ { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
+ { 0x00A2, 0xA2 }, /* CENT SIGN */
+ { 0x00A3, 0xA3 }, /* POUND SIGN */
+ { 0x00A5, 0xB4 }, /* YEN SIGN */
+ { 0x00A7, 0xA4 }, /* SECTION SIGN */
+ { 0x00A8, 0xAC }, /* DIAERESIS */
+ { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
+ { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
+ { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+ { 0x00AC, 0xC2 }, /* NOT SIGN */
+ { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
+ { 0x00AF, 0xF8 }, /* MACRON */
+ { 0x00B0, 0xA1 }, /* DEGREE SIGN */
+ { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
+ { 0x00B4, 0xAB }, /* ACUTE ACCENT */
+ { 0x00B5, 0xB5 }, /* MICRO SIGN */
+ { 0x00B6, 0xA6 }, /* PILCROW SIGN */
+ { 0x00B7, 0xE1 }, /* MIDDLE DOT */
+ { 0x00B8, 0xFC }, /* CEDILLA */
+ { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
+ { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+ { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
+ { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
+ { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
+ { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+ { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
+ { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
+ { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
+ { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
+ { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
+ { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
+ { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
+ { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
+ { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
+ { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
+ { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
+ { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+ { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
+ { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
+ { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
+ { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
+ { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+ { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
+ { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
+ { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
+ { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
+ { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
+ { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
+ { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
+ { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
+ { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
+ { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
+ { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
+ { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
+ { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
+ { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
+ { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
+ { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
+ { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
+ { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
+ { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
+ { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
+ { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
+ { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
+ { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
+ { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
+ { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
+ { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
+ { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
+ { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
+ { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
+ { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
+ { 0x00F7, 0xD6 }, /* DIVISION SIGN */
+ { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
+ { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
+ { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
+ { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
+ { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
+ { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
+ { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
+ { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
+ { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
+ { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
+ { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
+ { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
+ { 0x02C7, 0xFF }, /* CARON */
+ { 0x02D8, 0xF9 }, /* BREVE */
+ { 0x02D9, 0xFA }, /* DOT ABOVE */
+ { 0x02DA, 0xFB }, /* RING ABOVE */
+ { 0x02DB, 0xFE }, /* OGONEK */
+ { 0x02DC, 0xF7 }, /* SMALL TILDE */
+ { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
+ { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
+ { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
+ { 0x2013, 0xD0 }, /* EN DASH */
+ { 0x2014, 0xD1 }, /* EM DASH */
+ { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
+ { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
+ { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
+ { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
+ { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
+ { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
+ { 0x2020, 0xA0 }, /* DAGGER */
+ { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
+ { 0x2022, 0xA5 }, /* BULLET */
+ { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
+ { 0x2030, 0xE4 }, /* PER MILLE SIGN */
+ { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+ { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+ { 0x2044, 0xDA }, /* FRACTION SLASH */
+ { 0x20AC, 0xDB }, /* EURO SIGN */
+ { 0x2122, 0xAA }, /* TRADE MARK SIGN */
+ { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
+ { 0x2206, 0xC6 }, /* INCREMENT */
+ { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
+ { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
+ { 0x221A, 0xC3 }, /* SQUARE ROOT */
+ { 0x221E, 0xB0 }, /* INFINITY */
+ { 0x222B, 0xBA }, /* INTEGRAL */
+ { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
+ { 0x2260, 0xAD }, /* NOT EQUAL TO */
+ { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
+ { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
+ { 0x25CA, 0xD7 }, /* LOZENGE */
+ { 0xF8FF, 0xF0 }, /* Apple logo */
+ { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
+ { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
+};
+
+static const FcCharMap AppleRoman = {
+ AppleRomanEnt,
+ sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
+};
+
+static const FcCharEnt AdobeSymbolEnt[] = {
+ { 0x0020, 0x20 }, /* SPACE # space */
+ { 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */
+ { 0x0023, 0x23 }, /* NUMBER SIGN # numbersign */
+ { 0x0025, 0x25 }, /* PERCENT SIGN # percent */
+ { 0x0026, 0x26 }, /* AMPERSAND # ampersand */
+ { 0x0028, 0x28 }, /* LEFT PARENTHESIS # parenleft */
+ { 0x0029, 0x29 }, /* RIGHT PARENTHESIS # parenright */
+ { 0x002B, 0x2B }, /* PLUS SIGN # plus */
+ { 0x002C, 0x2C }, /* COMMA # comma */
+ { 0x002E, 0x2E }, /* FULL STOP # period */
+ { 0x002F, 0x2F }, /* SOLIDUS # slash */
+ { 0x0030, 0x30 }, /* DIGIT ZERO # zero */
+ { 0x0031, 0x31 }, /* DIGIT ONE # one */
+ { 0x0032, 0x32 }, /* DIGIT TWO # two */
+ { 0x0033, 0x33 }, /* DIGIT THREE # three */
+ { 0x0034, 0x34 }, /* DIGIT FOUR # four */
+ { 0x0035, 0x35 }, /* DIGIT FIVE # five */
+ { 0x0036, 0x36 }, /* DIGIT SIX # six */
+ { 0x0037, 0x37 }, /* DIGIT SEVEN # seven */
+ { 0x0038, 0x38 }, /* DIGIT EIGHT # eight */
+ { 0x0039, 0x39 }, /* DIGIT NINE # nine */
+ { 0x003A, 0x3A }, /* COLON # colon */
+ { 0x003B, 0x3B }, /* SEMICOLON # semicolon */
+ { 0x003C, 0x3C }, /* LESS-THAN SIGN # less */
+ { 0x003D, 0x3D }, /* EQUALS SIGN # equal */
+ { 0x003E, 0x3E }, /* GREATER-THAN SIGN # greater */
+ { 0x003F, 0x3F }, /* QUESTION MARK # question */
+ { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET # bracketleft */
+ { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET # bracketright */
+ { 0x005F, 0x5F }, /* LOW LINE # underscore */
+ { 0x007B, 0x7B }, /* LEFT CURLY BRACKET # braceleft */
+ { 0x007C, 0x7C }, /* VERTICAL LINE # bar */
+ { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET # braceright */
+ { 0x00A0, 0x20 }, /* NO-BREAK SPACE # space */
+ { 0x00AC, 0xD8 }, /* NOT SIGN # logicalnot */
+ { 0x00B0, 0xB0 }, /* DEGREE SIGN # degree */
+ { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN # plusminus */
+ { 0x00B5, 0x6D }, /* MICRO SIGN # mu */
+ { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN # multiply */
+ { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */
+ { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK # florin */
+ { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA # Alpha */
+ { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA # Beta */
+ { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA # Gamma */
+ { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA # Delta */
+ { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON # Epsilon */
+ { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA # Zeta */
+ { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA # Eta */
+ { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA # Theta */
+ { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA # Iota */
+ { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA # Kappa */
+ { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA # Lambda */
+ { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU # Mu */
+ { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU # Nu */
+ { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI # Xi */
+ { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON # Omicron */
+ { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI # Pi */
+ { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO # Rho */
+ { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA # Sigma */
+ { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU # Tau */
+ { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON # Upsilon */
+ { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI # Phi */
+ { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI # Chi */
+ { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI # Psi */
+ { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA # Omega */
+ { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA # alpha */
+ { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA # beta */
+ { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA # gamma */
+ { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA # delta */
+ { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON # epsilon */
+ { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA # zeta */
+ { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA # eta */
+ { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA # theta */
+ { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA # iota */
+ { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA # kappa */
+ { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA # lambda */
+ { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */
+ { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */
+ { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */
+ { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON # omicron */
+ { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */
+ { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO # rho */
+ { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA # sigma1 */
+ { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA # sigma */
+ { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU # tau */
+ { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON # upsilon */
+ { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI # phi */
+ { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI # chi */
+ { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI # psi */
+ { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA # omega */
+ { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL # theta1 */
+ { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL # Upsilon1 */
+ { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL # phi1 */
+ { 0x03D6, 0x76 }, /* GREEK PI SYMBOL # omega1 */
+ { 0x2022, 0xB7 }, /* BULLET # bullet */
+ { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS # ellipsis */
+ { 0x2032, 0xA2 }, /* PRIME # minute */
+ { 0x2033, 0xB2 }, /* DOUBLE PRIME # second */
+ { 0x2044, 0xA4 }, /* FRACTION SLASH # fraction */
+ { 0x20AC, 0xA0 }, /* EURO SIGN # Euro */
+ { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I # Ifraktur */
+ { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P # weierstrass */
+ { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R # Rfraktur */
+ { 0x2126, 0x57 }, /* OHM SIGN # Omega */
+ { 0x2135, 0xC0 }, /* ALEF SYMBOL # aleph */
+ { 0x2190, 0xAC }, /* LEFTWARDS ARROW # arrowleft */
+ { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */
+ { 0x2192, 0xAE }, /* RIGHTWARDS ARROW # arrowright */
+ { 0x2193, 0xAF }, /* DOWNWARDS ARROW # arrowdown */
+ { 0x2194, 0xAB }, /* LEFT RIGHT ARROW # arrowboth */
+ { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */
+ { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW # arrowdblleft */
+ { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW # arrowdblup */
+ { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW # arrowdblright */
+ { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW # arrowdbldown */
+ { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW # arrowdblboth */
+ { 0x2200, 0x22 }, /* FOR ALL # universal */
+ { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL # partialdiff */
+ { 0x2203, 0x24 }, /* THERE EXISTS # existential */
+ { 0x2205, 0xC6 }, /* EMPTY SET # emptyset */
+ { 0x2206, 0x44 }, /* INCREMENT # Delta */
+ { 0x2207, 0xD1 }, /* NABLA # gradient */
+ { 0x2208, 0xCE }, /* ELEMENT OF # element */
+ { 0x2209, 0xCF }, /* NOT AN ELEMENT OF # notelement */
+ { 0x220B, 0x27 }, /* CONTAINS AS MEMBER # suchthat */
+ { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */
+ { 0x2211, 0xE5 }, /* N-ARY SUMMATION # summation */
+ { 0x2212, 0x2D }, /* MINUS SIGN # minus */
+ { 0x2215, 0xA4 }, /* DIVISION SLASH # fraction */
+ { 0x2217, 0x2A }, /* ASTERISK OPERATOR # asteriskmath */
+ { 0x221A, 0xD6 }, /* SQUARE ROOT # radical */
+ { 0x221D, 0xB5 }, /* PROPORTIONAL TO # proportional */
+ { 0x221E, 0xA5 }, /* INFINITY # infinity */
+ { 0x2220, 0xD0 }, /* ANGLE # angle */
+ { 0x2227, 0xD9 }, /* LOGICAL AND # logicaland */
+ { 0x2228, 0xDA }, /* LOGICAL OR # logicalor */
+ { 0x2229, 0xC7 }, /* INTERSECTION # intersection */
+ { 0x222A, 0xC8 }, /* UNION # union */
+ { 0x222B, 0xF2 }, /* INTEGRAL # integral */
+ { 0x2234, 0x5C }, /* THEREFORE # therefore */
+ { 0x223C, 0x7E }, /* TILDE OPERATOR # similar */
+ { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO # congruent */
+ { 0x2248, 0xBB }, /* ALMOST EQUAL TO # approxequal */
+ { 0x2260, 0xB9 }, /* NOT EQUAL TO # notequal */
+ { 0x2261, 0xBA }, /* IDENTICAL TO # equivalence */
+ { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */
+ { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO # greaterequal */
+ { 0x2282, 0xCC }, /* SUBSET OF # propersubset */
+ { 0x2283, 0xC9 }, /* SUPERSET OF # propersuperset */
+ { 0x2284, 0xCB }, /* NOT A SUBSET OF # notsubset */
+ { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */
+ { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO # reflexsuperset */
+ { 0x2295, 0xC5 }, /* CIRCLED PLUS # circleplus */
+ { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */
+ { 0x22A5, 0x5E }, /* UP TACK # perpendicular */
+ { 0x22C5, 0xD7 }, /* DOT OPERATOR # dotmath */
+ { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL # integraltp */
+ { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL # integralbt */
+ { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET # angleleft */
+ { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET # angleright */
+ { 0x25CA, 0xE0 }, /* LOZENGE # lozenge */
+ { 0x2660, 0xAA }, /* BLACK SPADE SUIT # spade */
+ { 0x2663, 0xA7 }, /* BLACK CLUB SUIT # club */
+ { 0x2665, 0xA9 }, /* BLACK HEART SUIT # heart */
+ { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT # diamond */
+ { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF # copyrightserif (CUS) */
+ { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */
+ { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */
+ { 0xF8E5, 0x60 }, /* RADICAL EXTENDER # radicalex (CUS) */
+ { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER # arrowvertex (CUS) */
+ { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER # arrowhorizex (CUS) */
+ { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF # registersans (CUS) */
+ { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF # copyrightsans (CUS) */
+ { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF # trademarksans (CUS) */
+ { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP # parenlefttp (CUS) */
+ { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER # parenleftex (CUS) */
+ { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM # parenleftbt (CUS) */
+ { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP # bracketlefttp (CUS) */
+ { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER # bracketleftex (CUS) */
+ { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM # bracketleftbt (CUS) */
+ { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP # bracelefttp (CUS) */
+ { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID # braceleftmid (CUS) */
+ { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM # braceleftbt (CUS) */
+ { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER # braceex (CUS) */
+ { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER # integralex (CUS) */
+ { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP # parenrighttp (CUS) */
+ { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER # parenrightex (CUS) */
+ { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM # parenrightbt (CUS) */
+ { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP # bracketrighttp (CUS) */
+ { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */
+ { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM # bracketrightbt (CUS) */
+ { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP # bracerighttp (CUS) */
+ { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID # bracerightmid (CUS) */
+ { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM # bracerightbt (CUS) */
+};
+
+static const FcCharMap AdobeSymbol = {
+ AdobeSymbolEnt,
+ sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]),
+};
+
+static const FcFontDecode fcFontDecoders[] = {
+ { ft_encoding_unicode, 0, (1 << 21) - 1 },
+ { ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 },
+ { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 },
+};
+
+#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
+
+static const FcChar32 prefer_unicode[] = {
+ 0x20ac, /* EURO SIGN */
+};
+
+#define NUM_PREFER_UNICODE (int) (sizeof (prefer_unicode) / sizeof (prefer_unicode[0]))
+
+FcChar32
+FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map)
+{
+ int low, high, mid;
+ FcChar16 bmp;
+
+ low = 0;
+ high = map->nent - 1;
+ if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4)
+ return ~0;
+ while (low <= high)
+ {
+ mid = (high + low) >> 1;
+ bmp = map->ent[mid].bmp;
+ if (ucs4 == bmp)
+ return (FT_ULong) map->ent[mid].encode;
+ if (ucs4 < bmp)
+ high = mid - 1;
+ else
+ low = mid + 1;
+ }
+ return ~0;
+}
+
+FcChar32
+FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map)
+{
+ int i;
+
+ for (i = 0; i < map->nent; i++)
+ if (map->ent[i].encode == private)
+ return (FcChar32) map->ent[i].bmp;
+ return ~0;
+}
+
+const FcCharMap *
+FcFreeTypeGetPrivateMap (FT_Encoding encoding)
+{
+ int i;
+
+ for (i = 0; i < NUM_DECODE; i++)
+ if (fcFontDecoders[i].encoding == encoding)
+ return fcFontDecoders[i].map;
+ return 0;
+}
+
+#include "../fc-glyphname/fcglyphname.h"
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name)
+{
+ FcChar32 h = 0;
+ FcChar8 c;
+
+ while ((c = *name++))
+ {
+ h = ((h << 1) | (h >> 31)) ^ c;
+ }
+ return h;
+}
+
+#if HAVE_FT_HAS_PS_GLYPH_NAMES
+/*
+ * Use Type1 glyph names for fonts which have reliable names
+ * and which export an Adobe Custom mapping
+ */
+static FcBool
+FcFreeTypeUseNames (FT_Face face)
+{
+ FT_Int map;
+
+ if (!FT_Has_PS_Glyph_Names (face))
+ return FcFalse;
+ for (map = 0; map < face->num_charmaps; map++)
+ if (face->charmaps[map]->encoding == ft_encoding_adobe_custom)
+ return FcTrue;
+ return FcFalse;
+}
+
+static const FcChar8 *
+FcUcs4ToGlyphName (FcChar32 ucs4)
+{
+ int i = (int) (ucs4 % FC_GLYPHNAME_HASH);
+ int r = 0;
+ FcGlyphId gn;
+
+ while ((gn = _fc_ucs_to_name[i]) != -1)
+ {
+ if (_fc_glyph_names[gn].ucs == ucs4)
+ return _fc_glyph_names[gn].name;
+ if (!r)
+ {
+ r = (int) (ucs4 % FC_GLYPHNAME_REHASH);
+ if (!r)
+ r = 1;
+ }
+ i += r;
+ if (i >= FC_GLYPHNAME_HASH)
+ i -= FC_GLYPHNAME_HASH;
+ }
+ return 0;
+}
+
+static FcChar32
+FcGlyphNameToUcs4 (FcChar8 *name)
+{
+ FcChar32 h = FcHashGlyphName (name);
+ int i = (int) (h % FC_GLYPHNAME_HASH);
+ int r = 0;
+ FcGlyphId gn;
+
+ while ((gn = _fc_name_to_ucs[i]) != -1)
+ {
+ if (!strcmp ((char *) name, (char *) _fc_glyph_names[gn].name))
+ return _fc_glyph_names[gn].ucs;
+ if (!r)
+ {
+ r = (int) (h % FC_GLYPHNAME_REHASH);
+ if (!r)
+ r = 1;
+ }
+ i += r;
+ if (i >= FC_GLYPHNAME_HASH)
+ i -= FC_GLYPHNAME_HASH;
+ }
+ return 0xffff;
+}
+
+/*
+ * Work around a bug in some FreeType versions which fail
+ * to correctly bounds check glyph name buffers and overwrite
+ * the stack. As Postscript names have a limit of 127 characters,
+ * this should be sufficient.
+ */
+
+#if FC_GLYPHNAME_MAXLEN < 127
+# define FC_GLYPHNAME_BUFLEN 127
+#else
+# define FC_GLYPHNAME_BUFLEN FC_GLYPHNAME_MAXLEN
+#endif
+
+/*
+ * Search through a font for a glyph by name. This is
+ * currently a linear search as there doesn't appear to be
+ * any defined order within the font
+ */
+static FT_UInt
+FcFreeTypeGlyphNameIndex (FT_Face face, const FcChar8 *name)
+{
+ FT_UInt gindex;
+ FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
+
+ for (gindex = 0; gindex < (FT_UInt) face->num_glyphs; gindex++)
+ {
+ if (FT_Get_Glyph_Name (face, gindex, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
+ if (!strcmp ((char *) name, (char *) name_buf))
+ return gindex;
+ }
+ return 0;
+}
+#endif
+
+/*
+ * Map a UCS4 glyph to a glyph index. Use all available encoding
+ * tables to try and find one that works. This information is expected
+ * to be cached by higher levels, so performance isn't critical
+ */
+
+FT_UInt
+FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
+{
+ int initial, offset, decode;
+ FT_UInt glyphindex;
+ FcChar32 charcode;
+ int p;
+
+ initial = 0;
+
+ if (!face)
+ return 0;
+
+ /*
+ * Find the current encoding
+ */
+ if (face->charmap)
+ {
+ for (; initial < NUM_DECODE; initial++)
+ if (fcFontDecoders[initial].encoding == face->charmap->encoding)
+ break;
+ if (initial == NUM_DECODE)
+ initial = 0;
+ }
+ for (p = 0; p < NUM_PREFER_UNICODE; p++)
+ if (ucs4 == prefer_unicode[p])
+ {
+ initial = 0;
+ break;
+ }
+ /*
+ * Check each encoding for the glyph, starting with the current one
+ */
+ for (offset = 0; offset < NUM_DECODE; offset++)
+ {
+ decode = (initial + offset) % NUM_DECODE;
+ if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding)
+ if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0)
+ continue;
+ if (fcFontDecoders[decode].map)
+ {
+ charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map);
+ if (charcode == ~0U)
+ continue;
+ }
+ else
+ charcode = ucs4;
+ glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode);
+ if (glyphindex)
+ return glyphindex;
+ }
+#if HAVE_FT_HAS_PS_GLYPH_NAMES
+ /*
+ * Check postscript name table if present
+ */
+ if (FcFreeTypeUseNames (face))
+ {
+ const FcChar8 *name = FcUcs4ToGlyphName (ucs4);
+ if (name)
+ {
+ glyphindex = FcFreeTypeGlyphNameIndex (face, name);
+ if (glyphindex)
+ return glyphindex;
+ }
+ }
+#endif
+ return 0;
+}
+
+static FcBool
+FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4,
+ FT_UInt glyph, FcBlanks *blanks,
+ FT_Pos *advance,
+ FcBool using_strike)
+{
+ FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
+ FT_GlyphSlot slot;
+
+ if (using_strike)
+ load_flags &= ~FT_LOAD_NO_SCALE;
+
+ /*
+ * When using scalable fonts, only report those glyphs
+ * which can be scaled; otherwise those fonts will
+ * only be available at some sizes, and never when
+ * transformed. Avoid this by simply reporting bitmap-only
+ * glyphs as missing
+ */
+ if (face->face_flags & FT_FACE_FLAG_SCALABLE)
+ load_flags |= FT_LOAD_NO_BITMAP;
+
+ if (FT_Load_Glyph (face, glyph, load_flags))
+ return FcFalse;
+
+ slot = face->glyph;
+ if (!glyph)
+ return FcFalse;
+
+ *advance = slot->metrics.horiAdvance;
+
+ switch (slot->format) {
+ case ft_glyph_format_bitmap:
+ /*
+ * Bitmaps are assumed to be reasonable; if
+ * this proves to be a rash assumption, this
+ * code can be easily modified
+ */
+ return FcTrue;
+ case ft_glyph_format_outline:
+ /*
+ * Glyphs with contours are always OK
+ */
+ if (slot->outline.n_contours != 0)
+ return FcTrue;
+ /*
+ * Glyphs with no contours are only OK if
+ * they're members of the Blanks set specified
+ * in the configuration. If blanks isn't set,
+ * then allow any glyph to be blank
+ */
+ if (!blanks || FcBlanksIsMember (blanks, ucs4))
+ return FcTrue;
+ /* fall through ... */
+ default:
+ break;
+ }
+ return FcFalse;
+}
+
+#define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33)
+
+static FcCharSet *
+FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing, FT_Int strike_index)
+{
+ FcChar32 page, off, ucs4;
+#ifdef CHECK
+ FcChar32 font_max = 0;
+#endif
+ FcCharSet *fcs;
+ FcCharLeaf *leaf;
+ const FcCharMap *map;
+ int o;
+ int i;
+ FT_UInt glyph;
+ FT_Pos advance, advance_one = 0, advance_two = 0;
+ FcBool has_advance = FcFalse, fixed_advance = FcTrue, dual_advance = FcFalse;
+ FcBool using_strike = FcFalse;
+
+ fcs = FcCharSetCreate ();
+ if (!fcs)
+ goto bail0;
+
+#if HAVE_FT_SELECT_SIZE
+ if (strike_index >= 0) {
+ if (FT_Select_Size (face, strike_index) != FT_Err_Ok)
+ goto bail1;
+ using_strike = FcTrue;
+ }
+#endif
+
+#ifdef CHECK
+ printf ("Family %s style %s\n", face->family_name, face->style_name);
+#endif
+ for (o = 0; o < NUM_DECODE; o++)
+ {
+ if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0)
+ continue;
+ map = fcFontDecoders[o].map;
+ if (map)
+ {
+ /*
+ * Non-Unicode tables are easy; there's a list of all possible
+ * characters
+ */
+ for (i = 0; i < map->nent; i++)
+ {
+ ucs4 = map->ent[i].bmp;
+ glyph = FT_Get_Char_Index (face, map->ent[i].encode);
+ if (glyph &&
+ FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
+ {
+ /*
+ * ignore glyphs with zero advance. They’re
+ * combining characters, and while their behaviour
+ * isn’t well defined for monospaced applications in
+ * Unicode, there are many fonts which include
+ * zero-width combining characters in otherwise
+ * monospaced fonts.
+ */
+ if (advance)
+ {
+ if (!has_advance)
+ {
+ has_advance = FcTrue;
+ advance_one = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_one))
+ {
+ if (fixed_advance)
+ {
+ dual_advance = FcTrue;
+ fixed_advance = FcFalse;
+ advance_two = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_two))
+ dual_advance = FcFalse;
+ }
+ }
+
+ leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+ if (!leaf)
+ goto bail1;
+ leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
+#ifdef CHECK
+ if (ucs4 > font_max)
+ font_max = ucs4;
+#endif
+ }
+ }
+ }
+ else
+ {
+ page = ~0;
+ leaf = NULL;
+ ucs4 = FT_Get_First_Char (face, &glyph);
+ while (glyph != 0)
+ {
+ if (FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
+ {
+ if (advance)
+ {
+ if (!has_advance)
+ {
+ has_advance = FcTrue;
+ advance_one = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_one))
+ {
+ if (fixed_advance)
+ {
+ dual_advance = FcTrue;
+ fixed_advance = FcFalse;
+ advance_two = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_two))
+ dual_advance = FcFalse;
+ }
+ }
+
+ if ((ucs4 >> 8) != page)
+ {
+ page = (ucs4 >> 8);
+ leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+ if (!leaf)
+ goto bail1;
+ }
+ off = ucs4 & 0xff;
+ leaf->map[off >> 5] |= (1 << (off & 0x1f));
+#ifdef CHECK
+ if (ucs4 > font_max)
+ font_max = ucs4;
+#endif
+ }
+ ucs4 = FT_Get_Next_Char (face, ucs4, &glyph);
+ }
+#ifdef CHECK
+ for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
+ {
+ FcBool FT_Has, FC_Has;
+
+ FT_Has = FT_Get_Char_Index (face, ucs4) != 0;
+ FC_Has = FcCharSetHasChar (fcs, ucs4);
+ if (FT_Has != FC_Has)
+ {
+ printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has);
+ }
+ }
+#endif
+ }
+ }
+#if HAVE_FT_HAS_PS_GLYPH_NAMES
+ /*
+ * Add mapping from PS glyph names if available
+ */
+ if (FcFreeTypeUseNames (face))
+ {
+ FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
+
+ for (glyph = 0; glyph < (FT_UInt) face->num_glyphs; glyph++)
+ {
+ if (FT_Get_Glyph_Name (face, glyph, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
+ {
+ ucs4 = FcGlyphNameToUcs4 (name_buf);
+ if (ucs4 != 0xffff &&
+ FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
+ {
+ if (advance)
+ {
+ if (!has_advance)
+ {
+ has_advance = FcTrue;
+ advance_one = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_one))
+ {
+ if (fixed_advance)
+ {
+ dual_advance = FcTrue;
+ fixed_advance = FcFalse;
+ advance_two = advance;
+ }
+ else if (!APPROXIMATELY_EQUAL (advance, advance_two))
+ dual_advance = FcFalse;
+ }
+ }
+ leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+ if (!leaf)
+ goto bail1;
+ leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
+#ifdef CHECK
+ if (ucs4 > font_max)
+ font_max = ucs4;
+#endif
+ }
+ }
+ }
+ }
+#endif
+#ifdef CHECK
+ printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs));
+ for (ucs4 = 0; ucs4 <= font_max; ucs4++)
+ {
+ FcBool has_char = (glyph = FcFreeTypeCharIndex (face, ucs4)) != 0;
+ FcBool has_bit = FcCharSetHasChar (fcs, ucs4);
+
+ if (has_char && !has_bit)
+ {
+ if (!FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
+ printf ("Bitmap missing broken char 0x%x\n", ucs4);
+ else
+ printf ("Bitmap missing char 0x%x\n", ucs4);
+ }
+ else if (!has_char && has_bit)
+ printf ("Bitmap extra char 0x%x\n", ucs4);
+ }
+#endif
+ if (fixed_advance)
+ *spacing = FC_MONO;
+ else if (dual_advance && APPROXIMATELY_EQUAL (2 * FC_MIN (advance_one, advance_two), FC_MAX (advance_one, advance_two)))
+ *spacing = FC_DUAL;
+ else
+ *spacing = FC_PROPORTIONAL;
+ return fcs;
+bail1:
+ FcCharSetDestroy (fcs);
+bail0:
+ return 0;
+}
+
+FcCharSet *
+FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing)
+{
+ FcCharSet *cs;
+
+ cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1);
+ /*
+ * Check for bitmap-only ttf fonts that are missing the glyf table.
+ * In that case, pick a size and look for glyphs in that size instead
+ */
+ if (FcCharSetCount (cs) == 0)
+ {
+ /* Check for non-scalable TT fonts */
+ if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) &&
+ face->num_fixed_sizes > 0 &&
+ FT_Get_Sfnt_Table (face, ft_sfnt_head))
+ {
+ FT_Int strike_index = 0;
+ int i;
+
+ /* Select the face closest to 16 pixels tall */
+ for (i = 1; i < face->num_fixed_sizes; i++) {
+ if (abs (face->available_sizes[i].height - 16) <
+ abs (face->available_sizes[strike_index].height - 16))
+ strike_index = i;
+ }
+ FcCharSetDestroy (cs);
+ cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index);
+ }
+ }
+ return cs;
+}
+
+FcCharSet *
+FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
+{
+ int spacing;
+
+ return FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
+}
+
+
+#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
+#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
+#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f')
+
+#define OTLAYOUT_HEAD "otlayout:"
+#define OTLAYOUT_HEAD_LEN 9
+#define OTLAYOUT_ID_LEN 4
+/* space + head + id */
+#define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN)
+
+/*
+ * This is a bit generous; the registry has only lower case and space
+ * except for 'DFLT'.
+ */
+#define FcIsSpace(x) (040 == (x))
+#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x))
+
+static void
+addtag(FcChar8 *complex_, FT_ULong tag)
+{
+ FcChar8 tagstring[OTLAYOUT_ID_LEN + 1];
+
+ tagstring[0] = (FcChar8)(tag >> 24),
+ tagstring[1] = (FcChar8)(tag >> 16),
+ tagstring[2] = (FcChar8)(tag >> 8),
+ tagstring[3] = (FcChar8)(tag);
+ tagstring[4] = '\0';
+
+ /* skip tags which aren't alphabetic, under the assumption that
+ * they're probably broken
+ */
+ if (!FcIsValidScript(tagstring[0]) ||
+ !FcIsValidScript(tagstring[1]) ||
+ !FcIsValidScript(tagstring[2]) ||
+ !FcIsValidScript(tagstring[3]))
+ return;
+
+ if (*complex_ != '\0')
+ strcat ((char *) complex_, " ");
+ strcat ((char *) complex_, "otlayout:");
+ strcat ((char *) complex_, (char *) tagstring);
+}
+
+static int
+compareulong (const void *a, const void *b)
+{
+ const FT_ULong *ua = (const FT_ULong *) a;
+ const FT_ULong *ub = (const FT_ULong *) b;
+ return *ua - *ub;
+}
+
+
+static int
+GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
+{
+ FT_ULong cur_offset, new_offset, base_offset;
+ FT_Stream stream = face->stream;
+ FT_Error error;
+ FT_UShort n, p;
+ FT_Memory memory;
+ int script_count;
+
+ if (!stream)
+ return 0;
+
+ memory = stream->memory;
+
+ if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
+ return 0;
+
+ base_offset = ftglue_stream_pos ( stream );
+
+ /* skip version */
+
+ if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) )
+ return 0;
+
+ new_offset = GET_UShort() + base_offset;
+
+ ftglue_stream_frame_exit( stream );
+
+ cur_offset = ftglue_stream_pos( stream );
+
+ if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok )
+ return 0;
+
+ base_offset = ftglue_stream_pos( stream );
+
+ if ( ftglue_stream_frame_enter( stream, 2L ) )
+ return 0;
+
+ script_count = GET_UShort ();
+
+ ftglue_stream_frame_exit( stream );
+
+ *stags = malloc(script_count * sizeof (FT_ULong));
+ if (!stags)
+ return 0;
+
+ p = 0;
+ for ( n = 0; n < script_count; n++ )
+ {
+ if ( ftglue_stream_frame_enter( stream, 6L ) )
+ goto Fail;
+
+ (*stags)[p] = GET_ULong ();
+ new_offset = GET_UShort () + base_offset;
+
+ ftglue_stream_frame_exit( stream );
+
+ cur_offset = ftglue_stream_pos( stream );
+
+ error = ftglue_stream_seek( stream, new_offset );
+
+ if ( error == FT_Err_Ok )
+ p++;
+
+ (void)ftglue_stream_seek( stream, cur_offset );
+ }
+
+ if (!p)
+ goto Fail;
+
+ /* sort the tag list before returning it */
+ qsort(*stags, script_count, sizeof(FT_ULong), compareulong);
+
+ return script_count;
+
+Fail:
+ free(*stags);
+ *stags = NULL;
+ return 0;
+}
+
+static FcChar8 *
+FcFontCapabilities(FT_Face face)
+{
+ FcBool issilgraphitefont = 0;
+ FT_Error err;
+ FT_ULong len = 0;
+ FT_ULong *gsubtags=NULL, *gpostags=NULL;
+ FT_UShort gsub_count=0, gpos_count=0;
+ FT_ULong maxsize;
+ FcChar8 *complex_ = NULL;
+ int indx1 = 0, indx2 = 0;
+
+ err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len);
+ issilgraphitefont = ( err == FT_Err_Ok);
+
+ gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags);
+ gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags);
+
+ if (!issilgraphitefont && !gsub_count && !gpos_count)
+ goto bail;
+
+ maxsize = (((FT_ULong) gpos_count + (FT_ULong) gsub_count) * OTLAYOUT_LEN +
+ (issilgraphitefont ? 13 : 0));
+ complex_ = malloc (sizeof (FcChar8) * maxsize);
+ if (!complex_)
+ goto bail;
+
+ complex_[0] = '\0';
+ if (issilgraphitefont)
+ strcpy((char *) complex_, "ttable:Silf ");
+
+ while ((indx1 < gsub_count) || (indx2 < gpos_count)) {
+ if (indx1 == gsub_count) {
+ addtag(complex_, gpostags[indx2]);
+ indx2++;
+ } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) {
+ addtag(complex_, gsubtags[indx1]);
+ indx1++;
+ } else if (gsubtags[indx1] == gpostags[indx2]) {
+ addtag(complex_, gsubtags[indx1]);
+ indx1++;
+ indx2++;
+ } else {
+ addtag(complex_, gpostags[indx2]);
+ indx2++;
+ }
+ }
+ if (FcDebug () & FC_DBG_SCANV)
+ printf("complex_ features in this font: %s\n", complex_);
+bail:
+ free(gsubtags);
+ free(gpostags);
+ return complex_;
+}
+
+#define __fcfreetype__
+#include "fcaliastail.h"
+#include "fcftaliastail.h"
+#undef __fcfreetype__
diff --git a/fontconfig/src/fcfs.c b/fontconfig/src/fcfs.c
index 0e97501f8..e2ff0fafe 100644
--- a/fontconfig/src/fcfs.c
+++ b/fontconfig/src/fcfs.c
@@ -1,135 +1,135 @@
-/*
- * fontconfig/src/fcfs.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-FcFontSet *
-FcFontSetCreate (void)
-{
- FcFontSet *s;
-
- s = (FcFontSet *) malloc (sizeof (FcFontSet));
- if (!s)
- return 0;
- FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet));
- s->nfont = 0;
- s->sfont = 0;
- s->fonts = 0;
- return s;
-}
-
-void
-FcFontSetDestroy (FcFontSet *s)
-{
- int i;
-
- for (i = 0; i < s->nfont; i++)
- FcPatternDestroy (s->fonts[i]);
- if (s->fonts)
- {
- FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
- free (s->fonts);
- }
- FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet));
- free (s);
-}
-
-FcBool
-FcFontSetAdd (FcFontSet *s, FcPattern *font)
-{
- FcPattern **f;
- int sfont;
-
- if (s->nfont == s->sfont)
- {
- sfont = s->sfont + 32;
- if (s->fonts)
- f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *));
- else
- f = (FcPattern **) malloc (sfont * sizeof (FcPattern *));
- if (!f)
- return FcFalse;
- if (s->sfont)
- FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
- FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *));
- s->sfont = sfont;
- s->fonts = f;
- }
- s->fonts[s->nfont++] = font;
- return FcTrue;
-}
-
-FcBool
-FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s)
-{
- int i;
-
- if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *)))
- return FcFalse;
- for (i = 0; i < s->nfont; i++)
- {
- if (!FcPatternSerializeAlloc (serialize, s->fonts[i]))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcFontSet *
-FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
-{
- int i;
- FcFontSet *s_serialize;
- FcPattern **fonts_serialize;
- FcPattern *p_serialize;
-
- s_serialize = FcSerializePtr (serialize, s);
- if (!s_serialize)
- return NULL;
- *s_serialize = *s;
- s_serialize->sfont = s_serialize->nfont;
-
- fonts_serialize = FcSerializePtr (serialize, s->fonts);
- if (!fonts_serialize)
- return NULL;
- s_serialize->fonts = FcPtrToEncodedOffset (s_serialize,
- fonts_serialize, FcPattern *);
-
- for (i = 0; i < s->nfont; i++)
- {
- p_serialize = FcPatternSerialize (serialize, s->fonts[i]);
- if (!p_serialize)
- return NULL;
- fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize,
- p_serialize,
- FcPattern);
- }
-
- return s_serialize;
-}
-#define __fcfs__
-#include "fcaliastail.h"
-#undef __fcfs__
+/*
+ * fontconfig/src/fcfs.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+
+FcFontSet *
+FcFontSetCreate (void)
+{
+ FcFontSet *s;
+
+ s = (FcFontSet *) malloc (sizeof (FcFontSet));
+ if (!s)
+ return 0;
+ FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet));
+ s->nfont = 0;
+ s->sfont = 0;
+ s->fonts = 0;
+ return s;
+}
+
+void
+FcFontSetDestroy (FcFontSet *s)
+{
+ int i;
+
+ for (i = 0; i < s->nfont; i++)
+ FcPatternDestroy (s->fonts[i]);
+ if (s->fonts)
+ {
+ FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
+ free (s->fonts);
+ }
+ FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet));
+ free (s);
+}
+
+FcBool
+FcFontSetAdd (FcFontSet *s, FcPattern *font)
+{
+ FcPattern **f;
+ int sfont;
+
+ if (s->nfont == s->sfont)
+ {
+ sfont = s->sfont + 32;
+ if (s->fonts)
+ f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *));
+ else
+ f = (FcPattern **) malloc (sfont * sizeof (FcPattern *));
+ if (!f)
+ return FcFalse;
+ if (s->sfont)
+ FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
+ FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *));
+ s->sfont = sfont;
+ s->fonts = f;
+ }
+ s->fonts[s->nfont++] = font;
+ return FcTrue;
+}
+
+FcBool
+FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s)
+{
+ int i;
+
+ if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet)))
+ return FcFalse;
+ if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *)))
+ return FcFalse;
+ for (i = 0; i < s->nfont; i++)
+ {
+ if (!FcPatternSerializeAlloc (serialize, s->fonts[i]))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcFontSet *
+FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
+{
+ int i;
+ FcFontSet *s_serialize;
+ FcPattern **fonts_serialize;
+ FcPattern *p_serialize;
+
+ s_serialize = FcSerializePtr (serialize, s);
+ if (!s_serialize)
+ return NULL;
+ *s_serialize = *s;
+ s_serialize->sfont = s_serialize->nfont;
+
+ fonts_serialize = FcSerializePtr (serialize, s->fonts);
+ if (!fonts_serialize)
+ return NULL;
+ s_serialize->fonts = FcPtrToEncodedOffset (s_serialize,
+ fonts_serialize, FcPattern *);
+
+ for (i = 0; i < s->nfont; i++)
+ {
+ p_serialize = FcPatternSerialize (serialize, s->fonts[i]);
+ if (!p_serialize)
+ return NULL;
+ fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize,
+ p_serialize,
+ FcPattern);
+ }
+
+ return s_serialize;
+}
+#define __fcfs__
+#include "fcaliastail.h"
+#undef __fcfs__
diff --git a/fontconfig/src/fcinit.c b/fontconfig/src/fcinit.c
index 3789d67b5..45f0cd4a3 100644
--- a/fontconfig/src/fcinit.c
+++ b/fontconfig/src/fcinit.c
@@ -1,289 +1,289 @@
-/*
- * fontconfig/src/fcinit.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-static FcConfig *
-FcInitFallbackConfig (void)
-{
- FcConfig *config;
-
- config = FcConfigCreate ();
- if (!config)
- goto bail0;
- if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS))
- goto bail1;
- if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR))
- goto bail1;
- return config;
-
-bail1:
- FcConfigDestroy (config);
-bail0:
- return 0;
-}
-
-int
-FcGetVersion (void)
-{
- return FC_VERSION;
-}
-
-/*
- * Load the configuration files
- */
-FcConfig *
-FcInitLoadConfig (void)
-{
- FcConfig *config;
-
- FcInitDebug ();
- config = FcConfigCreate ();
- if (!config)
- return FcFalse;
-
- if (!FcConfigParseAndLoad (config, 0, FcTrue))
- {
- FcConfigDestroy (config);
- return FcInitFallbackConfig ();
- }
-
- if (config->cacheDirs && config->cacheDirs->num == 0)
- {
- fprintf (stderr,
- "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
- FC_CACHEDIR);
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir>~/.fontconfig</cachedir>\n");
- if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
- !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig"))
- {
- fprintf (stderr,
- "Fontconfig error: out of memory");
- FcConfigDestroy (config);
- return FcInitFallbackConfig ();
- }
- }
-
- return config;
-}
-
-/*
- * Load the configuration files and scan for available fonts
- */
-FcConfig *
-FcInitLoadConfigAndFonts (void)
-{
- FcConfig *config = FcInitLoadConfig ();
-
- FcInitDebug ();
- if (!config)
- return 0;
- if (!FcConfigBuildFonts (config))
- {
- FcConfigDestroy (config);
- return 0;
- }
- return config;
-}
-
-/*
- * Initialize the default library configuration
- */
-FcBool
-FcInit (void)
-{
- FcConfig *config;
-
- if (_fcConfig)
- return FcTrue;
- config = FcInitLoadConfigAndFonts ();
- if (!config)
- return FcFalse;
- FcConfigSetCurrent (config);
- if (FcDebug() & FC_DBG_MEMORY)
- FcMemReport ();
- return FcTrue;
-}
-
-/*
- * Free all library-allocated data structures.
- */
-void
-FcFini (void)
-{
- if (_fcConfig)
- FcConfigDestroy (_fcConfig);
-
- FcPatternFini ();
- FcCacheFini ();
- if (FcDebug() & FC_DBG_MEMORY)
- FcMemReport ();
-}
-
-/*
- * Reread the configuration and available font lists
- */
-FcBool
-FcInitReinitialize (void)
-{
- FcConfig *config;
-
- config = FcInitLoadConfigAndFonts ();
- if (!config)
- return FcFalse;
- FcConfigSetCurrent (config);
- return FcTrue;
-}
-
-FcBool
-FcInitBringUptoDate (void)
-{
- FcConfig *config = FcConfigGetCurrent ();
- time_t now;
-
- /*
- * rescanInterval == 0 disables automatic up to date
- */
- if (config->rescanInterval == 0)
- return FcTrue;
- /*
- * Check no more often than rescanInterval seconds
- */
- now = time (0);
- if (config->rescanTime + config->rescanInterval - now > 0)
- return FcTrue;
- /*
- * If up to date, don't reload configuration
- */
- if (FcConfigUptoDate (0))
- return FcTrue;
- return FcInitReinitialize ();
-}
-
-static struct {
- char name[16];
- int alloc_count;
- int alloc_mem;
- int free_count;
- int free_mem;
-} FcInUse[FC_MEM_NUM] = {
- { "charset" },
- { "charleaf" },
- { "fontset" },
- { "fontptr" },
- { "objectset" },
- { "objectptr" },
- { "matrix" },
- { "pattern" },
- { "patelt" },
- { "vallist" },
- { "substate" },
- { "string" },
- { "listbuck" },
- { "strset" },
- { "strlist" },
- { "config" },
- { "langset" },
- { "atomic" },
- { "blanks" },
- { "cache" },
- { "strbuf" },
- { "subst" },
- { "objecttype" },
- { "constant" },
- { "test" },
- { "expr" },
- { "vstack" },
- { "attr" },
- { "pstack" },
- { "staticstr" },
-};
-
-static int FcAllocCount, FcAllocMem;
-static int FcFreeCount, FcFreeMem;
-
-static int FcMemNotice = 1*1024*1024;
-
-static int FcAllocNotify, FcFreeNotify;
-
-void
-FcMemReport (void)
-{
- int i;
- printf ("Fc Memory Usage:\n");
- printf ("\t Which Alloc Free Active\n");
- printf ("\t count bytes count bytes count bytes\n");
- for (i = 0; i < FC_MEM_NUM; i++)
- printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
- FcInUse[i].name,
- FcInUse[i].alloc_count, FcInUse[i].alloc_mem,
- FcInUse[i].free_count, FcInUse[i].free_mem,
- FcInUse[i].alloc_count - FcInUse[i].free_count,
- FcInUse[i].alloc_mem - FcInUse[i].free_mem);
- printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
- "Total",
- FcAllocCount, FcAllocMem,
- FcFreeCount, FcFreeMem,
- FcAllocCount - FcFreeCount,
- FcAllocMem - FcFreeMem);
- FcAllocNotify = 0;
- FcFreeNotify = 0;
-}
-
-void
-FcMemAlloc (int kind, int size)
-{
- if (FcDebug() & FC_DBG_MEMORY)
- {
- FcInUse[kind].alloc_count++;
- FcInUse[kind].alloc_mem += size;
- FcAllocCount++;
- FcAllocMem += size;
- FcAllocNotify += size;
- if (FcAllocNotify > FcMemNotice)
- FcMemReport ();
- }
-}
-
-void
-FcMemFree (int kind, int size)
-{
- if (FcDebug() & FC_DBG_MEMORY)
- {
- FcInUse[kind].free_count++;
- FcInUse[kind].free_mem += size;
- FcFreeCount++;
- FcFreeMem += size;
- FcFreeNotify += size;
- if (FcFreeNotify > FcMemNotice)
- FcMemReport ();
- }
-}
-#define __fcinit__
-#include "fcaliastail.h"
-#undef __fcinit__
+/*
+ * fontconfig/src/fcinit.c
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+
+static FcConfig *
+FcInitFallbackConfig (void)
+{
+ FcConfig *config;
+
+ config = FcConfigCreate ();
+ if (!config)
+ goto bail0;
+ if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS))
+ goto bail1;
+ if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR))
+ goto bail1;
+ return config;
+
+bail1:
+ FcConfigDestroy (config);
+bail0:
+ return 0;
+}
+
+int
+FcGetVersion (void)
+{
+ return FC_VERSION;
+}
+
+/*
+ * Load the configuration files
+ */
+FcConfig *
+FcInitLoadConfig (void)
+{
+ FcConfig *config;
+
+ FcInitDebug ();
+ config = FcConfigCreate ();
+ if (!config)
+ return NULL;
+
+ if (!FcConfigParseAndLoad (config, 0, FcTrue))
+ {
+ FcConfigDestroy (config);
+ return FcInitFallbackConfig ();
+ }
+
+ if (config->cacheDirs && config->cacheDirs->num == 0)
+ {
+ fprintf (stderr,
+ "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
+ FC_CACHEDIR);
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir>~/.fontconfig</cachedir>\n");
+ if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
+ !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig"))
+ {
+ fprintf (stderr,
+ "Fontconfig error: out of memory");
+ FcConfigDestroy (config);
+ return FcInitFallbackConfig ();
+ }
+ }
+
+ return config;
+}
+
+/*
+ * Load the configuration files and scan for available fonts
+ */
+FcConfig *
+FcInitLoadConfigAndFonts (void)
+{
+ FcConfig *config = FcInitLoadConfig ();
+
+ FcInitDebug ();
+ if (!config)
+ return 0;
+ if (!FcConfigBuildFonts (config))
+ {
+ FcConfigDestroy (config);
+ return 0;
+ }
+ return config;
+}
+
+/*
+ * Initialize the default library configuration
+ */
+FcBool
+FcInit (void)
+{
+ FcConfig *config;
+
+ if (_fcConfig)
+ return FcTrue;
+ config = FcInitLoadConfigAndFonts ();
+ if (!config)
+ return FcFalse;
+ FcConfigSetCurrent (config);
+ if (FcDebug() & FC_DBG_MEMORY)
+ FcMemReport ();
+ return FcTrue;
+}
+
+/*
+ * Free all library-allocated data structures.
+ */
+void
+FcFini (void)
+{
+ if (_fcConfig)
+ FcConfigDestroy (_fcConfig);
+
+ FcPatternFini ();
+ FcCacheFini ();
+ if (FcDebug() & FC_DBG_MEMORY)
+ FcMemReport ();
+}
+
+/*
+ * Reread the configuration and available font lists
+ */
+FcBool
+FcInitReinitialize (void)
+{
+ FcConfig *config;
+
+ config = FcInitLoadConfigAndFonts ();
+ if (!config)
+ return FcFalse;
+ FcConfigSetCurrent (config);
+ return FcTrue;
+}
+
+FcBool
+FcInitBringUptoDate (void)
+{
+ FcConfig *config = FcConfigGetCurrent ();
+ time_t now;
+
+ /*
+ * rescanInterval == 0 disables automatic up to date
+ */
+ if (config->rescanInterval == 0)
+ return FcTrue;
+ /*
+ * Check no more often than rescanInterval seconds
+ */
+ now = time (0);
+ if (config->rescanTime + config->rescanInterval - now > 0)
+ return FcTrue;
+ /*
+ * If up to date, don't reload configuration
+ */
+ if (FcConfigUptoDate (0))
+ return FcTrue;
+ return FcInitReinitialize ();
+}
+
+static struct {
+ char name[16];
+ int alloc_count;
+ int alloc_mem;
+ int free_count;
+ int free_mem;
+} FcInUse[FC_MEM_NUM] = {
+ { "charset" },
+ { "charleaf" },
+ { "fontset" },
+ { "fontptr" },
+ { "objectset" },
+ { "objectptr" },
+ { "matrix" },
+ { "pattern" },
+ { "patelt" },
+ { "vallist" },
+ { "substate" },
+ { "string" },
+ { "listbuck" },
+ { "strset" },
+ { "strlist" },
+ { "config" },
+ { "langset" },
+ { "atomic" },
+ { "blanks" },
+ { "cache" },
+ { "strbuf" },
+ { "subst" },
+ { "objecttype" },
+ { "constant" },
+ { "test" },
+ { "expr" },
+ { "vstack" },
+ { "attr" },
+ { "pstack" },
+ { "staticstr" },
+};
+
+static int FcAllocCount, FcAllocMem;
+static int FcFreeCount, FcFreeMem;
+
+static int FcMemNotice = 1*1024*1024;
+
+static int FcAllocNotify, FcFreeNotify;
+
+void
+FcMemReport (void)
+{
+ int i;
+ printf ("Fc Memory Usage:\n");
+ printf ("\t Which Alloc Free Active\n");
+ printf ("\t count bytes count bytes count bytes\n");
+ for (i = 0; i < FC_MEM_NUM; i++)
+ printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
+ FcInUse[i].name,
+ FcInUse[i].alloc_count, FcInUse[i].alloc_mem,
+ FcInUse[i].free_count, FcInUse[i].free_mem,
+ FcInUse[i].alloc_count - FcInUse[i].free_count,
+ FcInUse[i].alloc_mem - FcInUse[i].free_mem);
+ printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
+ "Total",
+ FcAllocCount, FcAllocMem,
+ FcFreeCount, FcFreeMem,
+ FcAllocCount - FcFreeCount,
+ FcAllocMem - FcFreeMem);
+ FcAllocNotify = 0;
+ FcFreeNotify = 0;
+}
+
+void
+FcMemAlloc (int kind, int size)
+{
+ if (FcDebug() & FC_DBG_MEMORY)
+ {
+ FcInUse[kind].alloc_count++;
+ FcInUse[kind].alloc_mem += size;
+ FcAllocCount++;
+ FcAllocMem += size;
+ FcAllocNotify += size;
+ if (FcAllocNotify > FcMemNotice)
+ FcMemReport ();
+ }
+}
+
+void
+FcMemFree (int kind, int size)
+{
+ if (FcDebug() & FC_DBG_MEMORY)
+ {
+ FcInUse[kind].free_count++;
+ FcInUse[kind].free_mem += size;
+ FcFreeCount++;
+ FcFreeMem += size;
+ FcFreeNotify += size;
+ if (FcFreeNotify > FcMemNotice)
+ FcMemReport ();
+ }
+}
+#define __fcinit__
+#include "fcaliastail.h"
+#undef __fcinit__
diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h
index 233b4c302..46be99eb8 100644
--- a/fontconfig/src/fcint.h
+++ b/fontconfig/src/fcint.h
@@ -1,1031 +1,1039 @@
-/*
- * fontconfig/src/fcint.h
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCINT_H_
-#define _FCINT_H_
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#elif defined(HAVE_STDINT_H)
-#include <stdint.h>
-#else
-#error missing C99 integer data types
-#endif
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcprivate.h>
-#include "fcdeprecate.h"
-
-#ifndef FC_CONFIG_PATH
-#define FC_CONFIG_PATH "fonts.conf"
-#endif
-
-#ifdef _WIN32
-#define FC_SEARCH_PATH_SEPARATOR ';'
-#else
-#define FC_SEARCH_PATH_SEPARATOR ':'
-#endif
-
-#define FC_DBG_MATCH 1
-#define FC_DBG_MATCHV 2
-#define FC_DBG_EDIT 4
-#define FC_DBG_FONTSET 8
-#define FC_DBG_CACHE 16
-#define FC_DBG_CACHEV 32
-#define FC_DBG_PARSE 64
-#define FC_DBG_SCAN 128
-#define FC_DBG_SCANV 256
-#define FC_DBG_MEMORY 512
-#define FC_DBG_CONFIG 1024
-#define FC_DBG_LANGSET 2048
-#define FC_DBG_OBJTYPES 4096
-
-#define FC_MEM_CHARSET 0
-#define FC_MEM_CHARLEAF 1
-#define FC_MEM_FONTSET 2
-#define FC_MEM_FONTPTR 3
-#define FC_MEM_OBJECTSET 4
-#define FC_MEM_OBJECTPTR 5
-#define FC_MEM_MATRIX 6
-#define FC_MEM_PATTERN 7
-#define FC_MEM_PATELT 8
-#define FC_MEM_VALLIST 9
-#define FC_MEM_SUBSTATE 10
-#define FC_MEM_STRING 11
-#define FC_MEM_LISTBUCK 12
-#define FC_MEM_STRSET 13
-#define FC_MEM_STRLIST 14
-#define FC_MEM_CONFIG 15
-#define FC_MEM_LANGSET 16
-#define FC_MEM_ATOMIC 17
-#define FC_MEM_BLANKS 18
-#define FC_MEM_CACHE 19
-#define FC_MEM_STRBUF 20
-#define FC_MEM_SUBST 21
-#define FC_MEM_OBJECTTYPE 22
-#define FC_MEM_CONSTANT 23
-#define FC_MEM_TEST 24
-#define FC_MEM_EXPR 25
-#define FC_MEM_VSTACK 26
-#define FC_MEM_ATTR 27
-#define FC_MEM_PSTACK 28
-#define FC_MEM_STATICSTR 29
-
-#define FC_MEM_NUM 30
-
-#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
-#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
-#define FC_ABS(a) ((a) < 0 ? -(a) : (a))
-
-/* slim_internal.h */
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
-#define FcPrivate __attribute__((__visibility__("hidden")))
-#define HAVE_GNUC_ATTRIBUTE 1
-#include "fcalias.h"
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define FcPrivate __hidden
-#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
-#define FcPrivate
-#endif
-
-typedef enum _FcValueBinding {
- FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
-} FcValueBinding;
-
-/*
- * Serialized data structures use only offsets instead of pointers
- * A low bit of 1 indicates an offset.
- */
-
-/* Is the provided pointer actually an offset? */
-#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
-
-/* Encode offset in a pointer of type t */
-#define FcOffsetEncode(o,t) ((t *) ((o) | 1))
-
-/* Decode a pointer into an offset */
-#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1)
-
-/* Compute pointer offset */
-#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b))
-
-/* Given base address, offset and type, return a pointer */
-#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o)))
-
-/* Given base address, encoded offset and type, return a pointer */
-#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
-
-/* Given base address, pointer and type, return an encoded offset */
-#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
-
-/* Given a structure, offset member and type, return pointer */
-#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t)
-
-/* Given a structure, encoded offset member and type, return pointer to member */
-#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
-
-/* Given a structure, member and type, convert the member to a pointer */
-#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \
- FcEncodedOffsetMember (s,m,t) : \
- (s)->m)
-
-/*
- * Serialized values may hold strings, charsets and langsets as pointers,
- * unfortunately FcValue is an exposed type so we can't just always use
- * offsets
- */
-#define FcValueString(v) FcPointerMember(v,u.s,FcChar8)
-#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet)
-#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet)
-
-typedef struct _FcValueList *FcValueListPtr;
-
-typedef struct _FcValueList {
- struct _FcValueList *next;
- FcValue value;
- FcValueBinding binding;
-} FcValueList;
-
-#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
-
-typedef int FcObject;
-
-typedef struct _FcPatternElt *FcPatternEltPtr;
-
-/*
- * Pattern elts are stuck in a structure connected to the pattern,
- * so they get moved around when the pattern is resized. Hence, the
- * values field must be a pointer/offset instead of just an offset
- */
-typedef struct _FcPatternElt {
- FcObject object;
- FcValueList *values;
-} FcPatternElt;
-
-#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList)
-
-struct _FcPattern {
- int num;
- int size;
- intptr_t elts_offset;
- int ref;
-};
-
-#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt)
-
-#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *)
-
-#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \
- FcEncodedOffsetToPtr(fs, \
- FcFontSetFonts(fs)[i], \
- FcPattern) : \
- fs->fonts[i])
-
-typedef enum _FcOp {
- FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpBool, FcOpCharSet,
- FcOpNil,
- FcOpField, FcOpConst,
- FcOpAssign, FcOpAssignReplace,
- FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
- FcOpQuest,
- FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
- FcOpContains, FcOpListing, FcOpNotContains,
- FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
- FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
- FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
- FcOpInvalid
-} FcOp;
-
-typedef struct _FcExpr {
- FcOp op;
- union {
- int ival;
- double dval;
- FcChar8 *sval;
- FcMatrix *mval;
- FcBool bval;
- FcCharSet *cval;
- FcObject object;
- FcChar8 *constant;
- struct {
- struct _FcExpr *left, *right;
- } tree;
- } u;
-} FcExpr;
-
-typedef struct _FcExprPage FcExprPage;
-
-struct _FcExprPage {
- FcExprPage *next_page;
- FcExpr *next;
- FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
- FcExpr end[0];
-};
-
-typedef enum _FcQual {
- FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
-} FcQual;
-
-#define FcMatchDefault ((FcMatchKind) -1)
-
-typedef struct _FcTest {
- struct _FcTest *next;
- FcMatchKind kind;
- FcQual qual;
- FcObject object;
- FcOp op;
- FcExpr *expr;
-} FcTest;
-
-typedef struct _FcEdit {
- struct _FcEdit *next;
- FcObject object;
- FcOp op;
- FcExpr *expr;
- FcValueBinding binding;
-} FcEdit;
-
-typedef struct _FcSubst {
- struct _FcSubst *next;
- FcTest *test;
- FcEdit *edit;
-} FcSubst;
-
-typedef struct _FcCharLeaf {
- FcChar32 map[256/32];
-} FcCharLeaf;
-
-#define FC_REF_CONSTANT -1
-
-struct _FcCharSet {
- int ref; /* reference count */
- int num; /* size of leaves and numbers arrays */
- intptr_t leaves_offset;
- intptr_t numbers_offset;
-};
-
-#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t)
-#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \
- FcCharSetLeaves(c)[i], \
- FcCharLeaf))
-#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16)
-
-struct _FcStrSet {
- int ref; /* reference count */
- int num;
- int size;
- FcChar8 **strs;
-};
-
-struct _FcStrList {
- FcStrSet *set;
- int n;
-};
-
-typedef struct _FcStrBuf {
- FcChar8 *buf;
- FcBool allocated;
- FcBool failed;
- int len;
- int size;
- FcChar8 buf_static[16 * sizeof (void *)];
-} FcStrBuf;
-
-struct _FcCache {
- int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
- int version; /* FC_CACHE_CONTENT_VERSION */
- intptr_t size; /* size of file */
- intptr_t dir; /* offset to dir name */
- intptr_t dirs; /* offset to subdirs */
- int dirs_count; /* number of subdir strings */
- intptr_t set; /* offset to font set */
- int mtime; /* low bits of directory mtime */
-};
-
-#undef FcCacheDir
-#undef FcCacheSubdir
-#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
-#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
-#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
-#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\
- FcCacheDirs(c)[i], \
- FcChar8)
-
-/*
- * Used while constructing a directory cache object
- */
-
-#define FC_SERIALIZE_HASH_SIZE 8191
-
-typedef union _FcAlign {
- double d;
- int i;
- intptr_t ip;
- FcBool b;
- void *p;
-} FcAlign;
-
-typedef struct _FcSerializeBucket {
- struct _FcSerializeBucket *next;
- const void *object;
- intptr_t offset;
-} FcSerializeBucket;
-
-typedef struct _FcCharSetFreezer FcCharSetFreezer;
-
-typedef struct _FcSerialize {
- intptr_t size;
- FcCharSetFreezer *cs_freezer;
- void *linear;
- FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
-} FcSerialize;
-
-/*
- * To map adobe glyph names to unicode values, a precomputed hash
- * table is used
- */
-
-typedef struct _FcGlyphName {
- FcChar32 ucs; /* unicode value */
- FcChar8 name[1]; /* name extends beyond struct */
-} FcGlyphName;
-
-/*
- * To perform case-insensitive string comparisons, a table
- * is used which holds three different kinds of folding data.
- *
- * The first is a range of upper case values mapping to a range
- * of their lower case equivalents. Within each range, the offset
- * between upper and lower case is constant.
- *
- * The second is a range of upper case values which are interleaved
- * with their lower case equivalents.
- *
- * The third is a set of raw unicode values mapping to a list
- * of unicode values for comparison purposes. This allows conversion
- * of ß to "ss" so that SS, ss and ß all match. A separate array
- * holds the list of unicode values for each entry.
- *
- * These are packed into a single table. Using a binary search,
- * the appropriate entry can be located.
- */
-
-#define FC_CASE_FOLD_RANGE 0
-#define FC_CASE_FOLD_EVEN_ODD 1
-#define FC_CASE_FOLD_FULL 2
-
-typedef struct _FcCaseFold {
- FcChar32 upper;
- FcChar16 method : 2;
- FcChar16 count : 14;
- short offset; /* lower - upper for RANGE, table id for FULL */
-} FcCaseFold;
-
-#define FC_MAX_FILE_LEN 4096
-
-#define FC_CACHE_MAGIC_MMAP 0xFC02FC04
-#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
-#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */
-
-struct _FcAtomic {
- FcChar8 *file; /* original file name */
- FcChar8 *new; /* temp file name -- write data here */
- FcChar8 *lck; /* lockfile name (used for locking) */
- FcChar8 *tmp; /* tmpfile name (used for locking) */
-};
-
-struct _FcBlanks {
- int nblank;
- int sblank;
- FcChar32 *blanks;
-};
-
-struct _FcConfig {
- /*
- * File names loaded from the configuration -- saved here as the
- * cache file must be consulted before the directories are scanned,
- * and those directives may occur in any order
- */
- FcStrSet *configDirs; /* directories to scan for fonts */
- /*
- * Set of allowed blank chars -- used to
- * trim fonts of bogus glyphs
- */
- FcBlanks *blanks;
- /*
- * List of directories containing fonts,
- * built by recursively scanning the set
- * of configured directories
- */
- FcStrSet *fontDirs;
- /*
- * List of directories containing cache files.
- */
- FcStrSet *cacheDirs;
- /*
- * Names of all of the configuration files used
- * to create this configuration
- */
- FcStrSet *configFiles; /* config files loaded */
- /*
- * Substitution instructions for patterns and fonts;
- * maxObjects is used to allocate appropriate intermediate storage
- * while performing a whole set of substitutions
- */
- FcSubst *substPattern; /* substitutions for patterns */
- FcSubst *substFont; /* substitutions for fonts */
- FcSubst *substScan; /* substitutions for scanned fonts */
- int maxObjects; /* maximum number of tests in all substs */
- /*
- * List of patterns used to control font file selection
- */
- FcStrSet *acceptGlobs;
- FcStrSet *rejectGlobs;
- FcFontSet *acceptPatterns;
- FcFontSet *rejectPatterns;
- /*
- * The set of fonts loaded from the listed directories; the
- * order within the set does not determine the font selection,
- * except in the case of identical matches in which case earlier fonts
- * match preferrentially
- */
- FcFontSet *fonts[FcSetApplication + 1];
- /*
- * Fontconfig can periodically rescan the system configuration
- * and font directories. This rescanning occurs when font
- * listing requests are made, but no more often than rescanInterval
- * seconds apart.
- */
- time_t rescanTime; /* last time information was scanned */
- int rescanInterval; /* interval between scans */
-
- int ref; /* reference count */
-
- FcExprPage *expr_pool; /* pool of FcExpr's */
-};
-
-extern FcPrivate FcConfig *_fcConfig;
-
-typedef struct _FcFileTime {
- time_t time;
- FcBool set;
-} FcFileTime;
-
-typedef struct _FcCharMap FcCharMap;
-
-/* fcblanks.c */
-
-/* fccache.c */
-
-FcPrivate FcCache *
-FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
-
-FcPrivate FcCache *
-FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
-
-FcPrivate FcBool
-FcDirCacheWrite (FcCache *cache, FcConfig *config);
-
-FcPrivate void
-FcCacheObjectReference (void *object);
-
-FcPrivate void
-FcCacheObjectDereference (void *object);
-
-FcPrivate void
-FcCacheFini (void);
-
-FcPrivate void
-FcDirCacheReference (FcCache *cache, int nref);
-
-#ifdef _WIN32
-FcPrivate int
-FcStat (const char *file, struct stat *statb);
-#else
-#define FcStat stat
-#endif
-
-/* fccfg.c */
-
-FcPrivate FcExpr *
-FcConfigAllocExpr (FcConfig *config);
-
-FcPrivate FcBool
-FcConfigAddConfigDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddFontDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddCacheDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddConfigFile (FcConfig *config,
- const FcChar8 *f);
-
-FcPrivate FcBool
-FcConfigAddBlank (FcConfig *config,
- FcChar32 blank);
-
-FcPrivate FcBool
-FcConfigAddEdit (FcConfig *config,
- FcTest *test,
- FcEdit *edit,
- FcMatchKind kind);
-
-FcPrivate void
-FcConfigSetFonts (FcConfig *config,
- FcFontSet *fonts,
- FcSetName set);
-
-FcPrivate FcBool
-FcConfigCompareValue (const FcValue *m,
- FcOp op,
- const FcValue *v);
-
-FcPrivate FcBool
-FcConfigGlobAdd (FcConfig *config,
- const FcChar8 *glob,
- FcBool accept);
-
-FcPrivate FcBool
-FcConfigAcceptFilename (FcConfig *config,
- const FcChar8 *filename);
-
-FcPrivate FcBool
-FcConfigPatternsAdd (FcConfig *config,
- FcPattern *pattern,
- FcBool accept);
-
-FcPrivate FcBool
-FcConfigAcceptFont (FcConfig *config,
- const FcPattern *font);
-
-FcPrivate FcFileTime
-FcConfigModifiedTime (FcConfig *config);
-
-FcPrivate FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache,
- FcSetName set, FcStrSet *dirSet);
-
-/* fcserialize.c */
-FcPrivate intptr_t
-FcAlignSize (intptr_t size);
-
-FcPrivate FcSerialize *
-FcSerializeCreate (void);
-
-FcPrivate void
-FcSerializeDestroy (FcSerialize *serialize);
-
-FcPrivate FcBool
-FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
-
-FcPrivate intptr_t
-FcSerializeReserve (FcSerialize *serialize, int size);
-
-FcPrivate intptr_t
-FcSerializeOffset (FcSerialize *serialize, const void *object);
-
-FcPrivate void *
-FcSerializePtr (FcSerialize *serialize, const void *object);
-
-FcPrivate FcBool
-FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
-
-FcPrivate FcLangSet *
-FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
-
-/* fccharset.c */
-FcPrivate void
-FcLangCharSetPopulate (void);
-
-FcPrivate FcCharSetFreezer *
-FcCharSetFreezerCreate (void);
-
-FcPrivate const FcCharSet *
-FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
-
-FcPrivate void
-FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
-
-FcPrivate FcBool
-FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
-
-FcPrivate FcCharSet *
-FcNameParseCharSet (FcChar8 *string);
-
-FcPrivate FcBool
-FcNameUnparseValue (FcStrBuf *buf,
- FcValue *v0,
- FcChar8 *escape);
-
-FcPrivate FcBool
-FcNameUnparseValueList (FcStrBuf *buf,
- FcValueListPtr v,
- FcChar8 *escape);
-
-FcPrivate FcCharLeaf *
-FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
-
-FcPrivate FcBool
-FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
-
-FcPrivate FcCharSet *
-FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
-
-FcPrivate FcChar16 *
-FcCharSetGetNumbers(const FcCharSet *c);
-
-/* fcdbg.c */
-FcPrivate void
-FcValueListPrint (const FcValueListPtr l);
-
-FcPrivate void
-FcLangSetPrint (const FcLangSet *ls);
-
-FcPrivate void
-FcOpPrint (FcOp op);
-
-FcPrivate void
-FcTestPrint (const FcTest *test);
-
-FcPrivate void
-FcExprPrint (const FcExpr *expr);
-
-FcPrivate void
-FcEditPrint (const FcEdit *edit);
-
-FcPrivate void
-FcSubstPrint (const FcSubst *subst);
-
-FcPrivate void
-FcCharSetPrint (const FcCharSet *c);
-
-extern FcPrivate int FcDebugVal;
-
-#define FcDebug() (FcDebugVal)
-
-FcPrivate void
-FcInitDebug (void);
-
-/* fcdefault.c */
-FcPrivate FcChar8 *
-FcGetDefaultLang (void);
-
-/* fcdir.c */
-
-FcPrivate FcBool
-FcFileScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config);
-
-FcPrivate FcBool
-FcDirScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force,
- FcConfig *config);
-
-/* fcfont.c */
-FcPrivate int
-FcFontDebug (void);
-
-/* fcfs.c */
-
-FcPrivate FcBool
-FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
-
-FcPrivate FcFontSet *
-FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
-
-/* fcxml.c */
-FcPrivate void
-FcTestDestroy (FcTest *test);
-
-FcPrivate void
-FcEditDestroy (FcEdit *e);
-
-/* fcinit.c */
-
-FcPrivate void
-FcMemReport (void);
-
-FcPrivate void
-FcMemAlloc (int kind, int size);
-
-FcPrivate void
-FcMemFree (int kind, int size);
-
-/* fclang.c */
-FcPrivate FcLangSet *
-FcFreeTypeLangSet (const FcCharSet *charset,
- const FcChar8 *exclusiveLang);
-
-FcPrivate FcLangResult
-FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate FcLangSet *
-FcLangSetPromote (const FcChar8 *lang);
-
-FcPrivate FcLangSet *
-FcNameParseLangSet (const FcChar8 *string);
-
-FcPrivate FcBool
-FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
-
-FcPrivate FcChar8 *
-FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
-
-/* fclist.c */
-
-FcPrivate FcBool
-FcListPatternMatchAny (const FcPattern *p,
- const FcPattern *font);
-
-/* fcmatch.c */
-
-/* fcname.c */
-
-/*
- * NOTE -- this ordering is part of the cache file format.
- * It must also match the ordering in fcname.c
- */
-
-#define FC_FAMILY_OBJECT 1
-#define FC_FAMILYLANG_OBJECT 2
-#define FC_STYLE_OBJECT 3
-#define FC_STYLELANG_OBJECT 4
-#define FC_FULLNAME_OBJECT 5
-#define FC_FULLNAMELANG_OBJECT 6
-#define FC_SLANT_OBJECT 7
-#define FC_WEIGHT_OBJECT 8
-#define FC_WIDTH_OBJECT 9
-#define FC_SIZE_OBJECT 10
-#define FC_ASPECT_OBJECT 11
-#define FC_PIXEL_SIZE_OBJECT 12
-#define FC_SPACING_OBJECT 13
-#define FC_FOUNDRY_OBJECT 14
-#define FC_ANTIALIAS_OBJECT 15
-#define FC_HINT_STYLE_OBJECT 16
-#define FC_HINTING_OBJECT 17
-#define FC_VERTICAL_LAYOUT_OBJECT 18
-#define FC_AUTOHINT_OBJECT 19
-#define FC_GLOBAL_ADVANCE_OBJECT 20
-#define FC_FILE_OBJECT 21
-#define FC_INDEX_OBJECT 22
-#define FC_RASTERIZER_OBJECT 23
-#define FC_OUTLINE_OBJECT 24
-#define FC_SCALABLE_OBJECT 25
-#define FC_DPI_OBJECT 26
-#define FC_RGBA_OBJECT 27
-#define FC_SCALE_OBJECT 28
-#define FC_MINSPACE_OBJECT 29
-#define FC_CHAR_WIDTH_OBJECT 30
-#define FC_CHAR_HEIGHT_OBJECT 31
-#define FC_MATRIX_OBJECT 32
-#define FC_CHARSET_OBJECT 33
-#define FC_LANG_OBJECT 34
-#define FC_FONTVERSION_OBJECT 35
-#define FC_CAPABILITY_OBJECT 36
-#define FC_FONTFORMAT_OBJECT 37
-#define FC_EMBOLDEN_OBJECT 38
-#define FC_EMBEDDED_BITMAP_OBJECT 39
-#define FC_DECORATIVE_OBJECT 40
-#define FC_LCD_FILTER_OBJECT 41
-#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT
-
-FcPrivate FcBool
-FcNameBool (const FcChar8 *v, FcBool *result);
-
-FcPrivate FcBool
-FcObjectValidType (FcObject object, FcType type);
-
-FcPrivate FcObject
-FcObjectFromName (const char * name);
-
-FcPrivate const char *
-FcObjectName (FcObject object);
-
-FcPrivate FcObjectSet *
-FcObjectGetSet (void);
-
-FcPrivate FcBool
-FcObjectInit (void);
-
-FcPrivate void
-FcObjectFini (void);
-
-#define FcObjectCompare(a, b) ((int) a - (int) b)
-
-/* fcpat.c */
-
-FcPrivate FcValue
-FcValueCanonicalize (const FcValue *v);
-
-FcPrivate void
-FcValueListDestroy (FcValueListPtr l);
-
-FcPrivate FcPatternElt *
-FcPatternObjectFindElt (const FcPattern *p, FcObject object);
-
-FcPrivate FcPatternElt *
-FcPatternObjectInsertElt (FcPattern *p, FcObject object);
-
-FcPrivate FcBool
-FcPatternObjectAddWithBinding (FcPattern *p,
- FcObject object,
- FcValue value,
- FcValueBinding binding,
- FcBool append);
-
-FcPrivate FcBool
-FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
-FcPrivate FcBool
-FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
-FcPrivate FcResult
-FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
-
-FcPrivate FcBool
-FcPatternObjectDel (FcPattern *p, FcObject object);
-
-FcPrivate FcBool
-FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
-
-FcPrivate FcBool
-FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
-
-FcPrivate FcBool
-FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
-
-FcPrivate FcBool
-FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
-
-FcPrivate FcBool
-FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
-
-FcPrivate FcBool
-FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
-
-FcPrivate FcBool
-FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
-
-FcPrivate FcBool
-FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
-
-FcPrivate FcResult
-FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
-
-FcPrivate FcResult
-FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
-
-FcPrivate FcResult
-FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
-
-FcPrivate FcResult
-FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
-
-FcPrivate FcResult
-FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
-
-FcPrivate FcResult
-FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
-
-FcPrivate FcResult
-FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
-
-FcPrivate void
-FcPatternFini (void);
-
-FcPrivate FcBool
-FcPatternAppend (FcPattern *p, FcPattern *s);
-
-FcPrivate const FcChar8 *
-FcStrStaticName (const FcChar8 *name);
-
-FcPrivate FcChar32
-FcStringHash (const FcChar8 *s);
-
-FcPrivate FcBool
-FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
-
-FcPrivate FcPattern *
-FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
-
-FcPrivate FcBool
-FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
-
-FcPrivate FcValueList *
-FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
-
-/* fcrender.c */
-
-/* fcmatrix.c */
-
-extern FcPrivate const FcMatrix FcIdentityMatrix;
-
-FcPrivate void
-FcMatrixFree (FcMatrix *mat);
-
-/* fcstr.c */
-FcPrivate void
-FcStrSetSort (FcStrSet * set);
-
-FcPrivate void
-FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
-
-FcPrivate void
-FcStrBufDestroy (FcStrBuf *buf);
-
-FcPrivate FcChar8 *
-FcStrBufDone (FcStrBuf *buf);
-
-FcPrivate FcChar8 *
-FcStrBufDoneStatic (FcStrBuf *buf);
-
-FcPrivate FcBool
-FcStrBufChar (FcStrBuf *buf, FcChar8 c);
-
-FcPrivate FcBool
-FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
-
-FcPrivate FcBool
-FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
-
-FcPrivate int
-FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate FcBool
-FcStrUsesHome (const FcChar8 *s);
-
-FcPrivate FcChar8 *
-FcStrLastSlash (const FcChar8 *path);
-
-FcPrivate FcChar32
-FcStrHashIgnoreCase (const FcChar8 *s);
-
-FcPrivate FcChar8 *
-FcStrCanonFilename (const FcChar8 *s);
-
-FcPrivate FcBool
-FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
-
-FcPrivate FcChar8 *
-FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
-
-#endif /* _FC_INT_H_ */
+/*
+ * fontconfig/src/fcint.h
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FCINT_H_
+#define _FCINT_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#elif defined(HAVE_STDINT_H)
+#include <stdint.h>
+#else
+#error missing C99 integer data types
+#endif
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <fontconfig/fontconfig.h>
+#include <fontconfig/fcprivate.h>
+#include "fcdeprecate.h"
+
+#ifndef FC_CONFIG_PATH
+#define FC_CONFIG_PATH "fonts.conf"
+#endif
+
+#ifdef _WIN32
+#define FC_SEARCH_PATH_SEPARATOR ';'
+#else
+#define FC_SEARCH_PATH_SEPARATOR ':'
+#endif
+
+#define FC_DBG_MATCH 1
+#define FC_DBG_MATCHV 2
+#define FC_DBG_EDIT 4
+#define FC_DBG_FONTSET 8
+#define FC_DBG_CACHE 16
+#define FC_DBG_CACHEV 32
+#define FC_DBG_PARSE 64
+#define FC_DBG_SCAN 128
+#define FC_DBG_SCANV 256
+#define FC_DBG_MEMORY 512
+#define FC_DBG_CONFIG 1024
+#define FC_DBG_LANGSET 2048
+#define FC_DBG_OBJTYPES 4096
+
+#define FC_MEM_CHARSET 0
+#define FC_MEM_CHARLEAF 1
+#define FC_MEM_FONTSET 2
+#define FC_MEM_FONTPTR 3
+#define FC_MEM_OBJECTSET 4
+#define FC_MEM_OBJECTPTR 5
+#define FC_MEM_MATRIX 6
+#define FC_MEM_PATTERN 7
+#define FC_MEM_PATELT 8
+#define FC_MEM_VALLIST 9
+#define FC_MEM_SUBSTATE 10
+#define FC_MEM_STRING 11
+#define FC_MEM_LISTBUCK 12
+#define FC_MEM_STRSET 13
+#define FC_MEM_STRLIST 14
+#define FC_MEM_CONFIG 15
+#define FC_MEM_LANGSET 16
+#define FC_MEM_ATOMIC 17
+#define FC_MEM_BLANKS 18
+#define FC_MEM_CACHE 19
+#define FC_MEM_STRBUF 20
+#define FC_MEM_SUBST 21
+#define FC_MEM_OBJECTTYPE 22
+#define FC_MEM_CONSTANT 23
+#define FC_MEM_TEST 24
+#define FC_MEM_EXPR 25
+#define FC_MEM_VSTACK 26
+#define FC_MEM_ATTR 27
+#define FC_MEM_PSTACK 28
+#define FC_MEM_STATICSTR 29
+
+#define FC_MEM_NUM 30
+
+#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
+#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
+
+#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
+#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
+#define FC_ABS(a) ((a) < 0 ? -(a) : (a))
+
+/* slim_internal.h */
+#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
+#define FcPrivate __attribute__((__visibility__("hidden")))
+#define HAVE_GNUC_ATTRIBUTE 1
+#include "fcalias.h"
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+#define FcPrivate __hidden
+#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
+#define FcPrivate
+#endif
+
+typedef enum _FcValueBinding {
+ FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
+} FcValueBinding;
+
+/*
+ * Serialized data structures use only offsets instead of pointers
+ * A low bit of 1 indicates an offset.
+ */
+
+/* Is the provided pointer actually an offset? */
+#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
+
+/* Encode offset in a pointer of type t */
+#define FcOffsetEncode(o,t) ((t *) ((o) | 1))
+
+/* Decode a pointer into an offset */
+#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1)
+
+/* Compute pointer offset */
+#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b))
+
+/* Given base address, offset and type, return a pointer */
+#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o)))
+
+/* Given base address, encoded offset and type, return a pointer */
+#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
+
+/* Given base address, pointer and type, return an encoded offset */
+#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
+
+/* Given a structure, offset member and type, return pointer */
+#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t)
+
+/* Given a structure, encoded offset member and type, return pointer to member */
+#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
+
+/* Given a structure, member and type, convert the member to a pointer */
+#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \
+ FcEncodedOffsetMember (s,m,t) : \
+ (s)->m)
+
+/*
+ * Serialized values may hold strings, charsets and langsets as pointers,
+ * unfortunately FcValue is an exposed type so we can't just always use
+ * offsets
+ */
+#define FcValueString(v) FcPointerMember(v,u.s,FcChar8)
+#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet)
+#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet)
+
+typedef struct _FcValueList *FcValueListPtr;
+
+typedef struct _FcValueList {
+ struct _FcValueList *next;
+ FcValue value;
+ FcValueBinding binding;
+} FcValueList;
+
+#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
+
+typedef int FcObject;
+
+typedef struct _FcPatternElt *FcPatternEltPtr;
+
+/*
+ * Pattern elts are stuck in a structure connected to the pattern,
+ * so they get moved around when the pattern is resized. Hence, the
+ * values field must be a pointer/offset instead of just an offset
+ */
+typedef struct _FcPatternElt {
+ FcObject object;
+ FcValueList *values;
+} FcPatternElt;
+
+#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList)
+
+struct _FcPattern {
+ int num;
+ int size;
+ intptr_t elts_offset;
+ int ref;
+};
+
+#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt)
+
+#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *)
+
+#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \
+ FcEncodedOffsetToPtr(fs, \
+ FcFontSetFonts(fs)[i], \
+ FcPattern) : \
+ fs->fonts[i])
+
+typedef enum _FcOp {
+ FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
+ FcOpNil,
+ FcOpField, FcOpConst,
+ FcOpAssign, FcOpAssignReplace,
+ FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
+ FcOpQuest,
+ FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
+ FcOpContains, FcOpListing, FcOpNotContains,
+ FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
+ FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
+ FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
+ FcOpInvalid
+} FcOp;
+
+typedef struct _FcExpr {
+ FcOp op;
+ union {
+ int ival;
+ double dval;
+ const FcChar8 *sval;
+ FcMatrix *mval;
+ FcBool bval;
+ FcCharSet *cval;
+ FcLangSet *lval;
+ FcObject object;
+ const FcChar8 *constant;
+ struct {
+ struct _FcExpr *left, *right;
+ } tree;
+ } u;
+} FcExpr;
+
+typedef struct _FcExprPage FcExprPage;
+
+struct _FcExprPage {
+ FcExprPage *next_page;
+ FcExpr *next;
+ FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
+ FcExpr end[];
+};
+
+typedef enum _FcQual {
+ FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
+} FcQual;
+
+#define FcMatchDefault ((FcMatchKind) -1)
+
+typedef struct _FcTest {
+ struct _FcTest *next;
+ FcMatchKind kind;
+ FcQual qual;
+ FcObject object;
+ FcOp op;
+ FcExpr *expr;
+} FcTest;
+
+typedef struct _FcEdit {
+ struct _FcEdit *next;
+ FcObject object;
+ FcOp op;
+ FcExpr *expr;
+ FcValueBinding binding;
+} FcEdit;
+
+typedef struct _FcSubst {
+ struct _FcSubst *next;
+ FcTest *test;
+ FcEdit *edit;
+} FcSubst;
+
+typedef struct _FcCharLeaf {
+ FcChar32 map[256/32];
+} FcCharLeaf;
+
+#define FC_REF_CONSTANT -1
+
+struct _FcCharSet {
+ int ref; /* reference count */
+ int num; /* size of leaves and numbers arrays */
+ intptr_t leaves_offset;
+ intptr_t numbers_offset;
+};
+
+#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t)
+#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \
+ FcCharSetLeaves(c)[i], \
+ FcCharLeaf))
+#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16)
+
+struct _FcStrSet {
+ int ref; /* reference count */
+ int num;
+ int size;
+ FcChar8 **strs;
+};
+
+struct _FcStrList {
+ FcStrSet *set;
+ int n;
+};
+
+typedef struct _FcStrBuf {
+ FcChar8 *buf;
+ FcBool allocated;
+ FcBool failed;
+ int len;
+ int size;
+ FcChar8 buf_static[16 * sizeof (void *)];
+} FcStrBuf;
+
+struct _FcCache {
+ int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
+ int version; /* FC_CACHE_CONTENT_VERSION */
+ intptr_t size; /* size of file */
+ intptr_t dir; /* offset to dir name */
+ intptr_t dirs; /* offset to subdirs */
+ int dirs_count; /* number of subdir strings */
+ intptr_t set; /* offset to font set */
+ int mtime; /* low bits of directory mtime */
+};
+
+#undef FcCacheDir
+#undef FcCacheSubdir
+#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
+#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
+#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
+#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\
+ FcCacheDirs(c)[i], \
+ FcChar8)
+
+/*
+ * Used while constructing a directory cache object
+ */
+
+#define FC_SERIALIZE_HASH_SIZE 8191
+
+typedef union _FcAlign {
+ double d;
+ int i;
+ intptr_t ip;
+ FcBool b;
+ void *p;
+} FcAlign;
+
+typedef struct _FcSerializeBucket {
+ struct _FcSerializeBucket *next;
+ const void *object;
+ intptr_t offset;
+} FcSerializeBucket;
+
+typedef struct _FcCharSetFreezer FcCharSetFreezer;
+
+typedef struct _FcSerialize {
+ intptr_t size;
+ FcCharSetFreezer *cs_freezer;
+ void *linear;
+ FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
+} FcSerialize;
+
+/*
+ * To map adobe glyph names to unicode values, a precomputed hash
+ * table is used
+ */
+
+typedef struct _FcGlyphName {
+ FcChar32 ucs; /* unicode value */
+ FcChar8 name[1]; /* name extends beyond struct */
+} FcGlyphName;
+
+/*
+ * To perform case-insensitive string comparisons, a table
+ * is used which holds three different kinds of folding data.
+ *
+ * The first is a range of upper case values mapping to a range
+ * of their lower case equivalents. Within each range, the offset
+ * between upper and lower case is constant.
+ *
+ * The second is a range of upper case values which are interleaved
+ * with their lower case equivalents.
+ *
+ * The third is a set of raw unicode values mapping to a list
+ * of unicode values for comparison purposes. This allows conversion
+ * of ß to "ss" so that SS, ss and ß all match. A separate array
+ * holds the list of unicode values for each entry.
+ *
+ * These are packed into a single table. Using a binary search,
+ * the appropriate entry can be located.
+ */
+
+#define FC_CASE_FOLD_RANGE 0
+#define FC_CASE_FOLD_EVEN_ODD 1
+#define FC_CASE_FOLD_FULL 2
+
+typedef struct _FcCaseFold {
+ FcChar32 upper;
+ FcChar16 method : 2;
+ FcChar16 count : 14;
+ short offset; /* lower - upper for RANGE, table id for FULL */
+} FcCaseFold;
+
+#define FC_MAX_FILE_LEN 4096
+
+#define FC_CACHE_MAGIC_MMAP 0xFC02FC04
+#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
+#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */
+
+struct _FcAtomic {
+ FcChar8 *file; /* original file name */
+ FcChar8 *new; /* temp file name -- write data here */
+ FcChar8 *lck; /* lockfile name (used for locking) */
+ FcChar8 *tmp; /* tmpfile name (used for locking) */
+};
+
+struct _FcBlanks {
+ int nblank;
+ int sblank;
+ FcChar32 *blanks;
+};
+
+struct _FcConfig {
+ /*
+ * File names loaded from the configuration -- saved here as the
+ * cache file must be consulted before the directories are scanned,
+ * and those directives may occur in any order
+ */
+ FcStrSet *configDirs; /* directories to scan for fonts */
+ /*
+ * Set of allowed blank chars -- used to
+ * trim fonts of bogus glyphs
+ */
+ FcBlanks *blanks;
+ /*
+ * List of directories containing fonts,
+ * built by recursively scanning the set
+ * of configured directories
+ */
+ FcStrSet *fontDirs;
+ /*
+ * List of directories containing cache files.
+ */
+ FcStrSet *cacheDirs;
+ /*
+ * Names of all of the configuration files used
+ * to create this configuration
+ */
+ FcStrSet *configFiles; /* config files loaded */
+ /*
+ * Substitution instructions for patterns and fonts;
+ * maxObjects is used to allocate appropriate intermediate storage
+ * while performing a whole set of substitutions
+ */
+ FcSubst *substPattern; /* substitutions for patterns */
+ FcSubst *substFont; /* substitutions for fonts */
+ FcSubst *substScan; /* substitutions for scanned fonts */
+ int maxObjects; /* maximum number of tests in all substs */
+ /*
+ * List of patterns used to control font file selection
+ */
+ FcStrSet *acceptGlobs;
+ FcStrSet *rejectGlobs;
+ FcFontSet *acceptPatterns;
+ FcFontSet *rejectPatterns;
+ /*
+ * The set of fonts loaded from the listed directories; the
+ * order within the set does not determine the font selection,
+ * except in the case of identical matches in which case earlier fonts
+ * match preferrentially
+ */
+ FcFontSet *fonts[FcSetApplication + 1];
+ /*
+ * Fontconfig can periodically rescan the system configuration
+ * and font directories. This rescanning occurs when font
+ * listing requests are made, but no more often than rescanInterval
+ * seconds apart.
+ */
+ time_t rescanTime; /* last time information was scanned */
+ int rescanInterval; /* interval between scans */
+
+ int ref; /* reference count */
+
+ FcExprPage *expr_pool; /* pool of FcExpr's */
+};
+
+extern FcPrivate FcConfig *_fcConfig;
+
+typedef struct _FcFileTime {
+ time_t time;
+ FcBool set;
+} FcFileTime;
+
+typedef struct _FcCharMap FcCharMap;
+
+typedef struct _FcRange FcRange;
+
+struct _FcRange {
+ FcChar32 begin;
+ FcChar32 end;
+};
+
+/* fcblanks.c */
+
+/* fccache.c */
+
+FcPrivate FcCache *
+FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
+
+FcPrivate FcCache *
+FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
+
+FcPrivate FcBool
+FcDirCacheWrite (FcCache *cache, FcConfig *config);
+
+FcPrivate void
+FcCacheObjectReference (void *object);
+
+FcPrivate void
+FcCacheObjectDereference (void *object);
+
+FcPrivate void
+FcCacheFini (void);
+
+FcPrivate void
+FcDirCacheReference (FcCache *cache, int nref);
+
+FcPrivate int
+FcStat (const char *file, struct stat *statb);
+
+/* fccfg.c */
+
+FcPrivate FcExpr *
+FcConfigAllocExpr (FcConfig *config);
+
+FcPrivate FcBool
+FcConfigAddConfigDir (FcConfig *config,
+ const FcChar8 *d);
+
+FcPrivate FcBool
+FcConfigAddFontDir (FcConfig *config,
+ const FcChar8 *d);
+
+FcPrivate FcBool
+FcConfigAddDir (FcConfig *config,
+ const FcChar8 *d);
+
+FcPrivate FcBool
+FcConfigAddCacheDir (FcConfig *config,
+ const FcChar8 *d);
+
+FcPrivate FcBool
+FcConfigAddConfigFile (FcConfig *config,
+ const FcChar8 *f);
+
+FcPrivate FcBool
+FcConfigAddBlank (FcConfig *config,
+ FcChar32 blank);
+
+FcPrivate FcBool
+FcConfigAddEdit (FcConfig *config,
+ FcTest *test,
+ FcEdit *edit,
+ FcMatchKind kind);
+
+FcPrivate void
+FcConfigSetFonts (FcConfig *config,
+ FcFontSet *fonts,
+ FcSetName set);
+
+FcPrivate FcBool
+FcConfigCompareValue (const FcValue *m,
+ FcOp op,
+ const FcValue *v);
+
+FcPrivate FcBool
+FcConfigGlobAdd (FcConfig *config,
+ const FcChar8 *glob,
+ FcBool accept);
+
+FcPrivate FcBool
+FcConfigAcceptFilename (FcConfig *config,
+ const FcChar8 *filename);
+
+FcPrivate FcBool
+FcConfigPatternsAdd (FcConfig *config,
+ FcPattern *pattern,
+ FcBool accept);
+
+FcPrivate FcBool
+FcConfigAcceptFont (FcConfig *config,
+ const FcPattern *font);
+
+FcPrivate FcFileTime
+FcConfigModifiedTime (FcConfig *config);
+
+FcPrivate FcBool
+FcConfigAddCache (FcConfig *config, FcCache *cache,
+ FcSetName set, FcStrSet *dirSet);
+
+/* fcserialize.c */
+FcPrivate intptr_t
+FcAlignSize (intptr_t size);
+
+FcPrivate FcSerialize *
+FcSerializeCreate (void);
+
+FcPrivate void
+FcSerializeDestroy (FcSerialize *serialize);
+
+FcPrivate FcBool
+FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
+
+FcPrivate intptr_t
+FcSerializeReserve (FcSerialize *serialize, int size);
+
+FcPrivate intptr_t
+FcSerializeOffset (FcSerialize *serialize, const void *object);
+
+FcPrivate void *
+FcSerializePtr (FcSerialize *serialize, const void *object);
+
+FcPrivate FcBool
+FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
+
+FcPrivate FcLangSet *
+FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
+
+/* fccharset.c */
+FcPrivate void
+FcLangCharSetPopulate (void);
+
+FcPrivate FcCharSetFreezer *
+FcCharSetFreezerCreate (void);
+
+FcPrivate const FcCharSet *
+FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
+
+FcPrivate void
+FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
+
+FcPrivate FcBool
+FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
+
+FcPrivate FcCharSet *
+FcNameParseCharSet (FcChar8 *string);
+
+FcPrivate FcBool
+FcNameUnparseValue (FcStrBuf *buf,
+ FcValue *v0,
+ FcChar8 *escape);
+
+FcPrivate FcBool
+FcNameUnparseValueList (FcStrBuf *buf,
+ FcValueListPtr v,
+ FcChar8 *escape);
+
+FcPrivate FcCharLeaf *
+FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
+
+FcPrivate FcBool
+FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
+
+FcPrivate FcCharSet *
+FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
+
+FcPrivate FcChar16 *
+FcCharSetGetNumbers(const FcCharSet *c);
+
+/* fcdbg.c */
+FcPrivate void
+FcValueListPrint (const FcValueListPtr l);
+
+FcPrivate void
+FcLangSetPrint (const FcLangSet *ls);
+
+FcPrivate void
+FcOpPrint (FcOp op);
+
+FcPrivate void
+FcTestPrint (const FcTest *test);
+
+FcPrivate void
+FcExprPrint (const FcExpr *expr);
+
+FcPrivate void
+FcEditPrint (const FcEdit *edit);
+
+FcPrivate void
+FcSubstPrint (const FcSubst *subst);
+
+FcPrivate void
+FcCharSetPrint (const FcCharSet *c);
+
+extern FcPrivate int FcDebugVal;
+
+#define FcDebug() (FcDebugVal)
+
+FcPrivate void
+FcInitDebug (void);
+
+/* fcdefault.c */
+FcPrivate FcChar8 *
+FcGetDefaultLang (void);
+
+/* fcdir.c */
+
+FcPrivate FcBool
+FcFileScanConfig (FcFontSet *set,
+ FcStrSet *dirs,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcConfig *config);
+
+FcPrivate FcBool
+FcDirScanConfig (FcFontSet *set,
+ FcStrSet *dirs,
+ FcBlanks *blanks,
+ const FcChar8 *dir,
+ FcBool force,
+ FcConfig *config);
+
+/* fcfont.c */
+FcPrivate int
+FcFontDebug (void);
+
+/* fcfs.c */
+
+FcPrivate FcBool
+FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
+
+FcPrivate FcFontSet *
+FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
+
+/* fcxml.c */
+FcPrivate void
+FcTestDestroy (FcTest *test);
+
+FcPrivate void
+FcEditDestroy (FcEdit *e);
+
+/* fcinit.c */
+
+FcPrivate void
+FcMemReport (void);
+
+FcPrivate void
+FcMemAlloc (int kind, int size);
+
+FcPrivate void
+FcMemFree (int kind, int size);
+
+/* fclang.c */
+FcPrivate FcLangSet *
+FcFreeTypeLangSet (const FcCharSet *charset,
+ const FcChar8 *exclusiveLang);
+
+FcPrivate FcLangResult
+FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPrivate FcLangSet *
+FcLangSetPromote (const FcChar8 *lang);
+
+FcPrivate FcLangSet *
+FcNameParseLangSet (const FcChar8 *string);
+
+FcPrivate FcBool
+FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
+
+FcPrivate FcChar8 *
+FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
+
+/* fclist.c */
+
+FcPrivate FcBool
+FcListPatternMatchAny (const FcPattern *p,
+ const FcPattern *font);
+
+/* fcmatch.c */
+
+/* fcname.c */
+
+/*
+ * NOTE -- this ordering is part of the cache file format.
+ * It must also match the ordering in fcname.c
+ */
+
+#define FC_FAMILY_OBJECT 1
+#define FC_FAMILYLANG_OBJECT 2
+#define FC_STYLE_OBJECT 3
+#define FC_STYLELANG_OBJECT 4
+#define FC_FULLNAME_OBJECT 5
+#define FC_FULLNAMELANG_OBJECT 6
+#define FC_SLANT_OBJECT 7
+#define FC_WEIGHT_OBJECT 8
+#define FC_WIDTH_OBJECT 9
+#define FC_SIZE_OBJECT 10
+#define FC_ASPECT_OBJECT 11
+#define FC_PIXEL_SIZE_OBJECT 12
+#define FC_SPACING_OBJECT 13
+#define FC_FOUNDRY_OBJECT 14
+#define FC_ANTIALIAS_OBJECT 15
+#define FC_HINT_STYLE_OBJECT 16
+#define FC_HINTING_OBJECT 17
+#define FC_VERTICAL_LAYOUT_OBJECT 18
+#define FC_AUTOHINT_OBJECT 19
+#define FC_GLOBAL_ADVANCE_OBJECT 20
+#define FC_FILE_OBJECT 21
+#define FC_INDEX_OBJECT 22
+#define FC_RASTERIZER_OBJECT 23
+#define FC_OUTLINE_OBJECT 24
+#define FC_SCALABLE_OBJECT 25
+#define FC_DPI_OBJECT 26
+#define FC_RGBA_OBJECT 27
+#define FC_SCALE_OBJECT 28
+#define FC_MINSPACE_OBJECT 29
+#define FC_CHAR_WIDTH_OBJECT 30
+#define FC_CHAR_HEIGHT_OBJECT 31
+#define FC_MATRIX_OBJECT 32
+#define FC_CHARSET_OBJECT 33
+#define FC_LANG_OBJECT 34
+#define FC_FONTVERSION_OBJECT 35
+#define FC_CAPABILITY_OBJECT 36
+#define FC_FONTFORMAT_OBJECT 37
+#define FC_EMBOLDEN_OBJECT 38
+#define FC_EMBEDDED_BITMAP_OBJECT 39
+#define FC_DECORATIVE_OBJECT 40
+#define FC_LCD_FILTER_OBJECT 41
+#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT
+
+FcPrivate FcBool
+FcNameBool (const FcChar8 *v, FcBool *result);
+
+FcPrivate FcBool
+FcObjectValidType (FcObject object, FcType type);
+
+FcPrivate FcObject
+FcObjectFromName (const char * name);
+
+FcPrivate const char *
+FcObjectName (FcObject object);
+
+FcPrivate FcObjectSet *
+FcObjectGetSet (void);
+
+FcPrivate FcBool
+FcObjectInit (void);
+
+FcPrivate void
+FcObjectFini (void);
+
+#define FcObjectCompare(a, b) ((int) a - (int) b)
+
+/* fcpat.c */
+
+FcPrivate FcValue
+FcValueCanonicalize (const FcValue *v);
+
+FcPrivate void
+FcValueListDestroy (FcValueListPtr l);
+
+FcPrivate FcPatternElt *
+FcPatternObjectFindElt (const FcPattern *p, FcObject object);
+
+FcPrivate FcPatternElt *
+FcPatternObjectInsertElt (FcPattern *p, FcObject object);
+
+FcPrivate FcBool
+FcPatternObjectAddWithBinding (FcPattern *p,
+ FcObject object,
+ FcValue value,
+ FcValueBinding binding,
+ FcBool append);
+
+FcPrivate FcBool
+FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
+
+FcPrivate FcBool
+FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
+
+FcPrivate FcResult
+FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
+
+FcPrivate FcBool
+FcPatternObjectDel (FcPattern *p, FcObject object);
+
+FcPrivate FcBool
+FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
+
+FcPrivate FcBool
+FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
+
+FcPrivate FcBool
+FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
+
+FcPrivate FcBool
+FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
+
+FcPrivate FcBool
+FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
+
+FcPrivate FcBool
+FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
+
+FcPrivate FcBool
+FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
+
+FcPrivate FcBool
+FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
+
+FcPrivate FcResult
+FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
+
+FcPrivate FcResult
+FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
+
+FcPrivate FcResult
+FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
+
+FcPrivate FcResult
+FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
+
+FcPrivate FcResult
+FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
+
+FcPrivate FcResult
+FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
+
+FcPrivate FcResult
+FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
+
+FcPrivate void
+FcPatternFini (void);
+
+FcPrivate FcBool
+FcPatternAppend (FcPattern *p, FcPattern *s);
+
+FcPrivate const FcChar8 *
+FcStrStaticName (const FcChar8 *name);
+
+FcPrivate FcChar32
+FcStringHash (const FcChar8 *s);
+
+FcPrivate FcBool
+FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
+
+FcPrivate FcPattern *
+FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
+
+FcPrivate FcBool
+FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
+
+FcPrivate FcValueList *
+FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
+
+/* fcrender.c */
+
+/* fcmatrix.c */
+
+extern FcPrivate const FcMatrix FcIdentityMatrix;
+
+FcPrivate void
+FcMatrixFree (FcMatrix *mat);
+
+/* fcstr.c */
+FcPrivate void
+FcStrSetSort (FcStrSet * set);
+
+FcPrivate void
+FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
+
+FcPrivate void
+FcStrBufDestroy (FcStrBuf *buf);
+
+FcPrivate FcChar8 *
+FcStrBufDone (FcStrBuf *buf);
+
+FcPrivate FcChar8 *
+FcStrBufDoneStatic (FcStrBuf *buf);
+
+FcPrivate FcBool
+FcStrBufChar (FcStrBuf *buf, FcChar8 c);
+
+FcPrivate FcBool
+FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
+
+FcPrivate FcBool
+FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
+
+FcPrivate int
+FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPrivate const FcChar8 *
+FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPrivate const FcChar8 *
+FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPrivate const FcChar8 *
+FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
+
+FcPrivate FcBool
+FcStrUsesHome (const FcChar8 *s);
+
+FcPrivate FcChar8 *
+FcStrLastSlash (const FcChar8 *path);
+
+FcPrivate FcChar32
+FcStrHashIgnoreCase (const FcChar8 *s);
+
+FcPrivate FcChar8 *
+FcStrCanonFilename (const FcChar8 *s);
+
+FcPrivate FcBool
+FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
+
+FcPrivate FcChar8 *
+FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
+
+#endif /* _FC_INT_H_ */
diff --git a/fontconfig/src/fclang.c b/fontconfig/src/fclang.c
index 1d62c4e3f..6a9cf01d6 100644
--- a/fontconfig/src/fclang.c
+++ b/fontconfig/src/fclang.c
@@ -1,822 +1,886 @@
-/*
- * fontconfig/src/fclang.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "fcftint.h"
-
-typedef struct {
- const FcChar8 lang[8];
- const FcCharSet charset;
-} FcLangCharSet;
-
-typedef struct {
- int begin;
- int end;
-} FcLangCharSetRange;
-
-#include "../fc-lang/fclang.h"
-
-struct _FcLangSet {
- FcStrSet *extra;
- FcChar32 map_size;
- FcChar32 map[NUM_LANG_SET_MAP];
-};
-
-static void
-FcLangSetBitSet (FcLangSet *ls,
- unsigned int id)
-{
- int bucket;
-
- id = fcLangCharSetIndices[id];
- bucket = id >> 5;
- if (bucket >= ls->map_size)
- return; /* shouldn't happen really */
-
- ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f));
-}
-
-static FcBool
-FcLangSetBitGet (const FcLangSet *ls,
- unsigned int id)
-{
- int bucket;
-
- id = fcLangCharSetIndices[id];
- bucket = id >> 5;
- if (bucket >= ls->map_size)
- return FcFalse;
-
- return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse;
-}
-
-FcLangSet *
-FcFreeTypeLangSet (const FcCharSet *charset,
- const FcChar8 *exclusiveLang)
-{
- int i, j;
- FcChar32 missing;
- const FcCharSet *exclusiveCharset = 0;
- FcLangSet *ls;
-
- if (exclusiveLang)
- exclusiveCharset = FcLangGetCharSet (exclusiveLang);
- ls = FcLangSetCreate ();
- if (!ls)
- return 0;
- if (FcDebug() & FC_DBG_LANGSET)
- {
- printf ("font charset");
- FcCharSetPrint (charset);
- printf ("\n");
- }
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- {
- if (FcDebug() & FC_DBG_LANGSET)
- {
- printf ("%s charset", fcLangCharSets[i].lang);
- FcCharSetPrint (&fcLangCharSets[i].charset);
- printf ("\n");
- }
-
- /*
- * Check for Han charsets to make fonts
- * which advertise support for a single language
- * not support other Han languages
- */
- if (exclusiveCharset &&
- FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang))
- {
- if (fcLangCharSets[i].charset.num != exclusiveCharset->num)
- continue;
-
- for (j = 0; j < fcLangCharSets[i].charset.num; j++)
- if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) !=
- FcCharSetLeaf(exclusiveCharset, j))
- continue;
- }
- missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset);
- if (FcDebug() & FC_DBG_SCANV)
- {
- if (missing && missing < 10)
- {
- FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset,
- charset);
- FcChar32 ucs4;
- FcChar32 map[FC_CHARSET_MAP_SIZE];
- FcChar32 next;
-
- printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing);
- printf ("{");
- for (ucs4 = FcCharSetFirstPage (missed, map, &next);
- ucs4 != FC_CHARSET_DONE;
- ucs4 = FcCharSetNextPage (missed, map, &next))
- {
- int i, j;
- for (i = 0; i < FC_CHARSET_MAP_SIZE; i++)
- if (map[i])
- {
- for (j = 0; j < 32; j++)
- if (map[i] & (1 << j))
- printf (" %04x", ucs4 + i * 32 + j);
- }
- }
- printf (" }\n\t");
- FcCharSetDestroy (missed);
- }
- else
- printf ("%s(%u) ", fcLangCharSets[i].lang, missing);
- }
- if (!missing)
- FcLangSetBitSet (ls, i);
- }
-
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\n");
-
-
- return ls;
-}
-
-#define FcLangEnd(c) ((c) == '-' || (c) == '\0')
-
-FcLangResult
-FcLangCompare (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
- FcLangResult result = FcLangDifferentLang;
-
- for (;;)
- {
- c1 = *s1++;
- c2 = *s2++;
-
- c1 = FcToLower (c1);
- c2 = FcToLower (c2);
- if (c1 != c2)
- {
- if (FcLangEnd (c1) && FcLangEnd (c2))
- result = FcLangDifferentTerritory;
- return result;
- }
- else if (!c1)
- return FcLangEqual;
- else if (c1 == '-')
- result = FcLangDifferentTerritory;
- }
-}
-
-/*
- * Return FcTrue when super contains sub.
- *
- * super contains sub if super and sub have the same
- * language and either the same country or one
- * is missing the country
- */
-
-static FcBool
-FcLangContains (const FcChar8 *super, const FcChar8 *sub)
-{
- FcChar8 c1, c2;
-
- for (;;)
- {
- c1 = *super++;
- c2 = *sub++;
-
- c1 = FcToLower (c1);
- c2 = FcToLower (c2);
- if (c1 != c2)
- {
- /* see if super has a country while sub is mising one */
- if (c1 == '-' && c2 == '\0')
- return FcTrue;
- /* see if sub has a country while super is mising one */
- if (c1 == '\0' && c2 == '-')
- return FcTrue;
- return FcFalse;
- }
- else if (!c1)
- return FcTrue;
- }
-}
-
-const FcCharSet *
-FcLangGetCharSet (const FcChar8 *lang)
-{
- int i;
- int country = -1;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- {
- switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
- case FcLangEqual:
- return &fcLangCharSets[i].charset;
- case FcLangDifferentTerritory:
- if (country == -1)
- country = i;
- case FcLangDifferentLang:
- default:
- break;
- }
- }
- if (country == -1)
- return 0;
- return &fcLangCharSets[country].charset;
-}
-
-FcStrSet *
-FcGetLangs (void)
-{
- FcStrSet *langs;
- int i;
-
- langs = FcStrSetCreate();
- if (!langs)
- return 0;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- FcStrSetAdd (langs, fcLangCharSets[i].lang);
-
- return langs;
-}
-
-FcLangSet *
-FcLangSetCreate (void)
-{
- FcLangSet *ls;
-
- ls = malloc (sizeof (FcLangSet));
- if (!ls)
- return 0;
- FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet));
- memset (ls->map, '\0', sizeof (ls->map));
- ls->map_size = NUM_LANG_SET_MAP;
- ls->extra = 0;
- return ls;
-}
-
-void
-FcLangSetDestroy (FcLangSet *ls)
-{
- if (ls->extra)
- FcStrSetDestroy (ls->extra);
- FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet));
- free (ls);
-}
-
-FcLangSet *
-FcLangSetCopy (const FcLangSet *ls)
-{
- FcLangSet *new;
-
- new = FcLangSetCreate ();
- if (!new)
- goto bail0;
- memset (new->map, '\0', sizeof (new->map));
- memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0])));
- if (ls->extra)
- {
- FcStrList *list;
- FcChar8 *extra;
-
- new->extra = FcStrSetCreate ();
- if (!new->extra)
- goto bail1;
-
- list = FcStrListCreate (ls->extra);
- if (!list)
- goto bail1;
-
- while ((extra = FcStrListNext (list)))
- if (!FcStrSetAdd (new->extra, extra))
- {
- FcStrListDone (list);
- goto bail1;
- }
- FcStrListDone (list);
- }
- return new;
-bail1:
- FcLangSetDestroy (new);
-bail0:
- return 0;
-}
-
-static int
-FcLangSetIndex (const FcChar8 *lang)
-{
- int low, high, mid = 0;
- int cmp = 0;
- FcChar8 firstChar = FcToLower(lang[0]);
- FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0';
-
- if (firstChar < 'a')
- {
- low = 0;
- high = fcLangCharSetRanges[0].begin;
- }
- else if(firstChar > 'z')
- {
- low = fcLangCharSetRanges[25].begin;
- high = NUM_LANG_CHAR_SET - 1;
- }
- else
- {
- low = fcLangCharSetRanges[firstChar - 'a'].begin;
- high = fcLangCharSetRanges[firstChar - 'a'].end;
- /* no matches */
- if (low > high)
- return -low; /* next entry after where it would be */
- }
-
- while (low <= high)
- {
- mid = (high + low) >> 1;
- if(fcLangCharSets[mid].lang[0] != firstChar)
- cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang);
- else
- { /* fast path for resolving 2-letter languages (by far the most common) after
- * finding the first char (probably already true because of the hash table) */
- cmp = fcLangCharSets[mid].lang[1] - secondChar;
- if (cmp == 0 &&
- (fcLangCharSets[mid].lang[2] != '\0' ||
- lang[2] != '\0'))
- {
- cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2,
- lang+2);
- }
- }
- if (cmp == 0)
- return mid;
- if (cmp < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (cmp < 0)
- mid++;
- return -(mid + 1);
-}
-
-FcBool
-FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
-
- id = FcLangSetIndex (lang);
- if (id >= 0)
- {
- FcLangSetBitSet (ls, id);
- return FcTrue;
- }
- if (!ls->extra)
- {
- ls->extra = FcStrSetCreate ();
- if (!ls->extra)
- return FcFalse;
- }
- return FcStrSetAdd (ls->extra, lang);
-}
-
-FcLangResult
-FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
- FcLangResult best, r;
- int i;
-
- id = FcLangSetIndex (lang);
- if (id < 0)
- id = -id - 1;
- else if (FcLangSetBitGet (ls, id))
- return FcLangEqual;
- best = FcLangDifferentLang;
- for (i = id - 1; i >= 0; i--)
- {
- r = FcLangCompare (lang, fcLangCharSets[i].lang);
- if (r == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) && r < best)
- best = r;
- }
- for (i = id; i < NUM_LANG_CHAR_SET; i++)
- {
- r = FcLangCompare (lang, fcLangCharSets[i].lang);
- if (r == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) && r < best)
- best = r;
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while (best > FcLangEqual && (extra = FcStrListNext (list)))
- {
- r = FcLangCompare (lang, extra);
- if (r < best)
- best = r;
- }
- FcStrListDone (list);
- }
- }
- return best;
-}
-
-static FcLangResult
-FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set)
-{
- FcStrList *list = FcStrListCreate (set);
- FcLangResult r, best = FcLangDifferentLang;
- FcChar8 *extra;
-
- if (list)
- {
- while (best > FcLangEqual && (extra = FcStrListNext (list)))
- {
- r = FcLangSetHasLang (ls, extra);
- if (r < best)
- best = r;
- }
- FcStrListDone (list);
- }
- return best;
-}
-
-FcLangResult
-FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, j, count;
- FcLangResult best, r;
-
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- if (lsa->map[i] & lsb->map[i])
- return FcLangEqual;
- best = FcLangDifferentLang;
- for (j = 0; j < NUM_COUNTRY_SET; j++)
- for (i = 0; i < count; i++)
- if ((lsa->map[i] & fcLangCountrySets[j][i]) &&
- (lsb->map[i] & fcLangCountrySets[j][i]))
- {
- best = FcLangDifferentTerritory;
- break;
- }
- if (lsa->extra)
- {
- r = FcLangSetCompareStrSet (lsb, lsa->extra);
- if (r < best)
- best = r;
- }
- if (best > FcLangEqual && lsb->extra)
- {
- r = FcLangSetCompareStrSet (lsa, lsb->extra);
- if (r < best)
- best = r;
- }
- return best;
-}
-
-/*
- * Used in computing values -- mustn't allocate any storage
- */
-FcLangSet *
-FcLangSetPromote (const FcChar8 *lang)
-{
- static FcLangSet ls;
- static FcStrSet strs;
- static FcChar8 *str;
- int id;
-
- memset (ls.map, '\0', sizeof (ls.map));
- ls.extra = 0;
- id = FcLangSetIndex (lang);
- if (id > 0)
- {
- FcLangSetBitSet (&ls, id);
- }
- else
- {
- ls.extra = &strs;
- strs.num = 1;
- strs.size = 1;
- strs.strs = &str;
- strs.ref = 1;
- str = (FcChar8 *) lang;
- }
- return &ls;
-}
-
-FcChar32
-FcLangSetHash (const FcLangSet *ls)
-{
- FcChar32 h = 0;
- int i, count;
-
- count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
- for (i = 0; i < count; i++)
- h ^= ls->map[i];
- if (ls->extra)
- h ^= ls->extra->num;
- return h;
-}
-
-FcLangSet *
-FcNameParseLangSet (const FcChar8 *string)
-{
- FcChar8 lang[32], c = 0;
- int i;
- FcLangSet *ls;
-
- ls = FcLangSetCreate ();
- if (!ls)
- goto bail0;
-
- for(;;)
- {
- for(i = 0; i < 31;i++)
- {
- c = *string++;
- if(c == '\0' || c == '|')
- break; /* end of this code */
- lang[i] = c;
- }
- lang[i] = '\0';
- if (!FcLangSetAdd (ls, lang))
- goto bail1;
- if(c == '\0')
- break;
- }
- return ls;
-bail1:
- FcLangSetDestroy (ls);
-bail0:
- return 0;
-}
-
-FcBool
-FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
-{
- int i, bit, count;
- FcChar32 bits;
- FcBool first = FcTrue;
-
- count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
- for (i = 0; i < count; i++)
- {
- if ((bits = ls->map[i]))
- {
- for (bit = 0; bit <= 31; bit++)
- if (bits & (1 << bit))
- {
- int id = (i << 5) | bit;
- if (!first)
- if (!FcStrBufChar (buf, '|'))
- return FcFalse;
- if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang))
- return FcFalse;
- first = FcFalse;
- }
- }
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (!list)
- return FcFalse;
- while ((extra = FcStrListNext (list)))
- {
- if (!first)
- if (!FcStrBufChar (buf, '|'))
- {
- FcStrListDone (list);
- return FcFalse;
- }
- if (!FcStrBufString (buf, extra))
- {
- FcStrListDone (list);
- return FcFalse;
- }
- first = FcFalse;
- }
- FcStrListDone (list);
- }
- return FcTrue;
-}
-
-FcBool
-FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, count;
-
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- {
- if (lsa->map[i] != lsb->map[i])
- return FcFalse;
- }
- if (!lsa->extra && !lsb->extra)
- return FcTrue;
- if (lsa->extra && lsb->extra)
- return FcStrSetEqual (lsa->extra, lsb->extra);
- return FcFalse;
-}
-
-static FcBool
-FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
- int i;
-
- id = FcLangSetIndex (lang);
- if (id < 0)
- id = -id - 1;
- else if (FcLangSetBitGet (ls, id))
- return FcTrue;
- /*
- * search up and down among equal languages for a match
- */
- for (i = id - 1; i >= 0; i--)
- {
- if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) &&
- FcLangContains (fcLangCharSets[i].lang, lang))
- return FcTrue;
- }
- for (i = id; i < NUM_LANG_CHAR_SET; i++)
- {
- if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) &&
- FcLangContains (fcLangCharSets[i].lang, lang))
- return FcTrue;
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- {
- if (FcLangContains (extra, lang))
- break;
- }
- FcStrListDone (list);
- if (extra)
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-/*
- * return FcTrue if lsa contains every language in lsb
- */
-FcBool
-FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, j, count;
- FcChar32 missing;
-
- if (FcDebug() & FC_DBG_MATCHV)
- {
- printf ("FcLangSet "); FcLangSetPrint (lsa);
- printf (" contains "); FcLangSetPrint (lsb);
- printf ("\n");
- }
- /*
- * check bitmaps for missing language support
- */
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- {
- missing = lsb->map[i] & ~lsa->map[i];
- if (missing)
- {
- for (j = 0; j < 32; j++)
- if (missing & (1 << j))
- {
- if (!FcLangSetContainsLang (lsa,
- fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang))
- {
- if (FcDebug() & FC_DBG_MATCHV)
- printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang);
- return FcFalse;
- }
- }
- }
- }
- if (lsb->extra)
- {
- FcStrList *list = FcStrListCreate (lsb->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- {
- if (!FcLangSetContainsLang (lsa, extra))
- {
- if (FcDebug() & FC_DBG_MATCHV)
- printf ("\tMissing string %s\n", extra);
- break;
- }
- }
- FcStrListDone (list);
- if (extra)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcBool
-FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l)
-{
- if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet)))
- return FcFalse;
- return FcTrue;
-}
-
-FcLangSet *
-FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l)
-{
- FcLangSet *l_serialize = FcSerializePtr (serialize, l);
-
- if (!l_serialize)
- return NULL;
- memset (l_serialize->map, '\0', sizeof (l_serialize->map));
- memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0])));
- l_serialize->map_size = NUM_LANG_SET_MAP;
- l_serialize->extra = NULL; /* We don't serialize ls->extra */
- return l_serialize;
-}
-
-FcStrSet *
-FcLangSetGetLangs (const FcLangSet *ls)
-{
- FcStrSet *langs;
- int i;
-
- langs = FcStrSetCreate();
- if (!langs)
- return 0;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- if (FcLangSetBitGet (ls, i))
- FcStrSetAdd (langs, fcLangCharSets[i].lang);
-
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- FcStrSetAdd (langs, extra);
-
- FcStrListDone (list);
- }
- }
-
- return langs;
-}
-
-#define __fclang__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fclang__
+/*
+ * fontconfig/src/fclang.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include "fcftint.h"
+
+typedef struct {
+ const FcChar8 lang[8];
+ const FcCharSet charset;
+} FcLangCharSet;
+
+typedef struct {
+ int begin;
+ int end;
+} FcLangCharSetRange;
+
+#include "../fc-lang/fclang.h"
+
+struct _FcLangSet {
+ FcStrSet *extra;
+ FcChar32 map_size;
+ FcChar32 map[NUM_LANG_SET_MAP];
+};
+
+static void
+FcLangSetBitSet (FcLangSet *ls,
+ unsigned int id)
+{
+ int bucket;
+
+ id = fcLangCharSetIndices[id];
+ bucket = id >> 5;
+ if (bucket >= ls->map_size)
+ return; /* shouldn't happen really */
+
+ ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f));
+}
+
+static FcBool
+FcLangSetBitGet (const FcLangSet *ls,
+ unsigned int id)
+{
+ int bucket;
+
+ id = fcLangCharSetIndices[id];
+ bucket = id >> 5;
+ if (bucket >= ls->map_size)
+ return FcFalse;
+
+ return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse;
+}
+
+static void
+FcLangSetBitReset (FcLangSet *ls,
+ unsigned int id)
+{
+ int bucket;
+
+ id = fcLangCharSetIndices[id];
+ bucket = id >> 5;
+ if (bucket >= ls->map_size)
+ return; /* shouldn't happen really */
+
+ ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f));
+}
+
+FcLangSet *
+FcFreeTypeLangSet (const FcCharSet *charset,
+ const FcChar8 *exclusiveLang)
+{
+ int i, j;
+ FcChar32 missing;
+ const FcCharSet *exclusiveCharset = 0;
+ FcLangSet *ls;
+
+ if (exclusiveLang)
+ exclusiveCharset = FcLangGetCharSet (exclusiveLang);
+ ls = FcLangSetCreate ();
+ if (!ls)
+ return 0;
+ if (FcDebug() & FC_DBG_LANGSET)
+ {
+ printf ("font charset");
+ FcCharSetPrint (charset);
+ printf ("\n");
+ }
+ for (i = 0; i < NUM_LANG_CHAR_SET; i++)
+ {
+ if (FcDebug() & FC_DBG_LANGSET)
+ {
+ printf ("%s charset", fcLangCharSets[i].lang);
+ FcCharSetPrint (&fcLangCharSets[i].charset);
+ printf ("\n");
+ }
+
+ /*
+ * Check for Han charsets to make fonts
+ * which advertise support for a single language
+ * not support other Han languages
+ */
+ if (exclusiveCharset &&
+ FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang))
+ {
+ if (fcLangCharSets[i].charset.num != exclusiveCharset->num)
+ continue;
+
+ for (j = 0; j < fcLangCharSets[i].charset.num; j++)
+ if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) !=
+ FcCharSetLeaf(exclusiveCharset, j))
+ continue;
+ }
+ missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset);
+ if (FcDebug() & FC_DBG_SCANV)
+ {
+ if (missing && missing < 10)
+ {
+ FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset,
+ charset);
+ FcChar32 ucs4;
+ FcChar32 map[FC_CHARSET_MAP_SIZE];
+ FcChar32 next;
+
+ printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing);
+ printf ("{");
+ for (ucs4 = FcCharSetFirstPage (missed, map, &next);
+ ucs4 != FC_CHARSET_DONE;
+ ucs4 = FcCharSetNextPage (missed, map, &next))
+ {
+ int i, j;
+ for (i = 0; i < FC_CHARSET_MAP_SIZE; i++)
+ if (map[i])
+ {
+ for (j = 0; j < 32; j++)
+ if (map[i] & (1 << j))
+ printf (" %04x", ucs4 + i * 32 + j);
+ }
+ }
+ printf (" }\n\t");
+ FcCharSetDestroy (missed);
+ }
+ else
+ printf ("%s(%u) ", fcLangCharSets[i].lang, missing);
+ }
+ if (!missing)
+ FcLangSetBitSet (ls, i);
+ }
+
+ if (FcDebug() & FC_DBG_SCANV)
+ printf ("\n");
+
+
+ return ls;
+}
+
+#define FcLangEnd(c) ((c) == '-' || (c) == '\0')
+
+FcLangResult
+FcLangCompare (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcChar8 c1, c2;
+ FcLangResult result = FcLangDifferentLang;
+
+ for (;;)
+ {
+ c1 = *s1++;
+ c2 = *s2++;
+
+ c1 = FcToLower (c1);
+ c2 = FcToLower (c2);
+ if (c1 != c2)
+ {
+ if (FcLangEnd (c1) && FcLangEnd (c2))
+ result = FcLangDifferentTerritory;
+ return result;
+ }
+ else if (!c1)
+ return FcLangEqual;
+ else if (c1 == '-')
+ result = FcLangDifferentTerritory;
+ }
+}
+
+/*
+ * Return FcTrue when super contains sub.
+ *
+ * super contains sub if super and sub have the same
+ * language and either the same country or one
+ * is missing the country
+ */
+
+static FcBool
+FcLangContains (const FcChar8 *super, const FcChar8 *sub)
+{
+ FcChar8 c1, c2;
+
+ for (;;)
+ {
+ c1 = *super++;
+ c2 = *sub++;
+
+ c1 = FcToLower (c1);
+ c2 = FcToLower (c2);
+ if (c1 != c2)
+ {
+ /* see if super has a country while sub is mising one */
+ if (c1 == '-' && c2 == '\0')
+ return FcTrue;
+ /* see if sub has a country while super is mising one */
+ if (c1 == '\0' && c2 == '-')
+ return FcTrue;
+ return FcFalse;
+ }
+ else if (!c1)
+ return FcTrue;
+ }
+}
+
+const FcCharSet *
+FcLangGetCharSet (const FcChar8 *lang)
+{
+ int i;
+ int country = -1;
+
+ for (i = 0; i < NUM_LANG_CHAR_SET; i++)
+ {
+ switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
+ case FcLangEqual:
+ return &fcLangCharSets[i].charset;
+ case FcLangDifferentTerritory:
+ if (country == -1)
+ country = i;
+ case FcLangDifferentLang:
+ default:
+ break;
+ }
+ }
+ if (country == -1)
+ return 0;
+ return &fcLangCharSets[country].charset;
+}
+
+FcStrSet *
+FcGetLangs (void)
+{
+ FcStrSet *langs;
+ int i;
+
+ langs = FcStrSetCreate();
+ if (!langs)
+ return 0;
+
+ for (i = 0; i < NUM_LANG_CHAR_SET; i++)
+ FcStrSetAdd (langs, fcLangCharSets[i].lang);
+
+ return langs;
+}
+
+FcLangSet *
+FcLangSetCreate (void)
+{
+ FcLangSet *ls;
+
+ ls = malloc (sizeof (FcLangSet));
+ if (!ls)
+ return 0;
+ FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet));
+ memset (ls->map, '\0', sizeof (ls->map));
+ ls->map_size = NUM_LANG_SET_MAP;
+ ls->extra = 0;
+ return ls;
+}
+
+void
+FcLangSetDestroy (FcLangSet *ls)
+{
+ if (ls->extra)
+ FcStrSetDestroy (ls->extra);
+ FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet));
+ free (ls);
+}
+
+FcLangSet *
+FcLangSetCopy (const FcLangSet *ls)
+{
+ FcLangSet *new;
+
+ new = FcLangSetCreate ();
+ if (!new)
+ goto bail0;
+ memset (new->map, '\0', sizeof (new->map));
+ memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0])));
+ if (ls->extra)
+ {
+ FcStrList *list;
+ FcChar8 *extra;
+
+ new->extra = FcStrSetCreate ();
+ if (!new->extra)
+ goto bail1;
+
+ list = FcStrListCreate (ls->extra);
+ if (!list)
+ goto bail1;
+
+ while ((extra = FcStrListNext (list)))
+ if (!FcStrSetAdd (new->extra, extra))
+ {
+ FcStrListDone (list);
+ goto bail1;
+ }
+ FcStrListDone (list);
+ }
+ return new;
+bail1:
+ FcLangSetDestroy (new);
+bail0:
+ return 0;
+}
+
+static int
+FcLangSetIndex (const FcChar8 *lang)
+{
+ int low, high, mid = 0;
+ int cmp = 0;
+ FcChar8 firstChar = FcToLower(lang[0]);
+ FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0';
+
+ if (firstChar < 'a')
+ {
+ low = 0;
+ high = fcLangCharSetRanges[0].begin;
+ }
+ else if(firstChar > 'z')
+ {
+ low = fcLangCharSetRanges[25].begin;
+ high = NUM_LANG_CHAR_SET - 1;
+ }
+ else
+ {
+ low = fcLangCharSetRanges[firstChar - 'a'].begin;
+ high = fcLangCharSetRanges[firstChar - 'a'].end;
+ /* no matches */
+ if (low > high)
+ return -low; /* next entry after where it would be */
+ }
+
+ while (low <= high)
+ {
+ mid = (high + low) >> 1;
+ if(fcLangCharSets[mid].lang[0] != firstChar)
+ cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang);
+ else
+ { /* fast path for resolving 2-letter languages (by far the most common) after
+ * finding the first char (probably already true because of the hash table) */
+ cmp = fcLangCharSets[mid].lang[1] - secondChar;
+ if (cmp == 0 &&
+ (fcLangCharSets[mid].lang[2] != '\0' ||
+ lang[2] != '\0'))
+ {
+ cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2,
+ lang+2);
+ }
+ }
+ if (cmp == 0)
+ return mid;
+ if (cmp < 0)
+ low = mid + 1;
+ else
+ high = mid - 1;
+ }
+ if (cmp < 0)
+ mid++;
+ return -(mid + 1);
+}
+
+FcBool
+FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang)
+{
+ int id;
+
+ id = FcLangSetIndex (lang);
+ if (id >= 0)
+ {
+ FcLangSetBitSet (ls, id);
+ return FcTrue;
+ }
+ if (!ls->extra)
+ {
+ ls->extra = FcStrSetCreate ();
+ if (!ls->extra)
+ return FcFalse;
+ }
+ return FcStrSetAdd (ls->extra, lang);
+}
+
+FcBool
+FcLangSetDel (FcLangSet *ls, const FcChar8 *lang)
+{
+ int id;
+
+ id = FcLangSetIndex (lang);
+ if (id >= 0)
+ {
+ FcLangSetBitReset (ls, id);
+ }
+ else if (ls->extra)
+ {
+ FcStrSetDel (ls->extra, lang);
+ }
+ return FcTrue;
+}
+
+FcLangResult
+FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang)
+{
+ int id;
+ FcLangResult best, r;
+ int i;
+
+ id = FcLangSetIndex (lang);
+ if (id < 0)
+ id = -id - 1;
+ else if (FcLangSetBitGet (ls, id))
+ return FcLangEqual;
+ best = FcLangDifferentLang;
+ for (i = id - 1; i >= 0; i--)
+ {
+ r = FcLangCompare (lang, fcLangCharSets[i].lang);
+ if (r == FcLangDifferentLang)
+ break;
+ if (FcLangSetBitGet (ls, i) && r < best)
+ best = r;
+ }
+ for (i = id; i < NUM_LANG_CHAR_SET; i++)
+ {
+ r = FcLangCompare (lang, fcLangCharSets[i].lang);
+ if (r == FcLangDifferentLang)
+ break;
+ if (FcLangSetBitGet (ls, i) && r < best)
+ best = r;
+ }
+ if (ls->extra)
+ {
+ FcStrList *list = FcStrListCreate (ls->extra);
+ FcChar8 *extra;
+
+ if (list)
+ {
+ while (best > FcLangEqual && (extra = FcStrListNext (list)))
+ {
+ r = FcLangCompare (lang, extra);
+ if (r < best)
+ best = r;
+ }
+ FcStrListDone (list);
+ }
+ }
+ return best;
+}
+
+static FcLangResult
+FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set)
+{
+ FcStrList *list = FcStrListCreate (set);
+ FcLangResult r, best = FcLangDifferentLang;
+ FcChar8 *extra;
+
+ if (list)
+ {
+ while (best > FcLangEqual && (extra = FcStrListNext (list)))
+ {
+ r = FcLangSetHasLang (ls, extra);
+ if (r < best)
+ best = r;
+ }
+ FcStrListDone (list);
+ }
+ return best;
+}
+
+FcLangResult
+FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb)
+{
+ int i, j, count;
+ FcLangResult best, r;
+
+ count = FC_MIN (lsa->map_size, lsb->map_size);
+ count = FC_MIN (NUM_LANG_SET_MAP, count);
+ for (i = 0; i < count; i++)
+ if (lsa->map[i] & lsb->map[i])
+ return FcLangEqual;
+ best = FcLangDifferentLang;
+ for (j = 0; j < NUM_COUNTRY_SET; j++)
+ for (i = 0; i < count; i++)
+ if ((lsa->map[i] & fcLangCountrySets[j][i]) &&
+ (lsb->map[i] & fcLangCountrySets[j][i]))
+ {
+ best = FcLangDifferentTerritory;
+ break;
+ }
+ if (lsa->extra)
+ {
+ r = FcLangSetCompareStrSet (lsb, lsa->extra);
+ if (r < best)
+ best = r;
+ }
+ if (best > FcLangEqual && lsb->extra)
+ {
+ r = FcLangSetCompareStrSet (lsa, lsb->extra);
+ if (r < best)
+ best = r;
+ }
+ return best;
+}
+
+/*
+ * Used in computing values -- mustn't allocate any storage
+ * XXX Not thread-safe
+ */
+FcLangSet *
+FcLangSetPromote (const FcChar8 *lang)
+{
+ static FcLangSet ls;
+ static FcStrSet strs;
+ static FcChar8 *str;
+ int id;
+
+ memset (ls.map, '\0', sizeof (ls.map));
+ ls.map_size = NUM_LANG_SET_MAP;
+ ls.extra = 0;
+ id = FcLangSetIndex (lang);
+ if (id > 0)
+ {
+ FcLangSetBitSet (&ls, id);
+ }
+ else
+ {
+ ls.extra = &strs;
+ strs.num = 1;
+ strs.size = 1;
+ strs.strs = &str;
+ strs.ref = 1;
+ str = (FcChar8 *) lang;
+ }
+ return &ls;
+}
+
+FcChar32
+FcLangSetHash (const FcLangSet *ls)
+{
+ FcChar32 h = 0;
+ int i, count;
+
+ count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
+ for (i = 0; i < count; i++)
+ h ^= ls->map[i];
+ if (ls->extra)
+ h ^= ls->extra->num;
+ return h;
+}
+
+FcLangSet *
+FcNameParseLangSet (const FcChar8 *string)
+{
+ FcChar8 lang[32], c = 0;
+ int i;
+ FcLangSet *ls;
+
+ ls = FcLangSetCreate ();
+ if (!ls)
+ goto bail0;
+
+ for(;;)
+ {
+ for(i = 0; i < 31;i++)
+ {
+ c = *string++;
+ if(c == '\0' || c == '|')
+ break; /* end of this code */
+ lang[i] = c;
+ }
+ lang[i] = '\0';
+ if (!FcLangSetAdd (ls, lang))
+ goto bail1;
+ if(c == '\0')
+ break;
+ }
+ return ls;
+bail1:
+ FcLangSetDestroy (ls);
+bail0:
+ return 0;
+}
+
+FcBool
+FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
+{
+ int i, bit, count;
+ FcChar32 bits;
+ FcBool first = FcTrue;
+
+ count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
+ for (i = 0; i < count; i++)
+ {
+ if ((bits = ls->map[i]))
+ {
+ for (bit = 0; bit <= 31; bit++)
+ if (bits & (1 << bit))
+ {
+ int id = (i << 5) | bit;
+ if (!first)
+ if (!FcStrBufChar (buf, '|'))
+ return FcFalse;
+ if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang))
+ return FcFalse;
+ first = FcFalse;
+ }
+ }
+ }
+ if (ls->extra)
+ {
+ FcStrList *list = FcStrListCreate (ls->extra);
+ FcChar8 *extra;
+
+ if (!list)
+ return FcFalse;
+ while ((extra = FcStrListNext (list)))
+ {
+ if (!first)
+ if (!FcStrBufChar (buf, '|'))
+ {
+ FcStrListDone (list);
+ return FcFalse;
+ }
+ if (!FcStrBufString (buf, extra))
+ {
+ FcStrListDone (list);
+ return FcFalse;
+ }
+ first = FcFalse;
+ }
+ FcStrListDone (list);
+ }
+ return FcTrue;
+}
+
+FcBool
+FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb)
+{
+ int i, count;
+
+ count = FC_MIN (lsa->map_size, lsb->map_size);
+ count = FC_MIN (NUM_LANG_SET_MAP, count);
+ for (i = 0; i < count; i++)
+ {
+ if (lsa->map[i] != lsb->map[i])
+ return FcFalse;
+ }
+ if (!lsa->extra && !lsb->extra)
+ return FcTrue;
+ if (lsa->extra && lsb->extra)
+ return FcStrSetEqual (lsa->extra, lsb->extra);
+ return FcFalse;
+}
+
+static FcBool
+FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang)
+{
+ int id;
+ int i;
+
+ id = FcLangSetIndex (lang);
+ if (id < 0)
+ id = -id - 1;
+ else if (FcLangSetBitGet (ls, id))
+ return FcTrue;
+ /*
+ * search up and down among equal languages for a match
+ */
+ for (i = id - 1; i >= 0; i--)
+ {
+ if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
+ break;
+ if (FcLangSetBitGet (ls, i) &&
+ FcLangContains (fcLangCharSets[i].lang, lang))
+ return FcTrue;
+ }
+ for (i = id; i < NUM_LANG_CHAR_SET; i++)
+ {
+ if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
+ break;
+ if (FcLangSetBitGet (ls, i) &&
+ FcLangContains (fcLangCharSets[i].lang, lang))
+ return FcTrue;
+ }
+ if (ls->extra)
+ {
+ FcStrList *list = FcStrListCreate (ls->extra);
+ FcChar8 *extra;
+
+ if (list)
+ {
+ while ((extra = FcStrListNext (list)))
+ {
+ if (FcLangContains (extra, lang))
+ break;
+ }
+ FcStrListDone (list);
+ if (extra)
+ return FcTrue;
+ }
+ }
+ return FcFalse;
+}
+
+/*
+ * return FcTrue if lsa contains every language in lsb
+ */
+FcBool
+FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb)
+{
+ int i, j, count;
+ FcChar32 missing;
+
+ if (FcDebug() & FC_DBG_MATCHV)
+ {
+ printf ("FcLangSet "); FcLangSetPrint (lsa);
+ printf (" contains "); FcLangSetPrint (lsb);
+ printf ("\n");
+ }
+ /*
+ * check bitmaps for missing language support
+ */
+ count = FC_MIN (lsa->map_size, lsb->map_size);
+ count = FC_MIN (NUM_LANG_SET_MAP, count);
+ for (i = 0; i < count; i++)
+ {
+ missing = lsb->map[i] & ~lsa->map[i];
+ if (missing)
+ {
+ for (j = 0; j < 32; j++)
+ if (missing & (1 << j))
+ {
+ if (!FcLangSetContainsLang (lsa,
+ fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang))
+ {
+ if (FcDebug() & FC_DBG_MATCHV)
+ printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang);
+ return FcFalse;
+ }
+ }
+ }
+ }
+ if (lsb->extra)
+ {
+ FcStrList *list = FcStrListCreate (lsb->extra);
+ FcChar8 *extra;
+
+ if (list)
+ {
+ while ((extra = FcStrListNext (list)))
+ {
+ if (!FcLangSetContainsLang (lsa, extra))
+ {
+ if (FcDebug() & FC_DBG_MATCHV)
+ printf ("\tMissing string %s\n", extra);
+ break;
+ }
+ }
+ FcStrListDone (list);
+ if (extra)
+ return FcFalse;
+ }
+ }
+ return FcTrue;
+}
+
+FcBool
+FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l)
+{
+ if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet)))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcLangSet *
+FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l)
+{
+ FcLangSet *l_serialize = FcSerializePtr (serialize, l);
+
+ if (!l_serialize)
+ return NULL;
+ memset (l_serialize->map, '\0', sizeof (l_serialize->map));
+ memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0])));
+ l_serialize->map_size = NUM_LANG_SET_MAP;
+ l_serialize->extra = NULL; /* We don't serialize ls->extra */
+ return l_serialize;
+}
+
+FcStrSet *
+FcLangSetGetLangs (const FcLangSet *ls)
+{
+ FcStrSet *langs;
+ int i;
+
+ langs = FcStrSetCreate();
+ if (!langs)
+ return 0;
+
+ for (i = 0; i < NUM_LANG_CHAR_SET; i++)
+ if (FcLangSetBitGet (ls, i))
+ FcStrSetAdd (langs, fcLangCharSets[i].lang);
+
+ if (ls->extra)
+ {
+ FcStrList *list = FcStrListCreate (ls->extra);
+ FcChar8 *extra;
+
+ if (list)
+ {
+ while ((extra = FcStrListNext (list)))
+ FcStrSetAdd (langs, extra);
+
+ FcStrListDone (list);
+ }
+ }
+
+ return langs;
+}
+
+static FcLangSet *
+FcLangSetOperate(const FcLangSet *a,
+ const FcLangSet *b,
+ FcBool (*func) (FcLangSet *ls,
+ const FcChar8 *s))
+{
+ FcLangSet *langset = FcLangSetCopy (a);
+ FcStrList *sl = FcStrListCreate (FcLangSetGetLangs (b));
+ FcChar8 *str;
+
+ while ((str = FcStrListNext (sl)))
+ {
+ func (langset, str);
+ }
+ FcStrListDone (sl);
+
+ return langset;
+}
+
+FcLangSet *
+FcLangSetUnion (const FcLangSet *a, const FcLangSet *b)
+{
+ return FcLangSetOperate(a, b, FcLangSetAdd);
+}
+
+FcLangSet *
+FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b)
+{
+ return FcLangSetOperate(a, b, FcLangSetDel);
+}
+
+#define __fclang__
+#include "fcaliastail.h"
+#include "fcftaliastail.h"
+#undef __fclang__
diff --git a/fontconfig/src/fclist.c b/fontconfig/src/fclist.c
index d804c1503..0f9a1235c 100644
--- a/fontconfig/src/fclist.c
+++ b/fontconfig/src/fclist.c
@@ -1,577 +1,577 @@
-/*
- * fontconfig/src/fclist.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-FcObjectSet *
-FcObjectSetCreate (void)
-{
- FcObjectSet *os;
-
- os = (FcObjectSet *) malloc (sizeof (FcObjectSet));
- if (!os)
- return 0;
- FcMemAlloc (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
- os->nobject = 0;
- os->sobject = 0;
- os->objects = 0;
- return os;
-}
-
-FcBool
-FcObjectSetAdd (FcObjectSet *os, const char *object)
-{
- int s;
- const char **objects;
- int high, low, mid, c;
-
- if (os->nobject == os->sobject)
- {
- s = os->sobject + 4;
- if (os->objects)
- objects = (const char **) realloc ((void *) os->objects,
- s * sizeof (const char *));
- else
- objects = (const char **) malloc (s * sizeof (const char *));
- if (!objects)
- return FcFalse;
- if (os->sobject)
- FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
- FcMemAlloc (FC_MEM_OBJECTPTR, s * sizeof (const char *));
- os->objects = objects;
- os->sobject = s;
- }
- high = os->nobject - 1;
- low = 0;
- mid = 0;
- c = 1;
- object = (char *)FcStrStaticName ((FcChar8 *)object);
- while (low <= high)
- {
- mid = (low + high) >> 1;
- c = os->objects[mid] - object;
- if (c == 0)
- return FcTrue;
- if (c < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (c < 0)
- mid++;
- memmove (os->objects + mid + 1, os->objects + mid,
- (os->nobject - mid) * sizeof (const char *));
- os->objects[mid] = object;
- os->nobject++;
- return FcTrue;
-}
-
-void
-FcObjectSetDestroy (FcObjectSet *os)
-{
- if (os->objects)
- {
- FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
- free ((void *) os->objects);
- }
- FcMemFree (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
- free (os);
-}
-
-FcObjectSet *
-FcObjectSetVaBuild (const char *first, va_list va)
-{
- FcObjectSet *ret;
-
- FcObjectSetVapBuild (ret, first, va);
- return ret;
-}
-
-FcObjectSet *
-FcObjectSetBuild (const char *first, ...)
-{
- va_list va;
- FcObjectSet *os;
-
- va_start (va, first);
- FcObjectSetVapBuild (os, first, va);
- va_end (va);
- return os;
-}
-
-/*
- * Font must have a containing value for every value in the pattern
- */
-static FcBool
-FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */
- FcValueListPtr fntOrig) /* font */
-{
- FcValueListPtr pat, fnt;
-
- for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat))
- {
- for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt))
- {
- /*
- * make sure the font 'contains' the pattern.
- * (OpListing is OpContains except for strings
- * where it requires an exact match)
- */
- if (FcConfigCompareValue (&fnt->value,
- FcOpListing,
- &pat->value))
- break;
- }
- if (fnt == NULL)
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcBool
-FcListValueListEqual (FcValueListPtr v1orig,
- FcValueListPtr v2orig)
-{
- FcValueListPtr v1, v2;
-
- for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
- {
- for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
- if (FcValueEqual (FcValueCanonicalize(&(v1)->value),
- FcValueCanonicalize(&(v2)->value)))
- break;
- if (v2 == NULL)
- return FcFalse;
- }
- for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
- {
- for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
- if (FcValueEqual (FcValueCanonicalize(&v1->value),
- FcValueCanonicalize(&v2->value)))
- break;
- if (v1 == NULL)
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcBool
-FcListPatternEqual (FcPattern *p1,
- FcPattern *p2,
- FcObjectSet *os)
-{
- int i;
- FcPatternElt *e1, *e2;
-
- for (i = 0; i < os->nobject; i++)
- {
- e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i]));
- e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i]));
- if (!e1 && !e2)
- continue;
- if (!e1 || !e2)
- return FcFalse;
- if (!FcListValueListEqual (FcPatternEltValues(e1),
- FcPatternEltValues(e2)))
- return FcFalse;
- }
- return FcTrue;
-}
-
-/*
- * FcTrue iff all objects in "p" match "font"
- */
-
-FcBool
-FcListPatternMatchAny (const FcPattern *p,
- const FcPattern *font)
-{
- int i;
-
- for (i = 0; i < p->num; i++)
- {
- FcPatternElt *pe = &FcPatternElts(p)[i];
- FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object);
- if (!fe)
- return FcFalse;
- if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */
- FcPatternEltValues(fe))) /* font elts */
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcChar32
-FcListMatrixHash (const FcMatrix *m)
-{
- int xx = (int) (m->xx * 100),
- xy = (int) (m->xy * 100),
- yx = (int) (m->yx * 100),
- yy = (int) (m->yy * 100);
-
- return ((FcChar32) xx) ^ ((FcChar32) xy) ^ ((FcChar32) yx) ^ ((FcChar32) yy);
-}
-
-static FcChar32
-FcListValueHash (FcValue *value)
-{
- FcValue v = FcValueCanonicalize(value);
- switch (v.type) {
- case FcTypeVoid:
- return 0;
- case FcTypeInteger:
- return (FcChar32) v.u.i;
- case FcTypeDouble:
- return (FcChar32) (int) v.u.d;
- case FcTypeString:
- return FcStrHashIgnoreCase (v.u.s);
- case FcTypeBool:
- return (FcChar32) v.u.b;
- case FcTypeMatrix:
- return FcListMatrixHash (v.u.m);
- case FcTypeCharSet:
- return FcCharSetCount (v.u.c);
- case FcTypeFTFace:
- return (long) v.u.f;
- case FcTypeLangSet:
- return FcLangSetHash (v.u.l);
- }
- return 0;
-}
-
-static FcChar32
-FcListValueListHash (FcValueListPtr list)
-{
- FcChar32 h = 0;
-
- while (list != NULL)
- {
- h = h ^ FcListValueHash (&list->value);
- list = FcValueListNext(list);
- }
- return h;
-}
-
-static FcChar32
-FcListPatternHash (FcPattern *font,
- FcObjectSet *os)
-{
- int n;
- FcPatternElt *e;
- FcChar32 h = 0;
-
- for (n = 0; n < os->nobject; n++)
- {
- e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n]));
- if (e)
- h = h ^ FcListValueListHash (FcPatternEltValues(e));
- }
- return h;
-}
-
-typedef struct _FcListBucket {
- struct _FcListBucket *next;
- FcChar32 hash;
- FcPattern *pattern;
-} FcListBucket;
-
-#define FC_LIST_HASH_SIZE 4099
-
-typedef struct _FcListHashTable {
- int entries;
- FcListBucket *buckets[FC_LIST_HASH_SIZE];
-} FcListHashTable;
-
-static void
-FcListHashTableInit (FcListHashTable *table)
-{
- table->entries = 0;
- memset (table->buckets, '\0', sizeof (table->buckets));
-}
-
-static void
-FcListHashTableCleanup (FcListHashTable *table)
-{
- int i;
- FcListBucket *bucket, *next;
-
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- {
- for (bucket = table->buckets[i]; bucket; bucket = next)
- {
- next = bucket->next;
- FcPatternDestroy (bucket->pattern);
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
- }
- table->buckets[i] = 0;
- }
- table->entries = 0;
-}
-
-static int
-FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object)
-{
- FcChar8 *lang = FcGetDefaultLang ();
- FcPatternElt *e = FcPatternObjectFindElt (font, object);
- FcValueListPtr v;
- FcValue value;
- int idx = -1;
- int i;
-
- if (e)
- {
- for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i)
- {
- value = FcValueCanonicalize (&v->value);
-
- if (value.type == FcTypeString)
- {
- FcLangResult res = FcLangCompare (value.u.s, lang);
- if (res == FcLangEqual)
- return i;
-
- if (res == FcLangDifferentCountry && idx < 0)
- idx = i;
- }
- }
- }
-
- return (idx > 0) ? idx : 0;
-}
-
-static FcBool
-FcListAppend (FcListHashTable *table,
- FcPattern *font,
- FcObjectSet *os)
-{
- int o;
- FcPatternElt *e;
- FcValueListPtr v;
- FcChar32 hash;
- FcListBucket **prev, *bucket;
- int familyidx = -1;
- int fullnameidx = -1;
- int styleidx = -1;
- int defidx = 0;
- int idx;
-
- hash = FcListPatternHash (font, os);
- for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE];
- (bucket = *prev); prev = &(bucket->next))
- {
- if (bucket->hash == hash &&
- FcListPatternEqual (bucket->pattern, font, os))
- return FcTrue;
- }
- bucket = (FcListBucket *) malloc (sizeof (FcListBucket));
- if (!bucket)
- goto bail0;
- FcMemAlloc (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- bucket->next = 0;
- bucket->hash = hash;
- bucket->pattern = FcPatternCreate ();
- if (!bucket->pattern)
- goto bail1;
-
- for (o = 0; o < os->nobject; o++)
- {
- if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG))
- {
- if (familyidx < 0)
- familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT);
- defidx = familyidx;
- }
- else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG))
- {
- if (fullnameidx < 0)
- fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT);
- defidx = fullnameidx;
- }
- else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG))
- {
- if (styleidx < 0)
- styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT);
- defidx = styleidx;
- }
- else
- defidx = 0;
-
- e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o]));
- if (e)
- {
- for (v = FcPatternEltValues(e), idx = 0; v;
- v = FcValueListNext(v), ++idx)
- {
- if (!FcPatternAdd (bucket->pattern,
- os->objects[o],
- FcValueCanonicalize(&v->value), defidx != idx))
- goto bail2;
- }
- }
- }
- *prev = bucket;
- ++table->entries;
-
- return FcTrue;
-
-bail2:
- FcPatternDestroy (bucket->pattern);
-bail1:
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
-bail0:
- return FcFalse;
-}
-
-FcFontSet *
-FcFontSetList (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcObjectSet *os)
-{
- FcFontSet *ret;
- FcFontSet *s;
- int f;
- int set;
- FcListHashTable table;
- int i;
- FcListBucket *bucket;
- int destroy_os = 0;
-
- if (!config)
- {
- if (!FcInitBringUptoDate ())
- goto bail0;
-
- config = FcConfigGetCurrent ();
- if (!config)
- goto bail0;
- }
- FcListHashTableInit (&table);
-
- if (!os)
- {
- os = FcObjectGetSet ();
- destroy_os = 1;
- }
-
- /*
- * Walk all available fonts adding those that
- * match to the hash table
- */
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- if (FcListPatternMatchAny (p, /* pattern */
- s->fonts[f])) /* font */
- if (!FcListAppend (&table, s->fonts[f], os))
- goto bail1;
- }
-#if 0
- {
- int max = 0;
- int full = 0;
- int ents = 0;
- int len;
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- {
- if ((bucket = table.buckets[i]))
- {
- len = 0;
- for (; bucket; bucket = bucket->next)
- {
- ents++;
- len++;
- }
- if (len > max)
- max = len;
- full++;
- }
- }
- printf ("used: %d max: %d avg: %g\n", full, max,
- (double) ents / FC_LIST_HASH_SIZE);
- }
-#endif
- /*
- * Walk the hash table and build
- * a font set
- */
- ret = FcFontSetCreate ();
- if (!ret)
- goto bail0;
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- while ((bucket = table.buckets[i]))
- {
- if (!FcFontSetAdd (ret, bucket->pattern))
- goto bail2;
- table.buckets[i] = bucket->next;
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
- }
-
- return ret;
-
-bail2:
- FcFontSetDestroy (ret);
-bail1:
- FcListHashTableCleanup (&table);
-bail0:
- if (destroy_os)
- FcObjectSetDestroy (os);
- return 0;
-}
-
-FcFontSet *
-FcFontList (FcConfig *config,
- FcPattern *p,
- FcObjectSet *os)
-{
- FcFontSet *sets[2];
- int nsets;
-
- if (!config)
- {
- if (!FcInitBringUptoDate ())
- return 0;
-
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
- return FcFontSetList (config, sets, nsets, p, os);
-}
-#define __fclist__
-#include "fcaliastail.h"
-#undef __fclist__
+/*
+ * fontconfig/src/fclist.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+
+FcObjectSet *
+FcObjectSetCreate (void)
+{
+ FcObjectSet *os;
+
+ os = (FcObjectSet *) malloc (sizeof (FcObjectSet));
+ if (!os)
+ return 0;
+ FcMemAlloc (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
+ os->nobject = 0;
+ os->sobject = 0;
+ os->objects = 0;
+ return os;
+}
+
+FcBool
+FcObjectSetAdd (FcObjectSet *os, const char *object)
+{
+ int s;
+ const char **objects;
+ int high, low, mid, c;
+
+ if (os->nobject == os->sobject)
+ {
+ s = os->sobject + 4;
+ if (os->objects)
+ objects = (const char **) realloc ((void *) os->objects,
+ s * sizeof (const char *));
+ else
+ objects = (const char **) malloc (s * sizeof (const char *));
+ if (!objects)
+ return FcFalse;
+ if (os->sobject)
+ FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
+ FcMemAlloc (FC_MEM_OBJECTPTR, s * sizeof (const char *));
+ os->objects = objects;
+ os->sobject = s;
+ }
+ high = os->nobject - 1;
+ low = 0;
+ mid = 0;
+ c = 1;
+ object = (char *)FcStrStaticName ((FcChar8 *)object);
+ while (low <= high)
+ {
+ mid = (low + high) >> 1;
+ c = os->objects[mid] - object;
+ if (c == 0)
+ return FcTrue;
+ if (c < 0)
+ low = mid + 1;
+ else
+ high = mid - 1;
+ }
+ if (c < 0)
+ mid++;
+ memmove (os->objects + mid + 1, os->objects + mid,
+ (os->nobject - mid) * sizeof (const char *));
+ os->objects[mid] = object;
+ os->nobject++;
+ return FcTrue;
+}
+
+void
+FcObjectSetDestroy (FcObjectSet *os)
+{
+ if (os->objects)
+ {
+ FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
+ free ((void *) os->objects);
+ }
+ FcMemFree (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
+ free (os);
+}
+
+FcObjectSet *
+FcObjectSetVaBuild (const char *first, va_list va)
+{
+ FcObjectSet *ret;
+
+ FcObjectSetVapBuild (ret, first, va);
+ return ret;
+}
+
+FcObjectSet *
+FcObjectSetBuild (const char *first, ...)
+{
+ va_list va;
+ FcObjectSet *os;
+
+ va_start (va, first);
+ FcObjectSetVapBuild (os, first, va);
+ va_end (va);
+ return os;
+}
+
+/*
+ * Font must have a containing value for every value in the pattern
+ */
+static FcBool
+FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */
+ FcValueListPtr fntOrig) /* font */
+{
+ FcValueListPtr pat, fnt;
+
+ for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat))
+ {
+ for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt))
+ {
+ /*
+ * make sure the font 'contains' the pattern.
+ * (OpListing is OpContains except for strings
+ * where it requires an exact match)
+ */
+ if (FcConfigCompareValue (&fnt->value,
+ FcOpListing,
+ &pat->value))
+ break;
+ }
+ if (fnt == NULL)
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+static FcBool
+FcListValueListEqual (FcValueListPtr v1orig,
+ FcValueListPtr v2orig)
+{
+ FcValueListPtr v1, v2;
+
+ for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
+ {
+ for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
+ if (FcValueEqual (FcValueCanonicalize(&(v1)->value),
+ FcValueCanonicalize(&(v2)->value)))
+ break;
+ if (v2 == NULL)
+ return FcFalse;
+ }
+ for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
+ {
+ for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
+ if (FcValueEqual (FcValueCanonicalize(&v1->value),
+ FcValueCanonicalize(&v2->value)))
+ break;
+ if (v1 == NULL)
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+static FcBool
+FcListPatternEqual (FcPattern *p1,
+ FcPattern *p2,
+ FcObjectSet *os)
+{
+ int i;
+ FcPatternElt *e1, *e2;
+
+ for (i = 0; i < os->nobject; i++)
+ {
+ e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i]));
+ e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i]));
+ if (!e1 && !e2)
+ continue;
+ if (!e1 || !e2)
+ return FcFalse;
+ if (!FcListValueListEqual (FcPatternEltValues(e1),
+ FcPatternEltValues(e2)))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+/*
+ * FcTrue iff all objects in "p" match "font"
+ */
+
+FcBool
+FcListPatternMatchAny (const FcPattern *p,
+ const FcPattern *font)
+{
+ int i;
+
+ for (i = 0; i < p->num; i++)
+ {
+ FcPatternElt *pe = &FcPatternElts(p)[i];
+ FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object);
+ if (!fe)
+ return FcFalse;
+ if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */
+ FcPatternEltValues(fe))) /* font elts */
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+static FcChar32
+FcListMatrixHash (const FcMatrix *m)
+{
+ int xx = (int) (m->xx * 100),
+ xy = (int) (m->xy * 100),
+ yx = (int) (m->yx * 100),
+ yy = (int) (m->yy * 100);
+
+ return ((FcChar32) xx) ^ ((FcChar32) xy) ^ ((FcChar32) yx) ^ ((FcChar32) yy);
+}
+
+static FcChar32
+FcListValueHash (FcValue *value)
+{
+ FcValue v = FcValueCanonicalize(value);
+ switch (v.type) {
+ case FcTypeVoid:
+ return 0;
+ case FcTypeInteger:
+ return (FcChar32) v.u.i;
+ case FcTypeDouble:
+ return (FcChar32) (int) v.u.d;
+ case FcTypeString:
+ return FcStrHashIgnoreCase (v.u.s);
+ case FcTypeBool:
+ return (FcChar32) v.u.b;
+ case FcTypeMatrix:
+ return FcListMatrixHash (v.u.m);
+ case FcTypeCharSet:
+ return FcCharSetCount (v.u.c);
+ case FcTypeFTFace:
+ return (long) v.u.f;
+ case FcTypeLangSet:
+ return FcLangSetHash (v.u.l);
+ }
+ return 0;
+}
+
+static FcChar32
+FcListValueListHash (FcValueListPtr list)
+{
+ FcChar32 h = 0;
+
+ while (list != NULL)
+ {
+ h = h ^ FcListValueHash (&list->value);
+ list = FcValueListNext(list);
+ }
+ return h;
+}
+
+static FcChar32
+FcListPatternHash (FcPattern *font,
+ FcObjectSet *os)
+{
+ int n;
+ FcPatternElt *e;
+ FcChar32 h = 0;
+
+ for (n = 0; n < os->nobject; n++)
+ {
+ e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n]));
+ if (e)
+ h = h ^ FcListValueListHash (FcPatternEltValues(e));
+ }
+ return h;
+}
+
+typedef struct _FcListBucket {
+ struct _FcListBucket *next;
+ FcChar32 hash;
+ FcPattern *pattern;
+} FcListBucket;
+
+#define FC_LIST_HASH_SIZE 4099
+
+typedef struct _FcListHashTable {
+ int entries;
+ FcListBucket *buckets[FC_LIST_HASH_SIZE];
+} FcListHashTable;
+
+static void
+FcListHashTableInit (FcListHashTable *table)
+{
+ table->entries = 0;
+ memset (table->buckets, '\0', sizeof (table->buckets));
+}
+
+static void
+FcListHashTableCleanup (FcListHashTable *table)
+{
+ int i;
+ FcListBucket *bucket, *next;
+
+ for (i = 0; i < FC_LIST_HASH_SIZE; i++)
+ {
+ for (bucket = table->buckets[i]; bucket; bucket = next)
+ {
+ next = bucket->next;
+ FcPatternDestroy (bucket->pattern);
+ FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
+ free (bucket);
+ }
+ table->buckets[i] = 0;
+ }
+ table->entries = 0;
+}
+
+static int
+FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object)
+{
+ FcChar8 *lang = FcGetDefaultLang ();
+ FcPatternElt *e = FcPatternObjectFindElt (font, object);
+ FcValueListPtr v;
+ FcValue value;
+ int idx = -1;
+ int i;
+
+ if (e)
+ {
+ for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i)
+ {
+ value = FcValueCanonicalize (&v->value);
+
+ if (value.type == FcTypeString)
+ {
+ FcLangResult res = FcLangCompare (value.u.s, lang);
+ if (res == FcLangEqual)
+ return i;
+
+ if (res == FcLangDifferentCountry && idx < 0)
+ idx = i;
+ }
+ }
+ }
+
+ return (idx > 0) ? idx : 0;
+}
+
+static FcBool
+FcListAppend (FcListHashTable *table,
+ FcPattern *font,
+ FcObjectSet *os)
+{
+ int o;
+ FcPatternElt *e;
+ FcValueListPtr v;
+ FcChar32 hash;
+ FcListBucket **prev, *bucket;
+ int familyidx = -1;
+ int fullnameidx = -1;
+ int styleidx = -1;
+ int defidx = 0;
+ int idx;
+
+ hash = FcListPatternHash (font, os);
+ for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE];
+ (bucket = *prev); prev = &(bucket->next))
+ {
+ if (bucket->hash == hash &&
+ FcListPatternEqual (bucket->pattern, font, os))
+ return FcTrue;
+ }
+ bucket = (FcListBucket *) malloc (sizeof (FcListBucket));
+ if (!bucket)
+ goto bail0;
+ FcMemAlloc (FC_MEM_LISTBUCK, sizeof (FcListBucket));
+ bucket->next = 0;
+ bucket->hash = hash;
+ bucket->pattern = FcPatternCreate ();
+ if (!bucket->pattern)
+ goto bail1;
+
+ for (o = 0; o < os->nobject; o++)
+ {
+ if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG))
+ {
+ if (familyidx < 0)
+ familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT);
+ defidx = familyidx;
+ }
+ else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG))
+ {
+ if (fullnameidx < 0)
+ fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT);
+ defidx = fullnameidx;
+ }
+ else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG))
+ {
+ if (styleidx < 0)
+ styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT);
+ defidx = styleidx;
+ }
+ else
+ defidx = 0;
+
+ e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o]));
+ if (e)
+ {
+ for (v = FcPatternEltValues(e), idx = 0; v;
+ v = FcValueListNext(v), ++idx)
+ {
+ if (!FcPatternAdd (bucket->pattern,
+ os->objects[o],
+ FcValueCanonicalize(&v->value), defidx != idx))
+ goto bail2;
+ }
+ }
+ }
+ *prev = bucket;
+ ++table->entries;
+
+ return FcTrue;
+
+bail2:
+ FcPatternDestroy (bucket->pattern);
+bail1:
+ FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
+ free (bucket);
+bail0:
+ return FcFalse;
+}
+
+FcFontSet *
+FcFontSetList (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcObjectSet *os)
+{
+ FcFontSet *ret;
+ FcFontSet *s;
+ int f;
+ int set;
+ FcListHashTable table;
+ int i;
+ FcListBucket *bucket;
+ int destroy_os = 0;
+
+ if (!config)
+ {
+ if (!FcInitBringUptoDate ())
+ goto bail0;
+
+ config = FcConfigGetCurrent ();
+ if (!config)
+ goto bail0;
+ }
+ FcListHashTableInit (&table);
+
+ if (!os)
+ {
+ os = FcObjectGetSet ();
+ destroy_os = 1;
+ }
+
+ /*
+ * Walk all available fonts adding those that
+ * match to the hash table
+ */
+ for (set = 0; set < nsets; set++)
+ {
+ s = sets[set];
+ if (!s)
+ continue;
+ for (f = 0; f < s->nfont; f++)
+ if (FcListPatternMatchAny (p, /* pattern */
+ s->fonts[f])) /* font */
+ if (!FcListAppend (&table, s->fonts[f], os))
+ goto bail1;
+ }
+#if 0
+ {
+ int max = 0;
+ int full = 0;
+ int ents = 0;
+ int len;
+ for (i = 0; i < FC_LIST_HASH_SIZE; i++)
+ {
+ if ((bucket = table.buckets[i]))
+ {
+ len = 0;
+ for (; bucket; bucket = bucket->next)
+ {
+ ents++;
+ len++;
+ }
+ if (len > max)
+ max = len;
+ full++;
+ }
+ }
+ printf ("used: %d max: %d avg: %g\n", full, max,
+ (double) ents / FC_LIST_HASH_SIZE);
+ }
+#endif
+ /*
+ * Walk the hash table and build
+ * a font set
+ */
+ ret = FcFontSetCreate ();
+ if (!ret)
+ goto bail0;
+ for (i = 0; i < FC_LIST_HASH_SIZE; i++)
+ while ((bucket = table.buckets[i]))
+ {
+ if (!FcFontSetAdd (ret, bucket->pattern))
+ goto bail2;
+ table.buckets[i] = bucket->next;
+ FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
+ free (bucket);
+ }
+
+ return ret;
+
+bail2:
+ FcFontSetDestroy (ret);
+bail1:
+ FcListHashTableCleanup (&table);
+bail0:
+ if (destroy_os)
+ FcObjectSetDestroy (os);
+ return 0;
+}
+
+FcFontSet *
+FcFontList (FcConfig *config,
+ FcPattern *p,
+ FcObjectSet *os)
+{
+ FcFontSet *sets[2];
+ int nsets;
+
+ if (!config)
+ {
+ if (!FcInitBringUptoDate ())
+ return 0;
+
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ nsets = 0;
+ if (config->fonts[FcSetSystem])
+ sets[nsets++] = config->fonts[FcSetSystem];
+ if (config->fonts[FcSetApplication])
+ sets[nsets++] = config->fonts[FcSetApplication];
+ return FcFontSetList (config, sets, nsets, p, os);
+}
+#define __fclist__
+#include "fcaliastail.h"
+#undef __fclist__
diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c
index aa84eda83..6103ae2c9 100644
--- a/fontconfig/src/fcmatch.c
+++ b/fontconfig/src/fcmatch.c
@@ -1,840 +1,840 @@
-/*
- * fontconfig/src/fcmatch.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <string.h>
-#include <ctype.h>
-#include <stdio.h>
-
-static double
-FcCompareNumber (FcValue *value1, FcValue *value2)
-{
- double v1, v2, v;
-
- switch (value1->type) {
- case FcTypeInteger:
- v1 = (double) value1->u.i;
- break;
- case FcTypeDouble:
- v1 = value1->u.d;
- break;
- default:
- return -1.0;
- }
- switch (value2->type) {
- case FcTypeInteger:
- v2 = (double) value2->u.i;
- break;
- case FcTypeDouble:
- v2 = value2->u.d;
- break;
- default:
- return -1.0;
- }
- v = v2 - v1;
- if (v < 0)
- v = -v;
- return v;
-}
-
-static double
-FcCompareString (FcValue *v1, FcValue *v2)
-{
- return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0;
-}
-
-static double
-FcCompareFamily (FcValue *v1, FcValue *v2)
-{
- /* rely on the guarantee in FcPatternAddWithBinding that
- * families are always FcTypeString. */
- const FcChar8* v1_string = FcValueString(v1);
- const FcChar8* v2_string = FcValueString(v2);
-
- if (FcToLower(*v1_string) != FcToLower(*v2_string) &&
- *v1_string != ' ' && *v2_string != ' ')
- return 1.0;
-
- return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0;
-}
-
-static double
-FcCompareLang (FcValue *v1, FcValue *v2)
-{
- FcLangResult result;
- FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
-
- switch (value1.type) {
- case FcTypeLangSet:
- switch (value2.type) {
- case FcTypeLangSet:
- result = FcLangSetCompare (value1.u.l, value2.u.l);
- break;
- case FcTypeString:
- result = FcLangSetHasLang (value1.u.l,
- value2.u.s);
- break;
- default:
- return -1.0;
- }
- break;
- case FcTypeString:
- switch (value2.type) {
- case FcTypeLangSet:
- result = FcLangSetHasLang (value2.u.l, value1.u.s);
- break;
- case FcTypeString:
- result = FcLangCompare (value1.u.s,
- value2.u.s);
- break;
- default:
- return -1.0;
- }
- break;
- default:
- return -1.0;
- }
- switch (result) {
- case FcLangEqual:
- return 0;
- case FcLangDifferentCountry:
- return 1;
- case FcLangDifferentLang:
- default:
- return 2;
- }
-}
-
-static double
-FcCompareBool (FcValue *v1, FcValue *v2)
-{
- if (v2->type != FcTypeBool || v1->type != FcTypeBool)
- return -1.0;
- return (double) v2->u.b != v1->u.b;
-}
-
-static double
-FcCompareCharSet (FcValue *v1, FcValue *v2)
-{
- return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2));
-}
-
-static double
-FcCompareSize (FcValue *value1, FcValue *value2)
-{
- double v1, v2, v;
-
- switch (value1->type) {
- case FcTypeInteger:
- v1 = value1->u.i;
- break;
- case FcTypeDouble:
- v1 = value1->u.d;
- break;
- default:
- return -1;
- }
- switch (value2->type) {
- case FcTypeInteger:
- v2 = value2->u.i;
- break;
- case FcTypeDouble:
- v2 = value2->u.d;
- break;
- default:
- return -1;
- }
- if (v2 == 0)
- return 0;
- v = v2 - v1;
- if (v < 0)
- v = -v;
- return v;
-}
-
-typedef struct _FcMatcher {
- FcObject object;
- double (*compare) (FcValue *value1, FcValue *value2);
- int strong, weak;
-} FcMatcher;
-
-/*
- * Order is significant, it defines the precedence of
- * each value, earlier values are more significant than
- * later values
- */
-static const FcMatcher _FcMatchers [] = {
- { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 },
-#define MATCH_FOUNDRY 0
- { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 },
-#define MATCH_CHARSET 1
- { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 },
-#define MATCH_FAMILY 2
- { FC_LANG_OBJECT, FcCompareLang, 3, 3 },
-#define MATCH_LANG 3
-#define MATCH_LANG_INDEX 3
- { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 },
-#define MATCH_SPACING 4
- { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 },
-#define MATCH_PIXEL_SIZE 5
- { FC_STYLE_OBJECT, FcCompareString, 7, 7 },
-#define MATCH_STYLE 6
- { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 },
-#define MATCH_SLANT 7
- { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 },
-#define MATCH_WEIGHT 8
- { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 },
-#define MATCH_WIDTH 9
- { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 },
-#define MATCH_DECORATIVE 10
- { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 },
-#define MATCH_ANTIALIAS 11
- { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 },
-#define MATCH_RASTERIZER 12
- { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 },
-#define MATCH_OUTLINE 13
- { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 },
-#define MATCH_FONTVERSION 14
-};
-
-#define NUM_MATCH_VALUES 16
-
-static const FcMatcher*
-FcObjectToMatcher (FcObject object)
-{
- int i;
-
- i = -1;
- switch (object) {
- case FC_FOUNDRY_OBJECT:
- i = MATCH_FOUNDRY; break;
- case FC_FONTVERSION_OBJECT:
- i = MATCH_FONTVERSION; break;
- case FC_FAMILY_OBJECT:
- i = MATCH_FAMILY; break;
- case FC_CHARSET_OBJECT:
- i = MATCH_CHARSET; break;
- case FC_ANTIALIAS_OBJECT:
- i = MATCH_ANTIALIAS; break;
- case FC_LANG_OBJECT:
- i = MATCH_LANG; break;
- case FC_SPACING_OBJECT:
- i = MATCH_SPACING; break;
- case FC_STYLE_OBJECT:
- i = MATCH_STYLE; break;
- case FC_SLANT_OBJECT:
- i = MATCH_SLANT; break;
- case FC_PIXEL_SIZE_OBJECT:
- i = MATCH_PIXEL_SIZE; break;
- case FC_WIDTH_OBJECT:
- i = MATCH_WIDTH; break;
- case FC_WEIGHT_OBJECT:
- i = MATCH_WEIGHT; break;
- case FC_RASTERIZER_OBJECT:
- i = MATCH_RASTERIZER; break;
- case FC_OUTLINE_OBJECT:
- i = MATCH_OUTLINE; break;
- case FC_DECORATIVE_OBJECT:
- i = MATCH_DECORATIVE; break;
- }
-
- if (i < 0)
- return NULL;
-
- return _FcMatchers+i;
-}
-
-static FcBool
-FcCompareValueList (FcObject object,
- FcValueListPtr v1orig, /* pattern */
- FcValueListPtr v2orig, /* target */
- FcValue *bestValue,
- double *value,
- FcResult *result)
-{
- FcValueListPtr v1, v2;
- double v, best, bestStrong, bestWeak;
- int j;
- const FcMatcher *match = FcObjectToMatcher(object);
-
- if (!match)
- {
- if (bestValue)
- *bestValue = FcValueCanonicalize(&v2orig->value);
- return FcTrue;
- }
-
- best = 1e99;
- bestStrong = 1e99;
- bestWeak = 1e99;
- j = 1;
- for (v1 = v1orig; v1; v1 = FcValueListNext(v1))
- {
- for (v2 = v2orig; v2; v2 = FcValueListNext(v2))
- {
- v = (match->compare) (&v1->value, &v2->value);
- if (v < 0)
- {
- *result = FcResultTypeMismatch;
- return FcFalse;
- }
- v = v * 1000 + j;
- if (v < best)
- {
- if (bestValue)
- *bestValue = FcValueCanonicalize(&v2->value);
- best = v;
- }
- if (v1->binding == FcValueBindingStrong)
- {
- if (v < bestStrong)
- bestStrong = v;
- }
- else
- {
- if (v < bestWeak)
- bestWeak = v;
- }
- }
- j++;
- }
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf (" %s: %g ", FcObjectName (object), best);
- FcValueListPrint (v1orig);
- printf (", ");
- FcValueListPrint (v2orig);
- printf ("\n");
- }
- if (value)
- {
- int weak = match->weak;
- int strong = match->strong;
- if (weak == strong)
- value[strong] += best;
- else
- {
- value[weak] += bestWeak;
- value[strong] += bestStrong;
- }
- }
- return FcTrue;
-}
-
-/*
- * Return a value indicating the distance between the two lists of
- * values
- */
-
-static FcBool
-FcCompare (FcPattern *pat,
- FcPattern *fnt,
- double *value,
- FcResult *result)
-{
- int i, i1, i2;
-
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- value[i] = 0.0;
-
- i1 = 0;
- i2 = 0;
- while (i1 < pat->num && i2 < fnt->num)
- {
- FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1];
- FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2];
-
- i = FcObjectCompare(elt_i1->object, elt_i2->object);
- if (i > 0)
- i2++;
- else if (i < 0)
- i1++;
- else
- {
- if (!FcCompareValueList (elt_i1->object,
- FcPatternEltValues(elt_i1),
- FcPatternEltValues(elt_i2),
- 0, value, result))
- return FcFalse;
- i1++;
- i2++;
- }
- }
- return FcTrue;
-}
-
-FcPattern *
-FcFontRenderPrepare (FcConfig *config,
- FcPattern *pat,
- FcPattern *font)
-{
- FcPattern *new;
- int i;
- FcPatternElt *fe, *pe;
- FcValue v;
- FcResult result;
-
- new = FcPatternCreate ();
- if (!new)
- return 0;
- for (i = 0; i < font->num; i++)
- {
- fe = &FcPatternElts(font)[i];
- pe = FcPatternObjectFindElt (pat, fe->object);
- if (pe)
- {
- if (!FcCompareValueList (pe->object, FcPatternEltValues(pe),
- FcPatternEltValues(fe), &v, 0, &result))
- {
- FcPatternDestroy (new);
- return 0;
- }
- }
- else
- v = FcValueCanonicalize(&FcPatternEltValues (fe)->value);
- FcPatternObjectAdd (new, fe->object, v, FcFalse);
- }
- for (i = 0; i < pat->num; i++)
- {
- pe = &FcPatternElts(pat)[i];
- fe = FcPatternObjectFindElt (font, pe->object);
- if (!fe)
- {
- v = FcValueCanonicalize(&FcPatternEltValues(pe)->value);
- FcPatternObjectAdd (new, pe->object, v, FcTrue);
- }
- }
-
- FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
- return new;
-}
-
-static FcPattern *
-FcFontSetMatchInternal (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result)
-{
- double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES];
- int f;
- FcFontSet *s;
- FcPattern *best;
- int i;
- int set;
-
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- bestscore[i] = 0;
- best = 0;
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Match ");
- FcPatternPrint (p);
- }
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Font %d ", f);
- FcPatternPrint (s->fonts[f]);
- }
- if (!FcCompare (p, s->fonts[f], score, result))
- return 0;
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- printf (" %g", score[i]);
- }
- printf ("\n");
- }
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- if (best && bestscore[i] < score[i])
- break;
- if (!best || score[i] < bestscore[i])
- {
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- bestscore[i] = score[i];
- best = s->fonts[f];
- break;
- }
- }
- }
- }
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Best score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- printf (" %g", bestscore[i]);
- printf ("\n");
- FcPatternPrint (best);
- }
- if (!best)
- {
- *result = FcResultNoMatch;
- return 0;
- }
- return best;
-}
-
-FcPattern *
-FcFontSetMatch (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result)
-{
- FcPattern *best;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- best = FcFontSetMatchInternal (config, sets, nsets, p, result);
- if (best)
- return FcFontRenderPrepare (config, p, best);
- else
- return NULL;
-}
-
-FcPattern *
-FcFontMatch (FcConfig *config,
- FcPattern *p,
- FcResult *result)
-{
- FcFontSet *sets[2];
- int nsets;
- FcPattern *best;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
-
- best = FcFontSetMatchInternal (config, sets, nsets, p, result);
- if (best)
- return FcFontRenderPrepare (config, p, best);
- else
- return NULL;
-}
-
-typedef struct _FcSortNode {
- FcPattern *pattern;
- double score[NUM_MATCH_VALUES];
-} FcSortNode;
-
-static int
-FcSortCompare (const void *aa, const void *ab)
-{
- FcSortNode *a = *(FcSortNode **) aa;
- FcSortNode *b = *(FcSortNode **) ab;
- double *as = &a->score[0];
- double *bs = &b->score[0];
- double ad = 0, bd = 0;
- int i;
-
- i = NUM_MATCH_VALUES;
- while (i-- && (ad = *as++) == (bd = *bs++))
- ;
- return ad < bd ? -1 : ad > bd ? 1 : 0;
-}
-
-static FcBool
-FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim)
-{
- FcBool ret = FcFalse;
- FcCharSet *cs;
-
- cs = 0;
- if (trim || csp)
- {
- cs = FcCharSetCreate ();
- if (cs == NULL)
- goto bail;
- }
-
- while (nnode--)
- {
- FcSortNode *node = *n++;
- FcBool adds_chars = FcFalse;
-
- /*
- * Only fetch node charset if we'd need it
- */
- if (cs)
- {
- FcCharSet *ncs;
-
- if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) !=
- FcResultMatch)
- continue;
-
- if (!FcCharSetMerge (cs, ncs, &adds_chars))
- goto bail;
- }
-
- /*
- * If this font isn't a subset of the previous fonts,
- * add it to the list
- */
- if (!trim || adds_chars)
- {
- FcPatternReference (node->pattern);
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Add ");
- FcPatternPrint (node->pattern);
- }
- if (!FcFontSetAdd (fs, node->pattern))
- {
- FcPatternDestroy (node->pattern);
- goto bail;
- }
- }
- }
- if (csp)
- {
- *csp = cs;
- cs = 0;
- }
-
- ret = FcTrue;
-
-bail:
- if (cs)
- FcCharSetDestroy (cs);
-
- return ret;
-}
-
-void
-FcFontSetSortDestroy (FcFontSet *fs)
-{
- FcFontSetDestroy (fs);
-}
-
-FcFontSet *
-FcFontSetSort (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result)
-{
- FcFontSet *ret;
- FcFontSet *s;
- FcSortNode *nodes;
- FcSortNode **nodeps, **nodep;
- int nnodes;
- FcSortNode *new;
- int set;
- int f;
- int i;
- int nPatternLang;
- FcBool *patternLangSat;
- FcValue patternLang;
-
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Sort ");
- FcPatternPrint (p);
- }
- nnodes = 0;
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- nnodes += s->nfont;
- }
- if (!nnodes)
- goto bail0;
-
- for (nPatternLang = 0;
- FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
- nPatternLang++)
- ;
-
- /* freed below */
- nodes = malloc (nnodes * sizeof (FcSortNode) +
- nnodes * sizeof (FcSortNode *) +
- nPatternLang * sizeof (FcBool));
- if (!nodes)
- goto bail0;
- nodeps = (FcSortNode **) (nodes + nnodes);
- patternLangSat = (FcBool *) (nodeps + nnodes);
-
- new = nodes;
- nodep = nodeps;
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Font %d ", f);
- FcPatternPrint (s->fonts[f]);
- }
- new->pattern = s->fonts[f];
- if (!FcCompare (p, new->pattern, new->score, result))
- goto bail1;
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- printf (" %g", new->score[i]);
- }
- printf ("\n");
- }
- *nodep = new;
- new++;
- nodep++;
- }
- }
-
- nnodes = new - nodes;
-
- qsort (nodeps, nnodes, sizeof (FcSortNode *),
- FcSortCompare);
-
- for (i = 0; i < nPatternLang; i++)
- patternLangSat[i] = FcFalse;
-
- for (f = 0; f < nnodes; f++)
- {
- FcBool satisfies = FcFalse;
- /*
- * If this node matches any language, go check
- * which ones and satisfy those entries
- */
- if (nodeps[f]->score[MATCH_LANG_INDEX] < 200)
- {
- for (i = 0; i < nPatternLang; i++)
- {
- FcValue nodeLang;
-
- if (!patternLangSat[i] &&
- FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch &&
- FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch)
- {
- double compare = FcCompareLang (&patternLang, &nodeLang);
- if (compare >= 0 && compare < 2)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- FcChar8 *family;
- FcChar8 *style;
-
- if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch &&
- FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch)
- printf ("Font %s:%s matches language %d\n", family, style, i);
- }
- patternLangSat[i] = FcTrue;
- satisfies = FcTrue;
- break;
- }
- }
- }
- }
- if (!satisfies)
- nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0;
- }
-
- /*
- * Re-sort once the language issues have been settled
- */
- qsort (nodeps, nnodes, sizeof (FcSortNode *),
- FcSortCompare);
-
- ret = FcFontSetCreate ();
- if (!ret)
- goto bail1;
-
- if (!FcSortWalk (nodeps, nnodes, ret, csp, trim))
- goto bail2;
-
- free (nodes);
-
- if (FcDebug() & FC_DBG_MATCH)
- {
- printf ("First font ");
- FcPatternPrint (ret->fonts[0]);
- }
- return ret;
-
-bail2:
- FcFontSetDestroy (ret);
-bail1:
- free (nodes);
-bail0:
- return 0;
-}
-
-FcFontSet *
-FcFontSort (FcConfig *config,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result)
-{
- FcFontSet *sets[2];
- int nsets;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
- return FcFontSetSort (config, sets, nsets, p, trim, csp, result);
-}
-#define __fcmatch__
-#include "fcaliastail.h"
-#undef __fcmatch__
+/*
+ * fontconfig/src/fcmatch.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+
+static double
+FcCompareNumber (FcValue *value1, FcValue *value2)
+{
+ double v1, v2, v;
+
+ switch (value1->type) {
+ case FcTypeInteger:
+ v1 = (double) value1->u.i;
+ break;
+ case FcTypeDouble:
+ v1 = value1->u.d;
+ break;
+ default:
+ return -1.0;
+ }
+ switch (value2->type) {
+ case FcTypeInteger:
+ v2 = (double) value2->u.i;
+ break;
+ case FcTypeDouble:
+ v2 = value2->u.d;
+ break;
+ default:
+ return -1.0;
+ }
+ v = v2 - v1;
+ if (v < 0)
+ v = -v;
+ return v;
+}
+
+static double
+FcCompareString (FcValue *v1, FcValue *v2)
+{
+ return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0;
+}
+
+static double
+FcCompareFamily (FcValue *v1, FcValue *v2)
+{
+ /* rely on the guarantee in FcPatternObjectAddWithBinding that
+ * families are always FcTypeString. */
+ const FcChar8* v1_string = FcValueString(v1);
+ const FcChar8* v2_string = FcValueString(v2);
+
+ if (FcToLower(*v1_string) != FcToLower(*v2_string) &&
+ *v1_string != ' ' && *v2_string != ' ')
+ return 1.0;
+
+ return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0;
+}
+
+static double
+FcCompareLang (FcValue *v1, FcValue *v2)
+{
+ FcLangResult result;
+ FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
+
+ switch (value1.type) {
+ case FcTypeLangSet:
+ switch (value2.type) {
+ case FcTypeLangSet:
+ result = FcLangSetCompare (value1.u.l, value2.u.l);
+ break;
+ case FcTypeString:
+ result = FcLangSetHasLang (value1.u.l,
+ value2.u.s);
+ break;
+ default:
+ return -1.0;
+ }
+ break;
+ case FcTypeString:
+ switch (value2.type) {
+ case FcTypeLangSet:
+ result = FcLangSetHasLang (value2.u.l, value1.u.s);
+ break;
+ case FcTypeString:
+ result = FcLangCompare (value1.u.s,
+ value2.u.s);
+ break;
+ default:
+ return -1.0;
+ }
+ break;
+ default:
+ return -1.0;
+ }
+ switch (result) {
+ case FcLangEqual:
+ return 0;
+ case FcLangDifferentCountry:
+ return 1;
+ case FcLangDifferentLang:
+ default:
+ return 2;
+ }
+}
+
+static double
+FcCompareBool (FcValue *v1, FcValue *v2)
+{
+ if (v2->type != FcTypeBool || v1->type != FcTypeBool)
+ return -1.0;
+ return (double) v2->u.b != v1->u.b;
+}
+
+static double
+FcCompareCharSet (FcValue *v1, FcValue *v2)
+{
+ return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2));
+}
+
+static double
+FcCompareSize (FcValue *value1, FcValue *value2)
+{
+ double v1, v2, v;
+
+ switch (value1->type) {
+ case FcTypeInteger:
+ v1 = value1->u.i;
+ break;
+ case FcTypeDouble:
+ v1 = value1->u.d;
+ break;
+ default:
+ return -1;
+ }
+ switch (value2->type) {
+ case FcTypeInteger:
+ v2 = value2->u.i;
+ break;
+ case FcTypeDouble:
+ v2 = value2->u.d;
+ break;
+ default:
+ return -1;
+ }
+ if (v2 == 0)
+ return 0;
+ v = v2 - v1;
+ if (v < 0)
+ v = -v;
+ return v;
+}
+
+typedef struct _FcMatcher {
+ FcObject object;
+ double (*compare) (FcValue *value1, FcValue *value2);
+ int strong, weak;
+} FcMatcher;
+
+/*
+ * Order is significant, it defines the precedence of
+ * each value, earlier values are more significant than
+ * later values
+ */
+static const FcMatcher _FcMatchers [] = {
+ { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 },
+#define MATCH_FOUNDRY 0
+ { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 },
+#define MATCH_CHARSET 1
+ { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 },
+#define MATCH_FAMILY 2
+ { FC_LANG_OBJECT, FcCompareLang, 3, 3 },
+#define MATCH_LANG 3
+#define MATCH_LANG_INDEX 3
+ { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 },
+#define MATCH_SPACING 4
+ { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 },
+#define MATCH_PIXEL_SIZE 5
+ { FC_STYLE_OBJECT, FcCompareString, 7, 7 },
+#define MATCH_STYLE 6
+ { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 },
+#define MATCH_SLANT 7
+ { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 },
+#define MATCH_WEIGHT 8
+ { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 },
+#define MATCH_WIDTH 9
+ { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 },
+#define MATCH_DECORATIVE 10
+ { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 },
+#define MATCH_ANTIALIAS 11
+ { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 },
+#define MATCH_RASTERIZER 12
+ { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 },
+#define MATCH_OUTLINE 13
+ { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 },
+#define MATCH_FONTVERSION 14
+};
+
+#define NUM_MATCH_VALUES 16
+
+static const FcMatcher*
+FcObjectToMatcher (FcObject object)
+{
+ int i;
+
+ i = -1;
+ switch (object) {
+ case FC_FOUNDRY_OBJECT:
+ i = MATCH_FOUNDRY; break;
+ case FC_FONTVERSION_OBJECT:
+ i = MATCH_FONTVERSION; break;
+ case FC_FAMILY_OBJECT:
+ i = MATCH_FAMILY; break;
+ case FC_CHARSET_OBJECT:
+ i = MATCH_CHARSET; break;
+ case FC_ANTIALIAS_OBJECT:
+ i = MATCH_ANTIALIAS; break;
+ case FC_LANG_OBJECT:
+ i = MATCH_LANG; break;
+ case FC_SPACING_OBJECT:
+ i = MATCH_SPACING; break;
+ case FC_STYLE_OBJECT:
+ i = MATCH_STYLE; break;
+ case FC_SLANT_OBJECT:
+ i = MATCH_SLANT; break;
+ case FC_PIXEL_SIZE_OBJECT:
+ i = MATCH_PIXEL_SIZE; break;
+ case FC_WIDTH_OBJECT:
+ i = MATCH_WIDTH; break;
+ case FC_WEIGHT_OBJECT:
+ i = MATCH_WEIGHT; break;
+ case FC_RASTERIZER_OBJECT:
+ i = MATCH_RASTERIZER; break;
+ case FC_OUTLINE_OBJECT:
+ i = MATCH_OUTLINE; break;
+ case FC_DECORATIVE_OBJECT:
+ i = MATCH_DECORATIVE; break;
+ }
+
+ if (i < 0)
+ return NULL;
+
+ return _FcMatchers+i;
+}
+
+static FcBool
+FcCompareValueList (FcObject object,
+ FcValueListPtr v1orig, /* pattern */
+ FcValueListPtr v2orig, /* target */
+ FcValue *bestValue,
+ double *value,
+ FcResult *result)
+{
+ FcValueListPtr v1, v2;
+ double v, best, bestStrong, bestWeak;
+ int j;
+ const FcMatcher *match = FcObjectToMatcher(object);
+
+ if (!match)
+ {
+ if (bestValue)
+ *bestValue = FcValueCanonicalize(&v2orig->value);
+ return FcTrue;
+ }
+
+ best = 1e99;
+ bestStrong = 1e99;
+ bestWeak = 1e99;
+ j = 1;
+ for (v1 = v1orig; v1; v1 = FcValueListNext(v1))
+ {
+ for (v2 = v2orig; v2; v2 = FcValueListNext(v2))
+ {
+ v = (match->compare) (&v1->value, &v2->value);
+ if (v < 0)
+ {
+ *result = FcResultTypeMismatch;
+ return FcFalse;
+ }
+ v = v * 1000 + j;
+ if (v < best)
+ {
+ if (bestValue)
+ *bestValue = FcValueCanonicalize(&v2->value);
+ best = v;
+ }
+ if (v1->binding == FcValueBindingStrong)
+ {
+ if (v < bestStrong)
+ bestStrong = v;
+ }
+ else
+ {
+ if (v < bestWeak)
+ bestWeak = v;
+ }
+ }
+ j++;
+ }
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf (" %s: %g ", FcObjectName (object), best);
+ FcValueListPrint (v1orig);
+ printf (", ");
+ FcValueListPrint (v2orig);
+ printf ("\n");
+ }
+ if (value)
+ {
+ int weak = match->weak;
+ int strong = match->strong;
+ if (weak == strong)
+ value[strong] += best;
+ else
+ {
+ value[weak] += bestWeak;
+ value[strong] += bestStrong;
+ }
+ }
+ return FcTrue;
+}
+
+/*
+ * Return a value indicating the distance between the two lists of
+ * values
+ */
+
+static FcBool
+FcCompare (FcPattern *pat,
+ FcPattern *fnt,
+ double *value,
+ FcResult *result)
+{
+ int i, i1, i2;
+
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ value[i] = 0.0;
+
+ i1 = 0;
+ i2 = 0;
+ while (i1 < pat->num && i2 < fnt->num)
+ {
+ FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1];
+ FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2];
+
+ i = FcObjectCompare(elt_i1->object, elt_i2->object);
+ if (i > 0)
+ i2++;
+ else if (i < 0)
+ i1++;
+ else
+ {
+ if (!FcCompareValueList (elt_i1->object,
+ FcPatternEltValues(elt_i1),
+ FcPatternEltValues(elt_i2),
+ 0, value, result))
+ return FcFalse;
+ i1++;
+ i2++;
+ }
+ }
+ return FcTrue;
+}
+
+FcPattern *
+FcFontRenderPrepare (FcConfig *config,
+ FcPattern *pat,
+ FcPattern *font)
+{
+ FcPattern *new;
+ int i;
+ FcPatternElt *fe, *pe;
+ FcValue v;
+ FcResult result;
+
+ new = FcPatternCreate ();
+ if (!new)
+ return 0;
+ for (i = 0; i < font->num; i++)
+ {
+ fe = &FcPatternElts(font)[i];
+ pe = FcPatternObjectFindElt (pat, fe->object);
+ if (pe)
+ {
+ if (!FcCompareValueList (pe->object, FcPatternEltValues(pe),
+ FcPatternEltValues(fe), &v, 0, &result))
+ {
+ FcPatternDestroy (new);
+ return 0;
+ }
+ }
+ else
+ v = FcValueCanonicalize(&FcPatternEltValues (fe)->value);
+ FcPatternObjectAdd (new, fe->object, v, FcFalse);
+ }
+ for (i = 0; i < pat->num; i++)
+ {
+ pe = &FcPatternElts(pat)[i];
+ fe = FcPatternObjectFindElt (font, pe->object);
+ if (!fe)
+ {
+ v = FcValueCanonicalize(&FcPatternEltValues(pe)->value);
+ FcPatternObjectAdd (new, pe->object, v, FcTrue);
+ }
+ }
+
+ FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
+ return new;
+}
+
+static FcPattern *
+FcFontSetMatchInternal (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcResult *result)
+{
+ double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES];
+ int f;
+ FcFontSet *s;
+ FcPattern *best;
+ int i;
+ int set;
+
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ bestscore[i] = 0;
+ best = 0;
+ if (FcDebug () & FC_DBG_MATCH)
+ {
+ printf ("Match ");
+ FcPatternPrint (p);
+ }
+ for (set = 0; set < nsets; set++)
+ {
+ s = sets[set];
+ if (!s)
+ continue;
+ for (f = 0; f < s->nfont; f++)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf ("Font %d ", f);
+ FcPatternPrint (s->fonts[f]);
+ }
+ if (!FcCompare (p, s->fonts[f], score, result))
+ return 0;
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf ("Score");
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ {
+ printf (" %g", score[i]);
+ }
+ printf ("\n");
+ }
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ {
+ if (best && bestscore[i] < score[i])
+ break;
+ if (!best || score[i] < bestscore[i])
+ {
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ bestscore[i] = score[i];
+ best = s->fonts[f];
+ break;
+ }
+ }
+ }
+ }
+ if (FcDebug () & FC_DBG_MATCH)
+ {
+ printf ("Best score");
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ printf (" %g", bestscore[i]);
+ printf ("\n");
+ FcPatternPrint (best);
+ }
+ if (!best)
+ {
+ *result = FcResultNoMatch;
+ return 0;
+ }
+ return best;
+}
+
+FcPattern *
+FcFontSetMatch (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcResult *result)
+{
+ FcPattern *best;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ best = FcFontSetMatchInternal (config, sets, nsets, p, result);
+ if (best)
+ return FcFontRenderPrepare (config, p, best);
+ else
+ return NULL;
+}
+
+FcPattern *
+FcFontMatch (FcConfig *config,
+ FcPattern *p,
+ FcResult *result)
+{
+ FcFontSet *sets[2];
+ int nsets;
+ FcPattern *best;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ nsets = 0;
+ if (config->fonts[FcSetSystem])
+ sets[nsets++] = config->fonts[FcSetSystem];
+ if (config->fonts[FcSetApplication])
+ sets[nsets++] = config->fonts[FcSetApplication];
+
+ best = FcFontSetMatchInternal (config, sets, nsets, p, result);
+ if (best)
+ return FcFontRenderPrepare (config, p, best);
+ else
+ return NULL;
+}
+
+typedef struct _FcSortNode {
+ FcPattern *pattern;
+ double score[NUM_MATCH_VALUES];
+} FcSortNode;
+
+static int
+FcSortCompare (const void *aa, const void *ab)
+{
+ FcSortNode *a = *(FcSortNode **) aa;
+ FcSortNode *b = *(FcSortNode **) ab;
+ double *as = &a->score[0];
+ double *bs = &b->score[0];
+ double ad = 0, bd = 0;
+ int i;
+
+ i = NUM_MATCH_VALUES;
+ while (i-- && (ad = *as++) == (bd = *bs++))
+ ;
+ return ad < bd ? -1 : ad > bd ? 1 : 0;
+}
+
+static FcBool
+FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim)
+{
+ FcBool ret = FcFalse;
+ FcCharSet *cs;
+
+ cs = 0;
+ if (trim || csp)
+ {
+ cs = FcCharSetCreate ();
+ if (cs == NULL)
+ goto bail;
+ }
+
+ while (nnode--)
+ {
+ FcSortNode *node = *n++;
+ FcBool adds_chars = FcFalse;
+
+ /*
+ * Only fetch node charset if we'd need it
+ */
+ if (cs)
+ {
+ FcCharSet *ncs;
+
+ if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) !=
+ FcResultMatch)
+ continue;
+
+ if (!FcCharSetMerge (cs, ncs, &adds_chars))
+ goto bail;
+ }
+
+ /*
+ * If this font isn't a subset of the previous fonts,
+ * add it to the list
+ */
+ if (!trim || adds_chars)
+ {
+ FcPatternReference (node->pattern);
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf ("Add ");
+ FcPatternPrint (node->pattern);
+ }
+ if (!FcFontSetAdd (fs, node->pattern))
+ {
+ FcPatternDestroy (node->pattern);
+ goto bail;
+ }
+ }
+ }
+ if (csp)
+ {
+ *csp = cs;
+ cs = 0;
+ }
+
+ ret = FcTrue;
+
+bail:
+ if (cs)
+ FcCharSetDestroy (cs);
+
+ return ret;
+}
+
+void
+FcFontSetSortDestroy (FcFontSet *fs)
+{
+ FcFontSetDestroy (fs);
+}
+
+FcFontSet *
+FcFontSetSort (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcBool trim,
+ FcCharSet **csp,
+ FcResult *result)
+{
+ FcFontSet *ret;
+ FcFontSet *s;
+ FcSortNode *nodes;
+ FcSortNode **nodeps, **nodep;
+ int nnodes;
+ FcSortNode *new;
+ int set;
+ int f;
+ int i;
+ int nPatternLang;
+ FcBool *patternLangSat;
+ FcValue patternLang;
+
+ if (FcDebug () & FC_DBG_MATCH)
+ {
+ printf ("Sort ");
+ FcPatternPrint (p);
+ }
+ nnodes = 0;
+ for (set = 0; set < nsets; set++)
+ {
+ s = sets[set];
+ if (!s)
+ continue;
+ nnodes += s->nfont;
+ }
+ if (!nnodes)
+ goto bail0;
+
+ for (nPatternLang = 0;
+ FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
+ nPatternLang++)
+ ;
+
+ /* freed below */
+ nodes = malloc (nnodes * sizeof (FcSortNode) +
+ nnodes * sizeof (FcSortNode *) +
+ nPatternLang * sizeof (FcBool));
+ if (!nodes)
+ goto bail0;
+ nodeps = (FcSortNode **) (nodes + nnodes);
+ patternLangSat = (FcBool *) (nodeps + nnodes);
+
+ new = nodes;
+ nodep = nodeps;
+ for (set = 0; set < nsets; set++)
+ {
+ s = sets[set];
+ if (!s)
+ continue;
+ for (f = 0; f < s->nfont; f++)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf ("Font %d ", f);
+ FcPatternPrint (s->fonts[f]);
+ }
+ new->pattern = s->fonts[f];
+ if (!FcCompare (p, new->pattern, new->score, result))
+ goto bail1;
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ printf ("Score");
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ {
+ printf (" %g", new->score[i]);
+ }
+ printf ("\n");
+ }
+ *nodep = new;
+ new++;
+ nodep++;
+ }
+ }
+
+ nnodes = new - nodes;
+
+ qsort (nodeps, nnodes, sizeof (FcSortNode *),
+ FcSortCompare);
+
+ for (i = 0; i < nPatternLang; i++)
+ patternLangSat[i] = FcFalse;
+
+ for (f = 0; f < nnodes; f++)
+ {
+ FcBool satisfies = FcFalse;
+ /*
+ * If this node matches any language, go check
+ * which ones and satisfy those entries
+ */
+ if (nodeps[f]->score[MATCH_LANG_INDEX] < 200)
+ {
+ for (i = 0; i < nPatternLang; i++)
+ {
+ FcValue nodeLang;
+
+ if (!patternLangSat[i] &&
+ FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch &&
+ FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch)
+ {
+ double compare = FcCompareLang (&patternLang, &nodeLang);
+ if (compare >= 0 && compare < 2)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ FcChar8 *family;
+ FcChar8 *style;
+
+ if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch &&
+ FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch)
+ printf ("Font %s:%s matches language %d\n", family, style, i);
+ }
+ patternLangSat[i] = FcTrue;
+ satisfies = FcTrue;
+ break;
+ }
+ }
+ }
+ }
+ if (!satisfies)
+ nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0;
+ }
+
+ /*
+ * Re-sort once the language issues have been settled
+ */
+ qsort (nodeps, nnodes, sizeof (FcSortNode *),
+ FcSortCompare);
+
+ ret = FcFontSetCreate ();
+ if (!ret)
+ goto bail1;
+
+ if (!FcSortWalk (nodeps, nnodes, ret, csp, trim))
+ goto bail2;
+
+ free (nodes);
+
+ if (FcDebug() & FC_DBG_MATCH)
+ {
+ printf ("First font ");
+ FcPatternPrint (ret->fonts[0]);
+ }
+ return ret;
+
+bail2:
+ FcFontSetDestroy (ret);
+bail1:
+ free (nodes);
+bail0:
+ return 0;
+}
+
+FcFontSet *
+FcFontSort (FcConfig *config,
+ FcPattern *p,
+ FcBool trim,
+ FcCharSet **csp,
+ FcResult *result)
+{
+ FcFontSet *sets[2];
+ int nsets;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ nsets = 0;
+ if (config->fonts[FcSetSystem])
+ sets[nsets++] = config->fonts[FcSetSystem];
+ if (config->fonts[FcSetApplication])
+ sets[nsets++] = config->fonts[FcSetApplication];
+ return FcFontSetSort (config, sets, nsets, p, trim, csp, result);
+}
+#define __fcmatch__
+#include "fcaliastail.h"
+#undef __fcmatch__
diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c
index b4ce94421..1d2536c9c 100644
--- a/fontconfig/src/fcname.c
+++ b/fontconfig/src/fcname.c
@@ -1,903 +1,903 @@
-/*
- * fontconfig/src/fcname.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-/*
- * Please do not change this list, it is used to initialize the object
- * list in this order to match the FC_foo_OBJECT constants. Those
- * constants are written into cache files.
- */
-
-static const FcObjectType _FcBaseObjectTypes[] = {
- { FC_FAMILY, FcTypeString, }, /* 1 */
- { FC_FAMILYLANG, FcTypeString, },
- { FC_STYLE, FcTypeString, },
- { FC_STYLELANG, FcTypeString, },
- { FC_FULLNAME, FcTypeString, },
- { FC_FULLNAMELANG, FcTypeString, },
- { FC_SLANT, FcTypeInteger, },
- { FC_WEIGHT, FcTypeInteger, },
- { FC_WIDTH, FcTypeInteger, },
- { FC_SIZE, FcTypeDouble, },
- { FC_ASPECT, FcTypeDouble, },
- { FC_PIXEL_SIZE, FcTypeDouble, },
- { FC_SPACING, FcTypeInteger, },
- { FC_FOUNDRY, FcTypeString, },
- { FC_ANTIALIAS, FcTypeBool, },
- { FC_HINT_STYLE, FcTypeInteger, },
- { FC_HINTING, FcTypeBool, },
- { FC_VERTICAL_LAYOUT, FcTypeBool, },
- { FC_AUTOHINT, FcTypeBool, },
- { FC_GLOBAL_ADVANCE, FcTypeBool, },
- { FC_FILE, FcTypeString, },
- { FC_INDEX, FcTypeInteger, },
- { FC_RASTERIZER, FcTypeString, },
- { FC_OUTLINE, FcTypeBool, },
- { FC_SCALABLE, FcTypeBool, },
- { FC_DPI, FcTypeDouble },
- { FC_RGBA, FcTypeInteger, },
- { FC_SCALE, FcTypeDouble, },
- { FC_MINSPACE, FcTypeBool, },
- { FC_CHAR_WIDTH, FcTypeInteger },
- { FC_CHAR_HEIGHT, FcTypeInteger },
- { FC_MATRIX, FcTypeMatrix },
- { FC_CHARSET, FcTypeCharSet },
- { FC_LANG, FcTypeLangSet },
- { FC_FONTVERSION, FcTypeInteger },
- { FC_CAPABILITY, FcTypeString },
- { FC_FONTFORMAT, FcTypeString },
- { FC_EMBOLDEN, FcTypeBool },
- { FC_EMBEDDED_BITMAP, FcTypeBool },
- { FC_DECORATIVE, FcTypeBool },
- { FC_LCD_FILTER, FcTypeInteger }, /* 41 */
-};
-
-#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
-
-typedef struct _FcObjectTypeList FcObjectTypeList;
-
-struct _FcObjectTypeList {
- const FcObjectTypeList *next;
- const FcObjectType *types;
- int ntypes;
-};
-
-static const FcObjectTypeList _FcBaseObjectTypesList = {
- 0,
- _FcBaseObjectTypes,
- NUM_OBJECT_TYPES,
-};
-
-static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList;
-
-#define OBJECT_HASH_SIZE 31
-
-typedef struct _FcObjectBucket {
- struct _FcObjectBucket *next;
- FcChar32 hash;
- FcObject id;
-} FcObjectBucket;
-
-static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE];
-
-static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes;
-static int FcObjectsNumber = NUM_OBJECT_TYPES;
-static int FcObjectsSize = 0;
-static FcBool FcObjectsInited;
-
-static FcObjectType *
-FcObjectInsert (const char *name, FcType type)
-{
- FcObjectType *o;
- if (FcObjectsNumber >= FcObjectsSize)
- {
- int newsize = FcObjectsNumber * 2;
- FcObjectType *newobjects;
-
- if (FcObjectsSize)
- newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType));
- else
- {
- newobjects = malloc (newsize * sizeof (FcObjectType));
- if (newobjects)
- memcpy (newobjects, FcObjects,
- FcObjectsNumber * sizeof (FcObjectType));
- }
- if (!newobjects)
- return NULL;
- FcObjects = newobjects;
- FcObjectsSize = newsize;
- }
- o = &FcObjects[FcObjectsNumber];
- o->object = name;
- o->type = type;
- ++FcObjectsNumber;
- return o;
-}
-
-static FcObject
-FcObjectId (FcObjectType *o)
-{
- return o - FcObjects + 1;
-}
-
-static FcObjectType *
-FcObjectFindByName (const char *object, FcBool insert)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object, (o->object)))
- return o;
- }
- if (!insert)
- return NULL;
- /*
- * Hook it into the hash chain
- */
- b = malloc (sizeof(FcObjectBucket));
- if (!b)
- return NULL;
- object = (const char *) FcStrCopy ((FcChar8 *) object);
- if (!object) {
- free (b);
- return NULL;
- }
- o = FcObjectInsert (object, -1);
- b->next = NULL;
- b->hash = hash;
- b->id = FcObjectId (o);
- *p = b;
- return o;
-}
-
-static FcObjectType *
-FcObjectFindById (FcObject object)
-{
- if (1 <= object && object <= FcObjectsNumber)
- return FcObjects + object - 1;
- return NULL;
-}
-
-static FcBool
-FcObjectHashInsert (const FcObjectType *object, FcBool copy)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object->object, o->object))
- return FcFalse;
- }
- /*
- * Hook it into the hash chain
- */
- b = malloc (sizeof(FcObjectBucket));
- if (!b)
- return FcFalse;
- if (copy)
- {
- o = FcObjectInsert (object->object, object->type);
- if (!o)
- {
- free (b);
- return FcFalse;
- }
- }
- else
- o = (FcObjectType *) object;
- b->next = NULL;
- b->hash = hash;
- b->id = FcObjectId (o);
- *p = b;
- return FcTrue;
-}
-
-static void
-FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object->object, o->object))
- {
- *p = b->next;
- free (b);
- if (cleanobj)
- {
- /* Clean up object array */
- o->object = NULL;
- o->type = -1;
- while (FcObjects[FcObjectsNumber-1].object == NULL)
- --FcObjectsNumber;
- }
- break;
- }
- }
-}
-
-FcBool
-FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes)
-{
- int i;
-
- for (i = 0; i < ntypes; i++)
- if (!FcObjectHashInsert (&types[i], FcTrue))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes)
-{
- int i;
-
- for (i = 0; i < ntypes; i++)
- FcObjectHashRemove (&types[i], FcTrue);
- return FcTrue;
-}
-
-const FcObjectType *
-FcNameGetObjectType (const char *object)
-{
- return FcObjectFindByName (object, FcFalse);
-}
-
-FcBool
-FcObjectValidType (FcObject object, FcType type)
-{
- FcObjectType *t = FcObjectFindById (object);
-
- if (t) {
- switch (t->type) {
- case -1:
- return FcTrue;
- case FcTypeDouble:
- case FcTypeInteger:
- if (type == FcTypeDouble || type == FcTypeInteger)
- return FcTrue;
- break;
- case FcTypeLangSet:
- if (type == FcTypeLangSet || type == FcTypeString)
- return FcTrue;
- break;
- default:
- if (type == t->type)
- return FcTrue;
- break;
- }
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcObject
-FcObjectFromName (const char * name)
-{
- FcObjectType *o = FcObjectFindByName (name, FcTrue);
-
- if (o)
- return FcObjectId (o);
- return 0;
-}
-
-FcObjectSet *
-FcObjectGetSet (void)
-{
- int i;
- FcObjectSet *os = NULL;
-
-
- os = FcObjectSetCreate ();
- for (i = 0; i < FcObjectsNumber; i++)
- FcObjectSetAdd (os, FcObjects[i].object);
-
- return os;
-}
-
-FcBool
-FcObjectInit (void)
-{
- int i;
-
- if (FcObjectsInited)
- return FcTrue;
-
- FcObjectsInited = FcTrue;
- for (i = 0; i < NUM_OBJECT_TYPES; i++)
- if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse))
- return FcFalse;
- return FcTrue;
-}
-
-void
-FcObjectFini (void)
-{
- int i;
- FcObjectBucket *b, *next;
-
- for (i = 0; i < OBJECT_HASH_SIZE; i++)
- {
- for (b = FcObjectBuckets[i]; b; b = next)
- {
- next = b->next;
- free (b);
- }
- FcObjectBuckets[i] = 0;
- }
- for (i = 0; i < FcObjectsNumber; i++)
- if (FcObjects[i].type == -1)
- free ((void*) FcObjects[i].object);
- if (FcObjects != _FcBaseObjectTypes)
- free (FcObjects);
- FcObjects = (FcObjectType *) _FcBaseObjectTypes;
- FcObjectsNumber = NUM_OBJECT_TYPES;
- FcObjectsSize = 0;
- FcObjectsInited = FcFalse;
-}
-
-const char *
-FcObjectName (FcObject object)
-{
- FcObjectType *o = FcObjectFindById (object);
-
- if (o)
- return o->object;
- return NULL;
-}
-
-static const FcConstant _FcBaseConstants[] = {
- { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, },
- { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, },
- { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, },
- { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, },
- { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, },
- { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, },
- { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, },
- { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, },
- { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, },
- { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, },
- { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, },
- { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, },
- { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, },
- { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, },
-
- { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, },
- { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, },
- { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, },
-
- { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED },
- { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED },
- { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED },
- { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED },
- { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL },
- { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED },
- { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED },
- { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED },
- { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED },
-
- { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, },
- { (FcChar8 *) "dual", "spacing", FC_DUAL, },
- { (FcChar8 *) "mono", "spacing", FC_MONO, },
- { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, },
-
- { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN },
- { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, },
- { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, },
- { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB },
- { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR },
- { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
-
- { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE },
- { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT },
- { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM },
- { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL },
-
- { (FcChar8 *) "antialias", "antialias", FcTrue },
- { (FcChar8 *) "hinting", "hinting", FcTrue },
- { (FcChar8 *) "verticallayout", "verticallayout", FcTrue },
- { (FcChar8 *) "autohint", "autohint", FcTrue },
- { (FcChar8 *) "globaladvance", "globaladvance", FcTrue },
- { (FcChar8 *) "outline", "outline", FcTrue },
- { (FcChar8 *) "scalable", "scalable", FcTrue },
- { (FcChar8 *) "minspace", "minspace", FcTrue },
- { (FcChar8 *) "embolden", "embolden", FcTrue },
- { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue },
- { (FcChar8 *) "decorative", "decorative", FcTrue },
- { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE },
- { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT },
- { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT },
- { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY },
-};
-
-#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0])
-
-typedef struct _FcConstantList FcConstantList;
-
-struct _FcConstantList {
- const FcConstantList *next;
- const FcConstant *consts;
- int nconsts;
-};
-
-static const FcConstantList _FcBaseConstantList = {
- 0,
- _FcBaseConstants,
- NUM_FC_CONSTANTS
-};
-
-static const FcConstantList *_FcConstants = &_FcBaseConstantList;
-
-FcBool
-FcNameRegisterConstants (const FcConstant *consts, int nconsts)
-{
- FcConstantList *l;
-
- l = (FcConstantList *) malloc (sizeof (FcConstantList));
- if (!l)
- return FcFalse;
- FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList));
- l->consts = consts;
- l->nconsts = nconsts;
- l->next = _FcConstants;
- _FcConstants = l;
- return FcTrue;
-}
-
-FcBool
-FcNameUnregisterConstants (const FcConstant *consts, int nconsts)
-{
- const FcConstantList *l, **prev;
-
- for (prev = &_FcConstants;
- (l = *prev);
- prev = (const FcConstantList **) &(l->next))
- {
- if (l->consts == consts && l->nconsts == nconsts)
- {
- *prev = l->next;
- FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList));
- free ((void *) l);
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-const FcConstant *
-FcNameGetConstant (FcChar8 *string)
-{
- const FcConstantList *l;
- int i;
-
- for (l = _FcConstants; l; l = l->next)
- {
- for (i = 0; i < l->nconsts; i++)
- if (!FcStrCmpIgnoreCase (string, l->consts[i].name))
- return &l->consts[i];
- }
- return 0;
-}
-
-FcBool
-FcNameConstant (FcChar8 *string, int *result)
-{
- const FcConstant *c;
-
- if ((c = FcNameGetConstant(string)))
- {
- *result = c->value;
- return FcTrue;
- }
- return FcFalse;
-}
-
-FcBool
-FcNameBool (const FcChar8 *v, FcBool *result)
-{
- char c0, c1;
-
- c0 = *v;
- c0 = FcToLower (c0);
- if (c0 == 't' || c0 == 'y' || c0 == '1')
- {
- *result = FcTrue;
- return FcTrue;
- }
- if (c0 == 'f' || c0 == 'n' || c0 == '0')
- {
- *result = FcFalse;
- return FcTrue;
- }
- if (c0 == 'o')
- {
- c1 = v[1];
- c1 = FcToLower (c1);
- if (c1 == 'n')
- {
- *result = FcTrue;
- return FcTrue;
- }
- if (c1 == 'f')
- {
- *result = FcFalse;
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-static FcValue
-FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m)
-{
- FcValue v;
-
- v.type = type;
- switch (v.type) {
- case FcTypeInteger:
- if (!FcNameConstant (string, &v.u.i))
- v.u.i = atoi ((char *) string);
- break;
- case FcTypeString:
- v.u.s = FcStrStaticName(string);
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- case FcTypeBool:
- if (!FcNameBool (string, &v.u.b))
- v.u.b = FcFalse;
- break;
- case FcTypeDouble:
- v.u.d = strtod ((char *) string, 0);
- break;
- case FcTypeMatrix:
- v.u.m = m;
- sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy);
- break;
- case FcTypeCharSet:
- v.u.c = FcNameParseCharSet (string);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- case FcTypeLangSet:
- v.u.l = FcNameParseLangSet (string);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- default:
- break;
- }
- return v;
-}
-
-static const FcChar8 *
-FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last)
-{
- FcChar8 c;
-
- while ((c = *cur))
- {
- if (c == '\\')
- {
- ++cur;
- if (!(c = *cur))
- break;
- }
- else if (strchr (delim, c))
- break;
- ++cur;
- *save++ = c;
- }
- *save = 0;
- *last = *cur;
- if (*cur)
- cur++;
- return cur;
-}
-
-FcPattern *
-FcNameParse (const FcChar8 *name)
-{
- FcChar8 *save;
- FcPattern *pat;
- double d;
- FcChar8 *e;
- FcChar8 delim;
- FcValue v;
- FcMatrix m;
- const FcObjectType *t;
- const FcConstant *c;
-
- /* freed below */
- save = malloc (strlen ((char *) name) + 1);
- if (!save)
- goto bail0;
- pat = FcPatternCreate ();
- if (!pat)
- goto bail1;
-
- for (;;)
- {
- name = FcNameFindNext (name, "-,:", save, &delim);
- if (save[0])
- {
- if (!FcPatternAddString (pat, FC_FAMILY, save))
- goto bail2;
- }
- if (delim != ',')
- break;
- }
- if (delim == '-')
- {
- for (;;)
- {
- name = FcNameFindNext (name, "-,:", save, &delim);
- d = strtod ((char *) save, (char **) &e);
- if (e != save)
- {
- if (!FcPatternAddDouble (pat, FC_SIZE, d))
- goto bail2;
- }
- if (delim != ',')
- break;
- }
- }
- while (delim == ':')
- {
- name = FcNameFindNext (name, "=_:", save, &delim);
- if (save[0])
- {
- if (delim == '=' || delim == '_')
- {
- t = FcNameGetObjectType ((char *) save);
- for (;;)
- {
- name = FcNameFindNext (name, ":,", save, &delim);
- if (t)
- {
- v = FcNameConvert (t->type, save, &m);
- if (!FcPatternAdd (pat, t->object, v, FcTrue))
- {
- switch (v.type) {
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
- goto bail2;
- }
- switch (v.type) {
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
- }
- if (delim != ',')
- break;
- }
- }
- else
- {
- if ((c = FcNameGetConstant (save)))
- {
- t = FcNameGetObjectType ((char *) c->object);
- switch (t->type) {
- case FcTypeInteger:
- case FcTypeDouble:
- if (!FcPatternAddInteger (pat, c->object, c->value))
- goto bail2;
- break;
- case FcTypeBool:
- if (!FcPatternAddBool (pat, c->object, c->value))
- goto bail2;
- break;
- default:
- break;
- }
- }
- }
- }
- }
-
- free (save);
- return pat;
-
-bail2:
- FcPatternDestroy (pat);
-bail1:
- free (save);
-bail0:
- return 0;
-}
-static FcBool
-FcNameUnparseString (FcStrBuf *buf,
- const FcChar8 *string,
- const FcChar8 *escape)
-{
- FcChar8 c;
- while ((c = *string++))
- {
- if (escape && strchr ((char *) escape, (char) c))
- {
- if (!FcStrBufChar (buf, escape[0]))
- return FcFalse;
- }
- if (!FcStrBufChar (buf, c))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcNameUnparseValue (FcStrBuf *buf,
- FcValue *v0,
- FcChar8 *escape)
-{
- FcChar8 temp[1024];
- FcValue v = FcValueCanonicalize(v0);
-
- switch (v.type) {
- case FcTypeVoid:
- return FcTrue;
- case FcTypeInteger:
- sprintf ((char *) temp, "%d", v.u.i);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeDouble:
- sprintf ((char *) temp, "%g", v.u.d);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeString:
- return FcNameUnparseString (buf, v.u.s, escape);
- case FcTypeBool:
- return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0);
- case FcTypeMatrix:
- sprintf ((char *) temp, "%g %g %g %g",
- v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeCharSet:
- return FcNameUnparseCharSet (buf, v.u.c);
- case FcTypeLangSet:
- return FcNameUnparseLangSet (buf, v.u.l);
- case FcTypeFTFace:
- return FcTrue;
- }
- return FcFalse;
-}
-
-FcBool
-FcNameUnparseValueList (FcStrBuf *buf,
- FcValueListPtr v,
- FcChar8 *escape)
-{
- while (v)
- {
- if (!FcNameUnparseValue (buf, &v->value, escape))
- return FcFalse;
- if ((v = FcValueListNext(v)) != NULL)
- if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
- return FcFalse;
- }
- return FcTrue;
-}
-
-#define FC_ESCAPE_FIXED "\\-:,"
-#define FC_ESCAPE_VARIABLE "\\=_:,"
-
-FcChar8 *
-FcNameUnparse (FcPattern *pat)
-{
- return FcNameUnparseEscaped (pat, FcTrue);
-}
-
-FcChar8 *
-FcNameUnparseEscaped (FcPattern *pat, FcBool escape)
-{
- FcStrBuf buf;
- FcChar8 buf_static[8192];
- int i;
- FcPatternElt *e;
- const FcObjectTypeList *l;
- const FcObjectType *o;
-
- FcStrBufInit (&buf, buf_static, sizeof (buf_static));
- e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT);
- if (e)
- {
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
- goto bail0;
- }
- e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT);
- if (e)
- {
- if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
- goto bail0;
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
- goto bail0;
- }
- for (l = _FcObjectTypes; l; l = l->next)
- {
- for (i = 0; i < l->ntypes; i++)
- {
- o = &l->types[i];
- if (!strcmp (o->object, FC_FAMILY) ||
- !strcmp (o->object, FC_SIZE) ||
- !strcmp (o->object, FC_FILE))
- continue;
-
- e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object));
- if (e)
- {
- if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))
- goto bail0;
- if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
- goto bail0;
- if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0))
- goto bail0;
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ?
- (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
- goto bail0;
- }
- }
- }
- return FcStrBufDone (&buf);
-bail0:
- FcStrBufDestroy (&buf);
- return 0;
-}
-#define __fcname__
-#include "fcaliastail.h"
-#undef __fcname__
+/*
+ * fontconfig/src/fcname.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+/*
+ * Please do not change this list, it is used to initialize the object
+ * list in this order to match the FC_foo_OBJECT constants. Those
+ * constants are written into cache files.
+ */
+
+static const FcObjectType _FcBaseObjectTypes[] = {
+ { FC_FAMILY, FcTypeString, }, /* 1 */
+ { FC_FAMILYLANG, FcTypeString, },
+ { FC_STYLE, FcTypeString, },
+ { FC_STYLELANG, FcTypeString, },
+ { FC_FULLNAME, FcTypeString, },
+ { FC_FULLNAMELANG, FcTypeString, },
+ { FC_SLANT, FcTypeInteger, },
+ { FC_WEIGHT, FcTypeInteger, },
+ { FC_WIDTH, FcTypeInteger, },
+ { FC_SIZE, FcTypeDouble, },
+ { FC_ASPECT, FcTypeDouble, },
+ { FC_PIXEL_SIZE, FcTypeDouble, },
+ { FC_SPACING, FcTypeInteger, },
+ { FC_FOUNDRY, FcTypeString, },
+ { FC_ANTIALIAS, FcTypeBool, },
+ { FC_HINT_STYLE, FcTypeInteger, },
+ { FC_HINTING, FcTypeBool, },
+ { FC_VERTICAL_LAYOUT, FcTypeBool, },
+ { FC_AUTOHINT, FcTypeBool, },
+ { FC_GLOBAL_ADVANCE, FcTypeBool, },
+ { FC_FILE, FcTypeString, },
+ { FC_INDEX, FcTypeInteger, },
+ { FC_RASTERIZER, FcTypeString, },
+ { FC_OUTLINE, FcTypeBool, },
+ { FC_SCALABLE, FcTypeBool, },
+ { FC_DPI, FcTypeDouble },
+ { FC_RGBA, FcTypeInteger, },
+ { FC_SCALE, FcTypeDouble, },
+ { FC_MINSPACE, FcTypeBool, },
+ { FC_CHAR_WIDTH, FcTypeInteger },
+ { FC_CHAR_HEIGHT, FcTypeInteger },
+ { FC_MATRIX, FcTypeMatrix },
+ { FC_CHARSET, FcTypeCharSet },
+ { FC_LANG, FcTypeLangSet },
+ { FC_FONTVERSION, FcTypeInteger },
+ { FC_CAPABILITY, FcTypeString },
+ { FC_FONTFORMAT, FcTypeString },
+ { FC_EMBOLDEN, FcTypeBool },
+ { FC_EMBEDDED_BITMAP, FcTypeBool },
+ { FC_DECORATIVE, FcTypeBool },
+ { FC_LCD_FILTER, FcTypeInteger }, /* 41 */
+};
+
+#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
+
+typedef struct _FcObjectTypeList FcObjectTypeList;
+
+struct _FcObjectTypeList {
+ const FcObjectTypeList *next;
+ const FcObjectType *types;
+ int ntypes;
+};
+
+static const FcObjectTypeList _FcBaseObjectTypesList = {
+ 0,
+ _FcBaseObjectTypes,
+ NUM_OBJECT_TYPES,
+};
+
+static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList;
+
+#define OBJECT_HASH_SIZE 31
+
+typedef struct _FcObjectBucket {
+ struct _FcObjectBucket *next;
+ FcChar32 hash;
+ FcObject id;
+} FcObjectBucket;
+
+static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE];
+
+static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes;
+static int FcObjectsNumber = NUM_OBJECT_TYPES;
+static int FcObjectsSize = 0;
+static FcBool FcObjectsInited;
+
+static FcObjectType *
+FcObjectInsert (const char *name, FcType type)
+{
+ FcObjectType *o;
+ if (FcObjectsNumber >= FcObjectsSize)
+ {
+ int newsize = FcObjectsNumber * 2;
+ FcObjectType *newobjects;
+
+ if (FcObjectsSize)
+ newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType));
+ else
+ {
+ newobjects = malloc (newsize * sizeof (FcObjectType));
+ if (newobjects)
+ memcpy (newobjects, FcObjects,
+ FcObjectsNumber * sizeof (FcObjectType));
+ }
+ if (!newobjects)
+ return NULL;
+ FcObjects = newobjects;
+ FcObjectsSize = newsize;
+ }
+ o = &FcObjects[FcObjectsNumber];
+ o->object = name;
+ o->type = type;
+ ++FcObjectsNumber;
+ return o;
+}
+
+static FcObject
+FcObjectId (FcObjectType *o)
+{
+ return o - FcObjects + 1;
+}
+
+static FcObjectType *
+FcObjectFindByName (const char *object, FcBool insert)
+{
+ FcChar32 hash = FcStringHash ((const FcChar8 *) object);
+ FcObjectBucket **p;
+ FcObjectBucket *b;
+ FcObjectType *o;
+
+ if (!FcObjectsInited)
+ FcObjectInit ();
+ for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
+ {
+ o = FcObjects + b->id - 1;
+ if (b->hash == hash && !strcmp (object, (o->object)))
+ return o;
+ }
+ if (!insert)
+ return NULL;
+ /*
+ * Hook it into the hash chain
+ */
+ b = malloc (sizeof(FcObjectBucket));
+ if (!b)
+ return NULL;
+ object = (const char *) FcStrCopy ((FcChar8 *) object);
+ if (!object) {
+ free (b);
+ return NULL;
+ }
+ o = FcObjectInsert (object, -1);
+ b->next = NULL;
+ b->hash = hash;
+ b->id = FcObjectId (o);
+ *p = b;
+ return o;
+}
+
+static FcObjectType *
+FcObjectFindById (FcObject object)
+{
+ if (1 <= object && object <= FcObjectsNumber)
+ return FcObjects + object - 1;
+ return NULL;
+}
+
+static FcBool
+FcObjectHashInsert (const FcObjectType *object, FcBool copy)
+{
+ FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
+ FcObjectBucket **p;
+ FcObjectBucket *b;
+ FcObjectType *o;
+
+ if (!FcObjectsInited)
+ FcObjectInit ();
+ for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
+ {
+ o = FcObjects + b->id - 1;
+ if (b->hash == hash && !strcmp (object->object, o->object))
+ return FcFalse;
+ }
+ /*
+ * Hook it into the hash chain
+ */
+ b = malloc (sizeof(FcObjectBucket));
+ if (!b)
+ return FcFalse;
+ if (copy)
+ {
+ o = FcObjectInsert (object->object, object->type);
+ if (!o)
+ {
+ free (b);
+ return FcFalse;
+ }
+ }
+ else
+ o = (FcObjectType *) object;
+ b->next = NULL;
+ b->hash = hash;
+ b->id = FcObjectId (o);
+ *p = b;
+ return FcTrue;
+}
+
+static void
+FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj)
+{
+ FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
+ FcObjectBucket **p;
+ FcObjectBucket *b;
+ FcObjectType *o;
+
+ if (!FcObjectsInited)
+ FcObjectInit ();
+ for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
+ {
+ o = FcObjects + b->id - 1;
+ if (b->hash == hash && !strcmp (object->object, o->object))
+ {
+ *p = b->next;
+ free (b);
+ if (cleanobj)
+ {
+ /* Clean up object array */
+ o->object = NULL;
+ o->type = -1;
+ while (FcObjects[FcObjectsNumber-1].object == NULL)
+ --FcObjectsNumber;
+ }
+ break;
+ }
+ }
+}
+
+FcBool
+FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes)
+{
+ int i;
+
+ for (i = 0; i < ntypes; i++)
+ if (!FcObjectHashInsert (&types[i], FcTrue))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcBool
+FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes)
+{
+ int i;
+
+ for (i = 0; i < ntypes; i++)
+ FcObjectHashRemove (&types[i], FcTrue);
+ return FcTrue;
+}
+
+const FcObjectType *
+FcNameGetObjectType (const char *object)
+{
+ return FcObjectFindByName (object, FcFalse);
+}
+
+FcBool
+FcObjectValidType (FcObject object, FcType type)
+{
+ FcObjectType *t = FcObjectFindById (object);
+
+ if (t) {
+ switch (t->type) {
+ case -1:
+ return FcTrue;
+ case FcTypeDouble:
+ case FcTypeInteger:
+ if (type == FcTypeDouble || type == FcTypeInteger)
+ return FcTrue;
+ break;
+ case FcTypeLangSet:
+ if (type == FcTypeLangSet || type == FcTypeString)
+ return FcTrue;
+ break;
+ default:
+ if (type == t->type)
+ return FcTrue;
+ break;
+ }
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcObject
+FcObjectFromName (const char * name)
+{
+ FcObjectType *o = FcObjectFindByName (name, FcTrue);
+
+ if (o)
+ return FcObjectId (o);
+ return 0;
+}
+
+FcObjectSet *
+FcObjectGetSet (void)
+{
+ int i;
+ FcObjectSet *os = NULL;
+
+
+ os = FcObjectSetCreate ();
+ for (i = 0; i < FcObjectsNumber; i++)
+ FcObjectSetAdd (os, FcObjects[i].object);
+
+ return os;
+}
+
+FcBool
+FcObjectInit (void)
+{
+ int i;
+
+ if (FcObjectsInited)
+ return FcTrue;
+
+ FcObjectsInited = FcTrue;
+ for (i = 0; i < NUM_OBJECT_TYPES; i++)
+ if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse))
+ return FcFalse;
+ return FcTrue;
+}
+
+void
+FcObjectFini (void)
+{
+ int i;
+ FcObjectBucket *b, *next;
+
+ for (i = 0; i < OBJECT_HASH_SIZE; i++)
+ {
+ for (b = FcObjectBuckets[i]; b; b = next)
+ {
+ next = b->next;
+ free (b);
+ }
+ FcObjectBuckets[i] = 0;
+ }
+ for (i = 0; i < FcObjectsNumber; i++)
+ if (FcObjects[i].type == -1)
+ free ((void*) FcObjects[i].object);
+ if (FcObjects != _FcBaseObjectTypes)
+ free (FcObjects);
+ FcObjects = (FcObjectType *) _FcBaseObjectTypes;
+ FcObjectsNumber = NUM_OBJECT_TYPES;
+ FcObjectsSize = 0;
+ FcObjectsInited = FcFalse;
+}
+
+const char *
+FcObjectName (FcObject object)
+{
+ FcObjectType *o = FcObjectFindById (object);
+
+ if (o)
+ return o->object;
+ return NULL;
+}
+
+static const FcConstant _FcBaseConstants[] = {
+ { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, },
+ { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, },
+ { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, },
+ { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, },
+ { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, },
+ { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, },
+ { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, },
+ { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, },
+ { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, },
+ { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, },
+ { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, },
+ { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, },
+ { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, },
+ { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, },
+
+ { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, },
+ { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, },
+ { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, },
+
+ { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED },
+ { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED },
+ { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED },
+ { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED },
+ { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL },
+ { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED },
+ { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED },
+ { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED },
+ { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED },
+
+ { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, },
+ { (FcChar8 *) "dual", "spacing", FC_DUAL, },
+ { (FcChar8 *) "mono", "spacing", FC_MONO, },
+ { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, },
+
+ { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN },
+ { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, },
+ { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, },
+ { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB },
+ { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR },
+ { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
+
+ { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE },
+ { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT },
+ { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM },
+ { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL },
+
+ { (FcChar8 *) "antialias", "antialias", FcTrue },
+ { (FcChar8 *) "hinting", "hinting", FcTrue },
+ { (FcChar8 *) "verticallayout", "verticallayout", FcTrue },
+ { (FcChar8 *) "autohint", "autohint", FcTrue },
+ { (FcChar8 *) "globaladvance", "globaladvance", FcTrue },
+ { (FcChar8 *) "outline", "outline", FcTrue },
+ { (FcChar8 *) "scalable", "scalable", FcTrue },
+ { (FcChar8 *) "minspace", "minspace", FcTrue },
+ { (FcChar8 *) "embolden", "embolden", FcTrue },
+ { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue },
+ { (FcChar8 *) "decorative", "decorative", FcTrue },
+ { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE },
+ { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT },
+ { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT },
+ { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY },
+};
+
+#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0])
+
+typedef struct _FcConstantList FcConstantList;
+
+struct _FcConstantList {
+ const FcConstantList *next;
+ const FcConstant *consts;
+ int nconsts;
+};
+
+static const FcConstantList _FcBaseConstantList = {
+ 0,
+ _FcBaseConstants,
+ NUM_FC_CONSTANTS
+};
+
+static const FcConstantList *_FcConstants = &_FcBaseConstantList;
+
+FcBool
+FcNameRegisterConstants (const FcConstant *consts, int nconsts)
+{
+ FcConstantList *l;
+
+ l = (FcConstantList *) malloc (sizeof (FcConstantList));
+ if (!l)
+ return FcFalse;
+ FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList));
+ l->consts = consts;
+ l->nconsts = nconsts;
+ l->next = _FcConstants;
+ _FcConstants = l;
+ return FcTrue;
+}
+
+FcBool
+FcNameUnregisterConstants (const FcConstant *consts, int nconsts)
+{
+ const FcConstantList *l, **prev;
+
+ for (prev = &_FcConstants;
+ (l = *prev);
+ prev = (const FcConstantList **) &(l->next))
+ {
+ if (l->consts == consts && l->nconsts == nconsts)
+ {
+ *prev = l->next;
+ FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList));
+ free ((void *) l);
+ return FcTrue;
+ }
+ }
+ return FcFalse;
+}
+
+const FcConstant *
+FcNameGetConstant (FcChar8 *string)
+{
+ const FcConstantList *l;
+ int i;
+
+ for (l = _FcConstants; l; l = l->next)
+ {
+ for (i = 0; i < l->nconsts; i++)
+ if (!FcStrCmpIgnoreCase (string, l->consts[i].name))
+ return &l->consts[i];
+ }
+ return 0;
+}
+
+FcBool
+FcNameConstant (FcChar8 *string, int *result)
+{
+ const FcConstant *c;
+
+ if ((c = FcNameGetConstant(string)))
+ {
+ *result = c->value;
+ return FcTrue;
+ }
+ return FcFalse;
+}
+
+FcBool
+FcNameBool (const FcChar8 *v, FcBool *result)
+{
+ char c0, c1;
+
+ c0 = *v;
+ c0 = FcToLower (c0);
+ if (c0 == 't' || c0 == 'y' || c0 == '1')
+ {
+ *result = FcTrue;
+ return FcTrue;
+ }
+ if (c0 == 'f' || c0 == 'n' || c0 == '0')
+ {
+ *result = FcFalse;
+ return FcTrue;
+ }
+ if (c0 == 'o')
+ {
+ c1 = v[1];
+ c1 = FcToLower (c1);
+ if (c1 == 'n')
+ {
+ *result = FcTrue;
+ return FcTrue;
+ }
+ if (c1 == 'f')
+ {
+ *result = FcFalse;
+ return FcTrue;
+ }
+ }
+ return FcFalse;
+}
+
+static FcValue
+FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m)
+{
+ FcValue v;
+
+ v.type = type;
+ switch (v.type) {
+ case FcTypeInteger:
+ if (!FcNameConstant (string, &v.u.i))
+ v.u.i = atoi ((char *) string);
+ break;
+ case FcTypeString:
+ v.u.s = FcStrStaticName(string);
+ if (!v.u.s)
+ v.type = FcTypeVoid;
+ break;
+ case FcTypeBool:
+ if (!FcNameBool (string, &v.u.b))
+ v.u.b = FcFalse;
+ break;
+ case FcTypeDouble:
+ v.u.d = strtod ((char *) string, 0);
+ break;
+ case FcTypeMatrix:
+ v.u.m = m;
+ sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy);
+ break;
+ case FcTypeCharSet:
+ v.u.c = FcNameParseCharSet (string);
+ if (!v.u.c)
+ v.type = FcTypeVoid;
+ break;
+ case FcTypeLangSet:
+ v.u.l = FcNameParseLangSet (string);
+ if (!v.u.l)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ break;
+ }
+ return v;
+}
+
+static const FcChar8 *
+FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last)
+{
+ FcChar8 c;
+
+ while ((c = *cur))
+ {
+ if (c == '\\')
+ {
+ ++cur;
+ if (!(c = *cur))
+ break;
+ }
+ else if (strchr (delim, c))
+ break;
+ ++cur;
+ *save++ = c;
+ }
+ *save = 0;
+ *last = *cur;
+ if (*cur)
+ cur++;
+ return cur;
+}
+
+FcPattern *
+FcNameParse (const FcChar8 *name)
+{
+ FcChar8 *save;
+ FcPattern *pat;
+ double d;
+ FcChar8 *e;
+ FcChar8 delim;
+ FcValue v;
+ FcMatrix m;
+ const FcObjectType *t;
+ const FcConstant *c;
+
+ /* freed below */
+ save = malloc (strlen ((char *) name) + 1);
+ if (!save)
+ goto bail0;
+ pat = FcPatternCreate ();
+ if (!pat)
+ goto bail1;
+
+ for (;;)
+ {
+ name = FcNameFindNext (name, "-,:", save, &delim);
+ if (save[0])
+ {
+ if (!FcPatternAddString (pat, FC_FAMILY, save))
+ goto bail2;
+ }
+ if (delim != ',')
+ break;
+ }
+ if (delim == '-')
+ {
+ for (;;)
+ {
+ name = FcNameFindNext (name, "-,:", save, &delim);
+ d = strtod ((char *) save, (char **) &e);
+ if (e != save)
+ {
+ if (!FcPatternAddDouble (pat, FC_SIZE, d))
+ goto bail2;
+ }
+ if (delim != ',')
+ break;
+ }
+ }
+ while (delim == ':')
+ {
+ name = FcNameFindNext (name, "=_:", save, &delim);
+ if (save[0])
+ {
+ if (delim == '=' || delim == '_')
+ {
+ t = FcNameGetObjectType ((char *) save);
+ for (;;)
+ {
+ name = FcNameFindNext (name, ":,", save, &delim);
+ if (t)
+ {
+ v = FcNameConvert (t->type, save, &m);
+ if (!FcPatternAdd (pat, t->object, v, FcTrue))
+ {
+ switch (v.type) {
+ case FcTypeCharSet:
+ FcCharSetDestroy ((FcCharSet *) v.u.c);
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy ((FcLangSet *) v.u.l);
+ break;
+ default:
+ break;
+ }
+ goto bail2;
+ }
+ switch (v.type) {
+ case FcTypeCharSet:
+ FcCharSetDestroy ((FcCharSet *) v.u.c);
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy ((FcLangSet *) v.u.l);
+ break;
+ default:
+ break;
+ }
+ }
+ if (delim != ',')
+ break;
+ }
+ }
+ else
+ {
+ if ((c = FcNameGetConstant (save)))
+ {
+ t = FcNameGetObjectType ((char *) c->object);
+ switch (t->type) {
+ case FcTypeInteger:
+ case FcTypeDouble:
+ if (!FcPatternAddInteger (pat, c->object, c->value))
+ goto bail2;
+ break;
+ case FcTypeBool:
+ if (!FcPatternAddBool (pat, c->object, c->value))
+ goto bail2;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ free (save);
+ return pat;
+
+bail2:
+ FcPatternDestroy (pat);
+bail1:
+ free (save);
+bail0:
+ return 0;
+}
+static FcBool
+FcNameUnparseString (FcStrBuf *buf,
+ const FcChar8 *string,
+ const FcChar8 *escape)
+{
+ FcChar8 c;
+ while ((c = *string++))
+ {
+ if (escape && strchr ((char *) escape, (char) c))
+ {
+ if (!FcStrBufChar (buf, escape[0]))
+ return FcFalse;
+ }
+ if (!FcStrBufChar (buf, c))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcBool
+FcNameUnparseValue (FcStrBuf *buf,
+ FcValue *v0,
+ FcChar8 *escape)
+{
+ FcChar8 temp[1024];
+ FcValue v = FcValueCanonicalize(v0);
+
+ switch (v.type) {
+ case FcTypeVoid:
+ return FcTrue;
+ case FcTypeInteger:
+ sprintf ((char *) temp, "%d", v.u.i);
+ return FcNameUnparseString (buf, temp, 0);
+ case FcTypeDouble:
+ sprintf ((char *) temp, "%g", v.u.d);
+ return FcNameUnparseString (buf, temp, 0);
+ case FcTypeString:
+ return FcNameUnparseString (buf, v.u.s, escape);
+ case FcTypeBool:
+ return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0);
+ case FcTypeMatrix:
+ sprintf ((char *) temp, "%g %g %g %g",
+ v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
+ return FcNameUnparseString (buf, temp, 0);
+ case FcTypeCharSet:
+ return FcNameUnparseCharSet (buf, v.u.c);
+ case FcTypeLangSet:
+ return FcNameUnparseLangSet (buf, v.u.l);
+ case FcTypeFTFace:
+ return FcTrue;
+ }
+ return FcFalse;
+}
+
+FcBool
+FcNameUnparseValueList (FcStrBuf *buf,
+ FcValueListPtr v,
+ FcChar8 *escape)
+{
+ while (v)
+ {
+ if (!FcNameUnparseValue (buf, &v->value, escape))
+ return FcFalse;
+ if ((v = FcValueListNext(v)) != NULL)
+ if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+#define FC_ESCAPE_FIXED "\\-:,"
+#define FC_ESCAPE_VARIABLE "\\=_:,"
+
+FcChar8 *
+FcNameUnparse (FcPattern *pat)
+{
+ return FcNameUnparseEscaped (pat, FcTrue);
+}
+
+FcChar8 *
+FcNameUnparseEscaped (FcPattern *pat, FcBool escape)
+{
+ FcStrBuf buf;
+ FcChar8 buf_static[8192];
+ int i;
+ FcPatternElt *e;
+ const FcObjectTypeList *l;
+ const FcObjectType *o;
+
+ FcStrBufInit (&buf, buf_static, sizeof (buf_static));
+ e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT);
+ if (e)
+ {
+ if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
+ goto bail0;
+ }
+ e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT);
+ if (e)
+ {
+ if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
+ goto bail0;
+ if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
+ goto bail0;
+ }
+ for (l = _FcObjectTypes; l; l = l->next)
+ {
+ for (i = 0; i < l->ntypes; i++)
+ {
+ o = &l->types[i];
+ if (!strcmp (o->object, FC_FAMILY) ||
+ !strcmp (o->object, FC_SIZE) ||
+ !strcmp (o->object, FC_FILE))
+ continue;
+
+ e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object));
+ if (e)
+ {
+ if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))
+ goto bail0;
+ if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
+ goto bail0;
+ if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0))
+ goto bail0;
+ if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ?
+ (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
+ goto bail0;
+ }
+ }
+ }
+ return FcStrBufDone (&buf);
+bail0:
+ FcStrBufDestroy (&buf);
+ return 0;
+}
+#define __fcname__
+#include "fcaliastail.h"
+#undef __fcname__
diff --git a/fontconfig/src/fcpat.c b/fontconfig/src/fcpat.c
index 76263b655..0fb2e506c 100644
--- a/fontconfig/src/fcpat.c
+++ b/fontconfig/src/fcpat.c
@@ -1,1263 +1,1263 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "fcftint.h"
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-static FcBool
-FcHashOwnsName(const FcChar8 *name);
-
-FcPattern *
-FcPatternCreate (void)
-{
- FcPattern *p;
-
- p = (FcPattern *) malloc (sizeof (FcPattern));
- if (!p)
- return 0;
- FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern));
- p->num = 0;
- p->size = 0;
- p->elts_offset = FcPtrToOffset (p, NULL);
- p->ref = 1;
- return p;
-}
-
-void
-FcValueDestroy (FcValue v)
-{
- switch (v.type) {
- case FcTypeString:
- if (!FcHashOwnsName(v.u.s))
- FcStrFree ((FcChar8 *) v.u.s);
- break;
- case FcTypeMatrix:
- FcMatrixFree ((FcMatrix *) v.u.m);
- break;
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
-}
-
-FcValue
-FcValueCanonicalize (const FcValue *v)
-{
- FcValue new;
-
- switch (v->type)
- {
- case FcTypeString:
- new.u.s = FcValueString(v);
- new.type = FcTypeString;
- break;
- case FcTypeCharSet:
- new.u.c = FcValueCharSet(v);
- new.type = FcTypeCharSet;
- break;
- case FcTypeLangSet:
- new.u.l = FcValueLangSet(v);
- new.type = FcTypeLangSet;
- break;
- default:
- new = *v;
- break;
- }
- return new;
-}
-
-FcValue
-FcValueSave (FcValue v)
-{
- switch (v.type) {
- case FcTypeString:
- v.u.s = FcStrStaticName (v.u.s);
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- case FcTypeMatrix:
- v.u.m = FcMatrixCopy (v.u.m);
- if (!v.u.m)
- v.type = FcTypeVoid;
- break;
- case FcTypeCharSet:
- v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- case FcTypeLangSet:
- v.u.l = FcLangSetCopy (v.u.l);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- default:
- break;
- }
- return v;
-}
-
-void
-FcValueListDestroy (FcValueListPtr l)
-{
- FcValueListPtr next;
- for (; l; l = next)
- {
- switch (l->value.type) {
- case FcTypeString:
- if (!FcHashOwnsName((FcChar8 *)l->value.u.s))
- FcStrFree ((FcChar8 *)l->value.u.s);
- break;
- case FcTypeMatrix:
- FcMatrixFree ((FcMatrix *)l->value.u.m);
- break;
- case FcTypeCharSet:
- FcCharSetDestroy
- ((FcCharSet *) (l->value.u.c));
- break;
- case FcTypeLangSet:
- FcLangSetDestroy
- ((FcLangSet *) (l->value.u.l));
- break;
- default:
- break;
- }
- next = FcValueListNext(l);
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free(l);
- }
-}
-
-FcBool
-FcValueEqual (FcValue va, FcValue vb)
-{
- if (va.type != vb.type)
- {
- if (va.type == FcTypeInteger)
- {
- va.type = FcTypeDouble;
- va.u.d = va.u.i;
- }
- if (vb.type == FcTypeInteger)
- {
- vb.type = FcTypeDouble;
- vb.u.d = vb.u.i;
- }
- if (va.type != vb.type)
- return FcFalse;
- }
- switch (va.type) {
- case FcTypeVoid:
- return FcTrue;
- case FcTypeInteger:
- return va.u.i == vb.u.i;
- case FcTypeDouble:
- return va.u.d == vb.u.d;
- case FcTypeString:
- return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0;
- case FcTypeBool:
- return va.u.b == vb.u.b;
- case FcTypeMatrix:
- return FcMatrixEqual (va.u.m, vb.u.m);
- case FcTypeCharSet:
- return FcCharSetEqual (va.u.c, vb.u.c);
- case FcTypeFTFace:
- return va.u.f == vb.u.f;
- case FcTypeLangSet:
- return FcLangSetEqual (va.u.l, vb.u.l);
- }
- return FcFalse;
-}
-
-static FcChar32
-FcDoubleHash (double d)
-{
- if (d < 0)
- d = -d;
- if (d > 0xffffffff)
- d = 0xffffffff;
- return (FcChar32) d;
-}
-
-FcChar32
-FcStringHash (const FcChar8 *s)
-{
- FcChar8 c;
- FcChar32 h = 0;
-
- if (s)
- while ((c = *s++))
- h = ((h << 1) | (h >> 31)) ^ c;
- return h;
-}
-
-static FcChar32
-FcValueHash (const FcValue *v)
-{
- switch (v->type) {
- case FcTypeVoid:
- return 0;
- case FcTypeInteger:
- return (FcChar32) v->u.i;
- case FcTypeDouble:
- return FcDoubleHash (v->u.d);
- case FcTypeString:
- return FcStringHash (FcValueString(v));
- case FcTypeBool:
- return (FcChar32) v->u.b;
- case FcTypeMatrix:
- return (FcDoubleHash (v->u.m->xx) ^
- FcDoubleHash (v->u.m->xy) ^
- FcDoubleHash (v->u.m->yx) ^
- FcDoubleHash (v->u.m->yy));
- case FcTypeCharSet:
- return (FcChar32) FcValueCharSet(v)->num;
- case FcTypeFTFace:
- return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^
- FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name);
- case FcTypeLangSet:
- return FcLangSetHash (FcValueLangSet(v));
- }
- return FcFalse;
-}
-
-static FcBool
-FcValueListEqual (FcValueListPtr la, FcValueListPtr lb)
-{
- if (la == lb)
- return FcTrue;
-
- while (la && lb)
- {
- if (!FcValueEqual (la->value, lb->value))
- return FcFalse;
- la = FcValueListNext(la);
- lb = FcValueListNext(lb);
- }
- if (la || lb)
- return FcFalse;
- return FcTrue;
-}
-
-static FcChar32
-FcValueListHash (FcValueListPtr l)
-{
- FcChar32 hash = 0;
-
- for (; l; l = FcValueListNext(l))
- {
- hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value);
- }
- return hash;
-}
-
-void
-FcPatternDestroy (FcPattern *p)
-{
- int i;
- FcPatternElt *elts;
-
- if (p->ref == FC_REF_CONSTANT)
- {
- FcCacheObjectDereference (p);
- return;
- }
-
- if (--p->ref > 0)
- return;
-
- elts = FcPatternElts (p);
- for (i = 0; i < p->num; i++)
- FcValueListDestroy (FcPatternEltValues(&elts[i]));
-
- FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
- free (elts);
- FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern));
- free (p);
-}
-
-static int
-FcPatternObjectPosition (const FcPattern *p, FcObject object)
-{
- int low, high, mid, c;
- FcPatternElt *elts = FcPatternElts(p);
-
- low = 0;
- high = p->num - 1;
- c = 1;
- mid = 0;
- while (low <= high)
- {
- mid = (low + high) >> 1;
- c = elts[mid].object - object;
- if (c == 0)
- return mid;
- if (c < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (c < 0)
- mid++;
- return -(mid + 1);
-}
-
-FcPatternElt *
-FcPatternObjectFindElt (const FcPattern *p, FcObject object)
-{
- int i = FcPatternObjectPosition (p, object);
- if (i < 0)
- return 0;
- return &FcPatternElts(p)[i];
-}
-
-FcPatternElt *
-FcPatternObjectInsertElt (FcPattern *p, FcObject object)
-{
- int i;
- FcPatternElt *e;
-
- i = FcPatternObjectPosition (p, object);
- if (i < 0)
- {
- i = -i - 1;
-
- /* reallocate array */
- if (p->num + 1 >= p->size)
- {
- int s = p->size + 16;
- if (p->size)
- {
- FcPatternElt *e0 = FcPatternElts(p);
- e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt));
- if (!e) /* maybe it was mmapped */
- {
- e = malloc(s * sizeof (FcPatternElt));
- if (e)
- memcpy(e, e0, p->num * sizeof (FcPatternElt));
- }
- }
- else
- e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt));
- if (!e)
- return FcFalse;
- p->elts_offset = FcPtrToOffset (p, e);
- if (p->size)
- FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
- FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt));
- while (p->size < s)
- {
- e[p->size].object = 0;
- e[p->size].values = NULL;
- p->size++;
- }
- }
-
- e = FcPatternElts(p);
- /* move elts up */
- memmove (e + i + 1,
- e + i,
- sizeof (FcPatternElt) *
- (p->num - i));
-
- /* bump count */
- p->num++;
-
- e[i].object = object;
- e[i].values = NULL;
- }
-
- return FcPatternElts(p) + i;
-}
-
-FcBool
-FcPatternEqual (const FcPattern *pa, const FcPattern *pb)
-{
- int i;
- FcPatternElt *pae, *pbe;
-
- if (pa == pb)
- return FcTrue;
-
- if (pa->num != pb->num)
- return FcFalse;
- pae = FcPatternElts(pa);
- pbe = FcPatternElts(pb);
- for (i = 0; i < pa->num; i++)
- {
- if (pae[i].object != pbe[i].object)
- return FcFalse;
- if (!FcValueListEqual (FcPatternEltValues(&pae[i]),
- FcPatternEltValues(&pbe[i])))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcChar32
-FcPatternHash (const FcPattern *p)
-{
- int i;
- FcChar32 h = 0;
- FcPatternElt *pe = FcPatternElts(p);
-
- for (i = 0; i < p->num; i++)
- {
- h = (((h << 1) | (h >> 31)) ^
- pe[i].object ^
- FcValueListHash (FcPatternEltValues(&pe[i])));
- }
- return h;
-}
-
-FcBool
-FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os)
-{
- FcPatternElt *ea, *eb;
- int i;
-
- for (i = 0; i < os->nobject; i++)
- {
- FcObject object = FcObjectFromName (os->objects[i]);
- ea = FcPatternObjectFindElt (pai, object);
- eb = FcPatternObjectFindElt (pbi, object);
- if (ea)
- {
- if (!eb)
- return FcFalse;
- if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb)))
- return FcFalse;
- }
- else
- {
- if (eb)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcBool
-FcPatternObjectAddWithBinding (FcPattern *p,
- FcObject object,
- FcValue value,
- FcValueBinding binding,
- FcBool append)
-{
- FcPatternElt *e;
- FcValueListPtr new, *prev;
-
- if (p->ref == FC_REF_CONSTANT)
- goto bail0;
-
- new = malloc (sizeof (FcValueList));
- if (!new)
- goto bail0;
-
- memset(new, 0, sizeof (FcValueList));
- FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
- value = FcValueSave (value);
- if (value.type == FcTypeVoid)
- goto bail1;
-
- /*
- * Make sure the stored type is valid for built-in objects
- */
- if (!FcObjectValidType (object, value.type))
- {
- if (FcDebug() & FC_DBG_OBJTYPES)
- {
- printf ("FcPattern object %s does not accept value ",
- FcObjectName (object));
- FcValuePrint (value);
- }
- goto bail1;
- }
-
- new->value = value;
- new->binding = binding;
- new->next = NULL;
-
- e = FcPatternObjectInsertElt (p, object);
- if (!e)
- goto bail2;
-
- if (append)
- {
- for (prev = &e->values; *prev; prev = &(*prev)->next)
- ;
- *prev = new;
- }
- else
- {
- new->next = e->values;
- e->values = new;
- }
-
- return FcTrue;
-
-bail2:
- FcValueDestroy (value);
-bail1:
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free (new);
-bail0:
- return FcFalse;
-}
-
-FcBool
-FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, object,
- value, FcValueBindingStrong, append);
-}
-
-FcBool
-FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
- value, FcValueBindingStrong, append);
-}
-
-FcBool
-FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
- value, FcValueBindingWeak, append);
-}
-
-FcBool
-FcPatternObjectDel (FcPattern *p, FcObject object)
-{
- FcPatternElt *e;
-
- e = FcPatternObjectFindElt (p, object);
- if (!e)
- return FcFalse;
-
- /* destroy value */
- FcValueListDestroy (e->values);
-
- /* shuffle existing ones down */
- memmove (e, e+1,
- (FcPatternElts(p) + p->num - (e + 1)) *
- sizeof (FcPatternElt));
- p->num--;
- e = FcPatternElts(p) + p->num;
- e->object = 0;
- e->values = NULL;
- return FcTrue;
-}
-
-FcBool
-FcPatternDel (FcPattern *p, const char *object)
-{
- return FcPatternObjectDel (p, FcObjectFromName (object));
-}
-
-FcBool
-FcPatternRemove (FcPattern *p, const char *object, int id)
-{
- FcPatternElt *e;
- FcValueListPtr *prev, l;
-
- e = FcPatternObjectFindElt (p, FcObjectFromName (object));
- if (!e)
- return FcFalse;
- for (prev = &e->values; (l = *prev); prev = &l->next)
- {
- if (!id)
- {
- *prev = l->next;
- l->next = NULL;
- FcValueListDestroy (l);
- if (!e->values)
- FcPatternDel (p, object);
- return FcTrue;
- }
- id--;
- }
- return FcFalse;
-}
-
-FcBool
-FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i)
-{
- FcValue v;
-
- v.type = FcTypeInteger;
- v.u.i = i;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddInteger (FcPattern *p, const char *object, int i)
-{
- return FcPatternObjectAddInteger (p, FcObjectFromName (object), i);
-}
-
-FcBool
-FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d)
-{
- FcValue v;
-
- v.type = FcTypeDouble;
- v.u.d = d;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-
-FcBool
-FcPatternAddDouble (FcPattern *p, const char *object, double d)
-{
- return FcPatternObjectAddDouble (p, FcObjectFromName (object), d);
-}
-
-FcBool
-FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s)
-{
- FcValue v;
-
- if (!s)
- {
- v.type = FcTypeVoid;
- v.u.s = 0;
- return FcPatternObjectAdd (p, object, v, FcTrue);
- }
-
- v.type = FcTypeString;
- v.u.s = FcStrStaticName(s);
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s)
-{
- return FcPatternObjectAddString (p, FcObjectFromName (object), s);
-}
-
-FcBool
-FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s)
-{
- FcValue v;
-
- v.type = FcTypeMatrix;
- v.u.m = s;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-
-FcBool
-FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b)
-{
- FcValue v;
-
- v.type = FcTypeBool;
- v.u.b = b;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddBool (FcPattern *p, const char *object, FcBool b)
-{
- return FcPatternObjectAddBool (p, FcObjectFromName (object), b);
-}
-
-FcBool
-FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c)
-{
- FcValue v;
-
- v.type = FcTypeCharSet;
- v.u.c = (FcCharSet *)c;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f)
-{
- FcValue v;
-
- v.type = FcTypeFTFace;
- v.u.f = (void *) f;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls)
-{
- FcValue v;
-
- v.type = FcTypeLangSet;
- v.u.l = (FcLangSet *)ls;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcResult
-FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
-{
- FcPatternElt *e;
- FcValueListPtr l;
-
- e = FcPatternObjectFindElt (p, object);
- if (!e)
- return FcResultNoMatch;
- for (l = FcPatternEltValues(e); l; l = FcValueListNext(l))
- {
- if (!id)
- {
- *v = FcValueCanonicalize(&l->value);
- return FcResultMatch;
- }
- id--;
- }
- return FcResultNoId;
-}
-
-FcResult
-FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v)
-{
- return FcPatternObjectGet (p, FcObjectFromName (object), id, v);
-}
-
-FcResult
-FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- switch (v.type) {
- case FcTypeDouble:
- *i = (int) v.u.d;
- break;
- case FcTypeInteger:
- *i = v.u.i;
- break;
- default:
- return FcResultTypeMismatch;
- }
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i)
-{
- return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i);
-}
-
-
-FcResult
-FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- switch (v.type) {
- case FcTypeDouble:
- *d = v.u.d;
- break;
- case FcTypeInteger:
- *d = (double) v.u.i;
- break;
- default:
- return FcResultTypeMismatch;
- }
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d)
-{
- return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d);
-}
-
-FcResult
-FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeString)
- return FcResultTypeMismatch;
-
- *s = (FcChar8 *) v.u.s;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s)
-{
- return FcPatternObjectGetString (p, FcObjectFromName (object), id, s);
-}
-
-FcResult
-FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeMatrix)
- return FcResultTypeMismatch;
- *m = (FcMatrix *)v.u.m;
- return FcResultMatch;
-}
-
-
-FcResult
-FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeBool)
- return FcResultTypeMismatch;
- *b = v.u.b;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeCharSet)
- return FcResultTypeMismatch;
- *c = (FcCharSet *)v.u.c;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeFTFace)
- return FcResultTypeMismatch;
- *f = (FT_Face) v.u.f;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeLangSet)
- return FcResultTypeMismatch;
- *ls = (FcLangSet *)v.u.l;
- return FcResultMatch;
-}
-
-FcPattern *
-FcPatternDuplicate (const FcPattern *orig)
-{
- FcPattern *new;
- FcPatternElt *e;
- int i;
- FcValueListPtr l;
-
- new = FcPatternCreate ();
- if (!new)
- goto bail0;
-
- e = FcPatternElts(orig);
-
- for (i = 0; i < orig->num; i++)
- {
- for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l))
- {
- if (!FcPatternObjectAddWithBinding (new, e[i].object,
- FcValueCanonicalize(&l->value),
- l->binding,
- FcTrue))
- goto bail1;
-
- }
- }
-
- return new;
-
-bail1:
- FcPatternDestroy (new);
-bail0:
- return 0;
-}
-
-void
-FcPatternReference (FcPattern *p)
-{
- if (p->ref != FC_REF_CONSTANT)
- p->ref++;
- else
- FcCacheObjectReference (p);
-}
-
-FcPattern *
-FcPatternVaBuild (FcPattern *p, va_list va)
-{
- FcPattern *ret;
-
- FcPatternVapBuild (ret, p, va);
- return ret;
-}
-
-FcPattern *
-FcPatternBuild (FcPattern *p, ...)
-{
- va_list va;
-
- va_start (va, p);
- FcPatternVapBuild (p, p, va);
- va_end (va);
- return p;
-}
-
-/*
- * Add all of the elements in 's' to 'p'
- */
-FcBool
-FcPatternAppend (FcPattern *p, FcPattern *s)
-{
- int i;
- FcPatternElt *e;
- FcValueListPtr v;
-
- for (i = 0; i < s->num; i++)
- {
- e = FcPatternElts(s)+i;
- for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
- {
- if (!FcPatternObjectAddWithBinding (p, e->object,
- FcValueCanonicalize(&v->value),
- v->binding, FcTrue))
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcPattern *
-FcPatternFilter (FcPattern *p, const FcObjectSet *os)
-{
- int i;
- FcPattern *ret;
- FcPatternElt *e;
- FcValueListPtr v;
-
- if (!os)
- return FcPatternDuplicate (p);
-
- ret = FcPatternCreate ();
- if (!ret)
- return NULL;
-
- for (i = 0; i < os->nobject; i++)
- {
- FcObject object = FcObjectFromName (os->objects[i]);
- e = FcPatternObjectFindElt (p, object);
- if (e)
- {
- for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
- {
- if (!FcPatternObjectAddWithBinding (ret, e->object,
- FcValueCanonicalize(&v->value),
- v->binding, FcTrue))
- goto bail0;
- }
- }
- }
- return ret;
-
-bail0:
- FcPatternDestroy (ret);
- return NULL;
-}
-
-#define OBJECT_HASH_SIZE 31
-static struct objectBucket {
- struct objectBucket *next;
- FcChar32 hash;
-} *FcObjectBuckets[OBJECT_HASH_SIZE];
-
-static FcBool
-FcHashOwnsName (const FcChar8 *name)
-{
- FcChar32 hash = FcStringHash (name);
- struct objectBucket **p;
- struct objectBucket *b;
-
- for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- if (b->hash == hash && ((char *)name == (char *) (b + 1)))
- return FcTrue;
- return FcFalse;
-}
-
-const FcChar8 *
-FcStrStaticName (const FcChar8 *name)
-{
- FcChar32 hash = FcStringHash (name);
- struct objectBucket **p;
- struct objectBucket *b;
- int size;
-
- for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1)))
- return (FcChar8 *) (b + 1);
- size = sizeof (struct objectBucket) + strlen ((char *)name) + 1;
- b = malloc (size + sizeof (int));
- /* workaround glibc bug which reads strlen in groups of 4 */
- FcMemAlloc (FC_MEM_STATICSTR, size + sizeof (int));
- if (!b)
- return NULL;
- b->next = 0;
- b->hash = hash;
- strcpy ((char *) (b + 1), (char *)name);
- *p = b;
- return (FcChar8 *) (b + 1);
-}
-
-static void
-FcStrStaticNameFini (void)
-{
- int i, size;
- struct objectBucket *b, *next;
- char *name;
-
- for (i = 0; i < OBJECT_HASH_SIZE; i++)
- {
- for (b = FcObjectBuckets[i]; b; b = next)
- {
- next = b->next;
- name = (char *) (b + 1);
- size = sizeof (struct objectBucket) + strlen (name) + 1;
- FcMemFree (FC_MEM_STATICSTR, size + sizeof (int));
- free (b);
- }
- FcObjectBuckets[i] = 0;
- }
-}
-
-void
-FcPatternFini (void)
-{
- FcStrStaticNameFini ();
- FcObjectFini ();
-}
-
-FcBool
-FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat)
-{
- int i;
- FcPatternElt *elts = FcPatternElts(pat);
-
- if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt)))
- return FcFalse;
- for (i = 0; i < pat->num; i++)
- if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i)))
- return FcFalse;
- return FcTrue;
-}
-
-FcPattern *
-FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat)
-{
- FcPattern *pat_serialized;
- FcPatternElt *elts = FcPatternElts (pat);
- FcPatternElt *elts_serialized;
- FcValueList *values_serialized;
- int i;
-
- pat_serialized = FcSerializePtr (serialize, pat);
- if (!pat_serialized)
- return NULL;
- *pat_serialized = *pat;
- pat_serialized->size = pat->num;
- pat_serialized->ref = FC_REF_CONSTANT;
-
- elts_serialized = FcSerializePtr (serialize, elts);
- if (!elts_serialized)
- return NULL;
-
- pat_serialized->elts_offset = FcPtrToOffset (pat_serialized,
- elts_serialized);
-
- for (i = 0; i < pat->num; i++)
- {
- values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i));
- if (!values_serialized)
- return NULL;
- elts_serialized[i].object = elts[i].object;
- elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i],
- values_serialized,
- FcValueList);
- }
- if (FcDebug() & FC_DBG_CACHEV) {
- printf ("Raw pattern:\n");
- FcPatternPrint (pat);
- printf ("Serialized pattern:\n");
- FcPatternPrint (pat_serialized);
- printf ("\n");
- }
- return pat_serialized;
-}
-
-FcBool
-FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl)
-{
- while (vl)
- {
- if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList)))
- return FcFalse;
- switch (vl->value.type) {
- case FcTypeString:
- if (!FcStrSerializeAlloc (serialize, vl->value.u.s))
- return FcFalse;
- break;
- case FcTypeCharSet:
- if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c))
- return FcFalse;
- break;
- case FcTypeLangSet:
- if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l))
- return FcFalse;
- break;
- default:
- break;
- }
- vl = vl->next;
- }
- return FcTrue;
-}
-
-FcValueList *
-FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
-{
- FcValueList *vl_serialized;
- FcChar8 *s_serialized;
- FcCharSet *c_serialized;
- FcLangSet *l_serialized;
- FcValueList *head_serialized = NULL;
- FcValueList *prev_serialized = NULL;
-
- while (vl)
- {
- vl_serialized = FcSerializePtr (serialize, vl);
- if (!vl_serialized)
- return NULL;
-
- if (prev_serialized)
- prev_serialized->next = FcPtrToEncodedOffset (prev_serialized,
- vl_serialized,
- FcValueList);
- else
- head_serialized = vl_serialized;
-
- vl_serialized->next = NULL;
- vl_serialized->value.type = vl->value.type;
- switch (vl->value.type) {
- case FcTypeInteger:
- vl_serialized->value.u.i = vl->value.u.i;
- break;
- case FcTypeDouble:
- vl_serialized->value.u.d = vl->value.u.d;
- break;
- case FcTypeString:
- s_serialized = FcStrSerialize (serialize, vl->value.u.s);
- if (!s_serialized)
- return NULL;
- vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value,
- s_serialized,
- FcChar8);
- break;
- case FcTypeBool:
- vl_serialized->value.u.b = vl->value.u.b;
- break;
- case FcTypeMatrix:
- /* can't happen */
- break;
- case FcTypeCharSet:
- c_serialized = FcCharSetSerialize (serialize, vl->value.u.c);
- if (!c_serialized)
- return NULL;
- vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value,
- c_serialized,
- FcCharSet);
- break;
- case FcTypeFTFace:
- /* can't happen */
- break;
- case FcTypeLangSet:
- l_serialized = FcLangSetSerialize (serialize, vl->value.u.l);
- if (!l_serialized)
- return NULL;
- vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value,
- l_serialized,
- FcLangSet);
- break;
- default:
- break;
- }
- prev_serialized = vl_serialized;
- vl = vl->next;
- }
- return head_serialized;
-}
-#define __fcpat__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fcpat__
+/*
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include "fcftint.h"
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static FcBool
+FcHashOwnsName(const FcChar8 *name);
+
+FcPattern *
+FcPatternCreate (void)
+{
+ FcPattern *p;
+
+ p = (FcPattern *) malloc (sizeof (FcPattern));
+ if (!p)
+ return 0;
+ FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern));
+ p->num = 0;
+ p->size = 0;
+ p->elts_offset = FcPtrToOffset (p, NULL);
+ p->ref = 1;
+ return p;
+}
+
+void
+FcValueDestroy (FcValue v)
+{
+ switch (v.type) {
+ case FcTypeString:
+ if (!FcHashOwnsName(v.u.s))
+ FcStrFree ((FcChar8 *) v.u.s);
+ break;
+ case FcTypeMatrix:
+ FcMatrixFree ((FcMatrix *) v.u.m);
+ break;
+ case FcTypeCharSet:
+ FcCharSetDestroy ((FcCharSet *) v.u.c);
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy ((FcLangSet *) v.u.l);
+ break;
+ default:
+ break;
+ }
+}
+
+FcValue
+FcValueCanonicalize (const FcValue *v)
+{
+ FcValue new;
+
+ switch (v->type)
+ {
+ case FcTypeString:
+ new.u.s = FcValueString(v);
+ new.type = FcTypeString;
+ break;
+ case FcTypeCharSet:
+ new.u.c = FcValueCharSet(v);
+ new.type = FcTypeCharSet;
+ break;
+ case FcTypeLangSet:
+ new.u.l = FcValueLangSet(v);
+ new.type = FcTypeLangSet;
+ break;
+ default:
+ new = *v;
+ break;
+ }
+ return new;
+}
+
+FcValue
+FcValueSave (FcValue v)
+{
+ switch (v.type) {
+ case FcTypeString:
+ v.u.s = FcStrStaticName (v.u.s);
+ if (!v.u.s)
+ v.type = FcTypeVoid;
+ break;
+ case FcTypeMatrix:
+ v.u.m = FcMatrixCopy (v.u.m);
+ if (!v.u.m)
+ v.type = FcTypeVoid;
+ break;
+ case FcTypeCharSet:
+ v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c);
+ if (!v.u.c)
+ v.type = FcTypeVoid;
+ break;
+ case FcTypeLangSet:
+ v.u.l = FcLangSetCopy (v.u.l);
+ if (!v.u.l)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ break;
+ }
+ return v;
+}
+
+void
+FcValueListDestroy (FcValueListPtr l)
+{
+ FcValueListPtr next;
+ for (; l; l = next)
+ {
+ switch (l->value.type) {
+ case FcTypeString:
+ if (!FcHashOwnsName((FcChar8 *)l->value.u.s))
+ FcStrFree ((FcChar8 *)l->value.u.s);
+ break;
+ case FcTypeMatrix:
+ FcMatrixFree ((FcMatrix *)l->value.u.m);
+ break;
+ case FcTypeCharSet:
+ FcCharSetDestroy
+ ((FcCharSet *) (l->value.u.c));
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy
+ ((FcLangSet *) (l->value.u.l));
+ break;
+ default:
+ break;
+ }
+ next = FcValueListNext(l);
+ FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
+ free(l);
+ }
+}
+
+FcBool
+FcValueEqual (FcValue va, FcValue vb)
+{
+ if (va.type != vb.type)
+ {
+ if (va.type == FcTypeInteger)
+ {
+ va.type = FcTypeDouble;
+ va.u.d = va.u.i;
+ }
+ if (vb.type == FcTypeInteger)
+ {
+ vb.type = FcTypeDouble;
+ vb.u.d = vb.u.i;
+ }
+ if (va.type != vb.type)
+ return FcFalse;
+ }
+ switch (va.type) {
+ case FcTypeVoid:
+ return FcTrue;
+ case FcTypeInteger:
+ return va.u.i == vb.u.i;
+ case FcTypeDouble:
+ return va.u.d == vb.u.d;
+ case FcTypeString:
+ return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0;
+ case FcTypeBool:
+ return va.u.b == vb.u.b;
+ case FcTypeMatrix:
+ return FcMatrixEqual (va.u.m, vb.u.m);
+ case FcTypeCharSet:
+ return FcCharSetEqual (va.u.c, vb.u.c);
+ case FcTypeFTFace:
+ return va.u.f == vb.u.f;
+ case FcTypeLangSet:
+ return FcLangSetEqual (va.u.l, vb.u.l);
+ }
+ return FcFalse;
+}
+
+static FcChar32
+FcDoubleHash (double d)
+{
+ if (d < 0)
+ d = -d;
+ if (d > 0xffffffff)
+ d = 0xffffffff;
+ return (FcChar32) d;
+}
+
+FcChar32
+FcStringHash (const FcChar8 *s)
+{
+ FcChar8 c;
+ FcChar32 h = 0;
+
+ if (s)
+ while ((c = *s++))
+ h = ((h << 1) | (h >> 31)) ^ c;
+ return h;
+}
+
+static FcChar32
+FcValueHash (const FcValue *v)
+{
+ switch (v->type) {
+ case FcTypeVoid:
+ return 0;
+ case FcTypeInteger:
+ return (FcChar32) v->u.i;
+ case FcTypeDouble:
+ return FcDoubleHash (v->u.d);
+ case FcTypeString:
+ return FcStringHash (FcValueString(v));
+ case FcTypeBool:
+ return (FcChar32) v->u.b;
+ case FcTypeMatrix:
+ return (FcDoubleHash (v->u.m->xx) ^
+ FcDoubleHash (v->u.m->xy) ^
+ FcDoubleHash (v->u.m->yx) ^
+ FcDoubleHash (v->u.m->yy));
+ case FcTypeCharSet:
+ return (FcChar32) FcValueCharSet(v)->num;
+ case FcTypeFTFace:
+ return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^
+ FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name);
+ case FcTypeLangSet:
+ return FcLangSetHash (FcValueLangSet(v));
+ }
+ return FcFalse;
+}
+
+static FcBool
+FcValueListEqual (FcValueListPtr la, FcValueListPtr lb)
+{
+ if (la == lb)
+ return FcTrue;
+
+ while (la && lb)
+ {
+ if (!FcValueEqual (la->value, lb->value))
+ return FcFalse;
+ la = FcValueListNext(la);
+ lb = FcValueListNext(lb);
+ }
+ if (la || lb)
+ return FcFalse;
+ return FcTrue;
+}
+
+static FcChar32
+FcValueListHash (FcValueListPtr l)
+{
+ FcChar32 hash = 0;
+
+ for (; l; l = FcValueListNext(l))
+ {
+ hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value);
+ }
+ return hash;
+}
+
+void
+FcPatternDestroy (FcPattern *p)
+{
+ int i;
+ FcPatternElt *elts;
+
+ if (p->ref == FC_REF_CONSTANT)
+ {
+ FcCacheObjectDereference (p);
+ return;
+ }
+
+ if (--p->ref > 0)
+ return;
+
+ elts = FcPatternElts (p);
+ for (i = 0; i < p->num; i++)
+ FcValueListDestroy (FcPatternEltValues(&elts[i]));
+
+ FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
+ free (elts);
+ FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern));
+ free (p);
+}
+
+static int
+FcPatternObjectPosition (const FcPattern *p, FcObject object)
+{
+ int low, high, mid, c;
+ FcPatternElt *elts = FcPatternElts(p);
+
+ low = 0;
+ high = p->num - 1;
+ c = 1;
+ mid = 0;
+ while (low <= high)
+ {
+ mid = (low + high) >> 1;
+ c = elts[mid].object - object;
+ if (c == 0)
+ return mid;
+ if (c < 0)
+ low = mid + 1;
+ else
+ high = mid - 1;
+ }
+ if (c < 0)
+ mid++;
+ return -(mid + 1);
+}
+
+FcPatternElt *
+FcPatternObjectFindElt (const FcPattern *p, FcObject object)
+{
+ int i = FcPatternObjectPosition (p, object);
+ if (i < 0)
+ return 0;
+ return &FcPatternElts(p)[i];
+}
+
+FcPatternElt *
+FcPatternObjectInsertElt (FcPattern *p, FcObject object)
+{
+ int i;
+ FcPatternElt *e;
+
+ i = FcPatternObjectPosition (p, object);
+ if (i < 0)
+ {
+ i = -i - 1;
+
+ /* reallocate array */
+ if (p->num + 1 >= p->size)
+ {
+ int s = p->size + 16;
+ if (p->size)
+ {
+ FcPatternElt *e0 = FcPatternElts(p);
+ e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt));
+ if (!e) /* maybe it was mmapped */
+ {
+ e = malloc(s * sizeof (FcPatternElt));
+ if (e)
+ memcpy(e, e0, p->num * sizeof (FcPatternElt));
+ }
+ }
+ else
+ e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt));
+ if (!e)
+ return FcFalse;
+ p->elts_offset = FcPtrToOffset (p, e);
+ if (p->size)
+ FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
+ FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt));
+ while (p->size < s)
+ {
+ e[p->size].object = 0;
+ e[p->size].values = NULL;
+ p->size++;
+ }
+ }
+
+ e = FcPatternElts(p);
+ /* move elts up */
+ memmove (e + i + 1,
+ e + i,
+ sizeof (FcPatternElt) *
+ (p->num - i));
+
+ /* bump count */
+ p->num++;
+
+ e[i].object = object;
+ e[i].values = NULL;
+ }
+
+ return FcPatternElts(p) + i;
+}
+
+FcBool
+FcPatternEqual (const FcPattern *pa, const FcPattern *pb)
+{
+ int i;
+ FcPatternElt *pae, *pbe;
+
+ if (pa == pb)
+ return FcTrue;
+
+ if (pa->num != pb->num)
+ return FcFalse;
+ pae = FcPatternElts(pa);
+ pbe = FcPatternElts(pb);
+ for (i = 0; i < pa->num; i++)
+ {
+ if (pae[i].object != pbe[i].object)
+ return FcFalse;
+ if (!FcValueListEqual (FcPatternEltValues(&pae[i]),
+ FcPatternEltValues(&pbe[i])))
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcChar32
+FcPatternHash (const FcPattern *p)
+{
+ int i;
+ FcChar32 h = 0;
+ FcPatternElt *pe = FcPatternElts(p);
+
+ for (i = 0; i < p->num; i++)
+ {
+ h = (((h << 1) | (h >> 31)) ^
+ pe[i].object ^
+ FcValueListHash (FcPatternEltValues(&pe[i])));
+ }
+ return h;
+}
+
+FcBool
+FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os)
+{
+ FcPatternElt *ea, *eb;
+ int i;
+
+ for (i = 0; i < os->nobject; i++)
+ {
+ FcObject object = FcObjectFromName (os->objects[i]);
+ ea = FcPatternObjectFindElt (pai, object);
+ eb = FcPatternObjectFindElt (pbi, object);
+ if (ea)
+ {
+ if (!eb)
+ return FcFalse;
+ if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb)))
+ return FcFalse;
+ }
+ else
+ {
+ if (eb)
+ return FcFalse;
+ }
+ }
+ return FcTrue;
+}
+
+FcBool
+FcPatternObjectAddWithBinding (FcPattern *p,
+ FcObject object,
+ FcValue value,
+ FcValueBinding binding,
+ FcBool append)
+{
+ FcPatternElt *e;
+ FcValueListPtr new, *prev;
+
+ if (p->ref == FC_REF_CONSTANT)
+ goto bail0;
+
+ new = malloc (sizeof (FcValueList));
+ if (!new)
+ goto bail0;
+
+ memset(new, 0, sizeof (FcValueList));
+ FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
+ value = FcValueSave (value);
+ if (value.type == FcTypeVoid)
+ goto bail1;
+
+ /*
+ * Make sure the stored type is valid for built-in objects
+ */
+ if (!FcObjectValidType (object, value.type))
+ {
+ if (FcDebug() & FC_DBG_OBJTYPES)
+ {
+ printf ("FcPattern object %s does not accept value ",
+ FcObjectName (object));
+ FcValuePrint (value);
+ }
+ goto bail1;
+ }
+
+ new->value = value;
+ new->binding = binding;
+ new->next = NULL;
+
+ e = FcPatternObjectInsertElt (p, object);
+ if (!e)
+ goto bail2;
+
+ if (append)
+ {
+ for (prev = &e->values; *prev; prev = &(*prev)->next)
+ ;
+ *prev = new;
+ }
+ else
+ {
+ new->next = e->values;
+ e->values = new;
+ }
+
+ return FcTrue;
+
+bail2:
+ FcValueDestroy (value);
+bail1:
+ FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
+ free (new);
+bail0:
+ return FcFalse;
+}
+
+FcBool
+FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append)
+{
+ return FcPatternObjectAddWithBinding (p, object,
+ value, FcValueBindingStrong, append);
+}
+
+FcBool
+FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
+{
+ return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
+ value, FcValueBindingStrong, append);
+}
+
+FcBool
+FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append)
+{
+ return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
+ value, FcValueBindingWeak, append);
+}
+
+FcBool
+FcPatternObjectDel (FcPattern *p, FcObject object)
+{
+ FcPatternElt *e;
+
+ e = FcPatternObjectFindElt (p, object);
+ if (!e)
+ return FcFalse;
+
+ /* destroy value */
+ FcValueListDestroy (e->values);
+
+ /* shuffle existing ones down */
+ memmove (e, e+1,
+ (FcPatternElts(p) + p->num - (e + 1)) *
+ sizeof (FcPatternElt));
+ p->num--;
+ e = FcPatternElts(p) + p->num;
+ e->object = 0;
+ e->values = NULL;
+ return FcTrue;
+}
+
+FcBool
+FcPatternDel (FcPattern *p, const char *object)
+{
+ return FcPatternObjectDel (p, FcObjectFromName (object));
+}
+
+FcBool
+FcPatternRemove (FcPattern *p, const char *object, int id)
+{
+ FcPatternElt *e;
+ FcValueListPtr *prev, l;
+
+ e = FcPatternObjectFindElt (p, FcObjectFromName (object));
+ if (!e)
+ return FcFalse;
+ for (prev = &e->values; (l = *prev); prev = &l->next)
+ {
+ if (!id)
+ {
+ *prev = l->next;
+ l->next = NULL;
+ FcValueListDestroy (l);
+ if (!e->values)
+ FcPatternDel (p, object);
+ return FcTrue;
+ }
+ id--;
+ }
+ return FcFalse;
+}
+
+FcBool
+FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i)
+{
+ FcValue v;
+
+ v.type = FcTypeInteger;
+ v.u.i = i;
+ return FcPatternObjectAdd (p, object, v, FcTrue);
+}
+
+FcBool
+FcPatternAddInteger (FcPattern *p, const char *object, int i)
+{
+ return FcPatternObjectAddInteger (p, FcObjectFromName (object), i);
+}
+
+FcBool
+FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d)
+{
+ FcValue v;
+
+ v.type = FcTypeDouble;
+ v.u.d = d;
+ return FcPatternObjectAdd (p, object, v, FcTrue);
+}
+
+
+FcBool
+FcPatternAddDouble (FcPattern *p, const char *object, double d)
+{
+ return FcPatternObjectAddDouble (p, FcObjectFromName (object), d);
+}
+
+FcBool
+FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s)
+{
+ FcValue v;
+
+ if (!s)
+ {
+ v.type = FcTypeVoid;
+ v.u.s = 0;
+ return FcPatternObjectAdd (p, object, v, FcTrue);
+ }
+
+ v.type = FcTypeString;
+ v.u.s = FcStrStaticName(s);
+ return FcPatternObjectAdd (p, object, v, FcTrue);
+}
+
+FcBool
+FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s)
+{
+ return FcPatternObjectAddString (p, FcObjectFromName (object), s);
+}
+
+FcBool
+FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s)
+{
+ FcValue v;
+
+ v.type = FcTypeMatrix;
+ v.u.m = s;
+ return FcPatternAdd (p, object, v, FcTrue);
+}
+
+
+FcBool
+FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b)
+{
+ FcValue v;
+
+ v.type = FcTypeBool;
+ v.u.b = b;
+ return FcPatternObjectAdd (p, object, v, FcTrue);
+}
+
+FcBool
+FcPatternAddBool (FcPattern *p, const char *object, FcBool b)
+{
+ return FcPatternObjectAddBool (p, FcObjectFromName (object), b);
+}
+
+FcBool
+FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c)
+{
+ FcValue v;
+
+ v.type = FcTypeCharSet;
+ v.u.c = (FcCharSet *)c;
+ return FcPatternAdd (p, object, v, FcTrue);
+}
+
+FcBool
+FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f)
+{
+ FcValue v;
+
+ v.type = FcTypeFTFace;
+ v.u.f = (void *) f;
+ return FcPatternAdd (p, object, v, FcTrue);
+}
+
+FcBool
+FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls)
+{
+ FcValue v;
+
+ v.type = FcTypeLangSet;
+ v.u.l = (FcLangSet *)ls;
+ return FcPatternAdd (p, object, v, FcTrue);
+}
+
+FcResult
+FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
+{
+ FcPatternElt *e;
+ FcValueListPtr l;
+
+ e = FcPatternObjectFindElt (p, object);
+ if (!e)
+ return FcResultNoMatch;
+ for (l = FcPatternEltValues(e); l; l = FcValueListNext(l))
+ {
+ if (!id)
+ {
+ *v = FcValueCanonicalize(&l->value);
+ return FcResultMatch;
+ }
+ id--;
+ }
+ return FcResultNoId;
+}
+
+FcResult
+FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v)
+{
+ return FcPatternObjectGet (p, FcObjectFromName (object), id, v);
+}
+
+FcResult
+FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternObjectGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ switch (v.type) {
+ case FcTypeDouble:
+ *i = (int) v.u.d;
+ break;
+ case FcTypeInteger:
+ *i = v.u.i;
+ break;
+ default:
+ return FcResultTypeMismatch;
+ }
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i)
+{
+ return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i);
+}
+
+
+FcResult
+FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternObjectGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ switch (v.type) {
+ case FcTypeDouble:
+ *d = v.u.d;
+ break;
+ case FcTypeInteger:
+ *d = (double) v.u.i;
+ break;
+ default:
+ return FcResultTypeMismatch;
+ }
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d)
+{
+ return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d);
+}
+
+FcResult
+FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternObjectGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeString)
+ return FcResultTypeMismatch;
+
+ *s = (FcChar8 *) v.u.s;
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s)
+{
+ return FcPatternObjectGetString (p, FcObjectFromName (object), id, s);
+}
+
+FcResult
+FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeMatrix)
+ return FcResultTypeMismatch;
+ *m = (FcMatrix *)v.u.m;
+ return FcResultMatch;
+}
+
+
+FcResult
+FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeBool)
+ return FcResultTypeMismatch;
+ *b = v.u.b;
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeCharSet)
+ return FcResultTypeMismatch;
+ *c = (FcCharSet *)v.u.c;
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeFTFace)
+ return FcResultTypeMismatch;
+ *f = (FT_Face) v.u.f;
+ return FcResultMatch;
+}
+
+FcResult
+FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls)
+{
+ FcValue v;
+ FcResult r;
+
+ r = FcPatternGet (p, object, id, &v);
+ if (r != FcResultMatch)
+ return r;
+ if (v.type != FcTypeLangSet)
+ return FcResultTypeMismatch;
+ *ls = (FcLangSet *)v.u.l;
+ return FcResultMatch;
+}
+
+FcPattern *
+FcPatternDuplicate (const FcPattern *orig)
+{
+ FcPattern *new;
+ FcPatternElt *e;
+ int i;
+ FcValueListPtr l;
+
+ new = FcPatternCreate ();
+ if (!new)
+ goto bail0;
+
+ e = FcPatternElts(orig);
+
+ for (i = 0; i < orig->num; i++)
+ {
+ for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l))
+ {
+ if (!FcPatternObjectAddWithBinding (new, e[i].object,
+ FcValueCanonicalize(&l->value),
+ l->binding,
+ FcTrue))
+ goto bail1;
+
+ }
+ }
+
+ return new;
+
+bail1:
+ FcPatternDestroy (new);
+bail0:
+ return 0;
+}
+
+void
+FcPatternReference (FcPattern *p)
+{
+ if (p->ref != FC_REF_CONSTANT)
+ p->ref++;
+ else
+ FcCacheObjectReference (p);
+}
+
+FcPattern *
+FcPatternVaBuild (FcPattern *p, va_list va)
+{
+ FcPattern *ret;
+
+ FcPatternVapBuild (ret, p, va);
+ return ret;
+}
+
+FcPattern *
+FcPatternBuild (FcPattern *p, ...)
+{
+ va_list va;
+
+ va_start (va, p);
+ FcPatternVapBuild (p, p, va);
+ va_end (va);
+ return p;
+}
+
+/*
+ * Add all of the elements in 's' to 'p'
+ */
+FcBool
+FcPatternAppend (FcPattern *p, FcPattern *s)
+{
+ int i;
+ FcPatternElt *e;
+ FcValueListPtr v;
+
+ for (i = 0; i < s->num; i++)
+ {
+ e = FcPatternElts(s)+i;
+ for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
+ {
+ if (!FcPatternObjectAddWithBinding (p, e->object,
+ FcValueCanonicalize(&v->value),
+ v->binding, FcTrue))
+ return FcFalse;
+ }
+ }
+ return FcTrue;
+}
+
+FcPattern *
+FcPatternFilter (FcPattern *p, const FcObjectSet *os)
+{
+ int i;
+ FcPattern *ret;
+ FcPatternElt *e;
+ FcValueListPtr v;
+
+ if (!os)
+ return FcPatternDuplicate (p);
+
+ ret = FcPatternCreate ();
+ if (!ret)
+ return NULL;
+
+ for (i = 0; i < os->nobject; i++)
+ {
+ FcObject object = FcObjectFromName (os->objects[i]);
+ e = FcPatternObjectFindElt (p, object);
+ if (e)
+ {
+ for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
+ {
+ if (!FcPatternObjectAddWithBinding (ret, e->object,
+ FcValueCanonicalize(&v->value),
+ v->binding, FcTrue))
+ goto bail0;
+ }
+ }
+ }
+ return ret;
+
+bail0:
+ FcPatternDestroy (ret);
+ return NULL;
+}
+
+#define OBJECT_HASH_SIZE 31
+static struct objectBucket {
+ struct objectBucket *next;
+ FcChar32 hash;
+} *FcObjectBuckets[OBJECT_HASH_SIZE];
+
+static FcBool
+FcHashOwnsName (const FcChar8 *name)
+{
+ FcChar32 hash = FcStringHash (name);
+ struct objectBucket **p;
+ struct objectBucket *b;
+
+ for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
+ if (b->hash == hash && ((char *)name == (char *) (b + 1)))
+ return FcTrue;
+ return FcFalse;
+}
+
+const FcChar8 *
+FcStrStaticName (const FcChar8 *name)
+{
+ FcChar32 hash = FcStringHash (name);
+ struct objectBucket **p;
+ struct objectBucket *b;
+ int size;
+
+ for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
+ if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1)))
+ return (FcChar8 *) (b + 1);
+ size = sizeof (struct objectBucket) + strlen ((char *)name) + 1;
+ b = malloc (size + sizeof (int));
+ /* workaround glibc bug which reads strlen in groups of 4 */
+ FcMemAlloc (FC_MEM_STATICSTR, size + sizeof (int));
+ if (!b)
+ return NULL;
+ b->next = 0;
+ b->hash = hash;
+ strcpy ((char *) (b + 1), (char *)name);
+ *p = b;
+ return (FcChar8 *) (b + 1);
+}
+
+static void
+FcStrStaticNameFini (void)
+{
+ int i, size;
+ struct objectBucket *b, *next;
+ char *name;
+
+ for (i = 0; i < OBJECT_HASH_SIZE; i++)
+ {
+ for (b = FcObjectBuckets[i]; b; b = next)
+ {
+ next = b->next;
+ name = (char *) (b + 1);
+ size = sizeof (struct objectBucket) + strlen (name) + 1;
+ FcMemFree (FC_MEM_STATICSTR, size + sizeof (int));
+ free (b);
+ }
+ FcObjectBuckets[i] = 0;
+ }
+}
+
+void
+FcPatternFini (void)
+{
+ FcStrStaticNameFini ();
+ FcObjectFini ();
+}
+
+FcBool
+FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat)
+{
+ int i;
+ FcPatternElt *elts = FcPatternElts(pat);
+
+ if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern)))
+ return FcFalse;
+ if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt)))
+ return FcFalse;
+ for (i = 0; i < pat->num; i++)
+ if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i)))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcPattern *
+FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat)
+{
+ FcPattern *pat_serialized;
+ FcPatternElt *elts = FcPatternElts (pat);
+ FcPatternElt *elts_serialized;
+ FcValueList *values_serialized;
+ int i;
+
+ pat_serialized = FcSerializePtr (serialize, pat);
+ if (!pat_serialized)
+ return NULL;
+ *pat_serialized = *pat;
+ pat_serialized->size = pat->num;
+ pat_serialized->ref = FC_REF_CONSTANT;
+
+ elts_serialized = FcSerializePtr (serialize, elts);
+ if (!elts_serialized)
+ return NULL;
+
+ pat_serialized->elts_offset = FcPtrToOffset (pat_serialized,
+ elts_serialized);
+
+ for (i = 0; i < pat->num; i++)
+ {
+ values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i));
+ if (!values_serialized)
+ return NULL;
+ elts_serialized[i].object = elts[i].object;
+ elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i],
+ values_serialized,
+ FcValueList);
+ }
+ if (FcDebug() & FC_DBG_CACHEV) {
+ printf ("Raw pattern:\n");
+ FcPatternPrint (pat);
+ printf ("Serialized pattern:\n");
+ FcPatternPrint (pat_serialized);
+ printf ("\n");
+ }
+ return pat_serialized;
+}
+
+FcBool
+FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl)
+{
+ while (vl)
+ {
+ if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList)))
+ return FcFalse;
+ switch (vl->value.type) {
+ case FcTypeString:
+ if (!FcStrSerializeAlloc (serialize, vl->value.u.s))
+ return FcFalse;
+ break;
+ case FcTypeCharSet:
+ if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c))
+ return FcFalse;
+ break;
+ case FcTypeLangSet:
+ if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l))
+ return FcFalse;
+ break;
+ default:
+ break;
+ }
+ vl = vl->next;
+ }
+ return FcTrue;
+}
+
+FcValueList *
+FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
+{
+ FcValueList *vl_serialized;
+ FcChar8 *s_serialized;
+ FcCharSet *c_serialized;
+ FcLangSet *l_serialized;
+ FcValueList *head_serialized = NULL;
+ FcValueList *prev_serialized = NULL;
+
+ while (vl)
+ {
+ vl_serialized = FcSerializePtr (serialize, vl);
+ if (!vl_serialized)
+ return NULL;
+
+ if (prev_serialized)
+ prev_serialized->next = FcPtrToEncodedOffset (prev_serialized,
+ vl_serialized,
+ FcValueList);
+ else
+ head_serialized = vl_serialized;
+
+ vl_serialized->next = NULL;
+ vl_serialized->value.type = vl->value.type;
+ switch (vl->value.type) {
+ case FcTypeInteger:
+ vl_serialized->value.u.i = vl->value.u.i;
+ break;
+ case FcTypeDouble:
+ vl_serialized->value.u.d = vl->value.u.d;
+ break;
+ case FcTypeString:
+ s_serialized = FcStrSerialize (serialize, vl->value.u.s);
+ if (!s_serialized)
+ return NULL;
+ vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value,
+ s_serialized,
+ FcChar8);
+ break;
+ case FcTypeBool:
+ vl_serialized->value.u.b = vl->value.u.b;
+ break;
+ case FcTypeMatrix:
+ /* can't happen */
+ break;
+ case FcTypeCharSet:
+ c_serialized = FcCharSetSerialize (serialize, vl->value.u.c);
+ if (!c_serialized)
+ return NULL;
+ vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value,
+ c_serialized,
+ FcCharSet);
+ break;
+ case FcTypeFTFace:
+ /* can't happen */
+ break;
+ case FcTypeLangSet:
+ l_serialized = FcLangSetSerialize (serialize, vl->value.u.l);
+ if (!l_serialized)
+ return NULL;
+ vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value,
+ l_serialized,
+ FcLangSet);
+ break;
+ default:
+ break;
+ }
+ prev_serialized = vl_serialized;
+ vl = vl->next;
+ }
+ return head_serialized;
+}
+#define __fcpat__
+#include "fcaliastail.h"
+#include "fcftaliastail.h"
+#undef __fcpat__
diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c
index ea7c376c2..6aee5d288 100644
--- a/fontconfig/src/fcstr.c
+++ b/fontconfig/src/fcstr.c
@@ -1,1198 +1,1198 @@
-/*
- * fontconfig/src/fcstr.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-FcChar8 *
-FcStrCopy (const FcChar8 *s)
-{
- int len;
- FcChar8 *r;
-
- if (!s)
- return 0;
- len = strlen ((char *) s) + 1;
- r = (FcChar8 *) malloc (len);
- if (!r)
- return 0;
- FcMemAlloc (FC_MEM_STRING, len);
- memcpy (r, s, len);
- return r;
-}
-
-FcChar8 *
-FcStrPlus (const FcChar8 *s1, const FcChar8 *s2)
-{
- int l = strlen ((char *)s1) + strlen ((char *) s2) + 1;
- FcChar8 *s = malloc (l);
-
- if (!s)
- return 0;
- FcMemAlloc (FC_MEM_STRING, l);
- strcpy ((char *) s, (char *) s1);
- strcat ((char *) s, (char *) s2);
- return s;
-}
-
-void
-FcStrFree (FcChar8 *s)
-{
- FcMemFree (FC_MEM_STRING, strlen ((char *) s) + 1);
- free (s);
-}
-
-
-#include "../fc-case/fccase.h"
-
-#define FcCaseFoldUpperCount(cf) \
- ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count)
-
-#define FC_STR_CANON_BUF_LEN 1024
-
-typedef struct _FcCaseWalker {
- const FcChar8 *read;
- const FcChar8 *src;
- FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1];
-} FcCaseWalker;
-
-static void
-FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w)
-{
- w->src = src;
- w->read = 0;
-}
-
-static FcChar8
-FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
-{
- FcChar32 ucs4;
- int slen;
- int len = strlen((char*)w->src);
-
- slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1);
- if (slen <= 0)
- return r;
- if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
- {
- int min = 0;
- int max = FC_NUM_CASE_FOLD;
-
- while (min <= max)
- {
- int mid = (min + max) >> 1;
- FcChar32 low = fcCaseFold[mid].upper;
- FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]);
-
- if (high <= ucs4)
- min = mid + 1;
- else if (ucs4 < low)
- max = mid - 1;
- else
- {
- const FcCaseFold *fold = &fcCaseFold[mid];
- int dlen;
-
- switch (fold->method) {
- case FC_CASE_FOLD_EVEN_ODD:
- if ((ucs4 & 1) != (fold->upper & 1))
- return r;
- /* fall through ... */
- default:
- dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8);
- break;
- case FC_CASE_FOLD_FULL:
- dlen = fold->count;
- memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen);
- break;
- }
-
- /* consume rest of src utf-8 bytes */
- w->src += slen - 1;
-
- /* read from temp buffer */
- w->utf8[dlen] = '\0';
- w->read = w->utf8;
- return *w->read++;
- }
- }
- }
- return r;
-}
-
-static FcChar8
-FcStrCaseWalkerNext (FcCaseWalker *w)
-{
- FcChar8 r;
-
- if (w->read)
- {
- if ((r = *w->read++))
- return r;
- w->read = 0;
- }
- r = *w->src++;
-
- if ((r & 0xc0) == 0xc0)
- return FcStrCaseWalkerLong (w, r);
- if ('A' <= r && r <= 'Z')
- r = r - 'A' + 'a';
- return r;
-}
-
-static FcChar8
-FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
-{
- FcChar8 r;
-
- if (w->read)
- {
- if ((r = *w->read++))
- return r;
- w->read = 0;
- }
- do
- {
- r = *w->src++;
- } while (r == ' ');
-
- if ((r & 0xc0) == 0xc0)
- return FcStrCaseWalkerLong (w, r);
- if ('A' <= r && r <= 'Z')
- r = r - 'A' + 'a';
- return r;
-}
-
-FcChar8 *
-FcStrDowncase (const FcChar8 *s)
-{
- FcCaseWalker w;
- int len = 0;
- FcChar8 *dst, *d;
-
- FcStrCaseWalkerInit (s, &w);
- while (FcStrCaseWalkerNext (&w))
- len++;
- d = dst = malloc (len + 1);
- if (!d)
- return 0;
- FcMemAlloc (FC_MEM_STRING, len + 1);
- FcStrCaseWalkerInit (s, &w);
- while ((*d++ = FcStrCaseWalkerNext (&w)));
- return dst;
-}
-
-int
-FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- if (s1 == s2) return 0;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNext (&w1);
- c2 = FcStrCaseWalkerNext (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-int
-FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- if (s1 == s2) return 0;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
- c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-int
-FcStrCmp (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
-
- if (s1 == s2)
- return 0;
- for (;;)
- {
- c1 = *s1++;
- c2 = *s2++;
- if (!c1 || c1 != c2)
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-/*
- * Return a hash value for a string
- */
-
-FcChar32
-FcStrHashIgnoreCase (const FcChar8 *s)
-{
- FcChar32 h = 0;
- FcCaseWalker w;
- FcChar8 c;
-
- FcStrCaseWalkerInit (s, &w);
- while ((c = FcStrCaseWalkerNext (&w)))
- h = ((h << 3) ^ (h >> 3)) ^ c;
- return h;
-}
-
-/*
- * Is the head of s1 equal to s2?
- */
-
-static FcBool
-FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
- c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return c1 == c2 || !c2;
-}
-
-/*
- * Does s1 contain an instance of s2 (ignoring blanks and case)?
- */
-
-const FcChar8 *
-FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- while (*s1)
- {
- if (FcStrIsAtIgnoreBlanksAndCase (s1, s2))
- return s1;
- s1++;
- }
- return 0;
-}
-
-static FcBool
-FcCharIsPunct (const FcChar8 c)
-{
- if (c < '0')
- return FcTrue;
- if (c <= '9')
- return FcFalse;
- if (c < 'A')
- return FcTrue;
- if (c <= 'Z')
- return FcFalse;
- if (c < 'a')
- return FcTrue;
- if (c <= 'z')
- return FcFalse;
- if (c <= '~')
- return FcTrue;
- return FcFalse;
-}
-
-/*
- * Is the head of s1 equal to s2?
- */
-
-static FcBool
-FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNext (&w1);
- c2 = FcStrCaseWalkerNext (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return c1 == c2 || !c2;
-}
-
-/*
- * Does s1 contain an instance of s2 (ignoring blanks and case)?
- */
-
-const FcChar8 *
-FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- while (*s1)
- {
- if (FcStrIsAtIgnoreCase (s1, s2))
- return s1;
- s1++;
- }
- return 0;
-}
-
-/*
- * Does s1 contain an instance of s2 on a word boundary (ignoring case)?
- */
-
-const FcChar8 *
-FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcBool wordStart = FcTrue;
- int s1len = strlen ((char *) s1);
- int s2len = strlen ((char *) s2);
-
- while (s1len >= s2len)
- {
- if (wordStart &&
- FcStrIsAtIgnoreCase (s1, s2) &&
- (s1len == s2len || FcCharIsPunct (s1[s2len])))
- {
- return s1;
- }
- wordStart = FcFalse;
- if (FcCharIsPunct (*s1))
- wordStart = FcTrue;
- s1++;
- s1len--;
- }
- return 0;
-}
-
-const FcChar8 *
-FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
- const FcChar8 *cur;
-
- if (!s1 || !s2)
- return 0;
-
- if (s1 == s2)
- return s1;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- c2 = FcStrCaseWalkerNext (&w2);
-
- for (;;)
- {
- cur = w1.src;
- c1 = FcStrCaseWalkerNext (&w1);
- if (!c1)
- break;
- if (c1 == c2)
- {
- FcCaseWalker w1t = w1;
- FcCaseWalker w2t = w2;
- FcChar8 c1t, c2t;
-
- for (;;)
- {
- c1t = FcStrCaseWalkerNext (&w1t);
- c2t = FcStrCaseWalkerNext (&w2t);
-
- if (!c2t)
- return cur;
- if (c2t != c1t)
- break;
- }
- }
- }
- return 0;
-}
-
-const FcChar8 *
-FcStrStr (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
- const FcChar8 * p = s1;
- const FcChar8 * b = s2;
-
- if (!s1 || !s2)
- return 0;
-
- if (s1 == s2)
- return s1;
-
-again:
- c2 = *s2++;
-
- if (!c2)
- return 0;
-
- for (;;)
- {
- p = s1;
- c1 = *s1++;
- if (!c1 || c1 == c2)
- break;
- }
-
- if (c1 != c2)
- return 0;
-
- for (;;)
- {
- c1 = *s1;
- c2 = *s2;
- if (c1 && c2 && c1 != c2)
- {
- s1 = p + 1;
- s2 = b;
- goto again;
- }
- if (!c2)
- return p;
- if (!c1)
- return 0;
- ++ s1;
- ++ s2;
- }
- /* never reached. */
-}
-
-int
-FcUtf8ToUcs4 (const FcChar8 *src_orig,
- FcChar32 *dst,
- int len)
-{
- const FcChar8 *src = src_orig;
- FcChar8 s;
- int extra;
- FcChar32 result;
-
- if (len == 0)
- return 0;
-
- s = *src++;
- len--;
-
- if (!(s & 0x80))
- {
- result = s;
- extra = 0;
- }
- else if (!(s & 0x40))
- {
- return -1;
- }
- else if (!(s & 0x20))
- {
- result = s & 0x1f;
- extra = 1;
- }
- else if (!(s & 0x10))
- {
- result = s & 0xf;
- extra = 2;
- }
- else if (!(s & 0x08))
- {
- result = s & 0x07;
- extra = 3;
- }
- else if (!(s & 0x04))
- {
- result = s & 0x03;
- extra = 4;
- }
- else if ( ! (s & 0x02))
- {
- result = s & 0x01;
- extra = 5;
- }
- else
- {
- return -1;
- }
- if (extra > len)
- return -1;
-
- while (extra--)
- {
- result <<= 6;
- s = *src++;
-
- if ((s & 0xc0) != 0x80)
- return -1;
-
- result |= s & 0x3f;
- }
- *dst = result;
- return src - src_orig;
-}
-
-FcBool
-FcUtf8Len (const FcChar8 *string,
- int len,
- int *nchar,
- int *wchar)
-{
- int n;
- int clen;
- FcChar32 c;
- FcChar32 max;
-
- n = 0;
- max = 0;
- while (len)
- {
- clen = FcUtf8ToUcs4 (string, &c, len);
- if (clen <= 0) /* malformed UTF8 string */
- return FcFalse;
- if (c > max)
- max = c;
- string += clen;
- len -= clen;
- n++;
- }
- *nchar = n;
- if (max >= 0x10000)
- *wchar = 4;
- else if (max > 0x100)
- *wchar = 2;
- else
- *wchar = 1;
- return FcTrue;
-}
-
-int
-FcUcs4ToUtf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN])
-{
- int bits;
- FcChar8 *d = dest;
-
- if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
- else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
- else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
- else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
- else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
- else return 0;
-
- for ( ; bits >= 0; bits-= 6) {
- *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
- }
- return d - dest;
-}
-
-#define GetUtf16(src,endian) \
- ((FcChar16) ((src)[endian == FcEndianBig ? 0 : 1] << 8) | \
- (FcChar16) ((src)[endian == FcEndianBig ? 1 : 0]))
-
-int
-FcUtf16ToUcs4 (const FcChar8 *src_orig,
- FcEndian endian,
- FcChar32 *dst,
- int len) /* in bytes */
-{
- const FcChar8 *src = src_orig;
- FcChar16 a, b;
- FcChar32 result;
-
- if (len < 2)
- return 0;
-
- a = GetUtf16 (src, endian); src += 2; len -= 2;
-
- /*
- * Check for surrogate
- */
- if ((a & 0xfc00) == 0xd800)
- {
- if (len < 2)
- return 0;
- b = GetUtf16 (src, endian); src += 2; len -= 2;
- /*
- * Check for invalid surrogate sequence
- */
- if ((b & 0xfc00) != 0xdc00)
- return 0;
- result = ((((FcChar32) a & 0x3ff) << 10) |
- ((FcChar32) b & 0x3ff)) + 0x10000;
- }
- else
- result = a;
- *dst = result;
- return src - src_orig;
-}
-
-FcBool
-FcUtf16Len (const FcChar8 *string,
- FcEndian endian,
- int len, /* in bytes */
- int *nchar,
- int *wchar)
-{
- int n;
- int clen;
- FcChar32 c;
- FcChar32 max;
-
- n = 0;
- max = 0;
- while (len)
- {
- clen = FcUtf16ToUcs4 (string, endian, &c, len);
- if (clen <= 0) /* malformed UTF8 string */
- return FcFalse;
- if (c > max)
- max = c;
- string += clen;
- len -= clen;
- n++;
- }
- *nchar = n;
- if (max >= 0x10000)
- *wchar = 4;
- else if (max > 0x100)
- *wchar = 2;
- else
- *wchar = 1;
- return FcTrue;
-}
-
-void
-FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size)
-{
- if (init)
- {
- buf->buf = init;
- buf->size = size;
- } else
- {
- buf->buf = buf->buf_static;
- buf->size = sizeof (buf->buf_static);
- }
- buf->allocated = FcFalse;
- buf->failed = FcFalse;
- buf->len = 0;
-}
-
-void
-FcStrBufDestroy (FcStrBuf *buf)
-{
- if (buf->allocated)
- {
- FcMemFree (FC_MEM_STRBUF, buf->size);
- free (buf->buf);
- FcStrBufInit (buf, 0, 0);
- }
-}
-
-FcChar8 *
-FcStrBufDone (FcStrBuf *buf)
-{
- FcChar8 *ret;
-
- if (buf->failed)
- ret = NULL;
- else
- ret = malloc (buf->len + 1);
- if (ret)
- {
- FcMemAlloc (FC_MEM_STRING, buf->len + 1);
- memcpy (ret, buf->buf, buf->len);
- ret[buf->len] = '\0';
- }
- FcStrBufDestroy (buf);
- return ret;
-}
-
-FcChar8 *
-FcStrBufDoneStatic (FcStrBuf *buf)
-{
- FcStrBufChar (buf, '\0');
-
- if (buf->failed)
- return NULL;
-
- return buf->buf;
-}
-
-FcBool
-FcStrBufChar (FcStrBuf *buf, FcChar8 c)
-{
- if (buf->len == buf->size)
- {
- FcChar8 *new;
- int size;
-
- if (buf->failed)
- return FcFalse;
-
- if (buf->allocated)
- {
- size = buf->size * 2;
- new = realloc (buf->buf, size);
- }
- else
- {
- size = buf->size + 64;
- new = malloc (size);
- if (new)
- {
- buf->allocated = FcTrue;
- memcpy (new, buf->buf, buf->len);
- }
- }
- if (!new)
- {
- buf->failed = FcTrue;
- return FcFalse;
- }
- if (buf->size)
- FcMemFree (FC_MEM_STRBUF, buf->size);
- FcMemAlloc (FC_MEM_STRBUF, size);
- buf->size = size;
- buf->buf = new;
- }
- buf->buf[buf->len++] = c;
- return FcTrue;
-}
-
-FcBool
-FcStrBufString (FcStrBuf *buf, const FcChar8 *s)
-{
- FcChar8 c;
- while ((c = *s++))
- if (!FcStrBufChar (buf, c))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len)
-{
- while (len-- > 0)
- if (!FcStrBufChar (buf, *s++))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrUsesHome (const FcChar8 *s)
-{
- return *s == '~';
-}
-
-FcChar8 *
-FcStrCopyFilename (const FcChar8 *s)
-{
- FcChar8 *new;
-
- if (*s == '~')
- {
- FcChar8 *home = FcConfigHome ();
- FcChar8 *full;
- int size;
- if (!home)
- return 0;
- size = strlen ((char *) home) + strlen ((char *) s);
- full = (FcChar8 *) malloc (size);
- if (!full)
- return 0;
- strcpy ((char *) full, (char *) home);
- strcat ((char *) full, (char *) s + 1);
- new = FcStrCanonFilename (full);
- free (full);
- }
- else
- new = FcStrCanonFilename (s);
- return new;
-}
-
-FcChar8 *
-FcStrLastSlash (const FcChar8 *path)
-{
- FcChar8 *slash;
-
- slash = (FcChar8 *) strrchr ((const char *) path, '/');
-#ifdef _WIN32
- {
- FcChar8 *backslash;
-
- backslash = (FcChar8 *) strrchr ((const char *) path, '\\');
- if (!slash || (backslash && backslash > slash))
- slash = backslash;
- }
-#endif
-
- return slash;
-}
-
-FcChar8 *
-FcStrDirname (const FcChar8 *file)
-{
- FcChar8 *slash;
- FcChar8 *dir;
-
- slash = FcStrLastSlash (file);
- if (!slash)
- return FcStrCopy ((FcChar8 *) ".");
- dir = malloc ((slash - file) + 1);
- if (!dir)
- return 0;
- FcMemAlloc (FC_MEM_STRING, (slash - file) + 1);
- strncpy ((char *) dir, (const char *) file, slash - file);
- dir[slash - file] = '\0';
- return dir;
-}
-
-FcChar8 *
-FcStrBasename (const FcChar8 *file)
-{
- FcChar8 *slash;
-
- slash = FcStrLastSlash (file);
- if (!slash)
- return FcStrCopy (file);
- return FcStrCopy (slash + 1);
-}
-
-static FcChar8 *
-FcStrCanonAbsoluteFilename (const FcChar8 *s)
-{
- FcChar8 *file;
- FcChar8 *f;
- const FcChar8 *slash;
- int size;
-
- size = strlen ((char *) s) + 1;
- file = malloc (size);
- if (!file)
- return NULL;
- FcMemAlloc (FC_MEM_STRING, size);
- slash = NULL;
- f = file;
- for (;;) {
- if (*s == '/' || *s == '\0')
- {
- if (slash)
- {
- switch (s - slash) {
- case 1:
- f -= 1; /* squash // and trim final / from file */
- break;
- case 2:
- if (!strncmp ((char *) slash, "/.", 2))
- {
- f -= 2; /* trim /. from file */
- }
- break;
- case 3:
- if (!strncmp ((char *) slash, "/..", 3))
- {
- f -= 3; /* trim /.. from file */
- while (f > file) {
- if (*--f == '/')
- break;
- }
- }
- break;
- }
- }
- slash = s;
- }
- if (!(*f++ = *s++))
- break;
- }
- return file;
-}
-
-#ifdef _WIN32
-/*
- * Convert '\\' to '/' , remove double '/'
- */
-static void
-FcConvertDosPath (char *str)
-{
- size_t len = strlen (str);
- char *p = str;
- char *dest = str;
- char *end = str + len;
- char last = 0;
-
- if (*p == '\\')
- {
- *p = '/';
- p++;
- dest++;
- }
- while (p < end)
- {
- if (*p == '\\')
- *p = '/';
-
- if (*p != '/'
- || last != '/')
- {
- *dest++ = *p;
- }
-
- last = *p;
- p++;
- }
-
- *dest = 0;
-}
-#endif
-
-FcChar8 *
-FcStrCanonFilename (const FcChar8 *s)
-{
-#ifdef _WIN32
- FcChar8 full[FC_MAX_FILE_LEN + 2];
- int size = GetFullPathName (s, sizeof (full) -1,
- full, NULL);
-
- if (size == 0)
- perror ("GetFullPathName");
-
- FcConvertDosPath (full);
- return FcStrCanonAbsoluteFilename (full);
-#else
- if (s[0] == '/')
- return FcStrCanonAbsoluteFilename (s);
- else
- {
- FcChar8 *full;
- FcChar8 *file;
-
- FcChar8 cwd[FC_MAX_FILE_LEN + 2];
- if (getcwd ((char *) cwd, FC_MAX_FILE_LEN) == NULL)
- return NULL;
- strcat ((char *) cwd, "/");
- full = FcStrPlus (cwd, s);
- file = FcStrCanonAbsoluteFilename (full);
- FcStrFree (full);
- return file;
- }
-#endif
-}
-
-
-FcStrSet *
-FcStrSetCreate (void)
-{
- FcStrSet *set = malloc (sizeof (FcStrSet));
- if (!set)
- return 0;
- FcMemAlloc (FC_MEM_STRSET, sizeof (FcStrSet));
- set->ref = 1;
- set->num = 0;
- set->size = 0;
- set->strs = 0;
- return set;
-}
-
-static FcBool
-_FcStrSetAppend (FcStrSet *set, FcChar8 *s)
-{
- if (FcStrSetMember (set, s))
- {
- FcStrFree (s);
- return FcTrue;
- }
- if (set->num == set->size)
- {
- FcChar8 **strs = malloc ((set->size + 2) * sizeof (FcChar8 *));
-
- if (!strs)
- return FcFalse;
- FcMemAlloc (FC_MEM_STRSET, (set->size + 2) * sizeof (FcChar8 *));
- if (set->num)
- memcpy (strs, set->strs, set->num * sizeof (FcChar8 *));
- if (set->strs)
- {
- FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
- free (set->strs);
- }
- set->size = set->size + 1;
- set->strs = strs;
- }
- set->strs[set->num++] = s;
- set->strs[set->num] = 0;
- return FcTrue;
-}
-
-FcBool
-FcStrSetMember (FcStrSet *set, const FcChar8 *s)
-{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcStrSetEqual (FcStrSet *sa, FcStrSet *sb)
-{
- int i;
- if (sa->num != sb->num)
- return FcFalse;
- for (i = 0; i < sa->num; i++)
- if (!FcStrSetMember (sb, sa->strs[i]))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrSetAdd (FcStrSet *set, const FcChar8 *s)
-{
- FcChar8 *new = FcStrCopy (s);
- if (!new)
- return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s)
-{
- FcChar8 *new = FcStrCopyFilename (s);
- if (!new)
- return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcStrSetDel (FcStrSet *set, const FcChar8 *s)
-{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- {
- FcStrFree (set->strs[i]);
- /*
- * copy remaining string pointers and trailing
- * NULL
- */
- memmove (&set->strs[i], &set->strs[i+1],
- (set->num - i) * sizeof (FcChar8 *));
- set->num--;
- return FcTrue;
- }
- return FcFalse;
-}
-
-void
-FcStrSetDestroy (FcStrSet *set)
-{
- if (--set->ref == 0)
- {
- int i;
-
- for (i = 0; i < set->num; i++)
- FcStrFree (set->strs[i]);
- if (set->strs)
- {
- FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
- free (set->strs);
- }
- FcMemFree (FC_MEM_STRSET, sizeof (FcStrSet));
- free (set);
- }
-}
-
-FcStrList *
-FcStrListCreate (FcStrSet *set)
-{
- FcStrList *list;
-
- list = malloc (sizeof (FcStrList));
- if (!list)
- return 0;
- FcMemAlloc (FC_MEM_STRLIST, sizeof (FcStrList));
- list->set = set;
- set->ref++;
- list->n = 0;
- return list;
-}
-
-FcChar8 *
-FcStrListNext (FcStrList *list)
-{
- if (list->n >= list->set->num)
- return 0;
- return list->set->strs[list->n++];
-}
-
-void
-FcStrListDone (FcStrList *list)
-{
- FcStrSetDestroy (list->set);
- FcMemFree (FC_MEM_STRLIST, sizeof (FcStrList));
- free (list);
-}
-
-#define __fcstr__
-#include "fcaliastail.h"
-#undef __fcstr__
+/*
+ * fontconfig/src/fcstr.c
+ *
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+FcChar8 *
+FcStrCopy (const FcChar8 *s)
+{
+ int len;
+ FcChar8 *r;
+
+ if (!s)
+ return 0;
+ len = strlen ((char *) s) + 1;
+ r = (FcChar8 *) malloc (len);
+ if (!r)
+ return 0;
+ FcMemAlloc (FC_MEM_STRING, len);
+ memcpy (r, s, len);
+ return r;
+}
+
+FcChar8 *
+FcStrPlus (const FcChar8 *s1, const FcChar8 *s2)
+{
+ int l = strlen ((char *)s1) + strlen ((char *) s2) + 1;
+ FcChar8 *s = malloc (l);
+
+ if (!s)
+ return 0;
+ FcMemAlloc (FC_MEM_STRING, l);
+ strcpy ((char *) s, (char *) s1);
+ strcat ((char *) s, (char *) s2);
+ return s;
+}
+
+void
+FcStrFree (FcChar8 *s)
+{
+ FcMemFree (FC_MEM_STRING, strlen ((char *) s) + 1);
+ free (s);
+}
+
+
+#include "../fc-case/fccase.h"
+
+#define FcCaseFoldUpperCount(cf) \
+ ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count)
+
+#define FC_STR_CANON_BUF_LEN 1024
+
+typedef struct _FcCaseWalker {
+ const FcChar8 *read;
+ const FcChar8 *src;
+ FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1];
+} FcCaseWalker;
+
+static void
+FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w)
+{
+ w->src = src;
+ w->read = 0;
+}
+
+static FcChar8
+FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
+{
+ FcChar32 ucs4;
+ int slen;
+ int len = strlen((char*)w->src);
+
+ slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1);
+ if (slen <= 0)
+ return r;
+ if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
+ {
+ int min = 0;
+ int max = FC_NUM_CASE_FOLD;
+
+ while (min <= max)
+ {
+ int mid = (min + max) >> 1;
+ FcChar32 low = fcCaseFold[mid].upper;
+ FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]);
+
+ if (high <= ucs4)
+ min = mid + 1;
+ else if (ucs4 < low)
+ max = mid - 1;
+ else
+ {
+ const FcCaseFold *fold = &fcCaseFold[mid];
+ int dlen;
+
+ switch (fold->method) {
+ case FC_CASE_FOLD_EVEN_ODD:
+ if ((ucs4 & 1) != (fold->upper & 1))
+ return r;
+ /* fall through ... */
+ default:
+ dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8);
+ break;
+ case FC_CASE_FOLD_FULL:
+ dlen = fold->count;
+ memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen);
+ break;
+ }
+
+ /* consume rest of src utf-8 bytes */
+ w->src += slen - 1;
+
+ /* read from temp buffer */
+ w->utf8[dlen] = '\0';
+ w->read = w->utf8;
+ return *w->read++;
+ }
+ }
+ }
+ return r;
+}
+
+static FcChar8
+FcStrCaseWalkerNext (FcCaseWalker *w)
+{
+ FcChar8 r;
+
+ if (w->read)
+ {
+ if ((r = *w->read++))
+ return r;
+ w->read = 0;
+ }
+ r = *w->src++;
+
+ if ((r & 0xc0) == 0xc0)
+ return FcStrCaseWalkerLong (w, r);
+ if ('A' <= r && r <= 'Z')
+ r = r - 'A' + 'a';
+ return r;
+}
+
+static FcChar8
+FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
+{
+ FcChar8 r;
+
+ if (w->read)
+ {
+ if ((r = *w->read++))
+ return r;
+ w->read = 0;
+ }
+ do
+ {
+ r = *w->src++;
+ } while (r == ' ');
+
+ if ((r & 0xc0) == 0xc0)
+ return FcStrCaseWalkerLong (w, r);
+ if ('A' <= r && r <= 'Z')
+ r = r - 'A' + 'a';
+ return r;
+}
+
+FcChar8 *
+FcStrDowncase (const FcChar8 *s)
+{
+ FcCaseWalker w;
+ int len = 0;
+ FcChar8 *dst, *d;
+
+ FcStrCaseWalkerInit (s, &w);
+ while (FcStrCaseWalkerNext (&w))
+ len++;
+ d = dst = malloc (len + 1);
+ if (!d)
+ return 0;
+ FcMemAlloc (FC_MEM_STRING, len + 1);
+ FcStrCaseWalkerInit (s, &w);
+ while ((*d++ = FcStrCaseWalkerNext (&w)));
+ return dst;
+}
+
+int
+FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ if (s1 == s2) return 0;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNext (&w1);
+ c2 = FcStrCaseWalkerNext (&w2);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return (int) c1 - (int) c2;
+}
+
+int
+FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ if (s1 == s2) return 0;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
+ c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return (int) c1 - (int) c2;
+}
+
+int
+FcStrCmp (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcChar8 c1, c2;
+
+ if (s1 == s2)
+ return 0;
+ for (;;)
+ {
+ c1 = *s1++;
+ c2 = *s2++;
+ if (!c1 || c1 != c2)
+ break;
+ }
+ return (int) c1 - (int) c2;
+}
+
+/*
+ * Return a hash value for a string
+ */
+
+FcChar32
+FcStrHashIgnoreCase (const FcChar8 *s)
+{
+ FcChar32 h = 0;
+ FcCaseWalker w;
+ FcChar8 c;
+
+ FcStrCaseWalkerInit (s, &w);
+ while ((c = FcStrCaseWalkerNext (&w)))
+ h = ((h << 3) ^ (h >> 3)) ^ c;
+ return h;
+}
+
+/*
+ * Is the head of s1 equal to s2?
+ */
+
+static FcBool
+FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
+ c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return c1 == c2 || !c2;
+}
+
+/*
+ * Does s1 contain an instance of s2 (ignoring blanks and case)?
+ */
+
+const FcChar8 *
+FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ while (*s1)
+ {
+ if (FcStrIsAtIgnoreBlanksAndCase (s1, s2))
+ return s1;
+ s1++;
+ }
+ return 0;
+}
+
+static FcBool
+FcCharIsPunct (const FcChar8 c)
+{
+ if (c < '0')
+ return FcTrue;
+ if (c <= '9')
+ return FcFalse;
+ if (c < 'A')
+ return FcTrue;
+ if (c <= 'Z')
+ return FcFalse;
+ if (c < 'a')
+ return FcTrue;
+ if (c <= 'z')
+ return FcFalse;
+ if (c <= '~')
+ return FcTrue;
+ return FcFalse;
+}
+
+/*
+ * Is the head of s1 equal to s2?
+ */
+
+static FcBool
+FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNext (&w1);
+ c2 = FcStrCaseWalkerNext (&w2);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return c1 == c2 || !c2;
+}
+
+/*
+ * Does s1 contain an instance of s2 (ignoring blanks and case)?
+ */
+
+const FcChar8 *
+FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ while (*s1)
+ {
+ if (FcStrIsAtIgnoreCase (s1, s2))
+ return s1;
+ s1++;
+ }
+ return 0;
+}
+
+/*
+ * Does s1 contain an instance of s2 on a word boundary (ignoring case)?
+ */
+
+const FcChar8 *
+FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcBool wordStart = FcTrue;
+ int s1len = strlen ((char *) s1);
+ int s2len = strlen ((char *) s2);
+
+ while (s1len >= s2len)
+ {
+ if (wordStart &&
+ FcStrIsAtIgnoreCase (s1, s2) &&
+ (s1len == s2len || FcCharIsPunct (s1[s2len])))
+ {
+ return s1;
+ }
+ wordStart = FcFalse;
+ if (FcCharIsPunct (*s1))
+ wordStart = FcTrue;
+ s1++;
+ s1len--;
+ }
+ return 0;
+}
+
+const FcChar8 *
+FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+ const FcChar8 *cur;
+
+ if (!s1 || !s2)
+ return 0;
+
+ if (s1 == s2)
+ return s1;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ c2 = FcStrCaseWalkerNext (&w2);
+
+ for (;;)
+ {
+ cur = w1.src;
+ c1 = FcStrCaseWalkerNext (&w1);
+ if (!c1)
+ break;
+ if (c1 == c2)
+ {
+ FcCaseWalker w1t = w1;
+ FcCaseWalker w2t = w2;
+ FcChar8 c1t, c2t;
+
+ for (;;)
+ {
+ c1t = FcStrCaseWalkerNext (&w1t);
+ c2t = FcStrCaseWalkerNext (&w2t);
+
+ if (!c2t)
+ return cur;
+ if (c2t != c1t)
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+const FcChar8 *
+FcStrStr (const FcChar8 *s1, const FcChar8 *s2)
+{
+ FcChar8 c1, c2;
+ const FcChar8 * p = s1;
+ const FcChar8 * b = s2;
+
+ if (!s1 || !s2)
+ return 0;
+
+ if (s1 == s2)
+ return s1;
+
+again:
+ c2 = *s2++;
+
+ if (!c2)
+ return 0;
+
+ for (;;)
+ {
+ p = s1;
+ c1 = *s1++;
+ if (!c1 || c1 == c2)
+ break;
+ }
+
+ if (c1 != c2)
+ return 0;
+
+ for (;;)
+ {
+ c1 = *s1;
+ c2 = *s2;
+ if (c1 && c2 && c1 != c2)
+ {
+ s1 = p + 1;
+ s2 = b;
+ goto again;
+ }
+ if (!c2)
+ return p;
+ if (!c1)
+ return 0;
+ ++ s1;
+ ++ s2;
+ }
+ /* never reached. */
+}
+
+int
+FcUtf8ToUcs4 (const FcChar8 *src_orig,
+ FcChar32 *dst,
+ int len)
+{
+ const FcChar8 *src = src_orig;
+ FcChar8 s;
+ int extra;
+ FcChar32 result;
+
+ if (len == 0)
+ return 0;
+
+ s = *src++;
+ len--;
+
+ if (!(s & 0x80))
+ {
+ result = s;
+ extra = 0;
+ }
+ else if (!(s & 0x40))
+ {
+ return -1;
+ }
+ else if (!(s & 0x20))
+ {
+ result = s & 0x1f;
+ extra = 1;
+ }
+ else if (!(s & 0x10))
+ {
+ result = s & 0xf;
+ extra = 2;
+ }
+ else if (!(s & 0x08))
+ {
+ result = s & 0x07;
+ extra = 3;
+ }
+ else if (!(s & 0x04))
+ {
+ result = s & 0x03;
+ extra = 4;
+ }
+ else if ( ! (s & 0x02))
+ {
+ result = s & 0x01;
+ extra = 5;
+ }
+ else
+ {
+ return -1;
+ }
+ if (extra > len)
+ return -1;
+
+ while (extra--)
+ {
+ result <<= 6;
+ s = *src++;
+
+ if ((s & 0xc0) != 0x80)
+ return -1;
+
+ result |= s & 0x3f;
+ }
+ *dst = result;
+ return src - src_orig;
+}
+
+FcBool
+FcUtf8Len (const FcChar8 *string,
+ int len,
+ int *nchar,
+ int *wchar)
+{
+ int n;
+ int clen;
+ FcChar32 c;
+ FcChar32 max;
+
+ n = 0;
+ max = 0;
+ while (len)
+ {
+ clen = FcUtf8ToUcs4 (string, &c, len);
+ if (clen <= 0) /* malformed UTF8 string */
+ return FcFalse;
+ if (c > max)
+ max = c;
+ string += clen;
+ len -= clen;
+ n++;
+ }
+ *nchar = n;
+ if (max >= 0x10000)
+ *wchar = 4;
+ else if (max > 0x100)
+ *wchar = 2;
+ else
+ *wchar = 1;
+ return FcTrue;
+}
+
+int
+FcUcs4ToUtf8 (FcChar32 ucs4,
+ FcChar8 dest[FC_UTF8_MAX_LEN])
+{
+ int bits;
+ FcChar8 *d = dest;
+
+ if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
+ else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
+ else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
+ else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
+ else return 0;
+
+ for ( ; bits >= 0; bits-= 6) {
+ *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
+ }
+ return d - dest;
+}
+
+#define GetUtf16(src,endian) \
+ ((FcChar16) ((src)[endian == FcEndianBig ? 0 : 1] << 8) | \
+ (FcChar16) ((src)[endian == FcEndianBig ? 1 : 0]))
+
+int
+FcUtf16ToUcs4 (const FcChar8 *src_orig,
+ FcEndian endian,
+ FcChar32 *dst,
+ int len) /* in bytes */
+{
+ const FcChar8 *src = src_orig;
+ FcChar16 a, b;
+ FcChar32 result;
+
+ if (len < 2)
+ return 0;
+
+ a = GetUtf16 (src, endian); src += 2; len -= 2;
+
+ /*
+ * Check for surrogate
+ */
+ if ((a & 0xfc00) == 0xd800)
+ {
+ if (len < 2)
+ return 0;
+ b = GetUtf16 (src, endian); src += 2; len -= 2;
+ /*
+ * Check for invalid surrogate sequence
+ */
+ if ((b & 0xfc00) != 0xdc00)
+ return 0;
+ result = ((((FcChar32) a & 0x3ff) << 10) |
+ ((FcChar32) b & 0x3ff)) + 0x10000;
+ }
+ else
+ result = a;
+ *dst = result;
+ return src - src_orig;
+}
+
+FcBool
+FcUtf16Len (const FcChar8 *string,
+ FcEndian endian,
+ int len, /* in bytes */
+ int *nchar,
+ int *wchar)
+{
+ int n;
+ int clen;
+ FcChar32 c;
+ FcChar32 max;
+
+ n = 0;
+ max = 0;
+ while (len)
+ {
+ clen = FcUtf16ToUcs4 (string, endian, &c, len);
+ if (clen <= 0) /* malformed UTF8 string */
+ return FcFalse;
+ if (c > max)
+ max = c;
+ string += clen;
+ len -= clen;
+ n++;
+ }
+ *nchar = n;
+ if (max >= 0x10000)
+ *wchar = 4;
+ else if (max > 0x100)
+ *wchar = 2;
+ else
+ *wchar = 1;
+ return FcTrue;
+}
+
+void
+FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size)
+{
+ if (init)
+ {
+ buf->buf = init;
+ buf->size = size;
+ } else
+ {
+ buf->buf = buf->buf_static;
+ buf->size = sizeof (buf->buf_static);
+ }
+ buf->allocated = FcFalse;
+ buf->failed = FcFalse;
+ buf->len = 0;
+}
+
+void
+FcStrBufDestroy (FcStrBuf *buf)
+{
+ if (buf->allocated)
+ {
+ FcMemFree (FC_MEM_STRBUF, buf->size);
+ free (buf->buf);
+ FcStrBufInit (buf, 0, 0);
+ }
+}
+
+FcChar8 *
+FcStrBufDone (FcStrBuf *buf)
+{
+ FcChar8 *ret;
+
+ if (buf->failed)
+ ret = NULL;
+ else
+ ret = malloc (buf->len + 1);
+ if (ret)
+ {
+ FcMemAlloc (FC_MEM_STRING, buf->len + 1);
+ memcpy (ret, buf->buf, buf->len);
+ ret[buf->len] = '\0';
+ }
+ FcStrBufDestroy (buf);
+ return ret;
+}
+
+FcChar8 *
+FcStrBufDoneStatic (FcStrBuf *buf)
+{
+ FcStrBufChar (buf, '\0');
+
+ if (buf->failed)
+ return NULL;
+
+ return buf->buf;
+}
+
+FcBool
+FcStrBufChar (FcStrBuf *buf, FcChar8 c)
+{
+ if (buf->len == buf->size)
+ {
+ FcChar8 *new;
+ int size;
+
+ if (buf->failed)
+ return FcFalse;
+
+ if (buf->allocated)
+ {
+ size = buf->size * 2;
+ new = realloc (buf->buf, size);
+ }
+ else
+ {
+ size = buf->size + 64;
+ new = malloc (size);
+ if (new)
+ {
+ buf->allocated = FcTrue;
+ memcpy (new, buf->buf, buf->len);
+ }
+ }
+ if (!new)
+ {
+ buf->failed = FcTrue;
+ return FcFalse;
+ }
+ if (buf->size)
+ FcMemFree (FC_MEM_STRBUF, buf->size);
+ FcMemAlloc (FC_MEM_STRBUF, size);
+ buf->size = size;
+ buf->buf = new;
+ }
+ buf->buf[buf->len++] = c;
+ return FcTrue;
+}
+
+FcBool
+FcStrBufString (FcStrBuf *buf, const FcChar8 *s)
+{
+ FcChar8 c;
+ while ((c = *s++))
+ if (!FcStrBufChar (buf, c))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcBool
+FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len)
+{
+ while (len-- > 0)
+ if (!FcStrBufChar (buf, *s++))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcBool
+FcStrUsesHome (const FcChar8 *s)
+{
+ return *s == '~';
+}
+
+FcChar8 *
+FcStrCopyFilename (const FcChar8 *s)
+{
+ FcChar8 *new;
+
+ if (*s == '~')
+ {
+ FcChar8 *home = FcConfigHome ();
+ FcChar8 *full;
+ int size;
+ if (!home)
+ return 0;
+ size = strlen ((char *) home) + strlen ((char *) s);
+ full = (FcChar8 *) malloc (size);
+ if (!full)
+ return 0;
+ strcpy ((char *) full, (char *) home);
+ strcat ((char *) full, (char *) s + 1);
+ new = FcStrCanonFilename (full);
+ free (full);
+ }
+ else
+ new = FcStrCanonFilename (s);
+ return new;
+}
+
+FcChar8 *
+FcStrLastSlash (const FcChar8 *path)
+{
+ FcChar8 *slash;
+
+ slash = (FcChar8 *) strrchr ((const char *) path, '/');
+#ifdef _WIN32
+ {
+ FcChar8 *backslash;
+
+ backslash = (FcChar8 *) strrchr ((const char *) path, '\\');
+ if (!slash || (backslash && backslash > slash))
+ slash = backslash;
+ }
+#endif
+
+ return slash;
+}
+
+FcChar8 *
+FcStrDirname (const FcChar8 *file)
+{
+ FcChar8 *slash;
+ FcChar8 *dir;
+
+ slash = FcStrLastSlash (file);
+ if (!slash)
+ return FcStrCopy ((FcChar8 *) ".");
+ dir = malloc ((slash - file) + 1);
+ if (!dir)
+ return 0;
+ FcMemAlloc (FC_MEM_STRING, (slash - file) + 1);
+ strncpy ((char *) dir, (const char *) file, slash - file);
+ dir[slash - file] = '\0';
+ return dir;
+}
+
+FcChar8 *
+FcStrBasename (const FcChar8 *file)
+{
+ FcChar8 *slash;
+
+ slash = FcStrLastSlash (file);
+ if (!slash)
+ return FcStrCopy (file);
+ return FcStrCopy (slash + 1);
+}
+
+static FcChar8 *
+FcStrCanonAbsoluteFilename (const FcChar8 *s)
+{
+ FcChar8 *file;
+ FcChar8 *f;
+ const FcChar8 *slash;
+ int size;
+
+ size = strlen ((char *) s) + 1;
+ file = malloc (size);
+ if (!file)
+ return NULL;
+ FcMemAlloc (FC_MEM_STRING, size);
+ slash = NULL;
+ f = file;
+ for (;;) {
+ if (*s == '/' || *s == '\0')
+ {
+ if (slash)
+ {
+ switch (s - slash) {
+ case 1:
+ f -= 1; /* squash // and trim final / from file */
+ break;
+ case 2:
+ if (!strncmp ((char *) slash, "/.", 2))
+ {
+ f -= 2; /* trim /. from file */
+ }
+ break;
+ case 3:
+ if (!strncmp ((char *) slash, "/..", 3))
+ {
+ f -= 3; /* trim /.. from file */
+ while (f > file) {
+ if (*--f == '/')
+ break;
+ }
+ }
+ break;
+ }
+ }
+ slash = s;
+ }
+ if (!(*f++ = *s++))
+ break;
+ }
+ return file;
+}
+
+#ifdef _WIN32
+/*
+ * Convert '\\' to '/' , remove double '/'
+ */
+static void
+FcConvertDosPath (char *str)
+{
+ size_t len = strlen (str);
+ char *p = str;
+ char *dest = str;
+ char *end = str + len;
+ char last = 0;
+
+ if (*p == '\\')
+ {
+ *p = '/';
+ p++;
+ dest++;
+ }
+ while (p < end)
+ {
+ if (*p == '\\')
+ *p = '/';
+
+ if (*p != '/'
+ || last != '/')
+ {
+ *dest++ = *p;
+ }
+
+ last = *p;
+ p++;
+ }
+
+ *dest = 0;
+}
+#endif
+
+FcChar8 *
+FcStrCanonFilename (const FcChar8 *s)
+{
+#ifdef _WIN32
+ FcChar8 full[FC_MAX_FILE_LEN + 2];
+ int size = GetFullPathName (s, sizeof (full) -1,
+ full, NULL);
+
+ if (size == 0)
+ perror ("GetFullPathName");
+
+ FcConvertDosPath (full);
+ return FcStrCanonAbsoluteFilename (full);
+#else
+ if (s[0] == '/')
+ return FcStrCanonAbsoluteFilename (s);
+ else
+ {
+ FcChar8 *full;
+ FcChar8 *file;
+
+ FcChar8 cwd[FC_MAX_FILE_LEN + 2];
+ if (getcwd ((char *) cwd, FC_MAX_FILE_LEN) == NULL)
+ return NULL;
+ strcat ((char *) cwd, "/");
+ full = FcStrPlus (cwd, s);
+ file = FcStrCanonAbsoluteFilename (full);
+ FcStrFree (full);
+ return file;
+ }
+#endif
+}
+
+
+FcStrSet *
+FcStrSetCreate (void)
+{
+ FcStrSet *set = malloc (sizeof (FcStrSet));
+ if (!set)
+ return 0;
+ FcMemAlloc (FC_MEM_STRSET, sizeof (FcStrSet));
+ set->ref = 1;
+ set->num = 0;
+ set->size = 0;
+ set->strs = 0;
+ return set;
+}
+
+static FcBool
+_FcStrSetAppend (FcStrSet *set, FcChar8 *s)
+{
+ if (FcStrSetMember (set, s))
+ {
+ FcStrFree (s);
+ return FcTrue;
+ }
+ if (set->num == set->size)
+ {
+ FcChar8 **strs = malloc ((set->size + 2) * sizeof (FcChar8 *));
+
+ if (!strs)
+ return FcFalse;
+ FcMemAlloc (FC_MEM_STRSET, (set->size + 2) * sizeof (FcChar8 *));
+ if (set->num)
+ memcpy (strs, set->strs, set->num * sizeof (FcChar8 *));
+ if (set->strs)
+ {
+ FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
+ free (set->strs);
+ }
+ set->size = set->size + 1;
+ set->strs = strs;
+ }
+ set->strs[set->num++] = s;
+ set->strs[set->num] = 0;
+ return FcTrue;
+}
+
+FcBool
+FcStrSetMember (FcStrSet *set, const FcChar8 *s)
+{
+ int i;
+
+ for (i = 0; i < set->num; i++)
+ if (!FcStrCmp (set->strs[i], s))
+ return FcTrue;
+ return FcFalse;
+}
+
+FcBool
+FcStrSetEqual (FcStrSet *sa, FcStrSet *sb)
+{
+ int i;
+ if (sa->num != sb->num)
+ return FcFalse;
+ for (i = 0; i < sa->num; i++)
+ if (!FcStrSetMember (sb, sa->strs[i]))
+ return FcFalse;
+ return FcTrue;
+}
+
+FcBool
+FcStrSetAdd (FcStrSet *set, const FcChar8 *s)
+{
+ FcChar8 *new = FcStrCopy (s);
+ if (!new)
+ return FcFalse;
+ if (!_FcStrSetAppend (set, new))
+ {
+ FcStrFree (new);
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcBool
+FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s)
+{
+ FcChar8 *new = FcStrCopyFilename (s);
+ if (!new)
+ return FcFalse;
+ if (!_FcStrSetAppend (set, new))
+ {
+ FcStrFree (new);
+ return FcFalse;
+ }
+ return FcTrue;
+}
+
+FcBool
+FcStrSetDel (FcStrSet *set, const FcChar8 *s)
+{
+ int i;
+
+ for (i = 0; i < set->num; i++)
+ if (!FcStrCmp (set->strs[i], s))
+ {
+ FcStrFree (set->strs[i]);
+ /*
+ * copy remaining string pointers and trailing
+ * NULL
+ */
+ memmove (&set->strs[i], &set->strs[i+1],
+ (set->num - i) * sizeof (FcChar8 *));
+ set->num--;
+ return FcTrue;
+ }
+ return FcFalse;
+}
+
+void
+FcStrSetDestroy (FcStrSet *set)
+{
+ if (--set->ref == 0)
+ {
+ int i;
+
+ for (i = 0; i < set->num; i++)
+ FcStrFree (set->strs[i]);
+ if (set->strs)
+ {
+ FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
+ free (set->strs);
+ }
+ FcMemFree (FC_MEM_STRSET, sizeof (FcStrSet));
+ free (set);
+ }
+}
+
+FcStrList *
+FcStrListCreate (FcStrSet *set)
+{
+ FcStrList *list;
+
+ list = malloc (sizeof (FcStrList));
+ if (!list)
+ return 0;
+ FcMemAlloc (FC_MEM_STRLIST, sizeof (FcStrList));
+ list->set = set;
+ set->ref++;
+ list->n = 0;
+ return list;
+}
+
+FcChar8 *
+FcStrListNext (FcStrList *list)
+{
+ if (list->n >= list->set->num)
+ return 0;
+ return list->set->strs[list->n++];
+}
+
+void
+FcStrListDone (FcStrList *list)
+{
+ FcStrSetDestroy (list->set);
+ FcMemFree (FC_MEM_STRLIST, sizeof (FcStrList));
+ free (list);
+}
+
+#define __fcstr__
+#include "fcaliastail.h"
+#undef __fcstr__
diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c
index 74b6c8143..5c4e9bf24 100644
--- a/fontconfig/src/fcxml.c
+++ b/fontconfig/src/fcxml.c
@@ -1,2566 +1,2807 @@
-/*
- * fontconfig/src/fcxml.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <fcntl.h>
-#include <stdarg.h>
-#include <dirent.h>
-
-#ifdef ENABLE_LIBXML2
-
-#include <libxml/parser.h>
-
-#define XML_Char xmlChar
-#define XML_Parser xmlParserCtxtPtr
-#define XML_ParserFree xmlFreeParserCtxt
-#define XML_GetCurrentLineNumber xmlSAX2GetLineNumber
-#define XML_GetErrorCode xmlCtxtGetLastError
-#define XML_ErrorString(Error) (Error)->message
-
-#else /* ENABLE_LIBXML2 */
-
-#ifndef HAVE_XMLPARSE_H
-#define HAVE_XMLPARSE_H 0
-#endif
-
-#if HAVE_XMLPARSE_H
-#include <xmlparse.h>
-#else
-#include <expat.h>
-#endif
-
-#endif /* ENABLE_LIBXML2 */
-
-#ifdef _WIN32
-#include <mbstring.h>
-#endif
-
-static void
-FcExprDestroy (FcExpr *e);
-
-void
-FcTestDestroy (FcTest *test)
-{
- if (test->next)
- FcTestDestroy (test->next);
- FcExprDestroy (test->expr);
- FcMemFree (FC_MEM_TEST, sizeof (FcTest));
- free (test);
-}
-
-static FcExpr *
-FcExprCreateInteger (FcConfig *config, int i)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpInteger;
- e->u.ival = i;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateDouble (FcConfig *config, double d)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpDouble;
- e->u.dval = d;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateString (FcConfig *config, const FcChar8 *s)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpString;
- e->u.sval = FcStrStaticName (s);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateMatrix (FcConfig *config, const FcMatrix *m)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpMatrix;
- e->u.mval = FcMatrixCopy (m);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateBool (FcConfig *config, FcBool b)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpBool;
- e->u.bval = b;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateField (FcConfig *config, const char *field)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpField;
- e->u.object = FcObjectFromName (field);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateConst (FcConfig *config, const FcChar8 *constant)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpConst;
- e->u.constant = FcStrStaticName (constant);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateOp (FcConfig *config, FcExpr *left, FcOp op, FcExpr *right)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = op;
- e->u.tree.left = left;
- e->u.tree.right = right;
- }
- return e;
-}
-
-static void
-FcExprDestroy (FcExpr *e)
-{
- if (!e)
- return;
- switch (e->op) {
- case FcOpInteger:
- break;
- case FcOpDouble:
- break;
- case FcOpString:
- break;
- case FcOpMatrix:
- FcMatrixFree (e->u.mval);
- break;
- case FcOpCharSet:
- FcCharSetDestroy (e->u.cval);
- break;
- case FcOpBool:
- break;
- case FcOpField:
- break;
- case FcOpConst:
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- case FcOpPrepend:
- case FcOpPrependFirst:
- case FcOpAppend:
- case FcOpAppendLast:
- break;
- case FcOpOr:
- case FcOpAnd:
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpListing:
- case FcOpNotContains:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- case FcOpQuest:
- case FcOpComma:
- FcExprDestroy (e->u.tree.right);
- /* fall through */
- case FcOpNot:
- case FcOpFloor:
- case FcOpCeil:
- case FcOpRound:
- case FcOpTrunc:
- FcExprDestroy (e->u.tree.left);
- break;
- case FcOpNil:
- case FcOpInvalid:
- break;
- }
-
- e->op = FcOpNil;
-}
-
-void
-FcEditDestroy (FcEdit *e)
-{
- if (e->next)
- FcEditDestroy (e->next);
- if (e->expr)
- FcExprDestroy (e->expr);
- free (e);
-}
-
-typedef enum _FcElement {
- FcElementNone,
- FcElementFontconfig,
- FcElementDir,
- FcElementCacheDir,
- FcElementCache,
- FcElementInclude,
- FcElementConfig,
- FcElementMatch,
- FcElementAlias,
-
- FcElementBlank,
- FcElementRescan,
-
- FcElementPrefer,
- FcElementAccept,
- FcElementDefault,
- FcElementFamily,
-
- FcElementSelectfont,
- FcElementAcceptfont,
- FcElementRejectfont,
- FcElementGlob,
- FcElementPattern,
- FcElementPatelt,
-
- FcElementTest,
- FcElementEdit,
- FcElementInt,
- FcElementDouble,
- FcElementString,
- FcElementMatrix,
- FcElementBool,
- FcElementCharset,
- FcElementName,
- FcElementConst,
- FcElementOr,
- FcElementAnd,
- FcElementEq,
- FcElementNotEq,
- FcElementLess,
- FcElementLessEq,
- FcElementMore,
- FcElementMoreEq,
- FcElementContains,
- FcElementNotContains,
- FcElementPlus,
- FcElementMinus,
- FcElementTimes,
- FcElementDivide,
- FcElementNot,
- FcElementIf,
- FcElementFloor,
- FcElementCeil,
- FcElementRound,
- FcElementTrunc,
- FcElementUnknown
-} FcElement;
-
-static const struct {
- const char name[16];
- FcElement element;
-} fcElementMap[] = {
- { "fontconfig", FcElementFontconfig },
- { "dir", FcElementDir },
- { "cachedir", FcElementCacheDir },
- { "cache", FcElementCache },
- { "include", FcElementInclude },
- { "config", FcElementConfig },
- { "match", FcElementMatch },
- { "alias", FcElementAlias },
-
- { "blank", FcElementBlank },
- { "rescan", FcElementRescan },
-
- { "prefer", FcElementPrefer },
- { "accept", FcElementAccept },
- { "default", FcElementDefault },
- { "family", FcElementFamily },
-
- { "selectfont", FcElementSelectfont },
- { "acceptfont", FcElementAcceptfont },
- { "rejectfont", FcElementRejectfont },
- { "glob", FcElementGlob },
- { "pattern", FcElementPattern },
- { "patelt", FcElementPatelt },
-
- { "test", FcElementTest },
- { "edit", FcElementEdit },
- { "int", FcElementInt },
- { "double", FcElementDouble },
- { "string", FcElementString },
- { "matrix", FcElementMatrix },
- { "bool", FcElementBool },
- { "charset", FcElementCharset },
- { "name", FcElementName },
- { "const", FcElementConst },
- { "or", FcElementOr },
- { "and", FcElementAnd },
- { "eq", FcElementEq },
- { "not_eq", FcElementNotEq },
- { "less", FcElementLess },
- { "less_eq", FcElementLessEq },
- { "more", FcElementMore },
- { "more_eq", FcElementMoreEq },
- { "contains", FcElementContains },
- { "not_contains", FcElementNotContains },
- { "plus", FcElementPlus },
- { "minus", FcElementMinus },
- { "times", FcElementTimes },
- { "divide", FcElementDivide },
- { "not", FcElementNot },
- { "if", FcElementIf },
- { "floor", FcElementFloor },
- { "ceil", FcElementCeil },
- { "round", FcElementRound },
- { "trunc", FcElementTrunc },
-};
-#define NUM_ELEMENT_MAPS (int) (sizeof fcElementMap / sizeof fcElementMap[0])
-
-static FcElement
-FcElementMap (const XML_Char *name)
-{
-
- int i;
- for (i = 0; i < NUM_ELEMENT_MAPS; i++)
- if (!strcmp ((char *) name, fcElementMap[i].name))
- return fcElementMap[i].element;
- return FcElementUnknown;
-}
-
-typedef struct _FcPStack {
- struct _FcPStack *prev;
- FcElement element;
- FcChar8 **attr;
- FcStrBuf str;
- FcChar8 *attr_buf_static[16];
-} FcPStack;
-
-typedef enum _FcVStackTag {
- FcVStackNone,
-
- FcVStackString,
- FcVStackFamily,
- FcVStackField,
- FcVStackConstant,
- FcVStackGlob,
- FcVStackPattern,
-
- FcVStackPrefer,
- FcVStackAccept,
- FcVStackDefault,
-
- FcVStackInteger,
- FcVStackDouble,
- FcVStackMatrix,
- FcVStackBool,
-
- FcVStackTest,
- FcVStackExpr,
- FcVStackEdit
-} FcVStackTag;
-
-typedef struct _FcVStack {
- struct _FcVStack *prev;
- FcPStack *pstack; /* related parse element */
- FcVStackTag tag;
- union {
- FcChar8 *string;
-
- int integer;
- double _double;
- FcMatrix *matrix;
- FcBool bool_;
-
- FcTest *test;
- FcQual qual;
- FcOp op;
- FcExpr *expr;
- FcEdit *edit;
-
- FcPattern *pattern;
- } u;
-} FcVStack;
-
-typedef struct _FcConfigParse {
- FcPStack *pstack;
- FcVStack *vstack;
- FcBool error;
- const FcChar8 *name;
- FcConfig *config;
- XML_Parser parser;
- int pstack_static_used;
- FcPStack pstack_static[8];
- int vstack_static_used;
- FcVStack vstack_static[64];
-} FcConfigParse;
-
-typedef enum _FcConfigSeverity {
- FcSevereInfo, FcSevereWarning, FcSevereError
-} FcConfigSeverity;
-
-static void
-FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, ...)
-{
- const char *s = "unknown";
- va_list args;
-
- va_start (args, fmt);
-
- switch (severe) {
- case FcSevereInfo: s = "info"; break;
- case FcSevereWarning: s = "warning"; break;
- case FcSevereError: s = "error"; break;
- }
- if (parse)
- {
- if (parse->name)
- fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s,
- parse->name, (int)XML_GetCurrentLineNumber (parse->parser));
- else
- fprintf (stderr, "Fontconfig %s: line %d: ", s,
- (int)XML_GetCurrentLineNumber (parse->parser));
- if (severe >= FcSevereError)
- parse->error = FcTrue;
- }
- else
- fprintf (stderr, "Fontconfig %s: ", s);
- vfprintf (stderr, fmt, args);
- fprintf (stderr, "\n");
- va_end (args);
-}
-
-
-static const char *
-FcTypeName (FcType type)
-{
- switch (type) {
- case FcTypeVoid:
- return "void";
- case FcTypeInteger:
- case FcTypeDouble:
- return "number";
- case FcTypeString:
- return "string";
- case FcTypeBool:
- return "bool";
- case FcTypeMatrix:
- return "matrix";
- case FcTypeCharSet:
- return "charset";
- case FcTypeFTFace:
- return "FT_Face";
- case FcTypeLangSet:
- return "langset";
- default:
- return "unknown";
- }
-}
-
-static void
-FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type)
-{
- if (value == FcTypeInteger)
- value = FcTypeDouble;
- if (type == FcTypeInteger)
- type = FcTypeDouble;
- if (value != type)
- {
- if ((value == FcTypeLangSet && type == FcTypeString) ||
- (value == FcTypeString && type == FcTypeLangSet))
- return;
- if (type == (FcType) -1)
- return;
- FcConfigMessage (parse, FcSevereWarning, "saw %s, expected %s",
- FcTypeName (value), FcTypeName (type));
- }
-}
-
-static void
-FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type)
-{
- const FcObjectType *o;
- const FcConstant *c;
-
- /* If parsing the expression failed, some nodes may be NULL */
- if (!expr)
- return;
-
- switch (expr->op) {
- case FcOpInteger:
- case FcOpDouble:
- FcTypecheckValue (parse, FcTypeDouble, type);
- break;
- case FcOpString:
- FcTypecheckValue (parse, FcTypeString, type);
- break;
- case FcOpMatrix:
- FcTypecheckValue (parse, FcTypeMatrix, type);
- break;
- case FcOpBool:
- FcTypecheckValue (parse, FcTypeBool, type);
- break;
- case FcOpCharSet:
- FcTypecheckValue (parse, FcTypeCharSet, type);
- break;
- case FcOpNil:
- break;
- case FcOpField:
- o = FcNameGetObjectType (FcObjectName (expr->u.object));
- if (o)
- FcTypecheckValue (parse, o->type, type);
- break;
- case FcOpConst:
- c = FcNameGetConstant (expr->u.constant);
- if (c)
- {
- o = FcNameGetObjectType (c->object);
- if (o)
- FcTypecheckValue (parse, o->type, type);
- }
- else
- FcConfigMessage (parse, FcSevereWarning,
- "invalid constant used : %s",
- expr->u.constant);
- break;
- case FcOpQuest:
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
- FcTypecheckExpr (parse, expr->u.tree.right->u.tree.left, type);
- FcTypecheckExpr (parse, expr->u.tree.right->u.tree.right, type);
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- break;
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpNotContains:
- case FcOpListing:
- FcTypecheckValue (parse, FcTypeBool, type);
- break;
- case FcOpComma:
- case FcOpOr:
- case FcOpAnd:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- FcTypecheckExpr (parse, expr->u.tree.left, type);
- FcTypecheckExpr (parse, expr->u.tree.right, type);
- break;
- case FcOpNot:
- FcTypecheckValue (parse, FcTypeBool, type);
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
- break;
- case FcOpFloor:
- case FcOpCeil:
- case FcOpRound:
- case FcOpTrunc:
- FcTypecheckValue (parse, FcTypeDouble, type);
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeDouble);
- break;
- default:
- break;
- }
-}
-
-static FcTest *
-FcTestCreate (FcConfigParse *parse,
- FcMatchKind kind,
- FcQual qual,
- const FcChar8 *field,
- FcOp compare,
- FcExpr *expr)
-{
- FcTest *test = (FcTest *) malloc (sizeof (FcTest));
-
- if (test)
- {
- const FcObjectType *o;
-
- FcMemAlloc (FC_MEM_TEST, sizeof (FcTest));
- test->next = 0;
- test->kind = kind;
- test->qual = qual;
- test->object = FcObjectFromName ((const char *) field);
- test->op = compare;
- test->expr = expr;
- o = FcNameGetObjectType (FcObjectName (test->object));
- if (o)
- FcTypecheckExpr (parse, expr, o->type);
- }
- return test;
-}
-
-static FcEdit *
-FcEditCreate (FcConfigParse *parse,
- FcObject object,
- FcOp op,
- FcExpr *expr,
- FcValueBinding binding)
-{
- FcEdit *e = (FcEdit *) malloc (sizeof (FcEdit));
-
- if (e)
- {
- const FcObjectType *o;
-
- e->next = 0;
- e->object = object;
- e->op = op;
- e->expr = expr;
- e->binding = binding;
- o = FcNameGetObjectType (FcObjectName (e->object));
- if (o)
- FcTypecheckExpr (parse, expr, o->type);
- }
- return e;
-}
-
-static FcVStack *
-FcVStackCreateAndPush (FcConfigParse *parse)
-{
- FcVStack *new;
-
- if (parse->vstack_static_used < sizeof (parse->vstack_static) / sizeof (parse->vstack_static[0]))
- new = &parse->vstack_static[parse->vstack_static_used++];
- else
- {
- new = malloc (sizeof (FcVStack));
- if (!new)
- return 0;
- FcMemAlloc (FC_MEM_VSTACK, sizeof (FcVStack));
- }
- new->tag = FcVStackNone;
- new->prev = 0;
-
- new->prev = parse->vstack;
- new->pstack = parse->pstack ? parse->pstack->prev : 0;
- parse->vstack = new;
-
- return new;
-}
-
-static FcBool
-FcVStackPushString (FcConfigParse *parse, FcVStackTag tag, FcChar8 *string)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.string = string;
- vstack->tag = tag;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushInteger (FcConfigParse *parse, int integer)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.integer = integer;
- vstack->tag = FcVStackInteger;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushDouble (FcConfigParse *parse, double _double)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u._double = _double;
- vstack->tag = FcVStackDouble;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushMatrix (FcConfigParse *parse, FcMatrix *matrix)
-{
- FcVStack *vstack;
- matrix = FcMatrixCopy (matrix);
- if (!matrix)
- return FcFalse;
- vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.matrix = matrix;
- vstack->tag = FcVStackMatrix;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushBool (FcConfigParse *parse, FcBool bool_)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.bool_ = bool_;
- vstack->tag = FcVStackBool;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushTest (FcConfigParse *parse, FcTest *test)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.test = test;
- vstack->tag = FcVStackTest;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushExpr (FcConfigParse *parse, FcVStackTag tag, FcExpr *expr)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.expr = expr;
- vstack->tag = tag;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushEdit (FcConfigParse *parse, FcEdit *edit)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.edit = edit;
- vstack->tag = FcVStackEdit;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushPattern (FcConfigParse *parse, FcPattern *pattern)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.pattern = pattern;
- vstack->tag = FcVStackPattern;
- return FcTrue;
-}
-
-static FcVStack *
-FcVStackFetch (FcConfigParse *parse, int off)
-{
- FcVStack *vstack;
-
- for (vstack = parse->vstack; vstack && off-- > 0; vstack = vstack->prev);
- return vstack;
-}
-
-static FcVStack *
-FcVStackPeek (FcConfigParse *parse)
-{
- FcVStack *vstack = parse->vstack;
-
- return vstack && vstack->pstack == parse->pstack ? vstack : 0;
-}
-
-static void
-FcVStackPopAndDestroy (FcConfigParse *parse)
-{
- FcVStack *vstack = parse->vstack;
-
- if (!vstack || vstack->pstack != parse->pstack)
- return;
-
- parse->vstack = vstack->prev;
-
- switch (vstack->tag) {
- case FcVStackNone:
- break;
- case FcVStackFamily:
- break;
- case FcVStackString:
- case FcVStackField:
- case FcVStackConstant:
- case FcVStackGlob:
- FcStrFree (vstack->u.string);
- break;
- case FcVStackPattern:
- FcPatternDestroy (vstack->u.pattern);
- break;
- case FcVStackInteger:
- case FcVStackDouble:
- break;
- case FcVStackMatrix:
- FcMatrixFree (vstack->u.matrix);
- break;
- case FcVStackBool:
- break;
- case FcVStackTest:
- FcTestDestroy (vstack->u.test);
- break;
- case FcVStackExpr:
- case FcVStackPrefer:
- case FcVStackAccept:
- case FcVStackDefault:
- FcExprDestroy (vstack->u.expr);
- break;
- case FcVStackEdit:
- FcEditDestroy (vstack->u.edit);
- break;
- }
-
- if (vstack == &parse->vstack_static[parse->vstack_static_used - 1])
- parse->vstack_static_used--;
- else
- {
- FcMemFree (FC_MEM_VSTACK, sizeof (FcVStack));
- free (vstack);
- }
-}
-
-static void
-FcVStackClear (FcConfigParse *parse)
-{
- while (FcVStackPeek (parse))
- FcVStackPopAndDestroy (parse);
-}
-
-static int
-FcVStackElements (FcConfigParse *parse)
-{
- int h = 0;
- FcVStack *vstack = parse->vstack;
- while (vstack && vstack->pstack == parse->pstack)
- {
- h++;
- vstack = vstack->prev;
- }
- return h;
-}
-
-static FcChar8 **
-FcConfigSaveAttr (const XML_Char **attr, FcChar8 **buf, int size_bytes)
-{
- int slen;
- int i;
- FcChar8 **new;
- FcChar8 *s;
-
- if (!attr)
- return 0;
- slen = 0;
- for (i = 0; attr[i]; i++)
- slen += strlen ((char *) attr[i]) + 1;
- if (i == 0)
- return 0;
- slen += (i + 1) * sizeof (FcChar8 *);
- if (slen <= size_bytes)
- new = buf;
- else
- {
- new = malloc (slen);
- if (!new)
- {
- FcConfigMessage (0, FcSevereError, "out of memory");
- return 0;
- }
- FcMemAlloc (FC_MEM_ATTR, 1); /* size is too expensive */
- }
- s = (FcChar8 *) (new + (i + 1));
- for (i = 0; attr[i]; i++)
- {
- new[i] = s;
- strcpy ((char *) s, (char *) attr[i]);
- s += strlen ((char *) s) + 1;
- }
- new[i] = 0;
- return new;
-}
-
-static FcBool
-FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr)
-{
- FcPStack *new;
-
- if (parse->pstack_static_used < sizeof (parse->pstack_static) / sizeof (parse->pstack_static[0]))
- new = &parse->pstack_static[parse->pstack_static_used++];
- else
- {
- new = malloc (sizeof (FcPStack));
- if (!new)
- return FcFalse;
- FcMemAlloc (FC_MEM_PSTACK, sizeof (FcPStack));
- }
-
- new->prev = parse->pstack;
- new->element = element;
- new->attr = FcConfigSaveAttr (attr, new->attr_buf_static, sizeof (new->attr_buf_static));
- FcStrBufInit (&new->str, 0, 0);
- parse->pstack = new;
- return FcTrue;
-}
-
-static FcBool
-FcPStackPop (FcConfigParse *parse)
-{
- FcPStack *old;
-
- if (!parse->pstack)
- {
- FcConfigMessage (parse, FcSevereError, "mismatching element");
- return FcFalse;
- }
- FcVStackClear (parse);
- old = parse->pstack;
- parse->pstack = old->prev;
- FcStrBufDestroy (&old->str);
- if (old->attr && old->attr != old->attr_buf_static)
- {
- FcMemFree (FC_MEM_ATTR, 1); /* size is to expensive */
- free (old->attr);
- }
-
- if (old == &parse->pstack_static[parse->pstack_static_used - 1])
- parse->pstack_static_used--;
- else
- {
- FcMemFree (FC_MEM_PSTACK, sizeof (FcPStack));
- free (old);
- }
- return FcTrue;
-}
-
-static FcBool
-FcConfigInit (FcConfigParse *parse, const FcChar8 *name, FcConfig *config, XML_Parser parser)
-{
- parse->pstack = 0;
- parse->pstack_static_used = 0;
- parse->vstack = 0;
- parse->vstack_static_used = 0;
- parse->error = FcFalse;
- parse->name = name;
- parse->config = config;
- parse->parser = parser;
- return FcTrue;
-}
-
-static void
-FcConfigCleanup (FcConfigParse *parse)
-{
- while (parse->pstack)
- FcPStackPop (parse);
-}
-
-static const FcChar8 *
-FcConfigGetAttribute (FcConfigParse *parse, const char *attr)
-{
- FcChar8 **attrs;
- if (!parse->pstack)
- return 0;
-
- attrs = parse->pstack->attr;
- if (!attrs)
- return 0;
-
- while (*attrs)
- {
- if (!strcmp ((char *) *attrs, attr))
- return attrs[1];
- attrs += 2;
- }
- return 0;
-}
-
-static void
-FcStartElement(void *userData, const XML_Char *name, const XML_Char **attr)
-{
- FcConfigParse *parse = userData;
- FcElement element;
-
- element = FcElementMap (name);
- if (element == FcElementUnknown)
- FcConfigMessage (parse, FcSevereWarning, "unknown element \"%s\"", name);
-
- if (!FcPStackPush (parse, element, attr))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- return;
-}
-
-static void
-FcParseBlank (FcConfigParse *parse)
-{
- int n = FcVStackElements (parse);
- while (n-- > 0)
- {
- FcVStack *v = FcVStackFetch (parse, n);
- if (v->tag != FcVStackInteger)
- FcConfigMessage (parse, FcSevereError, "non-integer blank");
- else
- {
- if (!parse->config->blanks)
- {
- parse->config->blanks = FcBlanksCreate ();
- if (!parse->config->blanks)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- }
- if (!FcBlanksAdd (parse->config->blanks, v->u.integer))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- }
- }
-}
-
-static void
-FcParseRescan (FcConfigParse *parse)
-{
- int n = FcVStackElements (parse);
- while (n-- > 0)
- {
- FcVStack *v = FcVStackFetch (parse, n);
- if (v->tag != FcVStackInteger)
- FcConfigMessage (parse, FcSevereWarning, "non-integer rescan");
- else
- parse->config->rescanInterval = v->u.integer;
- }
-}
-
-static void
-FcParseInt (FcConfigParse *parse)
-{
- FcChar8 *s, *end;
- int l;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- end = 0;
- l = (int) strtol ((char *) s, (char **)&end, 0);
- if (end != s + strlen ((char *) s))
- FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid integer", s);
- else
- FcVStackPushInteger (parse, l);
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-/*
- * idea copied from glib g_ascii_strtod with
- * permission of the author (Alexander Larsson)
- */
-
-#include <locale.h>
-
-static double
-FcStrtod (char *s, char **end)
-{
- struct lconv *locale_data;
- char *dot;
- double v;
-
- /*
- * Have to swap the decimal point to match the current locale
- * if that locale doesn't use 0x2e
- */
- if ((dot = strchr (s, 0x2e)) &&
- (locale_data = localeconv ()) &&
- (locale_data->decimal_point[0] != 0x2e ||
- locale_data->decimal_point[1] != 0))
- {
- char buf[128];
- int slen = strlen (s);
- int dlen = strlen (locale_data->decimal_point);
-
- if (slen + dlen > (int) sizeof (buf))
- {
- if (end)
- *end = s;
- v = 0;
- }
- else
- {
- char *buf_end;
- /* mantissa */
- strncpy (buf, s, dot - s);
- /* decimal point */
- strcpy (buf + (dot - s), locale_data->decimal_point);
- /* rest of number */
- strcpy (buf + (dot - s) + dlen, dot + 1);
- buf_end = 0;
- v = strtod (buf, &buf_end);
- if (buf_end) {
- buf_end = s + (buf_end - buf);
- if (buf_end > dot)
- buf_end -= dlen - 1;
- }
- if (end)
- *end = buf_end;
- }
- }
- else
- v = strtod (s, end);
- return v;
-}
-
-static void
-FcParseDouble (FcConfigParse *parse)
-{
- FcChar8 *s, *end;
- double d;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- end = 0;
- d = FcStrtod ((char *) s, (char **)&end);
- if (end != s + strlen ((char *) s))
- FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid double", s);
- else
- FcVStackPushDouble (parse, d);
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-static void
-FcParseString (FcConfigParse *parse, FcVStackTag tag)
-{
- FcChar8 *s;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDone (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- if (!FcVStackPushString (parse, tag, s))
- FcStrFree (s);
-}
-
-static void
-FcParseMatrix (FcConfigParse *parse)
-{
- FcVStack *vstack;
- enum { m_done, m_xx, m_xy, m_yx, m_yy } matrix_state = m_yy;
- FcMatrix m;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- double v;
- switch (vstack->tag) {
- case FcVStackInteger:
- v = vstack->u.integer;
- break;
- case FcVStackDouble:
- v = vstack->u._double;
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "non-double matrix element");
- v = 1.0;
- break;
- }
- switch (matrix_state) {
- case m_xx: m.xx = v; break;
- case m_xy: m.xy = v; break;
- case m_yx: m.yx = v; break;
- case m_yy: m.yy = v; break;
- default: break;
- }
- FcVStackPopAndDestroy (parse);
- matrix_state--;
- }
- if (matrix_state != m_done)
- FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements");
- else
- FcVStackPushMatrix (parse, &m);
-}
-
-static FcBool
-FcConfigLexBool (FcConfigParse *parse, const FcChar8 *bool_)
-{
- FcBool result = FcFalse;
-
- if (!FcNameBool (bool_, &result))
- FcConfigMessage (parse, FcSevereWarning, "\"%s\" is not known boolean",
- bool_);
- return result;
-}
-
-static void
-FcParseBool (FcConfigParse *parse)
-{
- FcChar8 *s;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- FcVStackPushBool (parse, FcConfigLexBool (parse, s));
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-static FcBool
-FcConfigLexBinding (FcConfigParse *parse,
- const FcChar8 *binding_string,
- FcValueBinding *binding_ret)
-{
- FcValueBinding binding;
-
- if (!binding_string)
- binding = FcValueBindingWeak;
- else
- {
- if (!strcmp ((char *) binding_string, "weak"))
- binding = FcValueBindingWeak;
- else if (!strcmp ((char *) binding_string, "strong"))
- binding = FcValueBindingStrong;
- else if (!strcmp ((char *) binding_string, "same"))
- binding = FcValueBindingSame;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string);
- return FcFalse;
- }
- }
- *binding_ret = binding;
- return FcTrue;
-}
-
-static void
-FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
-{
- FcVStack *vstack;
- FcExpr *left, *expr = 0, *new;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- if (vstack->tag != FcVStackFamily)
- {
- FcConfigMessage (parse, FcSevereWarning, "non-family");
- FcVStackPopAndDestroy (parse);
- continue;
- }
- left = vstack->u.expr;
- vstack->tag = FcVStackNone;
- FcVStackPopAndDestroy (parse);
- if (expr)
- {
- new = FcExprCreateOp (parse->config, left, FcOpComma, expr);
- if (!new)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (left);
- FcExprDestroy (expr);
- break;
- }
- expr = new;
- }
- else
- expr = left;
- }
- if (expr)
- {
- if (!FcVStackPushExpr (parse, tag, expr))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (expr);
- }
- }
-}
-
-static void
-FcParseFamily (FcConfigParse *parse)
-{
- FcChar8 *s;
- FcExpr *expr;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- expr = FcExprCreateString (parse->config, s);
- FcStrBufDestroy (&parse->pstack->str);
- if (expr)
- FcVStackPushExpr (parse, FcVStackFamily, expr);
-}
-
-static void
-FcParseAlias (FcConfigParse *parse)
-{
- FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *new = 0;
- FcEdit *edit = 0, *next;
- FcVStack *vstack;
- FcTest *test;
- FcValueBinding binding;
-
- if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
- return;
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackFamily:
- if (family)
- {
- new = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family);
- if (!new)
- FcConfigMessage (parse, FcSevereError, "out of memory");
- else
- family = new;
- }
- else
- new = vstack->u.expr;
- if (new)
- {
- family = new;
- vstack->tag = FcVStackNone;
- }
- break;
- case FcVStackPrefer:
- if (prefer)
- FcExprDestroy (prefer);
- prefer = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackAccept:
- if (accept)
- FcExprDestroy (accept);
- accept = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackDefault:
- if (def)
- FcExprDestroy (def);
- def = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "bad alias");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (!family)
- {
- FcConfigMessage (parse, FcSevereError, "missing family in alias");
- if (prefer)
- FcExprDestroy (prefer);
- if (accept)
- FcExprDestroy (accept);
- if (def)
- FcExprDestroy (def);
- return;
- }
- if (prefer)
- {
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpPrepend,
- prefer,
- binding);
- if (edit)
- edit->next = 0;
- else
- FcExprDestroy (prefer);
- }
- if (accept)
- {
- next = edit;
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpAppend,
- accept,
- binding);
- if (edit)
- edit->next = next;
- else
- FcExprDestroy (accept);
- }
- if (def)
- {
- next = edit;
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpAppendLast,
- def,
- binding);
- if (edit)
- edit->next = next;
- else
- FcExprDestroy (def);
- }
- if (edit)
- {
- test = FcTestCreate (parse, FcMatchPattern,
- FcQualAny,
- (FcChar8 *) FC_FAMILY,
- FcOpEqual,
- family);
- if (test)
- if (!FcConfigAddEdit (parse->config, test, edit, FcMatchPattern))
- FcTestDestroy (test);
- }
- else
- FcExprDestroy (family);
-}
-
-static FcExpr *
-FcPopExpr (FcConfigParse *parse)
-{
- FcVStack *vstack = FcVStackPeek (parse);
- FcExpr *expr = 0;
- if (!vstack)
- return 0;
- switch (vstack->tag) {
- case FcVStackNone:
- break;
- case FcVStackString:
- case FcVStackFamily:
- expr = FcExprCreateString (parse->config, vstack->u.string);
- break;
- case FcVStackField:
- expr = FcExprCreateField (parse->config, (char *) vstack->u.string);
- break;
- case FcVStackConstant:
- expr = FcExprCreateConst (parse->config, vstack->u.string);
- break;
- case FcVStackGlob:
- /* XXX: What's the correct action here? (CDW) */
- break;
- case FcVStackPrefer:
- case FcVStackAccept:
- case FcVStackDefault:
- expr = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackInteger:
- expr = FcExprCreateInteger (parse->config, vstack->u.integer);
- break;
- case FcVStackDouble:
- expr = FcExprCreateDouble (parse->config, vstack->u._double);
- break;
- case FcVStackMatrix:
- expr = FcExprCreateMatrix (parse->config, vstack->u.matrix);
- break;
- case FcVStackBool:
- expr = FcExprCreateBool (parse->config, vstack->u.bool_);
- break;
- case FcVStackTest:
- break;
- case FcVStackExpr:
- expr = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackEdit:
- break;
- default:
- break;
- }
- FcVStackPopAndDestroy (parse);
- return expr;
-}
-
-/*
- * This builds a tree of binary operations. Note
- * that every operator is defined so that if only
- * a single operand is contained, the value of the
- * whole expression is the value of the operand.
- *
- * This code reduces in that case to returning that
- * operand.
- */
-static FcExpr *
-FcPopBinary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *left, *expr = 0, *new;
-
- while ((left = FcPopExpr (parse)))
- {
- if (expr)
- {
- new = FcExprCreateOp (parse->config, left, op, expr);
- if (!new)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (left);
- FcExprDestroy (expr);
- return 0;
- }
- expr = new;
- }
- else
- expr = left;
- }
- return expr;
-}
-
-static void
-FcParseBinary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *expr = FcPopBinary (parse, op);
- if (expr)
- FcVStackPushExpr (parse, FcVStackExpr, expr);
-}
-
-/*
- * This builds a a unary operator, it consumes only
- * a single operand
- */
-
-static FcExpr *
-FcPopUnary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *operand, *new = 0;
-
- if ((operand = FcPopExpr (parse)))
- {
- new = FcExprCreateOp (parse->config, operand, op, 0);
- if (!new)
- {
- FcExprDestroy (operand);
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- }
- return new;
-}
-
-static void
-FcParseUnary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *expr = FcPopUnary (parse, op);
- if (expr)
- FcVStackPushExpr (parse, FcVStackExpr, expr);
-}
-
-static void
-FcParseInclude (FcConfigParse *parse)
-{
- FcChar8 *s;
- const FcChar8 *i;
- FcBool ignore_missing = FcFalse;
-
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- i = FcConfigGetAttribute (parse, "ignore_missing");
- if (i && FcConfigLexBool (parse, (FcChar8 *) i) == FcTrue)
- ignore_missing = FcTrue;
- if (!FcConfigParseAndLoad (parse->config, s, !ignore_missing))
- parse->error = FcTrue;
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-typedef struct _FcOpMap {
- char name[16];
- FcOp op;
-} FcOpMap;
-
-static FcOp
-FcConfigLexOp (const FcChar8 *op, const FcOpMap *map, int nmap)
-{
- int i;
-
- for (i = 0; i < nmap; i++)
- if (!strcmp ((char *) op, map[i].name))
- return map[i].op;
- return FcOpInvalid;
-}
-
-static const FcOpMap fcCompareOps[] = {
- { "eq", FcOpEqual },
- { "not_eq", FcOpNotEqual },
- { "less", FcOpLess },
- { "less_eq", FcOpLessEqual },
- { "more", FcOpMore },
- { "more_eq", FcOpMoreEqual },
- { "contains", FcOpContains },
- { "not_contains", FcOpNotContains }
-};
-
-#define NUM_COMPARE_OPS (int) (sizeof fcCompareOps / sizeof fcCompareOps[0])
-
-static FcOp
-FcConfigLexCompare (const FcChar8 *compare)
-{
- return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
-}
-
-static void
-FcParseTest (FcConfigParse *parse)
-{
- const FcChar8 *kind_string;
- FcMatchKind kind;
- const FcChar8 *qual_string;
- FcQual qual;
- const FcChar8 *name;
- const FcChar8 *compare_string;
- FcOp compare;
- FcExpr *expr;
- FcTest *test;
-
- kind_string = FcConfigGetAttribute (parse, "target");
- if (!kind_string)
- kind = FcMatchDefault;
- else
- {
- if (!strcmp ((char *) kind_string, "pattern"))
- kind = FcMatchPattern;
- else if (!strcmp ((char *) kind_string, "font"))
- kind = FcMatchFont;
- else if (!strcmp ((char *) kind_string, "scan"))
- kind = FcMatchScan;
- else if (!strcmp ((char *) kind_string, "default"))
- kind = FcMatchDefault;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test target \"%s\"", kind_string);
- return;
- }
- }
- qual_string = FcConfigGetAttribute (parse, "qual");
- if (!qual_string)
- qual = FcQualAny;
- else
- {
- if (!strcmp ((char *) qual_string, "any"))
- qual = FcQualAny;
- else if (!strcmp ((char *) qual_string, "all"))
- qual = FcQualAll;
- else if (!strcmp ((char *) qual_string, "first"))
- qual = FcQualFirst;
- else if (!strcmp ((char *) qual_string, "not_first"))
- qual = FcQualNotFirst;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string);
- return;
- }
- }
- name = FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing test name");
- return;
- }
- compare_string = FcConfigGetAttribute (parse, "compare");
- if (!compare_string)
- compare = FcOpEqual;
- else
- {
- compare = FcConfigLexCompare (compare_string);
- if (compare == FcOpInvalid)
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test compare \"%s\"", compare_string);
- return;
- }
- }
- expr = FcPopBinary (parse, FcOpComma);
- if (!expr)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing test expression");
- return;
- }
- test = FcTestCreate (parse, kind, qual, name, compare, expr);
- if (!test)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- FcVStackPushTest (parse, test);
-}
-
-static const FcOpMap fcModeOps[] = {
- { "assign", FcOpAssign },
- { "assign_replace", FcOpAssignReplace },
- { "prepend", FcOpPrepend },
- { "prepend_first", FcOpPrependFirst },
- { "append", FcOpAppend },
- { "append_last", FcOpAppendLast },
-};
-
-#define NUM_MODE_OPS (int) (sizeof fcModeOps / sizeof fcModeOps[0])
-
-static FcOp
-FcConfigLexMode (const FcChar8 *mode)
-{
- return FcConfigLexOp (mode, fcModeOps, NUM_MODE_OPS);
-}
-
-static void
-FcParseEdit (FcConfigParse *parse)
-{
- const FcChar8 *name;
- const FcChar8 *mode_string;
- FcOp mode;
- FcValueBinding binding;
- FcExpr *expr;
- FcEdit *edit;
-
- name = FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing edit name");
- return;
- }
- mode_string = FcConfigGetAttribute (parse, "mode");
- if (!mode_string)
- mode = FcOpAssign;
- else
- {
- mode = FcConfigLexMode (mode_string);
- if (mode == FcOpInvalid)
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid edit mode \"%s\"", mode_string);
- return;
- }
- }
- if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
- return;
-
- expr = FcPopBinary (parse, FcOpComma);
- edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
- mode, expr, binding);
- if (!edit)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (expr);
- return;
- }
- if (!FcVStackPushEdit (parse, edit))
- FcEditDestroy (edit);
-}
-
-static void
-FcParseMatch (FcConfigParse *parse)
-{
- const FcChar8 *kind_name;
- FcMatchKind kind;
- FcTest *test = 0;
- FcEdit *edit = 0;
- FcVStack *vstack;
-
- kind_name = FcConfigGetAttribute (parse, "target");
- if (!kind_name)
- kind = FcMatchPattern;
- else
- {
- if (!strcmp ((char *) kind_name, "pattern"))
- kind = FcMatchPattern;
- else if (!strcmp ((char *) kind_name, "font"))
- kind = FcMatchFont;
- else if (!strcmp ((char *) kind_name, "scan"))
- kind = FcMatchScan;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid match target \"%s\"", kind_name);
- return;
- }
- }
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackTest:
- vstack->u.test->next = test;
- test = vstack->u.test;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackEdit:
- vstack->u.edit->next = edit;
- edit = vstack->u.edit;
- vstack->tag = FcVStackNone;
- if (kind == FcMatchScan && edit->object > FC_MAX_BASE_OBJECT)
- {
- FcConfigMessage (parse, FcSevereError,
- "<match target=\"scan\"> cannot edit user-defined object \"%s\"",
- FcObjectName(edit->object));
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "invalid match element");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (!FcConfigAddEdit (parse->config, test, edit, kind))
- FcConfigMessage (parse, FcSevereError, "out of memory");
-}
-
-static void
-FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element)
-{
- FcVStack *vstack;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackGlob:
- if (!FcConfigGlobAdd (parse->config,
- vstack->u.string,
- element == FcElementAcceptfont))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- break;
- case FcVStackPattern:
- if (!FcConfigPatternsAdd (parse->config,
- vstack->u.pattern,
- element == FcElementAcceptfont))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- else
- vstack->tag = FcVStackNone;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "bad font selector");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
-}
-
-
-static FcValue
-FcPopValue (FcConfigParse *parse)
-{
- FcVStack *vstack = FcVStackPeek (parse);
- FcValue value;
-
- value.type = FcTypeVoid;
-
- if (!vstack)
- return value;
-
- switch (vstack->tag) {
- case FcVStackString:
- value.u.s = FcStrStaticName (vstack->u.string);
- if (value.u.s)
- value.type = FcTypeString;
- break;
- case FcVStackConstant:
- if (FcNameConstant (vstack->u.string, &value.u.i))
- value.type = FcTypeInteger;
- break;
- case FcVStackInteger:
- value.u.i = vstack->u.integer;
- value.type = FcTypeInteger;
- break;
- case FcVStackDouble:
- value.u.d = vstack->u._double;
- value.type = FcTypeInteger;
- break;
- case FcVStackMatrix:
- value.u.m = FcMatrixCopy (vstack->u.matrix);
- if (value.u.m)
- value.type = FcTypeMatrix;
- break;
- case FcVStackBool:
- value.u.b = vstack->u.bool_;
- value.type = FcTypeBool;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d",
- vstack->tag);
- break;
- }
- FcVStackPopAndDestroy (parse);
-
- return value;
-}
-
-static void
-FcParsePatelt (FcConfigParse *parse)
-{
- FcValue value;
- FcPattern *pattern = FcPatternCreate ();
- const char *name;
-
- if (!pattern)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
-
- name = (char *) FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing pattern element name");
- FcPatternDestroy (pattern);
- return;
- }
-
- for (;;)
- {
- value = FcPopValue (parse);
- if (value.type == FcTypeVoid)
- break;
- if (!FcPatternAdd (pattern, name, value, FcTrue))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcValueDestroy(value);
- break;
- }
- FcValueDestroy(value);
- }
-
- FcVStackPushPattern (parse, pattern);
-}
-
-static void
-FcParsePattern (FcConfigParse *parse)
-{
- FcVStack *vstack;
- FcPattern *pattern = FcPatternCreate ();
-
- if (!pattern)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackPattern:
- if (!FcPatternAppend (pattern, vstack->u.pattern))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcPatternDestroy (pattern);
- return;
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "unknown pattern element");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
-
- FcVStackPushPattern (parse, pattern);
-}
-
-static void
-FcEndElement(void *userData, const XML_Char *name)
-{
- FcConfigParse *parse = userData;
- FcChar8 *data;
-#ifdef _WIN32
- FcChar8 buffer[1000];
-#endif
-
- if (!parse->pstack)
- return;
- switch (parse->pstack->element) {
- case FcElementNone:
- break;
- case FcElementFontconfig:
- break;
- case FcElementDir:
- data = FcStrBufDoneStatic (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
-#ifdef _WIN32
- if (strcmp (data, "CUSTOMFONTDIR") == 0)
- {
- char *p;
- data = buffer;
- if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
- {
- FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
- break;
- }
- /*
- * Must use the multi-byte aware function to search
- * for backslash because East Asian double-byte code
- * pages have characters with backslash as the second
- * byte.
- */
- p = _mbsrchr (data, '\\');
- if (p) *p = '\0';
- strcat (data, "\\fonts");
- }
- else if (strcmp (data, "APPSHAREFONTDIR") == 0)
- {
- char *p;
- data = buffer;
- if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
- {
- FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
- break;
- }
- p = _mbsrchr (data, '\\');
- if (p) *p = '\0';
- strcat (data, "\\..\\share\\fonts");
- }
- else if (strcmp (data, "WINDOWSFONTDIR") == 0)
- {
- int rc;
- data = buffer;
-#if _WIN32_WINNT >= 0x0500
- rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20);
-#else
- rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20);
-#endif
- if (rc == 0 || rc > sizeof (buffer) - 20)
- {
- FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed");
- break;
- }
- if (data [strlen (data) - 1] != '\\')
- strcat (data, "\\");
- strcat (data, "fonts");
- }
-#endif
- if (strlen ((char *) data) == 0)
- FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored");
- else if (!FcStrUsesHome (data) || FcConfigHome ())
- {
- if (!FcConfigAddDir (parse->config, data))
- FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data);
- }
- FcStrBufDestroy (&parse->pstack->str);
- break;
- case FcElementCacheDir:
- data = FcStrBufDone (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
-#ifdef _WIN32
- if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0)
- {
- int rc;
- FcStrFree (data);
- data = malloc (1000);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- FcMemAlloc (FC_MEM_STRING, 1000);
- rc = GetTempPath (800, data);
- if (rc == 0 || rc > 800)
- {
- FcConfigMessage (parse, FcSevereError, "GetTempPath failed");
- FcStrFree (data);
- break;
- }
- if (data [strlen (data) - 1] != '\\')
- strcat (data, "\\");
- strcat (data, "fontconfig\\cache");
- }
-#endif
- if (!FcStrUsesHome (data) || FcConfigHome ())
- {
- if (!FcConfigAddCacheDir (parse->config, data))
- FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data);
- }
- FcStrFree (data);
- break;
-
- case FcElementCache:
- data = FcStrBufDoneStatic (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- /* discard this data; no longer used */
- FcStrBufDestroy (&parse->pstack->str);
- break;
- case FcElementInclude:
- FcParseInclude (parse);
- break;
- case FcElementConfig:
- break;
- case FcElementMatch:
- FcParseMatch (parse);
- break;
- case FcElementAlias:
- FcParseAlias (parse);
- break;
-
- case FcElementBlank:
- FcParseBlank (parse);
- break;
- case FcElementRescan:
- FcParseRescan (parse);
- break;
-
- case FcElementPrefer:
- FcParseFamilies (parse, FcVStackPrefer);
- break;
- case FcElementAccept:
- FcParseFamilies (parse, FcVStackAccept);
- break;
- case FcElementDefault:
- FcParseFamilies (parse, FcVStackDefault);
- break;
- case FcElementFamily:
- FcParseFamily (parse);
- break;
-
- case FcElementTest:
- FcParseTest (parse);
- break;
- case FcElementEdit:
- FcParseEdit (parse);
- break;
-
- case FcElementInt:
- FcParseInt (parse);
- break;
- case FcElementDouble:
- FcParseDouble (parse);
- break;
- case FcElementString:
- FcParseString (parse, FcVStackString);
- break;
- case FcElementMatrix:
- FcParseMatrix (parse);
- break;
- case FcElementBool:
- FcParseBool (parse);
- break;
- case FcElementCharset:
-/* FcParseCharset (parse); */
- break;
- case FcElementSelectfont:
- break;
- case FcElementAcceptfont:
- case FcElementRejectfont:
- FcParseAcceptRejectFont (parse, parse->pstack->element);
- break;
- case FcElementGlob:
- FcParseString (parse, FcVStackGlob);
- break;
- case FcElementPattern:
- FcParsePattern (parse);
- break;
- case FcElementPatelt:
- FcParsePatelt (parse);
- break;
- case FcElementName:
- FcParseString (parse, FcVStackField);
- break;
- case FcElementConst:
- FcParseString (parse, FcVStackConstant);
- break;
- case FcElementOr:
- FcParseBinary (parse, FcOpOr);
- break;
- case FcElementAnd:
- FcParseBinary (parse, FcOpAnd);
- break;
- case FcElementEq:
- FcParseBinary (parse, FcOpEqual);
- break;
- case FcElementNotEq:
- FcParseBinary (parse, FcOpNotEqual);
- break;
- case FcElementLess:
- FcParseBinary (parse, FcOpLess);
- break;
- case FcElementLessEq:
- FcParseBinary (parse, FcOpLessEqual);
- break;
- case FcElementMore:
- FcParseBinary (parse, FcOpMore);
- break;
- case FcElementMoreEq:
- FcParseBinary (parse, FcOpMoreEqual);
- break;
- case FcElementContains:
- FcParseBinary (parse, FcOpContains);
- break;
- case FcElementNotContains:
- FcParseBinary (parse, FcOpNotContains);
- break;
- case FcElementPlus:
- FcParseBinary (parse, FcOpPlus);
- break;
- case FcElementMinus:
- FcParseBinary (parse, FcOpMinus);
- break;
- case FcElementTimes:
- FcParseBinary (parse, FcOpTimes);
- break;
- case FcElementDivide:
- FcParseBinary (parse, FcOpDivide);
- break;
- case FcElementNot:
- FcParseUnary (parse, FcOpNot);
- break;
- case FcElementIf:
- FcParseBinary (parse, FcOpQuest);
- break;
- case FcElementFloor:
- FcParseUnary (parse, FcOpFloor);
- break;
- case FcElementCeil:
- FcParseUnary (parse, FcOpCeil);
- break;
- case FcElementRound:
- FcParseUnary (parse, FcOpRound);
- break;
- case FcElementTrunc:
- FcParseUnary (parse, FcOpTrunc);
- break;
- case FcElementUnknown:
- break;
- }
- (void) FcPStackPop (parse);
-}
-
-static void
-FcCharacterData (void *userData, const XML_Char *s, int len)
-{
- FcConfigParse *parse = userData;
-
- if (!parse->pstack)
- return;
- if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len))
- FcConfigMessage (parse, FcSevereError, "out of memory");
-}
-
-static void
-FcStartDoctypeDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid,
- int has_internal_subset)
-{
- FcConfigParse *parse = userData;
-
- if (strcmp ((char *) doctypeName, "fontconfig") != 0)
- FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName);
-}
-
-#ifdef ENABLE_LIBXML2
-
-static void
-FcInternalSubsetDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid)
-{
- FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1);
-}
-
-static void
-FcExternalSubsetDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid)
-{
- FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0);
-}
-
-#else /* ENABLE_LIBXML2 */
-
-static void
-FcEndDoctypeDecl (void *userData)
-{
-}
-
-#endif /* ENABLE_LIBXML2 */
-
-static int
-FcSortCmpStr (const void *a, const void *b)
-{
- const FcChar8 *as = *((FcChar8 **) a);
- const FcChar8 *bs = *((FcChar8 **) b);
- return FcStrCmp (as, bs);
-}
-
-static FcBool
-FcConfigParseAndLoadDir (FcConfig *config,
- const FcChar8 *name,
- const FcChar8 *dir,
- FcBool complain)
-{
- DIR *d;
- struct dirent *e;
- FcBool ret = FcTrue;
- FcChar8 *file;
- FcChar8 *base;
- FcStrSet *files;
-
- d = opendir ((char *) dir);
- if (!d)
- {
- if (complain)
- FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"",
- name);
- ret = FcFalse;
- goto bail0;
- }
- /* freed below */
- file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
- if (!file)
- {
- ret = FcFalse;
- goto bail1;
- }
-
- strcpy ((char *) file, (char *) dir);
- strcat ((char *) file, "/");
- base = file + strlen ((char *) file);
-
- files = FcStrSetCreate ();
- if (!files)
- {
- ret = FcFalse;
- goto bail2;
- }
-
- if (FcDebug () & FC_DBG_CONFIG)
- printf ("\tScanning config dir %s\n", dir);
-
- while (ret && (e = readdir (d)))
- {
- int d_len;
-#define TAIL ".conf"
-#define TAIL_LEN 5
- /*
- * Add all files of the form [0-9]*.conf
- */
- if ('0' <= e->d_name[0] && e->d_name[0] <= '9' &&
- (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN &&
- d_len > TAIL_LEN &&
- strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0)
- {
- strcpy ((char *) base, (char *) e->d_name);
- if (!FcStrSetAdd (files, file))
- {
- ret = FcFalse;
- goto bail3;
- }
- }
- }
- if (ret)
- {
- int i;
- qsort (files->strs, files->num, sizeof (FcChar8 *),
- (int (*)(const void *, const void *)) FcSortCmpStr);
- for (i = 0; ret && i < files->num; i++)
- ret = FcConfigParseAndLoad (config, files->strs[i], complain);
- }
-bail3:
- FcStrSetDestroy (files);
-bail2:
- free (file);
-bail1:
- closedir (d);
-bail0:
- return ret || !complain;
-}
-
-FcBool
-FcConfigParseAndLoad (FcConfig *config,
- const FcChar8 *name,
- FcBool complain)
-{
-
- XML_Parser p;
- FcChar8 *filename;
- int fd;
- int len;
- FcConfigParse parse;
- FcBool error = FcTrue;
-
-#ifdef ENABLE_LIBXML2
- xmlSAXHandler sax;
- char buf[BUFSIZ];
-#else
- void *buf;
-#endif
-
- filename = FcConfigFilename (name);
- if (!filename)
- goto bail0;
-
- if (FcStrSetMember (config->configFiles, filename))
- {
- FcStrFree (filename);
- return FcTrue;
- }
-
- if (!FcStrSetAdd (config->configFiles, filename))
- {
- FcStrFree (filename);
- goto bail0;
- }
-
- if (FcFileIsDir (filename))
- {
- FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain);
- FcStrFree (filename);
- return ret;
- }
-
- if (FcDebug () & FC_DBG_CONFIG)
- printf ("\tLoading config file %s\n", filename);
-
- fd = open ((char *) filename, O_RDONLY);
- if (fd == -1) {
- FcStrFree (filename);
- goto bail0;
- }
-
-#ifdef ENABLE_LIBXML2
- memset(&sax, 0, sizeof(sax));
-
- sax.internalSubset = FcInternalSubsetDecl;
- sax.externalSubset = FcExternalSubsetDecl;
- sax.startElement = FcStartElement;
- sax.endElement = FcEndElement;
- sax.characters = FcCharacterData;
-
- p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename);
-#else
- p = XML_ParserCreate ("UTF-8");
-#endif
- FcStrFree (filename);
-
- if (!p)
- goto bail1;
-
- if (!FcConfigInit (&parse, name, config, p))
- goto bail2;
-
-#ifndef ENABLE_LIBXML2
-
- XML_SetUserData (p, &parse);
-
- XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl);
- XML_SetElementHandler (p, FcStartElement, FcEndElement);
- XML_SetCharacterDataHandler (p, FcCharacterData);
-
-#endif /* ENABLE_LIBXML2 */
-
- do {
-#ifndef ENABLE_LIBXML2
- buf = XML_GetBuffer (p, BUFSIZ);
- if (!buf)
- {
- FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer");
- goto bail3;
- }
-#endif
- len = read (fd, buf, BUFSIZ);
- if (len < 0)
- {
- FcConfigMessage (&parse, FcSevereError, "failed reading config file");
- goto bail3;
- }
-
-#ifdef ENABLE_LIBXML2
- if (xmlParseChunk (p, buf, len, len == 0))
-#else
- if (!XML_ParseBuffer (p, len, len == 0))
-#endif
- {
- FcConfigMessage (&parse, FcSevereError, "%s",
- XML_ErrorString (XML_GetErrorCode (p)));
- goto bail3;
- }
- } while (len != 0);
- error = parse.error;
-bail3:
- FcConfigCleanup (&parse);
-bail2:
- XML_ParserFree (p);
-bail1:
- close (fd);
- fd = -1;
-bail0:
- if (error && complain)
- {
- if (name)
- FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name);
- else
- FcConfigMessage (0, FcSevereError, "Cannot load default config file");
- return FcFalse;
- }
- return FcTrue;
-}
-#define __fcxml__
-#include "fcaliastail.h"
-#undef __fcxml__
+/*
+ * fontconfig/src/fcxml.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <fcntl.h>
+#include <stdarg.h>
+#include <dirent.h>
+
+#ifdef ENABLE_LIBXML2
+
+#include <libxml/parser.h>
+
+#define XML_Char xmlChar
+#define XML_Parser xmlParserCtxtPtr
+#define XML_ParserFree xmlFreeParserCtxt
+#define XML_GetCurrentLineNumber xmlSAX2GetLineNumber
+#define XML_GetErrorCode xmlCtxtGetLastError
+#define XML_ErrorString(Error) (Error)->message
+
+#else /* ENABLE_LIBXML2 */
+
+#ifndef HAVE_XMLPARSE_H
+#define HAVE_XMLPARSE_H 0
+#endif
+
+#if HAVE_XMLPARSE_H
+#include <xmlparse.h>
+#else
+#include <expat.h>
+#endif
+
+#endif /* ENABLE_LIBXML2 */
+
+#ifdef _WIN32
+#include <mbstring.h>
+#endif
+
+static void
+FcExprDestroy (FcExpr *e);
+
+void
+FcTestDestroy (FcTest *test)
+{
+ if (test->next)
+ FcTestDestroy (test->next);
+ FcExprDestroy (test->expr);
+ FcMemFree (FC_MEM_TEST, sizeof (FcTest));
+ free (test);
+}
+
+static FcExpr *
+FcExprCreateInteger (FcConfig *config, int i)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpInteger;
+ e->u.ival = i;
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateDouble (FcConfig *config, double d)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpDouble;
+ e->u.dval = d;
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateString (FcConfig *config, const FcChar8 *s)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpString;
+ e->u.sval = FcStrStaticName (s);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateMatrix (FcConfig *config, const FcMatrix *m)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpMatrix;
+ e->u.mval = FcMatrixCopy (m);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateBool (FcConfig *config, FcBool b)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpBool;
+ e->u.bval = b;
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateCharSet (FcConfig *config, FcCharSet *charset)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpCharSet;
+ e->u.cval = FcCharSetCopy (charset);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateLangSet (FcConfig *config, FcLangSet *langset)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpLangSet;
+ e->u.lval = FcLangSetCopy (langset);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateField (FcConfig *config, const char *field)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpField;
+ e->u.object = FcObjectFromName (field);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateConst (FcConfig *config, const FcChar8 *constant)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpConst;
+ e->u.constant = FcStrStaticName (constant);
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateOp (FcConfig *config, FcExpr *left, FcOp op, FcExpr *right)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = op;
+ e->u.tree.left = left;
+ e->u.tree.right = right;
+ }
+ return e;
+}
+
+static void
+FcExprDestroy (FcExpr *e)
+{
+ if (!e)
+ return;
+ switch (e->op) {
+ case FcOpInteger:
+ break;
+ case FcOpDouble:
+ break;
+ case FcOpString:
+ break;
+ case FcOpMatrix:
+ FcMatrixFree (e->u.mval);
+ break;
+ case FcOpRange:
+ break;
+ case FcOpCharSet:
+ FcCharSetDestroy (e->u.cval);
+ break;
+ case FcOpLangSet:
+ FcLangSetDestroy (e->u.lval);
+ break;
+ case FcOpBool:
+ break;
+ case FcOpField:
+ break;
+ case FcOpConst:
+ break;
+ case FcOpAssign:
+ case FcOpAssignReplace:
+ case FcOpPrepend:
+ case FcOpPrependFirst:
+ case FcOpAppend:
+ case FcOpAppendLast:
+ break;
+ case FcOpOr:
+ case FcOpAnd:
+ case FcOpEqual:
+ case FcOpNotEqual:
+ case FcOpLess:
+ case FcOpLessEqual:
+ case FcOpMore:
+ case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpListing:
+ case FcOpNotContains:
+ case FcOpPlus:
+ case FcOpMinus:
+ case FcOpTimes:
+ case FcOpDivide:
+ case FcOpQuest:
+ case FcOpComma:
+ FcExprDestroy (e->u.tree.right);
+ /* fall through */
+ case FcOpNot:
+ case FcOpFloor:
+ case FcOpCeil:
+ case FcOpRound:
+ case FcOpTrunc:
+ FcExprDestroy (e->u.tree.left);
+ break;
+ case FcOpNil:
+ case FcOpInvalid:
+ break;
+ }
+
+ e->op = FcOpNil;
+}
+
+void
+FcEditDestroy (FcEdit *e)
+{
+ if (e->next)
+ FcEditDestroy (e->next);
+ if (e->expr)
+ FcExprDestroy (e->expr);
+ free (e);
+}
+
+typedef enum _FcElement {
+ FcElementNone,
+ FcElementFontconfig,
+ FcElementDir,
+ FcElementCacheDir,
+ FcElementCache,
+ FcElementInclude,
+ FcElementConfig,
+ FcElementMatch,
+ FcElementAlias,
+
+ FcElementBlank,
+ FcElementRescan,
+
+ FcElementPrefer,
+ FcElementAccept,
+ FcElementDefault,
+ FcElementFamily,
+
+ FcElementSelectfont,
+ FcElementAcceptfont,
+ FcElementRejectfont,
+ FcElementGlob,
+ FcElementPattern,
+ FcElementPatelt,
+
+ FcElementTest,
+ FcElementEdit,
+ FcElementInt,
+ FcElementDouble,
+ FcElementString,
+ FcElementMatrix,
+ FcElementRange,
+ FcElementBool,
+ FcElementCharSet,
+ FcElementLangSet,
+ FcElementName,
+ FcElementConst,
+ FcElementOr,
+ FcElementAnd,
+ FcElementEq,
+ FcElementNotEq,
+ FcElementLess,
+ FcElementLessEq,
+ FcElementMore,
+ FcElementMoreEq,
+ FcElementContains,
+ FcElementNotContains,
+ FcElementPlus,
+ FcElementMinus,
+ FcElementTimes,
+ FcElementDivide,
+ FcElementNot,
+ FcElementIf,
+ FcElementFloor,
+ FcElementCeil,
+ FcElementRound,
+ FcElementTrunc,
+ FcElementUnknown
+} FcElement;
+
+static const struct {
+ const char name[16];
+ FcElement element;
+} fcElementMap[] = {
+ { "fontconfig", FcElementFontconfig },
+ { "dir", FcElementDir },
+ { "cachedir", FcElementCacheDir },
+ { "cache", FcElementCache },
+ { "include", FcElementInclude },
+ { "config", FcElementConfig },
+ { "match", FcElementMatch },
+ { "alias", FcElementAlias },
+
+ { "blank", FcElementBlank },
+ { "rescan", FcElementRescan },
+
+ { "prefer", FcElementPrefer },
+ { "accept", FcElementAccept },
+ { "default", FcElementDefault },
+ { "family", FcElementFamily },
+
+ { "selectfont", FcElementSelectfont },
+ { "acceptfont", FcElementAcceptfont },
+ { "rejectfont", FcElementRejectfont },
+ { "glob", FcElementGlob },
+ { "pattern", FcElementPattern },
+ { "patelt", FcElementPatelt },
+
+ { "test", FcElementTest },
+ { "edit", FcElementEdit },
+ { "int", FcElementInt },
+ { "double", FcElementDouble },
+ { "string", FcElementString },
+ { "matrix", FcElementMatrix },
+ { "range", FcElementRange },
+ { "bool", FcElementBool },
+ { "charset", FcElementCharSet },
+ { "langset", FcElementLangSet },
+ { "name", FcElementName },
+ { "const", FcElementConst },
+ { "or", FcElementOr },
+ { "and", FcElementAnd },
+ { "eq", FcElementEq },
+ { "not_eq", FcElementNotEq },
+ { "less", FcElementLess },
+ { "less_eq", FcElementLessEq },
+ { "more", FcElementMore },
+ { "more_eq", FcElementMoreEq },
+ { "contains", FcElementContains },
+ { "not_contains", FcElementNotContains },
+ { "plus", FcElementPlus },
+ { "minus", FcElementMinus },
+ { "times", FcElementTimes },
+ { "divide", FcElementDivide },
+ { "not", FcElementNot },
+ { "if", FcElementIf },
+ { "floor", FcElementFloor },
+ { "ceil", FcElementCeil },
+ { "round", FcElementRound },
+ { "trunc", FcElementTrunc },
+};
+#define NUM_ELEMENT_MAPS (int) (sizeof fcElementMap / sizeof fcElementMap[0])
+
+static FcElement
+FcElementMap (const XML_Char *name)
+{
+
+ int i;
+ for (i = 0; i < NUM_ELEMENT_MAPS; i++)
+ if (!strcmp ((char *) name, fcElementMap[i].name))
+ return fcElementMap[i].element;
+ return FcElementUnknown;
+}
+
+typedef struct _FcPStack {
+ struct _FcPStack *prev;
+ FcElement element;
+ FcChar8 **attr;
+ FcStrBuf str;
+ FcChar8 *attr_buf_static[16];
+} FcPStack;
+
+typedef enum _FcVStackTag {
+ FcVStackNone,
+
+ FcVStackString,
+ FcVStackFamily,
+ FcVStackField,
+ FcVStackConstant,
+ FcVStackGlob,
+ FcVStackPattern,
+
+ FcVStackPrefer,
+ FcVStackAccept,
+ FcVStackDefault,
+
+ FcVStackInteger,
+ FcVStackDouble,
+ FcVStackMatrix,
+ FcVStackRange,
+ FcVStackBool,
+ FcVStackCharSet,
+ FcVStackLangSet,
+
+ FcVStackTest,
+ FcVStackExpr,
+ FcVStackEdit
+} FcVStackTag;
+
+typedef struct _FcVStack {
+ struct _FcVStack *prev;
+ FcPStack *pstack; /* related parse element */
+ FcVStackTag tag;
+ union {
+ FcChar8 *string;
+
+ int integer;
+ double _double;
+ FcMatrix *matrix;
+ FcRange range;
+ FcBool bool_;
+ FcCharSet *charset;
+ FcLangSet *langset;
+
+ FcTest *test;
+ FcQual qual;
+ FcOp op;
+ FcExpr *expr;
+ FcEdit *edit;
+
+ FcPattern *pattern;
+ } u;
+} FcVStack;
+
+typedef struct _FcConfigParse {
+ FcPStack *pstack;
+ FcVStack *vstack;
+ FcBool error;
+ const FcChar8 *name;
+ FcConfig *config;
+ XML_Parser parser;
+ int pstack_static_used;
+ FcPStack pstack_static[8];
+ int vstack_static_used;
+ FcVStack vstack_static[64];
+} FcConfigParse;
+
+typedef enum _FcConfigSeverity {
+ FcSevereInfo, FcSevereWarning, FcSevereError
+} FcConfigSeverity;
+
+static void
+FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, ...)
+{
+ const char *s = "unknown";
+ va_list args;
+
+ va_start (args, fmt);
+
+ switch (severe) {
+ case FcSevereInfo: s = "info"; break;
+ case FcSevereWarning: s = "warning"; break;
+ case FcSevereError: s = "error"; break;
+ }
+ if (parse)
+ {
+ if (parse->name)
+ fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s,
+ parse->name, (int)XML_GetCurrentLineNumber (parse->parser));
+ else
+ fprintf (stderr, "Fontconfig %s: line %d: ", s,
+ (int)XML_GetCurrentLineNumber (parse->parser));
+ if (severe >= FcSevereError)
+ parse->error = FcTrue;
+ }
+ else
+ fprintf (stderr, "Fontconfig %s: ", s);
+ vfprintf (stderr, fmt, args);
+ fprintf (stderr, "\n");
+ va_end (args);
+}
+
+
+static const char *
+FcTypeName (FcType type)
+{
+ switch (type) {
+ case FcTypeVoid:
+ return "void";
+ case FcTypeInteger:
+ case FcTypeDouble:
+ return "number";
+ case FcTypeString:
+ return "string";
+ case FcTypeBool:
+ return "bool";
+ case FcTypeMatrix:
+ return "matrix";
+ case FcTypeCharSet:
+ return "charset";
+ case FcTypeFTFace:
+ return "FT_Face";
+ case FcTypeLangSet:
+ return "langset";
+ default:
+ return "unknown";
+ }
+}
+
+static void
+FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type)
+{
+ if (value == FcTypeInteger)
+ value = FcTypeDouble;
+ if (type == FcTypeInteger)
+ type = FcTypeDouble;
+ if (value != type)
+ {
+ if ((value == FcTypeLangSet && type == FcTypeString) ||
+ (value == FcTypeString && type == FcTypeLangSet))
+ return;
+ if (type == (FcType) -1)
+ return;
+ FcConfigMessage (parse, FcSevereWarning, "saw %s, expected %s",
+ FcTypeName (value), FcTypeName (type));
+ }
+}
+
+static void
+FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type)
+{
+ const FcObjectType *o;
+ const FcConstant *c;
+
+ /* If parsing the expression failed, some nodes may be NULL */
+ if (!expr)
+ return;
+
+ switch (expr->op) {
+ case FcOpInteger:
+ case FcOpDouble:
+ FcTypecheckValue (parse, FcTypeDouble, type);
+ break;
+ case FcOpString:
+ FcTypecheckValue (parse, FcTypeString, type);
+ break;
+ case FcOpMatrix:
+ FcTypecheckValue (parse, FcTypeMatrix, type);
+ break;
+ case FcOpBool:
+ FcTypecheckValue (parse, FcTypeBool, type);
+ break;
+ case FcOpCharSet:
+ FcTypecheckValue (parse, FcTypeCharSet, type);
+ break;
+ case FcOpLangSet:
+ FcTypecheckValue (parse, FcTypeLangSet, type);
+ break;
+ case FcOpNil:
+ break;
+ case FcOpField:
+ o = FcNameGetObjectType (FcObjectName (expr->u.object));
+ if (o)
+ FcTypecheckValue (parse, o->type, type);
+ break;
+ case FcOpConst:
+ c = FcNameGetConstant (expr->u.constant);
+ if (c)
+ {
+ o = FcNameGetObjectType (c->object);
+ if (o)
+ FcTypecheckValue (parse, o->type, type);
+ }
+ else
+ FcConfigMessage (parse, FcSevereWarning,
+ "invalid constant used : %s",
+ expr->u.constant);
+ break;
+ case FcOpQuest:
+ FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
+ FcTypecheckExpr (parse, expr->u.tree.right->u.tree.left, type);
+ FcTypecheckExpr (parse, expr->u.tree.right->u.tree.right, type);
+ break;
+ case FcOpAssign:
+ case FcOpAssignReplace:
+ break;
+ case FcOpEqual:
+ case FcOpNotEqual:
+ case FcOpLess:
+ case FcOpLessEqual:
+ case FcOpMore:
+ case FcOpMoreEqual:
+ case FcOpContains:
+ case FcOpNotContains:
+ case FcOpListing:
+ FcTypecheckValue (parse, FcTypeBool, type);
+ break;
+ case FcOpComma:
+ case FcOpOr:
+ case FcOpAnd:
+ case FcOpPlus:
+ case FcOpMinus:
+ case FcOpTimes:
+ case FcOpDivide:
+ FcTypecheckExpr (parse, expr->u.tree.left, type);
+ FcTypecheckExpr (parse, expr->u.tree.right, type);
+ break;
+ case FcOpNot:
+ FcTypecheckValue (parse, FcTypeBool, type);
+ FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
+ break;
+ case FcOpFloor:
+ case FcOpCeil:
+ case FcOpRound:
+ case FcOpTrunc:
+ FcTypecheckValue (parse, FcTypeDouble, type);
+ FcTypecheckExpr (parse, expr->u.tree.left, FcTypeDouble);
+ break;
+ default:
+ break;
+ }
+}
+
+static FcTest *
+FcTestCreate (FcConfigParse *parse,
+ FcMatchKind kind,
+ FcQual qual,
+ const FcChar8 *field,
+ FcOp compare,
+ FcExpr *expr)
+{
+ FcTest *test = (FcTest *) malloc (sizeof (FcTest));
+
+ if (test)
+ {
+ const FcObjectType *o;
+
+ FcMemAlloc (FC_MEM_TEST, sizeof (FcTest));
+ test->next = 0;
+ test->kind = kind;
+ test->qual = qual;
+ test->object = FcObjectFromName ((const char *) field);
+ test->op = compare;
+ test->expr = expr;
+ o = FcNameGetObjectType (FcObjectName (test->object));
+ if (o)
+ FcTypecheckExpr (parse, expr, o->type);
+ }
+ return test;
+}
+
+static FcEdit *
+FcEditCreate (FcConfigParse *parse,
+ FcObject object,
+ FcOp op,
+ FcExpr *expr,
+ FcValueBinding binding)
+{
+ FcEdit *e = (FcEdit *) malloc (sizeof (FcEdit));
+
+ if (e)
+ {
+ const FcObjectType *o;
+
+ e->next = 0;
+ e->object = object;
+ e->op = op;
+ e->expr = expr;
+ e->binding = binding;
+ o = FcNameGetObjectType (FcObjectName (e->object));
+ if (o)
+ FcTypecheckExpr (parse, expr, o->type);
+ }
+ return e;
+}
+
+static FcVStack *
+FcVStackCreateAndPush (FcConfigParse *parse)
+{
+ FcVStack *new;
+
+ if (parse->vstack_static_used < sizeof (parse->vstack_static) / sizeof (parse->vstack_static[0]))
+ new = &parse->vstack_static[parse->vstack_static_used++];
+ else
+ {
+ new = malloc (sizeof (FcVStack));
+ if (!new)
+ return 0;
+ FcMemAlloc (FC_MEM_VSTACK, sizeof (FcVStack));
+ }
+ new->tag = FcVStackNone;
+ new->prev = 0;
+
+ new->prev = parse->vstack;
+ new->pstack = parse->pstack ? parse->pstack->prev : 0;
+ parse->vstack = new;
+
+ return new;
+}
+
+static FcBool
+FcVStackPushString (FcConfigParse *parse, FcVStackTag tag, FcChar8 *string)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.string = string;
+ vstack->tag = tag;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushInteger (FcConfigParse *parse, int integer)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.integer = integer;
+ vstack->tag = FcVStackInteger;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushDouble (FcConfigParse *parse, double _double)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u._double = _double;
+ vstack->tag = FcVStackDouble;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushMatrix (FcConfigParse *parse, FcMatrix *matrix)
+{
+ FcVStack *vstack;
+ matrix = FcMatrixCopy (matrix);
+ if (!matrix)
+ return FcFalse;
+ vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.matrix = matrix;
+ vstack->tag = FcVStackMatrix;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushRange (FcConfigParse *parse, FcRange *range)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.range.begin = range->begin;
+ vstack->u.range.end = range->end;
+ vstack->tag = FcVStackRange;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushBool (FcConfigParse *parse, FcBool bool_)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.bool_ = bool_;
+ vstack->tag = FcVStackBool;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushCharSet (FcConfigParse *parse, FcCharSet *charset)
+{
+ FcVStack *vstack;
+ if (!charset)
+ return FcFalse;
+ vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.charset = charset;
+ vstack->tag = FcVStackCharSet;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushLangSet (FcConfigParse *parse, FcLangSet *langset)
+{
+ FcVStack *vstack;
+ if (!langset)
+ return FcFalse;
+ vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.langset = langset;
+ vstack->tag = FcVStackLangSet;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushTest (FcConfigParse *parse, FcTest *test)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.test = test;
+ vstack->tag = FcVStackTest;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushExpr (FcConfigParse *parse, FcVStackTag tag, FcExpr *expr)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.expr = expr;
+ vstack->tag = tag;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushEdit (FcConfigParse *parse, FcEdit *edit)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.edit = edit;
+ vstack->tag = FcVStackEdit;
+ return FcTrue;
+}
+
+static FcBool
+FcVStackPushPattern (FcConfigParse *parse, FcPattern *pattern)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.pattern = pattern;
+ vstack->tag = FcVStackPattern;
+ return FcTrue;
+}
+
+static FcVStack *
+FcVStackFetch (FcConfigParse *parse, int off)
+{
+ FcVStack *vstack;
+
+ for (vstack = parse->vstack; vstack && off-- > 0; vstack = vstack->prev);
+ return vstack;
+}
+
+static FcVStack *
+FcVStackPeek (FcConfigParse *parse)
+{
+ FcVStack *vstack = parse->vstack;
+
+ return vstack && vstack->pstack == parse->pstack ? vstack : 0;
+}
+
+static void
+FcVStackPopAndDestroy (FcConfigParse *parse)
+{
+ FcVStack *vstack = parse->vstack;
+
+ if (!vstack || vstack->pstack != parse->pstack)
+ return;
+
+ parse->vstack = vstack->prev;
+
+ switch (vstack->tag) {
+ case FcVStackNone:
+ break;
+ case FcVStackFamily:
+ break;
+ case FcVStackString:
+ case FcVStackField:
+ case FcVStackConstant:
+ case FcVStackGlob:
+ FcStrFree (vstack->u.string);
+ break;
+ case FcVStackPattern:
+ FcPatternDestroy (vstack->u.pattern);
+ break;
+ case FcVStackInteger:
+ case FcVStackDouble:
+ break;
+ case FcVStackMatrix:
+ FcMatrixFree (vstack->u.matrix);
+ break;
+ case FcVStackRange:
+ case FcVStackBool:
+ break;
+ case FcVStackCharSet:
+ FcCharSetDestroy (vstack->u.charset);
+ break;
+ case FcVStackLangSet:
+ FcLangSetDestroy (vstack->u.langset);
+ break;
+ case FcVStackTest:
+ FcTestDestroy (vstack->u.test);
+ break;
+ case FcVStackExpr:
+ case FcVStackPrefer:
+ case FcVStackAccept:
+ case FcVStackDefault:
+ FcExprDestroy (vstack->u.expr);
+ break;
+ case FcVStackEdit:
+ FcEditDestroy (vstack->u.edit);
+ break;
+ }
+
+ if (vstack == &parse->vstack_static[parse->vstack_static_used - 1])
+ parse->vstack_static_used--;
+ else
+ {
+ FcMemFree (FC_MEM_VSTACK, sizeof (FcVStack));
+ free (vstack);
+ }
+}
+
+static void
+FcVStackClear (FcConfigParse *parse)
+{
+ while (FcVStackPeek (parse))
+ FcVStackPopAndDestroy (parse);
+}
+
+static int
+FcVStackElements (FcConfigParse *parse)
+{
+ int h = 0;
+ FcVStack *vstack = parse->vstack;
+ while (vstack && vstack->pstack == parse->pstack)
+ {
+ h++;
+ vstack = vstack->prev;
+ }
+ return h;
+}
+
+static FcChar8 **
+FcConfigSaveAttr (const XML_Char **attr, FcChar8 **buf, int size_bytes)
+{
+ int slen;
+ int i;
+ FcChar8 **new;
+ FcChar8 *s;
+
+ if (!attr)
+ return 0;
+ slen = 0;
+ for (i = 0; attr[i]; i++)
+ slen += strlen ((char *) attr[i]) + 1;
+ if (i == 0)
+ return 0;
+ slen += (i + 1) * sizeof (FcChar8 *);
+ if (slen <= size_bytes)
+ new = buf;
+ else
+ {
+ new = malloc (slen);
+ if (!new)
+ {
+ FcConfigMessage (0, FcSevereError, "out of memory");
+ return 0;
+ }
+ FcMemAlloc (FC_MEM_ATTR, 1); /* size is too expensive */
+ }
+ s = (FcChar8 *) (new + (i + 1));
+ for (i = 0; attr[i]; i++)
+ {
+ new[i] = s;
+ strcpy ((char *) s, (char *) attr[i]);
+ s += strlen ((char *) s) + 1;
+ }
+ new[i] = 0;
+ return new;
+}
+
+static FcBool
+FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr)
+{
+ FcPStack *new;
+
+ if (parse->pstack_static_used < sizeof (parse->pstack_static) / sizeof (parse->pstack_static[0]))
+ new = &parse->pstack_static[parse->pstack_static_used++];
+ else
+ {
+ new = malloc (sizeof (FcPStack));
+ if (!new)
+ return FcFalse;
+ FcMemAlloc (FC_MEM_PSTACK, sizeof (FcPStack));
+ }
+
+ new->prev = parse->pstack;
+ new->element = element;
+ new->attr = FcConfigSaveAttr (attr, new->attr_buf_static, sizeof (new->attr_buf_static));
+ FcStrBufInit (&new->str, 0, 0);
+ parse->pstack = new;
+ return FcTrue;
+}
+
+static FcBool
+FcPStackPop (FcConfigParse *parse)
+{
+ FcPStack *old;
+
+ if (!parse->pstack)
+ {
+ FcConfigMessage (parse, FcSevereError, "mismatching element");
+ return FcFalse;
+ }
+ FcVStackClear (parse);
+ old = parse->pstack;
+ parse->pstack = old->prev;
+ FcStrBufDestroy (&old->str);
+ if (old->attr && old->attr != old->attr_buf_static)
+ {
+ FcMemFree (FC_MEM_ATTR, 1); /* size is to expensive */
+ free (old->attr);
+ }
+
+ if (old == &parse->pstack_static[parse->pstack_static_used - 1])
+ parse->pstack_static_used--;
+ else
+ {
+ FcMemFree (FC_MEM_PSTACK, sizeof (FcPStack));
+ free (old);
+ }
+ return FcTrue;
+}
+
+static FcBool
+FcConfigInit (FcConfigParse *parse, const FcChar8 *name, FcConfig *config, XML_Parser parser)
+{
+ parse->pstack = 0;
+ parse->pstack_static_used = 0;
+ parse->vstack = 0;
+ parse->vstack_static_used = 0;
+ parse->error = FcFalse;
+ parse->name = name;
+ parse->config = config;
+ parse->parser = parser;
+ return FcTrue;
+}
+
+static void
+FcConfigCleanup (FcConfigParse *parse)
+{
+ while (parse->pstack)
+ FcPStackPop (parse);
+}
+
+static const FcChar8 *
+FcConfigGetAttribute (FcConfigParse *parse, const char *attr)
+{
+ FcChar8 **attrs;
+ if (!parse->pstack)
+ return 0;
+
+ attrs = parse->pstack->attr;
+ if (!attrs)
+ return 0;
+
+ while (*attrs)
+ {
+ if (!strcmp ((char *) *attrs, attr))
+ return attrs[1];
+ attrs += 2;
+ }
+ return 0;
+}
+
+static void
+FcStartElement(void *userData, const XML_Char *name, const XML_Char **attr)
+{
+ FcConfigParse *parse = userData;
+ FcElement element;
+
+ element = FcElementMap (name);
+ if (element == FcElementUnknown)
+ FcConfigMessage (parse, FcSevereWarning, "unknown element \"%s\"", name);
+
+ if (!FcPStackPush (parse, element, attr))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ return;
+}
+
+static void
+FcParseBlank (FcConfigParse *parse)
+{
+ int n = FcVStackElements (parse);
+ FcChar32 i;
+ while (n-- > 0)
+ {
+ FcVStack *v = FcVStackFetch (parse, n);
+ if (!parse->config->blanks)
+ {
+ parse->config->blanks = FcBlanksCreate ();
+ if (!parse->config->blanks)
+ goto bail;
+ }
+ switch (v->tag) {
+ case FcVStackInteger:
+ if (!FcBlanksAdd (parse->config->blanks, v->u.integer))
+ goto bail;
+ break;
+ case FcVStackRange:
+ if (v->u.range.begin <= v->u.range.end)
+ {
+ for (i = v->u.range.begin; i <= v->u.range.end; i++)
+ {
+ if (!FcBlanksAdd (parse->config->blanks, i))
+ goto bail;
+ }
+ }
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "invalid element in blank");
+ break;
+ }
+ }
+ return;
+ bail:
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+}
+
+static void
+FcParseRescan (FcConfigParse *parse)
+{
+ int n = FcVStackElements (parse);
+ while (n-- > 0)
+ {
+ FcVStack *v = FcVStackFetch (parse, n);
+ if (v->tag != FcVStackInteger)
+ FcConfigMessage (parse, FcSevereWarning, "non-integer rescan");
+ else
+ parse->config->rescanInterval = v->u.integer;
+ }
+}
+
+static void
+FcParseInt (FcConfigParse *parse)
+{
+ FcChar8 *s, *end;
+ int l;
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ end = 0;
+ l = (int) strtol ((char *) s, (char **)&end, 0);
+ if (end != s + strlen ((char *) s))
+ FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid integer", s);
+ else
+ FcVStackPushInteger (parse, l);
+ FcStrBufDestroy (&parse->pstack->str);
+}
+
+/*
+ * idea copied from glib g_ascii_strtod with
+ * permission of the author (Alexander Larsson)
+ */
+
+#include <locale.h>
+
+static double
+FcStrtod (char *s, char **end)
+{
+ struct lconv *locale_data;
+ char *dot;
+ double v;
+
+ /*
+ * Have to swap the decimal point to match the current locale
+ * if that locale doesn't use 0x2e
+ */
+ if ((dot = strchr (s, 0x2e)) &&
+ (locale_data = localeconv ()) &&
+ (locale_data->decimal_point[0] != 0x2e ||
+ locale_data->decimal_point[1] != 0))
+ {
+ char buf[128];
+ int slen = strlen (s);
+ int dlen = strlen (locale_data->decimal_point);
+
+ if (slen + dlen > (int) sizeof (buf))
+ {
+ if (end)
+ *end = s;
+ v = 0;
+ }
+ else
+ {
+ char *buf_end;
+ /* mantissa */
+ strncpy (buf, s, dot - s);
+ /* decimal point */
+ strcpy (buf + (dot - s), locale_data->decimal_point);
+ /* rest of number */
+ strcpy (buf + (dot - s) + dlen, dot + 1);
+ buf_end = 0;
+ v = strtod (buf, &buf_end);
+ if (buf_end) {
+ buf_end = s + (buf_end - buf);
+ if (buf_end > dot)
+ buf_end -= dlen - 1;
+ }
+ if (end)
+ *end = buf_end;
+ }
+ }
+ else
+ v = strtod (s, end);
+ return v;
+}
+
+static void
+FcParseDouble (FcConfigParse *parse)
+{
+ FcChar8 *s, *end;
+ double d;
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ end = 0;
+ d = FcStrtod ((char *) s, (char **)&end);
+ if (end != s + strlen ((char *) s))
+ FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid double", s);
+ else
+ FcVStackPushDouble (parse, d);
+ FcStrBufDestroy (&parse->pstack->str);
+}
+
+static void
+FcParseString (FcConfigParse *parse, FcVStackTag tag)
+{
+ FcChar8 *s;
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDone (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ if (!FcVStackPushString (parse, tag, s))
+ FcStrFree (s);
+}
+
+static void
+FcParseMatrix (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ enum { m_done, m_xx, m_xy, m_yx, m_yy } matrix_state = m_yy;
+ FcMatrix m;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ double v;
+ switch (vstack->tag) {
+ case FcVStackInteger:
+ v = vstack->u.integer;
+ break;
+ case FcVStackDouble:
+ v = vstack->u._double;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "non-double matrix element");
+ v = 1.0;
+ break;
+ }
+ switch (matrix_state) {
+ case m_xx: m.xx = v; break;
+ case m_xy: m.xy = v; break;
+ case m_yx: m.yx = v; break;
+ case m_yy: m.yy = v; break;
+ default: break;
+ }
+ FcVStackPopAndDestroy (parse);
+ matrix_state--;
+ }
+ if (matrix_state != m_done)
+ FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements");
+ else
+ FcVStackPushMatrix (parse, &m);
+}
+
+static void
+FcParseRange (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ FcRange r;
+ FcChar32 n;
+ int count = 1;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ if (count < 0)
+ {
+ FcConfigMessage (parse, FcSevereError, "too many elements in range");
+ return;
+ }
+ switch (vstack->tag) {
+ case FcVStackInteger:
+ n = vstack->u.integer;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "invalid element in range");
+ break;
+ }
+ if (count == 1)
+ r.end = n;
+ else
+ r.begin = n;
+ count--;
+ FcVStackPopAndDestroy (parse);
+ }
+ if (count < 0)
+ {
+ if (r.begin > r.end)
+ {
+ FcConfigMessage (parse, FcSevereError, "invalid range");
+ return;
+ }
+ FcVStackPushRange (parse, &r);
+ }
+ else
+ FcConfigMessage (parse, FcSevereError, "invalid range");
+}
+
+static FcBool
+FcConfigLexBool (FcConfigParse *parse, const FcChar8 *bool_)
+{
+ FcBool result = FcFalse;
+
+ if (!FcNameBool (bool_, &result))
+ FcConfigMessage (parse, FcSevereWarning, "\"%s\" is not known boolean",
+ bool_);
+ return result;
+}
+
+static void
+FcParseBool (FcConfigParse *parse)
+{
+ FcChar8 *s;
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ FcVStackPushBool (parse, FcConfigLexBool (parse, s));
+ FcStrBufDestroy (&parse->pstack->str);
+}
+
+static void
+FcParseCharSet (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ FcCharSet *charset = FcCharSetCreate ();
+ FcChar32 i;
+ int n = 0;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackInteger:
+ if (!FcCharSetAddChar (charset, vstack->u.integer))
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", vstack->u.integer);
+ }
+ else
+ n++;
+ break;
+ case FcVStackRange:
+ if (vstack->u.range.begin <= vstack->u.range.end)
+ {
+ for (i = vstack->u.range.begin; i <= vstack->u.range.end; i++)
+ {
+ if (!FcCharSetAddChar (charset, i))
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", i);
+ }
+ else
+ n++;
+ }
+ }
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "invalid element in charset");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+ if (n > 0)
+ FcVStackPushCharSet (parse, charset);
+ else
+ FcCharSetDestroy (charset);
+}
+
+static void
+FcParseLangSet (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ FcLangSet *langset = FcLangSetCreate ();
+ int n = 0;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackString:
+ if (!FcLangSetAdd (langset, vstack->u.string))
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid langset: %s", vstack->u.string);
+ }
+ else
+ n++;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "invalid element in langset");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+ if (n > 0)
+ FcVStackPushLangSet (parse, langset);
+ else
+ FcLangSetDestroy (langset);
+}
+
+static FcBool
+FcConfigLexBinding (FcConfigParse *parse,
+ const FcChar8 *binding_string,
+ FcValueBinding *binding_ret)
+{
+ FcValueBinding binding;
+
+ if (!binding_string)
+ binding = FcValueBindingWeak;
+ else
+ {
+ if (!strcmp ((char *) binding_string, "weak"))
+ binding = FcValueBindingWeak;
+ else if (!strcmp ((char *) binding_string, "strong"))
+ binding = FcValueBindingStrong;
+ else if (!strcmp ((char *) binding_string, "same"))
+ binding = FcValueBindingSame;
+ else
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string);
+ return FcFalse;
+ }
+ }
+ *binding_ret = binding;
+ return FcTrue;
+}
+
+static void
+FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
+{
+ FcVStack *vstack;
+ FcExpr *left, *expr = 0, *new;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ if (vstack->tag != FcVStackFamily)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "non-family");
+ FcVStackPopAndDestroy (parse);
+ continue;
+ }
+ left = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ FcVStackPopAndDestroy (parse);
+ if (expr)
+ {
+ new = FcExprCreateOp (parse->config, left, FcOpComma, expr);
+ if (!new)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcExprDestroy (left);
+ FcExprDestroy (expr);
+ break;
+ }
+ expr = new;
+ }
+ else
+ expr = left;
+ }
+ if (expr)
+ {
+ if (!FcVStackPushExpr (parse, tag, expr))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcExprDestroy (expr);
+ }
+ }
+}
+
+static void
+FcParseFamily (FcConfigParse *parse)
+{
+ FcChar8 *s;
+ FcExpr *expr;
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ expr = FcExprCreateString (parse->config, s);
+ FcStrBufDestroy (&parse->pstack->str);
+ if (expr)
+ FcVStackPushExpr (parse, FcVStackFamily, expr);
+}
+
+static void
+FcParseAlias (FcConfigParse *parse)
+{
+ FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *new = 0;
+ FcEdit *edit = 0, *next;
+ FcVStack *vstack;
+ FcTest *test;
+ FcValueBinding binding;
+
+ if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
+ return;
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackFamily:
+ if (family)
+ {
+ new = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family);
+ if (!new)
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ else
+ family = new;
+ }
+ else
+ new = vstack->u.expr;
+ if (new)
+ {
+ family = new;
+ vstack->tag = FcVStackNone;
+ }
+ break;
+ case FcVStackPrefer:
+ if (prefer)
+ FcExprDestroy (prefer);
+ prefer = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackAccept:
+ if (accept)
+ FcExprDestroy (accept);
+ accept = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackDefault:
+ if (def)
+ FcExprDestroy (def);
+ def = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "bad alias");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+ if (!family)
+ {
+ FcConfigMessage (parse, FcSevereError, "missing family in alias");
+ if (prefer)
+ FcExprDestroy (prefer);
+ if (accept)
+ FcExprDestroy (accept);
+ if (def)
+ FcExprDestroy (def);
+ return;
+ }
+ if (prefer)
+ {
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpPrepend,
+ prefer,
+ binding);
+ if (edit)
+ edit->next = 0;
+ else
+ FcExprDestroy (prefer);
+ }
+ if (accept)
+ {
+ next = edit;
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpAppend,
+ accept,
+ binding);
+ if (edit)
+ edit->next = next;
+ else
+ FcExprDestroy (accept);
+ }
+ if (def)
+ {
+ next = edit;
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpAppendLast,
+ def,
+ binding);
+ if (edit)
+ edit->next = next;
+ else
+ FcExprDestroy (def);
+ }
+ if (edit)
+ {
+ test = FcTestCreate (parse, FcMatchPattern,
+ FcQualAny,
+ (FcChar8 *) FC_FAMILY,
+ FcOpEqual,
+ family);
+ if (test)
+ if (!FcConfigAddEdit (parse->config, test, edit, FcMatchPattern))
+ FcTestDestroy (test);
+ }
+ else
+ FcExprDestroy (family);
+}
+
+static FcExpr *
+FcPopExpr (FcConfigParse *parse)
+{
+ FcVStack *vstack = FcVStackPeek (parse);
+ FcExpr *expr = 0;
+ if (!vstack)
+ return 0;
+ switch (vstack->tag) {
+ case FcVStackNone:
+ break;
+ case FcVStackString:
+ case FcVStackFamily:
+ expr = FcExprCreateString (parse->config, vstack->u.string);
+ break;
+ case FcVStackField:
+ expr = FcExprCreateField (parse->config, (char *) vstack->u.string);
+ break;
+ case FcVStackConstant:
+ expr = FcExprCreateConst (parse->config, vstack->u.string);
+ break;
+ case FcVStackGlob:
+ /* XXX: What's the correct action here? (CDW) */
+ break;
+ case FcVStackPrefer:
+ case FcVStackAccept:
+ case FcVStackDefault:
+ expr = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackInteger:
+ expr = FcExprCreateInteger (parse->config, vstack->u.integer);
+ break;
+ case FcVStackDouble:
+ expr = FcExprCreateDouble (parse->config, vstack->u._double);
+ break;
+ case FcVStackMatrix:
+ expr = FcExprCreateMatrix (parse->config, vstack->u.matrix);
+ break;
+ case FcVStackRange:
+ break;
+ case FcVStackBool:
+ expr = FcExprCreateBool (parse->config, vstack->u.bool_);
+ break;
+ case FcVStackCharSet:
+ expr = FcExprCreateCharSet (parse->config, vstack->u.charset);
+ break;
+ case FcVStackLangSet:
+ expr = FcExprCreateLangSet (parse->config, vstack->u.langset);
+ break;
+ case FcVStackTest:
+ break;
+ case FcVStackExpr:
+ expr = vstack->u.expr;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackEdit:
+ break;
+ default:
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ return expr;
+}
+
+/*
+ * This builds a tree of binary operations. Note
+ * that every operator is defined so that if only
+ * a single operand is contained, the value of the
+ * whole expression is the value of the operand.
+ *
+ * This code reduces in that case to returning that
+ * operand.
+ */
+static FcExpr *
+FcPopBinary (FcConfigParse *parse, FcOp op)
+{
+ FcExpr *left, *expr = 0, *new;
+
+ while ((left = FcPopExpr (parse)))
+ {
+ if (expr)
+ {
+ new = FcExprCreateOp (parse->config, left, op, expr);
+ if (!new)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcExprDestroy (left);
+ FcExprDestroy (expr);
+ return 0;
+ }
+ expr = new;
+ }
+ else
+ expr = left;
+ }
+ return expr;
+}
+
+static void
+FcParseBinary (FcConfigParse *parse, FcOp op)
+{
+ FcExpr *expr = FcPopBinary (parse, op);
+ if (expr)
+ FcVStackPushExpr (parse, FcVStackExpr, expr);
+}
+
+/*
+ * This builds a a unary operator, it consumes only
+ * a single operand
+ */
+
+static FcExpr *
+FcPopUnary (FcConfigParse *parse, FcOp op)
+{
+ FcExpr *operand, *new = 0;
+
+ if ((operand = FcPopExpr (parse)))
+ {
+ new = FcExprCreateOp (parse->config, operand, op, 0);
+ if (!new)
+ {
+ FcExprDestroy (operand);
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ }
+ }
+ return new;
+}
+
+static void
+FcParseUnary (FcConfigParse *parse, FcOp op)
+{
+ FcExpr *expr = FcPopUnary (parse, op);
+ if (expr)
+ FcVStackPushExpr (parse, FcVStackExpr, expr);
+}
+
+static void
+FcParseInclude (FcConfigParse *parse)
+{
+ FcChar8 *s;
+ const FcChar8 *i;
+ FcBool ignore_missing = FcFalse;
+
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ i = FcConfigGetAttribute (parse, "ignore_missing");
+ if (i && FcConfigLexBool (parse, (FcChar8 *) i) == FcTrue)
+ ignore_missing = FcTrue;
+ if (!FcConfigParseAndLoad (parse->config, s, !ignore_missing))
+ parse->error = FcTrue;
+ FcStrBufDestroy (&parse->pstack->str);
+}
+
+typedef struct _FcOpMap {
+ char name[16];
+ FcOp op;
+} FcOpMap;
+
+static FcOp
+FcConfigLexOp (const FcChar8 *op, const FcOpMap *map, int nmap)
+{
+ int i;
+
+ for (i = 0; i < nmap; i++)
+ if (!strcmp ((char *) op, map[i].name))
+ return map[i].op;
+ return FcOpInvalid;
+}
+
+static const FcOpMap fcCompareOps[] = {
+ { "eq", FcOpEqual },
+ { "not_eq", FcOpNotEqual },
+ { "less", FcOpLess },
+ { "less_eq", FcOpLessEqual },
+ { "more", FcOpMore },
+ { "more_eq", FcOpMoreEqual },
+ { "contains", FcOpContains },
+ { "not_contains", FcOpNotContains }
+};
+
+#define NUM_COMPARE_OPS (int) (sizeof fcCompareOps / sizeof fcCompareOps[0])
+
+static FcOp
+FcConfigLexCompare (const FcChar8 *compare)
+{
+ return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
+}
+
+static void
+FcParseTest (FcConfigParse *parse)
+{
+ const FcChar8 *kind_string;
+ FcMatchKind kind;
+ const FcChar8 *qual_string;
+ FcQual qual;
+ const FcChar8 *name;
+ const FcChar8 *compare_string;
+ FcOp compare;
+ FcExpr *expr;
+ FcTest *test;
+
+ kind_string = FcConfigGetAttribute (parse, "target");
+ if (!kind_string)
+ kind = FcMatchDefault;
+ else
+ {
+ if (!strcmp ((char *) kind_string, "pattern"))
+ kind = FcMatchPattern;
+ else if (!strcmp ((char *) kind_string, "font"))
+ kind = FcMatchFont;
+ else if (!strcmp ((char *) kind_string, "scan"))
+ kind = FcMatchScan;
+ else if (!strcmp ((char *) kind_string, "default"))
+ kind = FcMatchDefault;
+ else
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid test target \"%s\"", kind_string);
+ return;
+ }
+ }
+ qual_string = FcConfigGetAttribute (parse, "qual");
+ if (!qual_string)
+ qual = FcQualAny;
+ else
+ {
+ if (!strcmp ((char *) qual_string, "any"))
+ qual = FcQualAny;
+ else if (!strcmp ((char *) qual_string, "all"))
+ qual = FcQualAll;
+ else if (!strcmp ((char *) qual_string, "first"))
+ qual = FcQualFirst;
+ else if (!strcmp ((char *) qual_string, "not_first"))
+ qual = FcQualNotFirst;
+ else
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string);
+ return;
+ }
+ }
+ name = FcConfigGetAttribute (parse, "name");
+ if (!name)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "missing test name");
+ return;
+ }
+ compare_string = FcConfigGetAttribute (parse, "compare");
+ if (!compare_string)
+ compare = FcOpEqual;
+ else
+ {
+ compare = FcConfigLexCompare (compare_string);
+ if (compare == FcOpInvalid)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid test compare \"%s\"", compare_string);
+ return;
+ }
+ }
+ expr = FcPopBinary (parse, FcOpComma);
+ if (!expr)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "missing test expression");
+ return;
+ }
+ test = FcTestCreate (parse, kind, qual, name, compare, expr);
+ if (!test)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ FcVStackPushTest (parse, test);
+}
+
+static const FcOpMap fcModeOps[] = {
+ { "assign", FcOpAssign },
+ { "assign_replace", FcOpAssignReplace },
+ { "prepend", FcOpPrepend },
+ { "prepend_first", FcOpPrependFirst },
+ { "append", FcOpAppend },
+ { "append_last", FcOpAppendLast },
+};
+
+#define NUM_MODE_OPS (int) (sizeof fcModeOps / sizeof fcModeOps[0])
+
+static FcOp
+FcConfigLexMode (const FcChar8 *mode)
+{
+ return FcConfigLexOp (mode, fcModeOps, NUM_MODE_OPS);
+}
+
+static void
+FcParseEdit (FcConfigParse *parse)
+{
+ const FcChar8 *name;
+ const FcChar8 *mode_string;
+ FcOp mode;
+ FcValueBinding binding;
+ FcExpr *expr;
+ FcEdit *edit;
+
+ name = FcConfigGetAttribute (parse, "name");
+ if (!name)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "missing edit name");
+ return;
+ }
+ mode_string = FcConfigGetAttribute (parse, "mode");
+ if (!mode_string)
+ mode = FcOpAssign;
+ else
+ {
+ mode = FcConfigLexMode (mode_string);
+ if (mode == FcOpInvalid)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid edit mode \"%s\"", mode_string);
+ return;
+ }
+ }
+ if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
+ return;
+
+ expr = FcPopBinary (parse, FcOpComma);
+ edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
+ mode, expr, binding);
+ if (!edit)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcExprDestroy (expr);
+ return;
+ }
+ if (!FcVStackPushEdit (parse, edit))
+ FcEditDestroy (edit);
+}
+
+static void
+FcParseMatch (FcConfigParse *parse)
+{
+ const FcChar8 *kind_name;
+ FcMatchKind kind;
+ FcTest *test = 0;
+ FcEdit *edit = 0;
+ FcVStack *vstack;
+
+ kind_name = FcConfigGetAttribute (parse, "target");
+ if (!kind_name)
+ kind = FcMatchPattern;
+ else
+ {
+ if (!strcmp ((char *) kind_name, "pattern"))
+ kind = FcMatchPattern;
+ else if (!strcmp ((char *) kind_name, "font"))
+ kind = FcMatchFont;
+ else if (!strcmp ((char *) kind_name, "scan"))
+ kind = FcMatchScan;
+ else
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid match target \"%s\"", kind_name);
+ return;
+ }
+ }
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackTest:
+ vstack->u.test->next = test;
+ test = vstack->u.test;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackEdit:
+ vstack->u.edit->next = edit;
+ edit = vstack->u.edit;
+ vstack->tag = FcVStackNone;
+ if (kind == FcMatchScan && edit->object > FC_MAX_BASE_OBJECT)
+ {
+ FcConfigMessage (parse, FcSevereError,
+ "<match target=\"scan\"> cannot edit user-defined object \"%s\"",
+ FcObjectName(edit->object));
+ }
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "invalid match element");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+ if (!FcConfigAddEdit (parse->config, test, edit, kind))
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+}
+
+static void
+FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element)
+{
+ FcVStack *vstack;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackGlob:
+ if (!FcConfigGlobAdd (parse->config,
+ vstack->u.string,
+ element == FcElementAcceptfont))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ }
+ break;
+ case FcVStackPattern:
+ if (!FcConfigPatternsAdd (parse->config,
+ vstack->u.pattern,
+ element == FcElementAcceptfont))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ }
+ else
+ vstack->tag = FcVStackNone;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "bad font selector");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+}
+
+
+static FcValue
+FcPopValue (FcConfigParse *parse)
+{
+ FcVStack *vstack = FcVStackPeek (parse);
+ FcValue value;
+
+ value.type = FcTypeVoid;
+
+ if (!vstack)
+ return value;
+
+ switch (vstack->tag) {
+ case FcVStackString:
+ value.u.s = FcStrStaticName (vstack->u.string);
+ if (value.u.s)
+ value.type = FcTypeString;
+ break;
+ case FcVStackConstant:
+ if (FcNameConstant (vstack->u.string, &value.u.i))
+ value.type = FcTypeInteger;
+ break;
+ case FcVStackInteger:
+ value.u.i = vstack->u.integer;
+ value.type = FcTypeInteger;
+ break;
+ case FcVStackDouble:
+ value.u.d = vstack->u._double;
+ value.type = FcTypeInteger;
+ break;
+ case FcVStackMatrix:
+ value.u.m = FcMatrixCopy (vstack->u.matrix);
+ if (value.u.m)
+ value.type = FcTypeMatrix;
+ break;
+ case FcVStackBool:
+ value.u.b = vstack->u.bool_;
+ value.type = FcTypeBool;
+ break;
+ case FcVStackCharSet:
+ value.u.c = FcCharSetCopy (vstack->u.charset);
+ if (value.u.c)
+ value.type = FcTypeCharSet;
+ break;
+ case FcVStackLangSet:
+ value.u.l = FcLangSetCopy (vstack->u.langset);
+ if (value.u.l)
+ value.type = FcTypeLangSet;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d",
+ vstack->tag);
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+
+ return value;
+}
+
+static void
+FcParsePatelt (FcConfigParse *parse)
+{
+ FcValue value;
+ FcPattern *pattern = FcPatternCreate ();
+ const char *name;
+
+ if (!pattern)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+
+ name = (char *) FcConfigGetAttribute (parse, "name");
+ if (!name)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "missing pattern element name");
+ FcPatternDestroy (pattern);
+ return;
+ }
+
+ for (;;)
+ {
+ value = FcPopValue (parse);
+ if (value.type == FcTypeVoid)
+ break;
+ if (!FcPatternAdd (pattern, name, value, FcTrue))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcValueDestroy(value);
+ break;
+ }
+ FcValueDestroy(value);
+ }
+
+ FcVStackPushPattern (parse, pattern);
+}
+
+static void
+FcParsePattern (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ FcPattern *pattern = FcPatternCreate ();
+
+ if (!pattern)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch (vstack->tag) {
+ case FcVStackPattern:
+ if (!FcPatternAppend (pattern, vstack->u.pattern))
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ FcPatternDestroy (pattern);
+ return;
+ }
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "unknown pattern element");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+
+ FcVStackPushPattern (parse, pattern);
+}
+
+static void
+FcEndElement(void *userData, const XML_Char *name)
+{
+ FcConfigParse *parse = userData;
+ FcChar8 *data;
+#ifdef _WIN32
+ FcChar8 buffer[1000];
+#endif
+
+ if (!parse->pstack)
+ return;
+ switch (parse->pstack->element) {
+ case FcElementNone:
+ break;
+ case FcElementFontconfig:
+ break;
+ case FcElementDir:
+ data = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ break;
+ }
+#ifdef _WIN32
+ if (strcmp (data, "CUSTOMFONTDIR") == 0)
+ {
+ char *p;
+ data = buffer;
+ if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
+ {
+ FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
+ break;
+ }
+ /*
+ * Must use the multi-byte aware function to search
+ * for backslash because East Asian double-byte code
+ * pages have characters with backslash as the second
+ * byte.
+ */
+ p = _mbsrchr (data, '\\');
+ if (p) *p = '\0';
+ strcat (data, "\\fonts");
+ }
+ else if (strcmp (data, "APPSHAREFONTDIR") == 0)
+ {
+ char *p;
+ data = buffer;
+ if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
+ {
+ FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
+ break;
+ }
+ p = _mbsrchr (data, '\\');
+ if (p) *p = '\0';
+ strcat (data, "\\..\\share\\fonts");
+ }
+ else if (strcmp (data, "WINDOWSFONTDIR") == 0)
+ {
+ int rc;
+ data = buffer;
+#if _WIN32_WINNT >= 0x0500
+ rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20);
+#else
+ rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20);
+#endif
+ if (rc == 0 || rc > sizeof (buffer) - 20)
+ {
+ FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed");
+ break;
+ }
+ if (data [strlen (data) - 1] != '\\')
+ strcat (data, "\\");
+ strcat (data, "fonts");
+ }
+#endif
+ if (strlen ((char *) data) == 0)
+ FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored");
+ else if (!FcStrUsesHome (data) || FcConfigHome ())
+ {
+ if (!FcConfigAddDir (parse->config, data))
+ FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data);
+ }
+ FcStrBufDestroy (&parse->pstack->str);
+ break;
+ case FcElementCacheDir:
+ data = FcStrBufDone (&parse->pstack->str);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ break;
+ }
+#ifdef _WIN32
+ if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0)
+ {
+ int rc;
+ FcStrFree (data);
+ data = malloc (1000);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ break;
+ }
+ FcMemAlloc (FC_MEM_STRING, 1000);
+ rc = GetTempPath (800, data);
+ if (rc == 0 || rc > 800)
+ {
+ FcConfigMessage (parse, FcSevereError, "GetTempPath failed");
+ FcStrFree (data);
+ break;
+ }
+ if (data [strlen (data) - 1] != '\\')
+ strcat (data, "\\");
+ strcat (data, "fontconfig\\cache");
+ }
+#endif
+ if (!FcStrUsesHome (data) || FcConfigHome ())
+ {
+ if (!FcConfigAddCacheDir (parse->config, data))
+ FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data);
+ }
+ FcStrFree (data);
+ break;
+
+ case FcElementCache:
+ data = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ break;
+ }
+ /* discard this data; no longer used */
+ FcStrBufDestroy (&parse->pstack->str);
+ break;
+ case FcElementInclude:
+ FcParseInclude (parse);
+ break;
+ case FcElementConfig:
+ break;
+ case FcElementMatch:
+ FcParseMatch (parse);
+ break;
+ case FcElementAlias:
+ FcParseAlias (parse);
+ break;
+
+ case FcElementBlank:
+ FcParseBlank (parse);
+ break;
+ case FcElementRescan:
+ FcParseRescan (parse);
+ break;
+
+ case FcElementPrefer:
+ FcParseFamilies (parse, FcVStackPrefer);
+ break;
+ case FcElementAccept:
+ FcParseFamilies (parse, FcVStackAccept);
+ break;
+ case FcElementDefault:
+ FcParseFamilies (parse, FcVStackDefault);
+ break;
+ case FcElementFamily:
+ FcParseFamily (parse);
+ break;
+
+ case FcElementTest:
+ FcParseTest (parse);
+ break;
+ case FcElementEdit:
+ FcParseEdit (parse);
+ break;
+
+ case FcElementInt:
+ FcParseInt (parse);
+ break;
+ case FcElementDouble:
+ FcParseDouble (parse);
+ break;
+ case FcElementString:
+ FcParseString (parse, FcVStackString);
+ break;
+ case FcElementMatrix:
+ FcParseMatrix (parse);
+ break;
+ case FcElementRange:
+ FcParseRange (parse);
+ break;
+ case FcElementBool:
+ FcParseBool (parse);
+ break;
+ case FcElementCharSet:
+ FcParseCharSet (parse);
+ break;
+ case FcElementLangSet:
+ FcParseLangSet (parse);
+ break;
+ case FcElementSelectfont:
+ break;
+ case FcElementAcceptfont:
+ case FcElementRejectfont:
+ FcParseAcceptRejectFont (parse, parse->pstack->element);
+ break;
+ case FcElementGlob:
+ FcParseString (parse, FcVStackGlob);
+ break;
+ case FcElementPattern:
+ FcParsePattern (parse);
+ break;
+ case FcElementPatelt:
+ FcParsePatelt (parse);
+ break;
+ case FcElementName:
+ FcParseString (parse, FcVStackField);
+ break;
+ case FcElementConst:
+ FcParseString (parse, FcVStackConstant);
+ break;
+ case FcElementOr:
+ FcParseBinary (parse, FcOpOr);
+ break;
+ case FcElementAnd:
+ FcParseBinary (parse, FcOpAnd);
+ break;
+ case FcElementEq:
+ FcParseBinary (parse, FcOpEqual);
+ break;
+ case FcElementNotEq:
+ FcParseBinary (parse, FcOpNotEqual);
+ break;
+ case FcElementLess:
+ FcParseBinary (parse, FcOpLess);
+ break;
+ case FcElementLessEq:
+ FcParseBinary (parse, FcOpLessEqual);
+ break;
+ case FcElementMore:
+ FcParseBinary (parse, FcOpMore);
+ break;
+ case FcElementMoreEq:
+ FcParseBinary (parse, FcOpMoreEqual);
+ break;
+ case FcElementContains:
+ FcParseBinary (parse, FcOpContains);
+ break;
+ case FcElementNotContains:
+ FcParseBinary (parse, FcOpNotContains);
+ break;
+ case FcElementPlus:
+ FcParseBinary (parse, FcOpPlus);
+ break;
+ case FcElementMinus:
+ FcParseBinary (parse, FcOpMinus);
+ break;
+ case FcElementTimes:
+ FcParseBinary (parse, FcOpTimes);
+ break;
+ case FcElementDivide:
+ FcParseBinary (parse, FcOpDivide);
+ break;
+ case FcElementNot:
+ FcParseUnary (parse, FcOpNot);
+ break;
+ case FcElementIf:
+ FcParseBinary (parse, FcOpQuest);
+ break;
+ case FcElementFloor:
+ FcParseUnary (parse, FcOpFloor);
+ break;
+ case FcElementCeil:
+ FcParseUnary (parse, FcOpCeil);
+ break;
+ case FcElementRound:
+ FcParseUnary (parse, FcOpRound);
+ break;
+ case FcElementTrunc:
+ FcParseUnary (parse, FcOpTrunc);
+ break;
+ case FcElementUnknown:
+ break;
+ }
+ (void) FcPStackPop (parse);
+}
+
+static void
+FcCharacterData (void *userData, const XML_Char *s, int len)
+{
+ FcConfigParse *parse = userData;
+
+ if (!parse->pstack)
+ return;
+ if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len))
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+}
+
+static void
+FcStartDoctypeDecl (void *userData,
+ const XML_Char *doctypeName,
+ const XML_Char *sysid,
+ const XML_Char *pubid,
+ int has_internal_subset)
+{
+ FcConfigParse *parse = userData;
+
+ if (strcmp ((char *) doctypeName, "fontconfig") != 0)
+ FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName);
+}
+
+#ifdef ENABLE_LIBXML2
+
+static void
+FcInternalSubsetDecl (void *userData,
+ const XML_Char *doctypeName,
+ const XML_Char *sysid,
+ const XML_Char *pubid)
+{
+ FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1);
+}
+
+static void
+FcExternalSubsetDecl (void *userData,
+ const XML_Char *doctypeName,
+ const XML_Char *sysid,
+ const XML_Char *pubid)
+{
+ FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0);
+}
+
+#else /* ENABLE_LIBXML2 */
+
+static void
+FcEndDoctypeDecl (void *userData)
+{
+}
+
+#endif /* ENABLE_LIBXML2 */
+
+static int
+FcSortCmpStr (const void *a, const void *b)
+{
+ const FcChar8 *as = *((FcChar8 **) a);
+ const FcChar8 *bs = *((FcChar8 **) b);
+ return FcStrCmp (as, bs);
+}
+
+static FcBool
+FcConfigParseAndLoadDir (FcConfig *config,
+ const FcChar8 *name,
+ const FcChar8 *dir,
+ FcBool complain)
+{
+ DIR *d;
+ struct dirent *e;
+ FcBool ret = FcTrue;
+ FcChar8 *file;
+ FcChar8 *base;
+ FcStrSet *files;
+
+ d = opendir ((char *) dir);
+ if (!d)
+ {
+ if (complain)
+ FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"",
+ name);
+ ret = FcFalse;
+ goto bail0;
+ }
+ /* freed below */
+ file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
+ if (!file)
+ {
+ ret = FcFalse;
+ goto bail1;
+ }
+
+ strcpy ((char *) file, (char *) dir);
+ strcat ((char *) file, "/");
+ base = file + strlen ((char *) file);
+
+ files = FcStrSetCreate ();
+ if (!files)
+ {
+ ret = FcFalse;
+ goto bail2;
+ }
+
+ if (FcDebug () & FC_DBG_CONFIG)
+ printf ("\tScanning config dir %s\n", dir);
+
+ while (ret && (e = readdir (d)))
+ {
+ int d_len;
+#define TAIL ".conf"
+#define TAIL_LEN 5
+ /*
+ * Add all files of the form [0-9]*.conf
+ */
+ if ('0' <= e->d_name[0] && e->d_name[0] <= '9' &&
+ (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN &&
+ d_len > TAIL_LEN &&
+ strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0)
+ {
+ strcpy ((char *) base, (char *) e->d_name);
+ if (!FcStrSetAdd (files, file))
+ {
+ ret = FcFalse;
+ goto bail3;
+ }
+ }
+ }
+ if (ret)
+ {
+ int i;
+ qsort (files->strs, files->num, sizeof (FcChar8 *),
+ (int (*)(const void *, const void *)) FcSortCmpStr);
+ for (i = 0; ret && i < files->num; i++)
+ ret = FcConfigParseAndLoad (config, files->strs[i], complain);
+ }
+bail3:
+ FcStrSetDestroy (files);
+bail2:
+ free (file);
+bail1:
+ closedir (d);
+bail0:
+ return ret || !complain;
+}
+
+FcBool
+FcConfigParseAndLoad (FcConfig *config,
+ const FcChar8 *name,
+ FcBool complain)
+{
+
+ XML_Parser p;
+ FcChar8 *filename;
+ int fd;
+ int len;
+ FcConfigParse parse;
+ FcBool error = FcTrue;
+
+#ifdef ENABLE_LIBXML2
+ xmlSAXHandler sax;
+ char buf[BUFSIZ];
+#else
+ void *buf;
+#endif
+
+ filename = FcConfigFilename (name);
+ if (!filename)
+ goto bail0;
+
+ if (FcStrSetMember (config->configFiles, filename))
+ {
+ FcStrFree (filename);
+ return FcTrue;
+ }
+
+ if (!FcStrSetAdd (config->configFiles, filename))
+ {
+ FcStrFree (filename);
+ goto bail0;
+ }
+
+ if (FcFileIsDir (filename))
+ {
+ FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain);
+ FcStrFree (filename);
+ return ret;
+ }
+
+ if (FcDebug () & FC_DBG_CONFIG)
+ printf ("\tLoading config file %s\n", filename);
+
+ fd = open ((char *) filename, O_RDONLY);
+ if (fd == -1) {
+ FcStrFree (filename);
+ goto bail0;
+ }
+
+#ifdef ENABLE_LIBXML2
+ memset(&sax, 0, sizeof(sax));
+
+ sax.internalSubset = FcInternalSubsetDecl;
+ sax.externalSubset = FcExternalSubsetDecl;
+ sax.startElement = FcStartElement;
+ sax.endElement = FcEndElement;
+ sax.characters = FcCharacterData;
+
+ p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename);
+#else
+ p = XML_ParserCreate ("UTF-8");
+#endif
+ FcStrFree (filename);
+
+ if (!p)
+ goto bail1;
+
+ if (!FcConfigInit (&parse, name, config, p))
+ goto bail2;
+
+#ifndef ENABLE_LIBXML2
+
+ XML_SetUserData (p, &parse);
+
+ XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl);
+ XML_SetElementHandler (p, FcStartElement, FcEndElement);
+ XML_SetCharacterDataHandler (p, FcCharacterData);
+
+#endif /* ENABLE_LIBXML2 */
+
+ do {
+#ifndef ENABLE_LIBXML2
+ buf = XML_GetBuffer (p, BUFSIZ);
+ if (!buf)
+ {
+ FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer");
+ goto bail3;
+ }
+#endif
+ len = read (fd, buf, BUFSIZ);
+ if (len < 0)
+ {
+ FcConfigMessage (&parse, FcSevereError, "failed reading config file");
+ goto bail3;
+ }
+
+#ifdef ENABLE_LIBXML2
+ if (xmlParseChunk (p, buf, len, len == 0))
+#else
+ if (!XML_ParseBuffer (p, len, len == 0))
+#endif
+ {
+ FcConfigMessage (&parse, FcSevereError, "%s",
+ XML_ErrorString (XML_GetErrorCode (p)));
+ goto bail3;
+ }
+ } while (len != 0);
+ error = parse.error;
+bail3:
+ FcConfigCleanup (&parse);
+bail2:
+ XML_ParserFree (p);
+bail1:
+ close (fd);
+ fd = -1;
+bail0:
+ if (error && complain)
+ {
+ if (name)
+ FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name);
+ else
+ FcConfigMessage (0, FcSevereError, "Cannot load default config file");
+ return FcFalse;
+ }
+ return FcTrue;
+}
+#define __fcxml__
+#include "fcaliastail.h"
+#undef __fcxml__
diff --git a/fontconfig/src/makefile b/fontconfig/src/makefile
index 61eb00cb9..f27d62fa5 100644
--- a/fontconfig/src/makefile
+++ b/fontconfig/src/makefile
@@ -9,7 +9,6 @@
# -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
# -DFONTCONFIG_PATH='"$(CONFDIR)"'
-load_makefile NORELDBG=1 ..\fc-arch\makefile
load_makefile NORELDBG=1 ..\fc-case\makefile
load_makefile NORELDBG=1 ..\fc-glyphname\makefile
load_makefile NORELDBG=1 ..\fc-lang\makefile