summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/fontconfig/src
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-08 14:30:41 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-12 13:49:54 +0200
commitab0a50979b9eb4dfa3320eff7e187e41efedf7a9 (patch)
tree498dfb8a97ff3361a9f7486863a52bb4e26bb898 /chromium/third_party/fontconfig/src
parent4ce69f7403811819800e7c5ae1318b2647e778d1 (diff)
Update Chromium to beta version 37.0.2062.68
Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'chromium/third_party/fontconfig/src')
-rw-r--r--chromium/third_party/fontconfig/src/AUTHORS3
-rw-r--r--chromium/third_party/fontconfig/src/COPYING28
-rw-r--r--chromium/third_party/fontconfig/src/INSTALL42
-rw-r--r--chromium/third_party/fontconfig/src/Makefile.am157
-rw-r--r--chromium/third_party/fontconfig/src/NEWS0
-rw-r--r--chromium/third_party/fontconfig/src/README1431
-rw-r--r--chromium/third_party/fontconfig/src/Tools.mk64
-rwxr-xr-xchromium/third_party/fontconfig/src/autogen.sh124
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-autohint.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-no-sub-pixel.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-scale-bitmap-fonts.conf81
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-bgr.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-rgb.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vbgr.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vrgb.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/10-unhinted.conf14
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-default.conf16
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-legacy.conf16
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-light.conf16
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/20-unhint-small-vera.conf48
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/25-unhint-nonlatin.conf128
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/30-metric-aliases.conf497
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/30-urw-aliases.conf24
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/40-nonlatin.conf231
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/45-latin.conf189
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/49-sansserif.conf21
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/50-user.conf15
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/51-local.conf6
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/60-latin.conf70
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/65-fonts-persian.conf419
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/65-khmer.conf16
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/65-nonlatin.conf196
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/69-unifont.conf28
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/70-no-bitmaps.conf12
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/70-yes-bitmaps.conf12
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/80-delicious.conf19
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/90-synthetic.conf64
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/Makefile.am103
-rw-r--r--chromium/third_party/fontconfig/src/conf.d/README.in23
-rw-r--r--chromium/third_party/fontconfig/src/config-fixups.h40
-rw-r--r--chromium/third_party/fontconfig/src/config/Makedefs.in76
-rw-r--r--chromium/third_party/fontconfig/src/config/config-subst10
-rw-r--r--chromium/third_party/fontconfig/src/config/config.guess1497
-rw-r--r--chromium/third_party/fontconfig/src/config/config.sub1608
-rw-r--r--chromium/third_party/fontconfig/src/config/install.sh240
-rw-r--r--chromium/third_party/fontconfig/src/configure.ac751
-rw-r--r--chromium/third_party/fontconfig/src/doc/Makefile.am219
-rw-r--r--chromium/third_party/fontconfig/src/doc/check-missing-doc24
-rw-r--r--chromium/third_party/fontconfig/src/doc/confdir.sgml.in26
-rw-r--r--chromium/third_party/fontconfig/src/doc/edit-sgml.c546
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcatomic.fncs95
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcblanks.fncs58
-rw-r--r--chromium/third_party/fontconfig/src/doc/fccache.fncs86
-rw-r--r--chromium/third_party/fontconfig/src/doc/fccharset.fncs241
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcconfig.fncs394
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcconstant.fncs58
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcdircache.fncs88
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcfile.fncs88
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcfontset.fncs140
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcformat.fncs308
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcfreetype.fncs106
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcinit.fncs92
-rw-r--r--chromium/third_party/fontconfig/src/doc/fclangset.fncs195
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcmatrix.fncs125
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcobjectset.fncs73
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcobjecttype.fncs48
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcpattern.fncs397
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcstring.fncs244
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcstrset.fncs123
-rw-r--r--chromium/third_party/fontconfig/src/doc/fcvalue.fncs61
-rw-r--r--chromium/third_party/fontconfig/src/doc/fontconfig-devel.sgml582
-rw-r--r--chromium/third_party/fontconfig/src/doc/fontconfig-user.sgml795
-rw-r--r--chromium/third_party/fontconfig/src/doc/func.sgml90
-rw-r--r--chromium/third_party/fontconfig/src/doc/version.sgml.in24
-rw-r--r--chromium/third_party/fontconfig/src/fc-cache/Makefile.am69
-rw-r--r--chromium/third_party/fontconfig/src/fc-cache/fc-cache.c406
-rw-r--r--chromium/third_party/fontconfig/src/fc-cache/fc-cache.sgml220
-rw-r--r--chromium/third_party/fontconfig/src/fc-case/CaseFolding.txt1226
-rw-r--r--chromium/third_party/fontconfig/src/fc-case/Makefile.am33
-rw-r--r--chromium/third_party/fontconfig/src/fc-case/fc-case.c363
-rw-r--r--chromium/third_party/fontconfig/src/fc-case/fccase.tmpl.h25
-rw-r--r--chromium/third_party/fontconfig/src/fc-cat/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-cat/fc-cat.c390
-rw-r--r--chromium/third_party/fontconfig/src/fc-cat/fc-cat.sgml169
-rw-r--r--chromium/third_party/fontconfig/src/fc-glyphname/Makefile.am33
-rw-r--r--chromium/third_party/fontconfig/src/fc-glyphname/fc-glyphname.c325
-rw-r--r--chromium/third_party/fontconfig/src/fc-glyphname/fcglyphname.tmpl.h25
-rw-r--r--chromium/third_party/fontconfig/src/fc-glyphname/zapfdingbats.txt212
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/Makefile.am286
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/aa.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ab.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/af.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ak.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/am.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/an.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ar.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/as.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ast.orth47
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/av.orth97
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ay.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/az_az.orth53
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/az_ir.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ba.orth56
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/be.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ber_dz.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ber_ma.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bg.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bh.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bho.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bi.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bin.orth55
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bm.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bn.orth44
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bo.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/br.orth47
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/brx.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bs.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/bua.orth102
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/byn.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ca.orth58
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ce.orth97
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ch.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/chm.orth109
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/chr.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/co.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/crh.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/cs.orth67
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/csb.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/cu.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/cv.orth109
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/cy.orth63
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/da.orth89
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/de.orth49
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/doi.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/dv.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/dz.orth28
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ee.orth77
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/el.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/en.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/eo.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/es.orth50
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/et.orth47
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/eu.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fa.orth73
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fat.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fc-lang.c587
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fc-lang.man39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fclang.tmpl.h25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ff.orth38
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fi.orth51
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fil.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fj.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fo.orth59
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fr.orth58
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fur.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/fy.orth61
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ga.orth84
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gd.orth51
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gez.orth60
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gl.orth50
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gn.orth48
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gu.orth41
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/gv.orth31
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ha.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/haw.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/he.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hi.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hne.orth28
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ho.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hr.orth49
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hsb.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ht.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hu.orth49
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hy.orth26
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/hz.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ia.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/id.orth31
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ie.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ig.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ii.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ik.orth100
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/io.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/is.orth64
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/iso-3166.txt242
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/iso639-1139
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/iso639-2473
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/it.orth51
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/iu.orth77
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ja.orth6565
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/jv.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ka.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kaa.orth110
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kab.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ki.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kj.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kk.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kl.orth63
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/km.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kn.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ko.orth2538
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kok.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kr.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ks.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ku_am.orth91
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ku_iq.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ku_ir.orth49
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ku_tr.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kum.orth96
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kv.orth101
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kw.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/kwm.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ky.orth102
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/la.orth31
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lah.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lb.orth62
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lez.orth97
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lg.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/li.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ln.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lo.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lt.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/lv.orth44
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mai.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mg.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mh.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mi.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mk.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ml.orth38
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mn_cn.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mn_mn.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mni.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mo.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mr.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ms.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/mt.orth67
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/my.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/na.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nb.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nds.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ne.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ng.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nl.orth63
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nn.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/no.orth68
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nqo.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nr.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nso.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/nv.orth48
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ny.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/oc.orth53
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/om.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/or.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/os.orth96
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ota.orth41
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pa.orth53
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pa_pk.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pap_an.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pap_aw.orth31
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pes.orth26
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pl.orth41
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/prs.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ps_af.orth52
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ps_pk.orth52
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/pt.orth64
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/qu.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/quz.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/rm.orth45
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/rn.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ro.orth38
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ru.orth38
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/rw.orth31
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sa.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sah.orth108
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sat.orth44
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sc.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sco.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sd.orth58
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/se.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sel.orth96
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sg.orth47
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sh.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/shs.orth48
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/si.orth75
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sid.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sk.orth63
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sl.orth88
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sm.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sma.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/smj.orth37
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/smn.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sms.orth48
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sn.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/so.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sq.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sr.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ss.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/st.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/su.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sv.orth100
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/sw.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/syr.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ta.orth46
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/te.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tg.orth108
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/th.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ti_er.orth56
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ti_et.orth33
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tig.orth52
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tk.orth44
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tl.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tn.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/to.orth30
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tr.orth49
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ts.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tt.orth108
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tw.orth50
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ty.orth41
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/tyv.orth102
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ug.orth50
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/uk.orth43
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ur.orth68
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/uz.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/ve.orth34
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/vi.orth58
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/vo.orth36
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/vot.orth40
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/wa.orth47
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/wal.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/wen.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/wo.orth42
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/xh.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/yap.orth35
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/yi.orth25
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/yo.orth86
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/za.orth39
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zh_cn.orth6792
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zh_hk.orth2240
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zh_mo.orth32
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zh_sg.orth27
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zh_tw.orth13105
-rw-r--r--chromium/third_party/fontconfig/src/fc-lang/zu.orth29
-rw-r--r--chromium/third_party/fontconfig/src/fc-list/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-list/fc-list.c200
-rw-r--r--chromium/third_party/fontconfig/src/fc-list/fc-list.sgml227
-rw-r--r--chromium/third_party/fontconfig/src/fc-match/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-match/fc-match.c248
-rw-r--r--chromium/third_party/fontconfig/src/fc-match/fc-match.sgml217
-rw-r--r--chromium/third_party/fontconfig/src/fc-pattern/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.c195
-rw-r--r--chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.sgml204
-rw-r--r--chromium/third_party/fontconfig/src/fc-query/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-query/fc-query.c182
-rw-r--r--chromium/third_party/fontconfig/src/fc-query/fc-query.sgml192
-rw-r--r--chromium/third_party/fontconfig/src/fc-scan/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-scan/fc-scan.c178
-rw-r--r--chromium/third_party/fontconfig/src/fc-scan/fc-scan.sgml177
-rw-r--r--chromium/third_party/fontconfig/src/fc-validate/Makefile.am60
-rw-r--r--chromium/third_party/fontconfig/src/fc-validate/fc-validate.c242
-rw-r--r--chromium/third_party/fontconfig/src/fc-validate/fc-validate.sgml182
-rwxr-xr-xchromium/third_party/fontconfig/src/fontconfig-zip.in29
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig.pc.in18
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig.spec.in138
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig/Makefile.am10
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig/fcfreetype.h59
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig/fcprivate.h124
-rw-r--r--chromium/third_party/fontconfig/src/fontconfig/fontconfig.h1007
-rw-r--r--chromium/third_party/fontconfig/src/fonts.conf.in155
-rw-r--r--chromium/third_party/fontconfig/src/fonts.dtd233
-rw-r--r--chromium/third_party/fontconfig/src/git.mk227
-rw-r--r--chromium/third_party/fontconfig/src/local.conf37
-rw-r--r--chromium/third_party/fontconfig/src/m4/.gitkeep0
-rw-r--r--chromium/third_party/fontconfig/src/m4/ax_cc_for_build.m477
-rw-r--r--chromium/third_party/fontconfig/src/m4/ax_create_stdint_h.m4695
-rw-r--r--chromium/third_party/fontconfig/src/m4/ax_pthread.m4309
-rw-r--r--chromium/third_party/fontconfig/src/new-version.sh118
-rw-r--r--chromium/third_party/fontconfig/src/src/Makefile.am213
-rw-r--r--chromium/third_party/fontconfig/src/src/fcarch.c60
-rw-r--r--chromium/third_party/fontconfig/src/src/fcarch.h76
-rw-r--r--chromium/third_party/fontconfig/src/src/fcatomic.c229
-rw-r--r--chromium/third_party/fontconfig/src/src/fcatomic.h145
-rw-r--r--chromium/third_party/fontconfig/src/src/fcblanks.c87
-rw-r--r--chromium/third_party/fontconfig/src/src/fccache.c1464
-rw-r--r--chromium/third_party/fontconfig/src/src/fccfg.c2352
-rw-r--r--chromium/third_party/fontconfig/src/src/fccharset.c1434
-rw-r--r--chromium/third_party/fontconfig/src/src/fccompat.c244
-rw-r--r--chromium/third_party/fontconfig/src/src/fcdbg.c499
-rw-r--r--chromium/third_party/fontconfig/src/src/fcdefault.c314
-rw-r--r--chromium/third_party/fontconfig/src/src/fcdeprecate.h36
-rw-r--r--chromium/third_party/fontconfig/src/src/fcdir.c335
-rw-r--r--chromium/third_party/fontconfig/src/src/fcformat.c1220
-rw-r--r--chromium/third_party/fontconfig/src/src/fcfreetype.c2822
-rw-r--r--chromium/third_party/fontconfig/src/src/fcfs.c127
-rw-r--r--chromium/third_party/fontconfig/src/src/fcftint.h54
-rw-r--r--chromium/third_party/fontconfig/src/src/fchash.c317
-rw-r--r--chromium/third_party/fontconfig/src/src/fcinit.c215
-rw-r--r--chromium/third_party/fontconfig/src/src/fcint.h1162
-rw-r--r--chromium/third_party/fontconfig/src/src/fclang.c1059
-rw-r--r--chromium/third_party/fontconfig/src/src/fclist.c607
-rw-r--r--chromium/third_party/fontconfig/src/src/fcmatch.c1025
-rw-r--r--chromium/third_party/fontconfig/src/src/fcmatrix.c116
-rw-r--r--chromium/third_party/fontconfig/src/src/fcmutex.h127
-rw-r--r--chromium/third_party/fontconfig/src/src/fcname.c584
-rw-r--r--chromium/third_party/fontconfig/src/src/fcobjs.c139
-rw-r--r--chromium/third_party/fontconfig/src/src/fcobjs.h48
-rw-r--r--chromium/third_party/fontconfig/src/src/fcobjshash.gperf.h26
-rw-r--r--chromium/third_party/fontconfig/src/src/fcpat.c1316
-rw-r--r--chromium/third_party/fontconfig/src/src/fcserialize.c155
-rw-r--r--chromium/third_party/fontconfig/src/src/fcstat.c361
-rw-r--r--chromium/third_party/fontconfig/src/src/fcstr.c1400
-rw-r--r--chromium/third_party/fontconfig/src/src/fcwindows.h44
-rw-r--r--chromium/third_party/fontconfig/src/src/fcxml.c3207
-rw-r--r--chromium/third_party/fontconfig/src/src/ftglue.c261
-rw-r--r--chromium/third_party/fontconfig/src/src/ftglue.h111
-rwxr-xr-xchromium/third_party/fontconfig/src/src/makealias38
414 files changed, 91486 insertions, 0 deletions
diff --git a/chromium/third_party/fontconfig/src/AUTHORS b/chromium/third_party/fontconfig/src/AUTHORS
new file mode 100644
index 00000000000..5ef8885483d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/AUTHORS
@@ -0,0 +1,3 @@
+Keith Packard <keithp@keithp.com>
+Patrick Lam <plam@mit.edu>
+
diff --git a/chromium/third_party/fontconfig/src/COPYING b/chromium/third_party/fontconfig/src/COPYING
new file mode 100644
index 00000000000..66392b13b9f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/COPYING
@@ -0,0 +1,28 @@
+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
+Copyright © 2012 Google, Inc.
+
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of the author(s) not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. The authors make no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER 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/chromium/third_party/fontconfig/src/INSTALL b/chromium/third_party/fontconfig/src/INSTALL
new file mode 100644
index 00000000000..670add1f32c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/INSTALL
@@ -0,0 +1,42 @@
+Fontconfig is built with the traditional configure script:
+
+ $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
+
+If you checked out from the git repository (as opposed to downloading a
+tarball), you need to run autogen.sh instead of configure:
+
+ $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
+
+Either way, that should generate valid Makefiles, then:
+
+ $ make
+ $ make install
+
+If you're going to package fontconfig for release, there are several
+important steps:
+
+ 1. Create new version
+ sh new-version.sh 2.xx.xx
+
+ 2. rebuild the configuration files with autogen.sh
+ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var
+
+ 3. make distcheck
+
+ 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to
+
+ freedesktop.org:/srv/www.freedesktop.org/www/software/fontconfig/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 freedesktop.org:/srv/www.freedesktop.org/www/software/fontconfig
+
+ 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/chromium/third_party/fontconfig/src/Makefile.am b/chromium/third_party/fontconfig/src/Makefile.am
new file mode 100644
index 00000000000..2b949e43963
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/Makefile.am
@@ -0,0 +1,157 @@
+#
+# 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.
+
+SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \
+ fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \
+ fc-validate conf.d test
+if ENABLE_DOCS
+SUBDIRS += doc
+endif
+
+ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST = \
+ fontconfig.pc.in \
+ fonts.conf.in \
+ fonts.dtd \
+ fontconfig.spec.in \
+ fontconfig.spec \
+ fontconfig-zip.in \
+ config-fixups.h
+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 \
+ $(srcdir)/test-driver \
+ `find "$(srcdir)" -type f -name Makefile.in -print`
+
+pkgconfig_DATA = fontconfig.pc
+
+baseconfigdir = $(BASECONFIGDIR)
+configdir = $(CONFIGDIR)
+
+xmldir = $(XMLDIR)
+xml_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 $(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
+
+FC_CONFIGDIR = $(subst $(BASECONFIGDIR)/,,$(CONFIGDIR))
+
+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,@CONFIGDIR\@,$(FC_CONFIGDIR),g' \
+ -e 's,@PACKAGE\@,$(PACKAGE),g' \
+ -e 's,@VERSION\@,$(VERSION),g' \
+ $(srcdir)/$@.in > $@.tmp && \
+ mv $@.tmp $@
+
+install-data-local: fonts.conf
+ $(mkinstalldirs) $(DESTDIR)$(baseconfigdir) $(DESTDIR)$(fc_cachedir)
+ if [ -f $(DESTDIR)$(baseconfigdir)/fonts.conf ]; then \
+ echo "backing up existing $(DESTDIR)$(baseconfigdir)/fonts.conf"; \
+ mv $(DESTDIR)$(baseconfigdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf.bak; \
+ fi
+ if [ -f $(srcdir)/fonts.conf ]; then \
+ echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf"; \
+ $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; \
+ else if [ -f fonts.conf ]; then \
+ echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf"; \
+ $(INSTALL_DATA) fonts.conf $(DESTDIR)$(baseconfigdir)/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)$(baseconfigdir)/fonts.conf; then \
+ echo " uninstall standard $(DESTDIR)$(baseconfigdir)/fonts.conf"; \
+ $(RM) $(DESTDIR)$(baseconfigdir)/fonts.conf; \
+ fi; \
+ else if [ -f fonts.conf ]; then \
+ if cmp -s fonts.conf $(DESTDIR)$(baseconfigdir)/fonts.conf; then \
+ echo " uninstall standard $(DESTDIR)$(baseconfigdir)/fonts.conf"; \
+ $(RM) $(DESTDIR)$(baseconfigdir)/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) $(PACKAGE)_$(VERSION).orig.tar.gz
+ $(RM) -r $(distdir).orig
+ cp -a $(distdir) $(distdir).orig
+ $(RM) -r $(distdir).orig/debian
+
+DISTCHECK_CONFIGURE_FLAGS =
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/NEWS b/chromium/third_party/fontconfig/src/NEWS
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/NEWS
diff --git a/chromium/third_party/fontconfig/src/README b/chromium/third_party/fontconfig/src/README
new file mode 100644
index 00000000000..d2288a55994
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/README
@@ -0,0 +1,1431 @@
+ Fontconfig
+ Font configuration and customization library
+ Version 2.11
+ 2013-10-11
+
+
+Check INSTALL for compilation and installation instructions.
+Report bugs to https://bugs.freedesktop.org in the fontconfig module.
+
+2.11
+
+Akira TAGOH (15):
+ Do not create a config dir for migration when no config files nor dirs
+ Add a test case of the migration for config place
+ Fix memory leaks in FcFreeTypeQueryFace
+ Bug 68955 - Deprecate / remove FC_RASTERIZER
+ Copy all values from the font to the pattern if the pattern doesn't have the element
+ Fix a crash when FcPattern is set to null on FcFontSetList() and FcFontList()
+ Add the description of -q option to the man page
+ avoid reading config.h twice
+ clean up
+ Add the relative path for <include> to fonts.conf if the parent path is same to fonts.conf
+ Workaround the race condition issue on updating cache
+ exit with the error code when FcNameParse() failed
+ Add missing doc for FcStrListFirst and fix a typo
+ Bump libtool revision
+ Update CaseFolding.txt to Unicode 6.3
+
+Jan Alexander Steffens (heftig) (1):
+ Further changes to 30-metric-aliases.conf
+
+W. Trevor King (1):
+ doc/fccharset.fncs: Describe the map format in more detail
+
+2.10.95 (2.11 RC5)
+
+Akira TAGOH (2):
+ Fix a typo
+ Fix a crash
+
+2.10.94 (2.11 RC4)
+
+Akira TAGOH (25):
+ Bug 64906 - FcNameParse() should ignore leading whitespace in parameters
+ Fix a comparison of constant warning with clang
+ Fix a shift count overflow on 32bit box
+ Fix a incompatible pointer warning on NetBSD
+ Add FcTypeUnknown to FcType to avoid comparison of constant -1
+ Fix the behavior of intermixed tests end edits in match
+ Ignore scandir() check on mingw
+ Use INT_MAX instead of unreliable hardcoding value
+ Add FC_UNUSED to FC_ASSERT_STATIC macro to avoid compiler warning
+ Rework to apply the intermixed test and edit elements in one-pass
+ trivial code optimization
+ Correct fontconfig.pc to add certain dependencies for build
+ Correct fontconfig.pc to add certain dependencies for static build
+ Fix wrong edit position
+ Bug 67809 - Invalid read/write with valgrind when assigning something twice
+ warn deprecated only when migration failed
+ Bug 67845 - Match on FC_SCALABLE
+ Bug 16818 - fontformat in match pattern is not respected?
+ Bug 68340 - More metric compat fonts
+ Bug 63399 - Add default aliases for Georgia, Garamond, Palatino Linotype, Trebuchet MS
+ Fix a typo
+ Fix a crash when non-builtin objects are edited
+ Fix a wrong edit position when 'kind' is different
+ Bug 68587 - copy qu.orth to quz.orth
+ Add quz.orth to Makefile.am
+
+Behdad Esfahbod (2):
+ Minor
+ Fix assertion
+
+2.10.93 (2.11 RC3)
+
+Akira TAGOH (10):
+ Bug 62980 - matching native fonts with even :lang=en
+ Ensure closing fp on error
+ Obtain fonts data via FT_Face instead of opening a file directly
+ Revert the previous change and rework to not export freetype API outside fcfreetype.c
+ documented FC_HASH and FC_POSTSCRIPT_NAME
+ Bug 63329 - make check fails: .. contents:: :depth: 2
+ Use the glob matching for filename
+ Bug 63452 - conf.d/README outdated
+ Fix missing OSAtomicCompareAndSwapPtrBarrier() on Mac OS X 10.4
+ Bug 63922 - FcFreeTypeQueryFace fails on postscripts fonts loaded from memory
+
+Sebastian Freundt (1):
+ build-chain, replace INCLUDES directive by AM_CPPFLAGS
+
+2.10.92 (2.11 RC2)
+
+Akira TAGOH (33):
+ Fix the build fail on MinGW
+ Bug 50497 - RFE: Add OpenType feature tags support
+ Improve FcGetPrgname() to work on BSD
+ Better fix for 2fe5ddfd
+ Add missing file descriptor to F_DUPFD_CLOEXEC
+ Fix mkstemp absence for some platform
+ Fix installation on MinGW32
+ Add another approach to FC_PRGNAME for Solaris 10 or before
+ remove the unnecessary code
+ Bug 59385 - Do the right thing for intermixed edit and test elements
+ Bug 23757 - Add mode="delete" to <edit>
+ Modernize configure.ac
+ Use AM_MISSING_PROG instead of hardcoding missing
+ Revert "test: Use SH_LOG_COMPILER and AM_TESTS_ENVIRONMENT"
+ Use AM_MISSING_PROG instead of hardcoding missing
+ Bug 50733 - Add font-file hash?
+ Bug 60312 - DIST_SUBDIRS should never appear in a conditional
+ Update _FcMatchers definition logic
+ Bump the cache version to 4
+ Add Culmus foundry to the vendor list
+ Bug 60748 - broken conf.d/10-autohint.conf and conf.d/10-unhinted.conf
+ Bug 60783 - Add Liberation Sans Narrow to 30-metric-aliases.conf
+ Fix a typo
+ Fix a crash when the object is non-builtin object
+ Fix broken sort order with FcFontSort()
+ Fix a memory leak
+ Bug 59456 - Adding a --sysroot like option to fc-cache
+ Do not copy FC_*LANG_OBJECT even if it's not available on the pattern
+ Fix a SIGSEGV on FcPatternGet* with NULL pattern
+ Bug 38737 - Wishlist: support FC_POSTSCRIPT_NAME
+ Minor cleanup
+ Bump libtool revision
+ Minor fix
+
+Behdad Esfahbod (12):
+ Resepct $NOCONFIGURE
+ Ensure we find the uninstalled fontconfig header
+ Copy all values from pattern to font if the font doesn't have the element
+ Minor
+ Bug 59379 - FC_PRGNAME
+ Remove unused checks for common functions
+ Minor
+ Fix fc-cache crash caused by looking up NULL object incorrectly
+ Fix FC_PRGNAME default
+ Fix readlink failure
+ Accept digits as part of OpenType script tags
+ Fix crash with FcConfigSetCurrent(NULL)
+
+Christoph J. Thompson (1):
+ Use the PKG_INSTALLDIR macro.
+
+Colin Walters (1):
+ build: Only use PKG_INSTALLDIR if available
+
+Quentin Glidic (2):
+ test: Use SH_LOG_COMPILER and AM_TESTS_ENVIRONMENT
+ Use LOG_COMPILER and AM_TESTS_ENVIRONMENT
+
+2.10.91 (2.11 RC1)
+
+Akira TAGOH (19):
+ Fix a potability issue about stdint.h
+ Fix build issues on clean tree
+ Do not show the deprecation warning if it is a symlink
+ Fix a typo
+ Fix the wrong estimation for the memory usage information in fontconfig
+ Remove the duplicate null-check
+ Remove the dead code
+ clean up
+ Fix a typo that accessing to the out of array
+ Fix a memory leak
+ Check the system font to be initialized
+ Missing header file for _mkdir declaration
+ Clean up the unused variable
+ Bug 47705 - Using O_CLOEXEC
+ missing header file to declare _mkdir
+ Fix a build fail on mingw
+ Fix a typo in the manpages template
+ Bug 29312 - RFE: feature to indicate which characters are missing to satisfy the language support
+ Update the date in README properly
+
+Behdad Esfahbod (73):
+ Fix typo
+ Parse matrices of expressions
+ Fix compiler warnings
+ Fix unused-parameter warnings
+ Fix more warnings
+ Fix sign-compare warnings
+ Fix warning
+ Fix more warnings
+ Fixup from 4f6767470f52b287a2923e7e6d8de5fae1993f67
+ Remove memory accounting and reporting
+ Allow target="font/pattern/default" in <name> elements
+ Don't warn if an unknown element is used in an expression
+ Unbreak build when FC_ARCHITECTURE is defined
+ Remove unneeded stuff
+ Enable fcarch assert checks even when FC_ARCHITECTURE is explicitly given
+ Make tests run on Windows
+ Initialize matrix during name parsing
+ Adjust docs for recent changes
+ Warn if <name target="font"> appears in <match target="pattern">
+ Make FC_DBG_OBJTYPES debug messages into warnings
+ Refuse to set value to unsupported types during config too
+ Add NULL check
+ Don't crash in FcPatternDestroy with NULL pattern
+ Don't crash in FcPatternFormat() with NULL pattern
+ Minor
+ Whitespace
+ Deprecate FcName(Un)RegisterObjectTypes / FcName(Un)RegisterConstants
+ Use a static perfect hash table for object-name lookup
+ Switch .gitignore to git.mk
+ Remove shared-str pool
+ Fix build stuff
+ Add build stuff for threadsafety primitives
+ Add thread-safety primitives
+ Make refcounts, patterns, charsets, strings, and FcLang thread-safe
+ Make FcGetDefaultLang and FcGetDefaultLangs thread-safe
+ Make FcInitDebug() idempotent
+ Make FcDefaultFini() threadsafe
+ Refactor; contain default config in fccfg.c
+ Minor
+ Make default-FcConfig threadsafe
+ Minor
+ Make FcCacheIsMmapSafe() threadsafe
+ Minor
+ Make cache refcounting threadsafe
+ Add a big cache lock
+ Make random-state initialization threadsafe
+ Make cache hash threadsafe
+ Make FcDirCacheDispose() threadsafe
+ Make fcobjs.c thread-safe
+ Warn about undefined/invalid attributes during config parsing
+ Fixup fcobjs.c
+ Remove FcSharedStr*
+ Fix compiler warnings
+ Minor
+ Fix build and warnings on win32
+ Use CC_FOR_BUILD to generate source files
+ Fix more warnings.
+ Trying to fix distcheck
+ Fix build around true/false
+ Work around Sun CPP
+ Really fix cross-compiling and building of tools this time
+ Second try to make Sun CPP happy
+ Ugh, add Tools.mk
+ Minor
+ Don't use blanks for fc-query
+ Remove FcInit() calls from tools
+ Add 10-scale-bitmap-fonts.conf and enable by default
+ Oops, add the actual file
+ Fix pthreads setup
+ Fix memory corruption!
+ Add pthread test
+ Add atomic ops for Solaris
+ Make linker happy
+
+Jon TURNEY (1):
+ Fix build when srcdir != builddir
+
+2.10.2
+
+Akira TAGOH (13):
+ Bug 53585 - Two highly-visible typos in src/fcxml.c
+ Fix for libtoolize's warnings
+ Bug 54138 - X_OK permission is invalid for win32 access(..) calls
+ Bug 52573 - patch required to build 2.10.x with oldish GNU C library headers
+ deal with warnings as errors for the previous change
+ Fix wrongly squashing for the network path on Win32.
+ Fix syntax errors in fonts.dtd.
+ autogen.sh: Add -I option to tell aclocal a place for external m4 files
+ Use automake variable instead of cleaning files in clean-local
+ Bug 56531 - autogen.sh fails due to missing 'm4' directory
+ Bug 57114 - regression on FcFontMatch with namelang
+ Update CaseFolding.txt to Unicode 6.2
+ Bug 57286 - Remove UnBatang and Baekmuk Batang from monospace in 65-nonlatin.conf
+
+Behdad Esfahbod (1):
+ Fix N'ko orthography
+
+Jeremy Huddleston Sequoia (1):
+ Remove _CONFIG_FIXUPS_H_ guards, so multiple includes of "config.h" result in the correct values
+
+2.10.1
+
+Akira TAGOH (2):
+ Fix a typo in fontconfig.pc
+ Install config files first
+
+2.10.0
+
+Akira TAGOH (5):
+ Bug 34266 - configs silently ignored if libxml2 doesn't support SAX1 interface
+ Update CaseFolding.txt to Unicode 6.1
+ Fix a build fail with gcc 2.95, not supporting the flexible array members.
+ Bump libtool revision
+ Update INSTALL
+
+2.9.92 (2.10 RC2)
+
+Akira TAGOH (9):
+ Bug 50835 - Deprecate FC_GLOBAL_ADVANCE
+ Fix a typo and build fail.
+ Fix a build fail on MINGW
+ Fix the fail of make install with --disable-shared on Win32
+ clean up the lock file properly on even hardlink-not-supported filesystem.
+ Rename configure.in to configure.ac
+ Bug 18726 - RFE: help write locale-specific tests
+ Bump libtool revision
+ Update INSTALL
+
+Marius Tolzmann (2):
+ Fix newline in warning about deprecated config includes
+ Fix warning about deprecated, non-existent config includes
+
+2.9.91 (2.10 RC1)
+
+Akira TAGOH (60):
+ [doc] Update the path for cache files and the version.
+ [doc] Update for cachedir.
+ Revert "Fix a build fail on some environment."
+ Revert "Fix a build fail on some environment"
+ Fix a build issue due to the use of non-portable variables
+ Get rid of the prerequisites from the sufix rules
+ Bug 39914 - Please tag the cache directory with CACHEDIR.TAG
+ fc-cache: improvement of the fix for Bug#39914.
+ fcmatch: Set FcResultMatch at the end if the return value is valid.
+ Bug 47703 - SimSun default family
+ Bug 17722 - Don't overwrite user's configurations in default config
+ Fix a memory leak in FcDirScanConfig()
+ Bug 17832 - Memory leaks due to FcStrStaticName use for external patterns
+ fcpat: Increase the number of buckets in the shared string hash table
+ Fix the hardcoded cache file suffix
+ Move workaround macros for fat binaries into the separate header file
+ Bug 48020 - Fix for src/makealias on Solaris 10
+ Bug 24729 - [ne_NP] Fix ortho file
+ doc: Add contains and not_contains operators and elements
+ Use AC_HELP_STRING instead of formatting manually
+ Use pkgconfig to check builddeps
+ Bug 29341 - Make some fontconfig paths configurable
+ Bug 22862 - <alias> ignores <match> <test>s
+ Bug 26830 - Add search for libiconv non-default directory
+ Bug 28491 - Allow matching on FC_FILE
+ Bug 48573 - platform without regex do not have also REG_XXX defines
+ Bug 27526 - Compatibility fix for old windows sytems
+ Add --with-expat, --with-expat-includes and --with-expat-lib back.
+ doc: Fix a typo of the environment variable name.
+ Bug 25151 - Move cleanCacheDirectory() from fc-cache.c into
+ Rework to avoid adding the unexpected value to ICONV_CFLAGS and ICONV_LIBS
+ Fix a build issue again when no regex functions available
+ C++11 requires a space between literal and identifier
+ Bug 47721 - Add ChromeOS fonts to 30-metric-aliases.conf
+ Create CACHEDIR.TAG when fc-cache is run or only when the cache directory is created at the runtime.
+ Add --enable-iconv option to configure
+ Bug 27765 - FcMatch() returns style in wrong language
+ Disable iconv support anyway...
+ Bug 39278 - make usage of mmap optional
+ Output more verbose debugging log to show where to insert the element into the value list
+ fonts.conf: keeps same binding for alternatives
+ fcarch.c: get rid of the duplicate definition of FC_MAX
+ Bug 19128 - Handling whitespace in aliases
+ Bug 20411 - fontconfig doesn't match FreeDesktop directories specs
+ Correct the example
+ Bug 33644 - Fontconfig doesn't match correctly in <test>
+ fcatomic: fallback to create a directory with FcAtomicLock
+ Move statfs/statvfs wrapper to fcstat.c and add a test for the mtime broken fs
+ Fix the build fail on Solaris
+ Fix a typo and polish the previous change
+ Fix the wrong estimation for the memory usage information in fontconfig
+ Bug 32853 - Export API to get the default language
+ fcdefault: fallback if the environment variables are empty
+ Add the default language to the pattern prior to do build the substitution
+ fcdefault: no need to set FC_LANG in FcDefaultSubstitute() anymore
+ fcdefault: Add the lang object at FcConfigSubstituteWithPat() only when kind is FcMatchPattern
+ Bug 50525 - superfluous whitespace in the style
+ Bump libtool revision
+ doc: Fix distcheck error again...
+ Generate bzip2-compressed tarball too
+
+Jeremy Huddleston (1):
+ fcarch: Check for architecture signature at compile time rather than configure time
+
+Keith Packard (3):
+ Use posix_fadvise to speed startup
+ Extra ',' in AC_ARG_WITH(arch causes arch to never be autodetected
+ Deal with architectures where ALIGNOF_DOUBLE < 4
+
+Mark Brand (1):
+ fix building for WIN32
+
+Mikhail Gusarov (2):
+ Move FcStat to separate compilation unit
+ Fix cache aging for fonts on FAT filesystem under Linux
+
+2.9
+
+Akira TAGOH (28):
+ Add charset editing feature.
+ add some document for range and charset.
+ Add the range support in blank element
+ Add editing langset feature.
+ add some documents
+ Bug 24744 - No n'ko orthography
+ Remove the unnecessary comment in ks.orth
+ Bug 32965 - Asturian (ast-ES) language matching missing ḷḷḥ
+ Add a missing file
+ Bug 35517 - Remove Apple Roman cmap support
+ Bug 40452 - Running 'fc-match --all' core dumps when no fonts are installed
+ Get rid of the unexpected family name
+ Bug 44826 - <alias> must contain only a single <family>
+ Bug 46169 - Pointer error in FcConfigGlobMatch
+ Do not update stream->pos when seeking is failed.
+ Bug 27385 - lcdfilter settings for freetype-2.3.12 not available in fontconfig-2.8.0
+ Add brx.orth and sat.orth
+ Bug 41694 - FcCache functions have random-number-generator side effects
+ Bug 23336 - unable to display bitmap-only (SFNT) TrueType or OpenType
+ Check null value for given object to avoid possibly segfaulting
+ Bug 19128 - Handling whitespace in aliases
+ Fix distcheck error
+ Update the version info
+ Update to detect the uncommited changes properly
+ Fix a build issue
+ Fix a build fail on some environment
+ Fix a build fail on some environment.
+ Get rid of $< from Makefile.am
+
+Alan Coopersmith (1):
+ Fix compiler warnings
+
+Behdad Esfahbod (54):
+ [fc-cache] Document -r argument in man page
+ [doc] Fix typo
+ Bug 25508 configure assumes bash > 2.0 is on system
+ Update INSTALL
+ Add note about autogen.sh to INSTALL
+ Fix doc typo
+ More doc typo fixes
+ Bug 18886 installation crashes if fontconfig already installed
+ Bug 26157 Solaris/Sun C 5.8: compilation of 2.8.0 and 2.7.3 fails
+ Bug 25152 Don't sleep(2) if all caches were uptodate
+ Don't include unistd.h in fontconfig.h
+ Accept TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS from name table
+ Whitespace
+ More whitespace
+ Remove all training whitespaces
+ Fix comment
+ Add fc-pattern cmdline tool
+ Bug 29338 - fc-pattern.sgml, open para tag
+ Add comments
+ Bug 29995 - fc-cat does not invoke FcFini()
+ Add new public API: FcCharSetDelChar()
+ [fc-lang] Support excluding characters
+ Bug 24729 - [ne_NP] Fix ortho file
+ Add more copyright owners
+ Cleanup copyright notices to replace "Keith Packard" with "the author(s)"
+ Fix returned value
+ Bug 28958 - lang=en matches other langs
+ Make most generated-files cross-compiling-safe
+ Make fc-arch stuff cross-compiling-safe
+ Bump version
+ Allow editing charset and lang in target="scan"
+ Add <range> support for <blank> into the DTD
+ Skip <range> elements with begin > end
+ Doc nit
+ Fix assertion failure on le32d4
+ Remove AM_MAINTAINER_MODE
+ Update CaseFolding.txt to Unicode 6.0
+ Remove --enable-maintainer-mode from autogen.sh
+ Bug 20113 - Uighur (ug) orthography incomplete
+ Bug 30566 - fcformat.c:interpret_enumerate() passes uninitialized idx to FcPatternGetLangSet()
+ Mark constant strings as constant
+ More doc typo fixes
+ Always define FcStat as a function
+ Fix warning
+ Bug 35587 - Add padding to make valgrind and glibc not hate each other
+ [.gitignore] Update
+ Bug 36577 - Updating cache with no-bitmaps disables bitmap fonts...
+ Bug 26718 - "fc-match sans file" doesn't work
+ Switch fc-match to use FcPatternFormat()
+ Switch fc-cat to use FcPatternFormat()
+ Fix stupid bug in FcFontSort()
+ Bug 41171 - Invalid use of memset
+ Fix parallel build
+ Add FcPublic to FcLangSetUnion and FcLangSetSubtract
+
+Brad Hards (1):
+ Documentation fixes
+
+Jeremy Huddleston (2):
+ fontconfig.pc: Add variables for confdir and cachedir
+ fontconfig.pc.in: Add sysconfdir, localstatedir, and PACKAGE
+
+Jinkyu Yi (1):
+ Bug 42423 - make default Korean font from Un to Nanum
+
+MINAMI Hirokazu (1):
+ Bug 43406 - typo of Japanese font name in conf.d/65-nonlatin.conf
+
+Mike Frysinger (9):
+ FcStrPlus: optimize a little
+ delete unused variables
+ FcStat: change to FcChar8 for first arg
+ fc-cat: fix pointer warning
+ FcName{,Get}Constant: constify string input
+ fc-{list,match}: constify format string
+ fix build warnings when using --with-arch
+ FcObjectValidType: tweak -1 checking
+ makealias: handle missing funcs better
+
+Parag Nemade (2):
+ Bug 25651 - Add ortho file for locale brx_IN
+ Bug 25650 - Add ortho file for locale sat_IN
+
+Pravin Satpute (4):
+ Bug 27195 - need updates to ks.orth file
+ Bug 43321 - Required corrections in urdu.orth file
+ Bug 25653 - Add ortho file for locale doi_IN
+ Bug 25652 - Add ortho file for locale mni_IN
+
+2.8
+
+Behdad Esfahbod (24):
+ Clarify default confdir and cachedir better.
+ Move FcAlign to fcint.h
+ [fc-arch] Add FcAlign to arch signature
+ [int] Define MIN/MAX/ABS macros
+ Bump cache version up from 2 to 3 and fix FcLangSet caching/crash
+ Remove unused macros
+ [int] Remove fc_storage_type() in favor of direct access to v->type
+ [int] Remove fc_value_* macros that did nothing other than renaming
+ Enable automake silent rules
+ [int] Remove more unused macros
+ [xml] Remove unused code
+ [arch] Try to ensure proper FcLangSet alignment in arch
+ [lang] Fix serializing LangSet from older versions
+ Make sure fclang.h and fcarch.h are built
+ Remove bogus comment
+ [fc-glyphname] Cleanup Makefile.am
+ [src] Create fcglyphname.h automatically
+ [fc-glyphname] Rename internal arrays to prefix with _fc_
+ Clean up Makefile's a bit
+ [fc-glyphname] Remove Adobe glyphlist
+ [fc-case] Update CaseFolding.txt to Unicode 5.2.0
+ [fc-arch] Beautify the arch template
+ [fc-arch] Rename architecture names to better reflect what they are
+ Bump libtool revision in preparation for release
+
+2.7.3
+
+Behdad Esfahbod (2):
+ Use default config in FcFileScan() and FcDirScan()
+ Bump libtool version in preparation for release
+
+Roozbeh Pournader (2):
+ Correct Ewe (ee) orthography to use U+025B (bug #20711)
+ Updated Arabic, Persian, and Urdu orthographies
+
+2.7.2
+
+Behdad Esfahbod (6):
+ Improve charset printing
+ [ja.orth] Comment out FULLWIDTH YEN SIGN (#22942)
+ Bug 22037 - No Fonts installed on a default install on Windows Server 2003
+ Bug 23419 - "contains" expression seems not working on the fontconfig rule
+ Revert "Fix FcNameUnparseLangSet()" and redo it
+ Bump libtool version for release
+
+Tor Lillqvist (3):
+ Fix MinGW compilation
+ Fix heap corruption on Windows in FcEndElement()
+ Use multi-byte codepage aware string function on Windows
+
+2.7.1
+
+Behdad Esfahbod (16):
+ git-tag -s again
+ Fix win32 build
+ Replace spaces with tabs in conf files
+ Remove unused ftglue code
+ Add Inconsolata to monospace config (#22710)
+ Fix leak with string VStack objects
+ Improve libtool version parsing (#22122)
+ Use GetSystemWindowsDirectory() instead of GetWindowsDirectory() (#22037)
+ Remove unused macros
+ Fix FcNameUnparseLangSet()
+ Fix doc syntax (#22902)
+ TT_MS_ID_UCS_4 is really UTF-16BE, not UTF-32
+ [doc] Add ~/fonts.conf.d to user docs
+ Hardcode /etc/fonts instead of @CONFDIR@ in docs (#22911)
+ Bump libtool versions that 2.7.0 (I forgot to do back then)
+ Update .gitignore
+
+Karl Tomlinson (1):
+ Don't change the order of names unnecessarily (#20128)
+
+2.7
+
+Alexey Khoroshilov (1):
+ Use human-readable file names in the docs (bug #16278)
+
+Behdad Esfahbod (119):
+ Avoid C99ism in Win32 code (#16651)
+ [doc] Fix inaccuracy in FcFontRenderPrepare docs (#16985)
+ When canonizing filenames, squash // and remove final / (#bug 16286)
+ Add orth file for Maithili mai.orth (#15821)
+ Replace RCS Id tags with the file name
+ [doc] Fix signatures of FcPatternGetFTFace and FcPatternGetLangSet (#16272)
+ Update Thai default families (#16223)
+ Add ~/.fonts.conf.d to default config (#17100)
+ [fc-match] Fix list of getopt options in --help
+ Update man pages
+ Add fc-query (#13019)
+ Implement fc-list --verbose (#13015)
+ [doc] Add const decorator for FcPatternDuplicate()
+ Add FcPatternFilter() (#13016)
+ [doc] Document that a zero rescanInterval disables automatic checks (#17103)
+ Get rid of $Id$ tags
+ [doc] Fix signature of FcConfigHome()
+ Fix docs re 'orig' argument of FcPatternBuild and family
+ Update sr.orth to actul subset of Cyrillic used by Serbian (#17208)
+ Add Sindhi .orth file. (#17140)
+ Add WenQuanYi fonts to default conf (#17262, from Mandriva)
+ Handle -h and --help according to GNU Coding Standards (#17104)
+ Document when config can be NULL (#17105)
+ Add FcConfigReference() (#17124)
+ Document how to free return value of FcNameUnparse()
+ Don't leak FcValues string loaded through fcxml.c (#17661)
+ Don't call FcPatternGetCharSet in FcSortWalk unless we need to (#17361)
+ Fix two more doc typos
+ [.gitignore] Update
+ Cleanup symlinks in "make uninstall" (bug #18885)
+ [fccache] Consistently use FcStat() over stat() (bug #18195)
+ Consistently use FcStat() over stat() in all places
+ Use __builtin_popcount() when available (bug #17592)
+ Fix compile with old FreeType that doesn't have FT_Select_Size() (bug #17498)
+ Implement fc-list --quiet ala grep (bug #17141)
+ [65-fonts-persian.conf] Set foundry in target=scan instead of target=font
+ Don't use identifier named complex
+ Explicitly chmod() directories (bug #18934)
+ Remove special-casing of FC_FILE in FcPatternPrint()
+ [.gitignore] Update
+ Implement FcPatternFormat and use it in cmdline tools (bug #17107)
+ Fix comparison of family names to ignore leading space properly
+ [fcmatch.c] Fix debug formatting
+ [fcmatch] Use larger multipliers to enforce order
+ [fcmatch] When matching, reserve score 0 for when elements don't exist
+ [fcmatch] Move FcFontSetMatch() functionality into FcFontSetMatchInternal()
+ [doc] Note that fontset returned by FcConfigGetFonts should not be modified
+ Make FcCharSetMerge() public
+ Don't use FcCharSetCopy in FcCharSetMerge
+ Oops. Fix usage output.
+ Revive FcConfigScan() (bug #17121)
+ Add fc-scan too that runs FcFileScan/FcDirScan
+ Oops, fix FcPatternFilter
+ [fc-match] Accept list of elements like fc-list (bug #13017)
+ Cleanup all manpage.* files
+ [fcmatch] Fix crash when no fonts are available.
+ [fcfreetype] Fix typo in GB2312 encoding name string (#19845)
+ Add ICONV_LIBS to fontconfig.pc.in (#19606)
+ [win32] Fix usage of GetFullPathName()
+ [win32] Expand "APPSHAREFONTDIR" to ../share/fonts relative to binary location
+ [win32] Do not remove leading '\\' such that network paths work
+ [fccache] Make sure the cache is current when reusing from open caches
+ Update Sinhala orthography (#19288)
+ [cache] After writing cache to file, update the internal copy to reflect this
+ Further update Sinhala orthography (#19288)
+ [fcformat] Add support for width modifiers
+ [fcformat] Refactor and restructure code for upcoming changes
+ [fcformat] Add support for subexpressions
+ [fcformat] Add element filtering and deletion
+ [fcformat] Add conditionals
+ [fcformat] Add simple converters
+ [fcformat] Implement 'cescape', 'shescape', and 'xmlescape' converters
+ [FcStrBuf] better handle malloc failure
+ [fcformat] Add value-count syntax
+ [fcformat] Implement 'delete', 'escape', and 'translate' filter functions
+ [fcformat] Start adding builtins
+ [fcformat] Refactor code to avoid malloc
+ [fcformat] Add support for builtin formats
+ [fcformat] Support indexing simple tags
+ [fcformat] Support 'default value' for simple tags
+ [fcformat] Implement array enumeration
+ [fclang] Implement FcLangSetGetLangs() (#18846)
+ [fcformat] Enumerate langsets like we do arrays of values
+ [fcformat] Add a 'pkgkit' builtin that prints tags for font packages
+ [fcformat] Add list of undocumented language features
+ [fc-lang] Continue parsing after an "include" (#20179)
+ Fix Fanti (fat) orth file (#20390)
+ Fix Makefile's to not create target file in case of failure
+ [fcstr.c] Embed a static 64-byte buffer in FcStrBuf
+ [fcstr,fcxml] Don't copy FcStrBuf contents when we would free it soon
+ [fcxml] Don't allocate attr array if there are no attributes
+ [fcxml] Embed 8 static FcPStack objects in FcConfigParse
+ [fcxml] Embed 64 static FcVStack objects in FcConfigParse
+ [fcxml.c] Embed a static 64-byte attr buffer in FcPStack
+ Call git tools using "git cmd" instead of "git-cmd" syntax
+ Replace 'KEITH PACKARD' with 'THE AUTHOR(S)' in license text in all files
+ [fcformat] Fix default-value handling
+ Document FcPatternFormat() format
+ [Makefile.am] Don't clean ChangeLog in distclean
+ Revert "[conf] Disable hinting when emboldening (#19904)" (#20599)
+ [fc-lang] Fix bug in country map generation
+ [fcstr] Remove unused variable
+ [fc-lang] Make LangSet representation in the cache files stable
+ [fc-cache] Remove obsolete sentence from man page
+ Detect TrueType Collections by checking the font data header
+ Mark matchers array const (#21935)
+ Use/prefer WWS family/style (name table id 21/22)
+ Simplify FcValueSave() semantics
+ Add XXX note about Unicode Plane 16
+ Always set *changed in FcCharsetMerge
+ [charset] Grow internal FcCharset arrays exponentially
+ Remove unused prototypes and function
+ [xml] Centralize FcExpr allocation
+ [xml] Mark more symbols static
+ [xml] Allocate FcExpr's in a pool in FcConfig
+ [xml] Intern more strings
+ Bug 22154 -- fontconfig.pc doesn't include libxml2 link flags
+ Fix distcheck
+ Remove keithp's GPG key id
+
+Benjamin Close (1):
+ Remove build manpage logfile if it exists
+
+Chris Wilson (1):
+ Reduce number of allocations during FcSortWalk().
+
+Dan Nicholson (1):
+ Let make expand fc_cachedir/FC_CACHEDIR (bug #18675)
+
+Harald Fernengel (1):
+ Don't use variables named 'bool' (bug #18851)
+
+Harshula Jayasuriya (1):
+ Fix Sinhala coverage (bug #19288)
+
+Karl Tomlinson (1):
+ Change FcCharSetMerge API
+
+Mike FABIAN (1):
+ [conf] Disable hinting when emboldening (#19904)
+
+Peter (1):
+ Make sure alias files are built first (bug 16464)
+
+Rahul Bhalerao (1):
+ Add config for new Indic fonts (bug #17856)
+
+Roozbeh Pournader (60):
+ Correct Sindhi orthography to use Arabic script (bug #17140)
+ Remove Sinhala characters not in modern use (bug #19288)
+ Add Filipino orth, alias Tagalog to Filipino (bug #19846)
+ Split Mongolian orth to Mongolia and China (bug #19847)
+ Fix doubly encoded UTF-8 in comments (bug #19848)
+ Change Turkmen orth from Cyrillic to Latin (bug #19849)
+ Rename Venda from "ven" to "ve" (bug #19852)
+ Rename "ku" to "ku_am", add "ku_iq" (bug #19853).
+ Add Kashubian (csb) orth file (bug #19866)
+ Add Malay (ms) orthography (bug #19867)
+ Add Kinyarwanda (rw) orthography (bug #19868)
+ Add Upper Sorbian (hsb) orthography (bug #19870)
+ Add Berber orthographies in Latin and Tifinagh scripts (bug #19881)
+ Renamed az to az_az (bug #19889)
+ Rename Igbo from "ibo" to "ig" (bug #19892)
+ Remove punctuation symbols from Asturian orthography (bug #19893)
+ Add Chhattisgarhi (hne) orthography (bug #19891)
+ Use newly added Cyrillic letters for Kurdish (bug #20049)
+ Add Kurdish in Turkey (ku_tr) orthography (bug #19891)
+ Add Aragonese (an) orthography (bug #19891)
+ Add Haitian Creole (ht) orthography (bug #19891)
+ Ad Ganda (lg) orthography (bug #19891)
+ Add Limburgan (li) orthography (bug #19891)
+ Add Sardinian (sc) orthography (bug #19891)
+ Add Sidamo (sid) and Wolaitta (wal) orthographies (bug #19891)
+ Fix Bengali (bn) and Assamese (as) orthographies (bug #22924)
+ Remove Euro Sign from all orthographies (bug #19865)
+ Add Ottoman Turkish (ota) orthography (bug #20114)
+ Divide Panjabi (pa) to that of Pakistan and India (bug #19890)
+ Add Blin (byn) orthography (bug #19891)
+ Add Papiamento (pap_aw, pap_an) orthographies (bug #19891)
+ Add Crimean Tatar (crh) orthography (bug #19891)
+ Switch Uzbek (uz) orthography to Latin (bug #19851)
+ Update Azerbaijani in Latin (az_az) to present usage (bug #20173)
+ Rename Avaric orthography from 'ava' to 'av' (bug #20174)
+ Rename Bambara orthography from 'bam' to 'bm' (bug #20175)
+ Rename Fulah orthography from 'ful' to 'ff' (bug #20177)
+ Change Kashmiri (ks) orthography to Arabic script (bug #20200)
+ Tighten Central Khmer (km) orthography (bug #20202)
+ Remove digits and symbols from some Indic orthographies (bug #20204)
+ Add Divehi (dv) orthography (bug #20207)
+ Extend Crimean Tatar (crh) orthography (bug #19891)
+ Update Serbo-Croatian (sh) orthography (bug #20368)
+ Add Ewe (ee) orthography (bug #20386)
+ Add Herero (hz) orthograhy (bug #20387)
+ Add Akan (ak) and Fanti (fat) orthographies (bug #20390)
+ Added Quechua (qu) orthography (bug #20392)
+ Add Sango (sg) orthography (bug #20393)
+ Add Tahitian (ty) orthography (bug #20391)
+ Add Navajo (nv) orthography (bug #20395)
+ Add Rundi (rn) orthography (bug #20398)
+ Add Zhuang (za) orthography (bug #20399)
+ Add orthographies for Oshiwambo languages (bug #20401)
+ Add Shona (sn) orthography (bug #20394)
+ Add Sichuan Yi (ii) orthography (bug #20402)
+ Add Javanese (jv) orthography (bug #20403)
+ Add Nauru (na) orthography (bug #20418)
+ Add Kanuri (kr) orthography (bug #20438)
+ Add Sundanese (su) orthography (bug #20440)
+ Reorganize Panjabi/Punjabi and Lahnda orthographies (bug #19890)
+
+Serge van den Boom (1):
+ Correctly handle mmap() failure (#21062)
+
+2.6
+
+2.5.93 (2.6 RC3)
+
+Alexey Khoroshilov (1):
+ Fix FcStrDirname documentation. (bug 16068)
+
+Behdad Esfahbod (1):
+ Persian conf update. (bug 16066).
+
+Evgeniy Stepanov (1):
+ Fix index/offset for 'decorative' matcher. Bug 15890.
+
+Glen Low (1):
+ Fix Win32 build error: install tries to run fc-cache locally (bug 15928).
+
+Keith Packard (8):
+ Call FcFini to make memory debugging easier
+ Fix a few memory tracking mistakes.
+ Add extended, caps, dunhill style mappings.
+ Freetype 2.3.5 (2007-jul-02) fixes indic font hinting. re-enable (bug 15822)
+ Add a copy of dolt.m4 to acinclude.m4.
+ Libs.private needs freetype libraries
+ Oops. Fix for bug 15928 used wrong path for installed fc-cache.
+ Ignore empty <dir></dir> elements
+
+Neskie Manuel (1):
+ Add Secwepemctsin Orthography. Bug 15996.
+
+Sayamindu Dasgupta (1):
+ FcConfigUptoDate breaks if directory mtime is in the future. Bug 14424.
+
+2.5.92 (2.6 RC2)
+
+Carlo Bramini (1):
+ Add FreeType-dependent functions to fontconfig.def file. (bug 15415)
+
+Changwoo Ryu (1):
+ Korean font in the default config - replacing baekmuk with un (bug 13569)
+
+Dennis Schridde (1):
+ Proper config path for static libraries in win32
+
+Eric Anholt (1):
+ Fix build with !ENABLE_DOCS and no built manpages.
+
+Frederic Crozat (1):
+ Merge some of Mandriva configuration into upstream configuration. Bug 13247
+
+Keith Packard (11):
+ Use DOLT if available
+ Work around for bitmap-only TrueType fonts that are missing the glyf table.
+ Remove size and dpi values from bitmap fonts. Bug 8765.
+ Add some sample cursive and fantasy families.
+ Add --all flag to fc-match to show the untrimmed list. Bug 13018.
+ Remove doltcompile in distclean
+ Use of ":=" in src/Makefile.am is unportable (bug 14420)
+ Make fc-match behave better when style is unknown (bug 15332)
+ Deal with libtool 2.2 which doesn't let us use LT_ variables. (bug 15692)
+ Allow for RC versions in README update
+ git ignore doltcompile
+
+Ryan Schmidt (1):
+ fontconfig build fails if "head" is missing or unusable (bug 14304)
+
+Sylvain Pasche (1):
+ Fontconfig options for freetype sub-pixel filter configuration
+
+2.5.91 (2.6 RC1)
+
+Hongbo Zhao (1):
+ Not_contain should use strstr, not strcmp on strings. (bug 13632)
+
+Keith Packard (11):
+ Move conf.avail/README to conf.d/README (bug 13392)
+ Fix OOM failure case in FcPStackPush.
+ Remove freetype requirement for build-time applications.
+ Include fcftaliastail.h so that the freetype funcs are exported.
+ Eliminate references to freetype from utility Makefile.am's
+ Distribute new fcftint.h file
+ Create new-version.sh to help with releases, update INSTALL instructions
+ Distribute khmer font aliases
+ Add more files to .gitignore
+ new-version.sh was mis-editing files
+ git-tag requires space after -m flag
+
+2.5
+
+Keith Packard (4):
+ Document several function return values (Bug 13145).
+ Document that Match calls FcFontRenderPrepare (bug 13162).
+ Document that FcConfigGetFonts returns the internal fontset (bug 13197)
+ Revert "Remove fcprivate.h, move the remaining macros to fcint.h."
+
+Tor Lillqvist (1):
+ Workaround for stat() brokenness in Microsoft's C library (bug 8526)
+
+2.4.92 (2.5 RC2)
+
+Behdad Esfahbod (14):
+ Make fc-match --sort call FcFontRenderPrepare.
+ Port fonts-persian.conf to new alias syntax with binding="same"
+ Fix trivial bugs in edit-sgml.c
+ Add FcGetLangs() and FcLangGetCharSet().
+ Add/update config files from Fedora.
+ Split 40-generic.conf into 40-nonlatin.conf and 45-latin.conf
+ Use binding="same" in 30-urw-aliases.conf and remove duplicate entries.
+ Remove redundant/obsolete comments from conf files.
+ Remove 20-lohit-gujarati.conf. It's covered by 25-unhint-nonlatin.conf now.
+ Oops, fix Makefile.am.
+ Remove 25-unhint-nonlatin.conf from default configuration by not linking it.
+ Fix documented conf-file naming format in README
+ Remove list of available conf files from README.
+ Simplify/improve 30-metric-aliases.conf
+
+Keith Packard (25):
+ Also check configDirs mtimes in FcConfigUptoDate
+ Respect "binding" attribute in <alias> entries.
+ Correct documentation for FcAtomicLock (Bug 12947).
+ Remove fcprivate.h, move the remaining macros to fcint.h.
+ Correct documentation for FcConfigUptoDate (bug 12948).
+ Document skipping of fonts from FcFileScan/FcDirScan.
+ Make file_stat argument to FcDirCacheLoadFile optional.
+ Clean up exported names in fontconfig.h.
+ Track line numbers in sgml edit tool input.
+ Typo error in function name: Inverval -> interval
+ Don't check cache file time stamps when cleaning cache dir.
+ Use FcLangDifferentTerritory instead of FcLangDifferentCountry.
+ Verify documentation covers exposed symbols.
+ Document previously undocumented functions. (bug 12963)
+ Update documentation for FcStrCopyFilename (bug 12964).
+ Update documentation for stale FcConfigGetConfig function.
+ Have FcConfigSetCurrent accept the current configuration and simply return
+ Remove references to FcConfigParse and FcConfigLoad.
+ Replace incorrect documentation uses of 'char' with 'FcChar8' (bug 13002).
+ Fix formatting syntax in doc/fccache.fncs
+ Generate fccache.sgml, fcdircache.sgml and fclangset.sgml.
+ Formatting syntax mistake in doc/fclangset.fncs.
+ Link new function documentation into the fontconfig-devel.sgml
+ Ignore new generated documentation
+ Export FcConfig{G,S}etRescanInverval from .so, mark as deprecated.
+
+2.4.91 (2.5 RC1)
+
+Behdad Esfahbod (1):
+ Update CaseFolding.txt to Unicode 5.1.0
+
+Dwayne Bailey (1):
+ Add/fix *.orth files for South African languages
+
+Hideki Yamane (1):
+ Handle Japanese fonts better. (debian bug #435971)
+
+Keith Packard (32):
+ rehash increment could be zero, causing rehash infinite loop.
+ Work around FreeType bug when glyph name buffer is too small.
+ Free temporary string in FcDirCacheUnlink (Bug #11758)
+ Fix ChangeLog generation to avoid circular make dependency
+ Store font directory mtime in cache file.
+ Comment about mmaping cache files was misleading.
+ Make FC_FULLNAME include all fullname entries, elide nothing. [bug 12827]
+ Remove unneeded call to access(2) in fc-cache.
+ Improve verbose messages from fc-cache.
+ Verbose message about cleaning directories was imprecise
+ Don't use X_OK bit when checking for writable directories (bug 12438)
+ Have fc-cache remove invalid cache files from cache directories.
+ FcConfigParseAndLoad doc was missing the last param.
+ Place language name in constant array instead of pointer.
+ Must not insert cache into hash table before completely validating.
+ Eliminate relocations for glyph name table.
+ Eliminate relocations from FcCodePageRange structure (bug 10982).
+ Leave generated headers out of distribution (bug 12734).
+ Move <cachedir> elements to the end of fonts.conf.
+ Add BRAILLE PATTERN BLANK to list of blank glyphs.
+ Replace makealias pattern with something supported by POSIX grep (bug 11083)
+ FcInit should return FcFalse when FcInitLoadConfigAndFonts fails. (bug 10976)
+ There is no U+1257 (bug 10899).
+ Spelling errors in documentation. (bug 10879).
+ Oops. Left debugging printf in previous commit.
+ Handle UltraBlack weight.
+ Fix parallel build in fontconfig/docs (bug 10481).
+ Distribute man source files for command line programs (bug 9678).
+ Ensure weight/slant values present even when style is supplied (bug 9313).
+ fontconfig needs configure option to use gnu iconv (bug 4083).
+ Match 'ultra' on word boundaries to detect ultra bold fonts. (bug 2511)
+ Build fix for Solaris 10 with GCC.
+
+Mike FABIAN (1):
+ Avoid crashes if config files contain junk.
+
+Stephan Kulow (1):
+ Make FcPatternDuplicate copy the binding instead of always using Strong.
+
+Tilman Sauerbeck (2):
+ Store FcNoticeFoundries in read-only memory.
+ Store FcVendorFoundries in read-only memory.
+
+2.4.2
+
+Han-Wen Nienhuys:
+ FcStrCanonFileName buggy for mingw. (bug 8311)
+ More fixes for Win32 building (bug 8311)
+
+Kean Johnston:
+ Don't use varargs CPP macros in fccache.c. (bug 8733)
+
+Keith Packard:
+ Remove documentation for non-existant FcConfigNormalizeFontDir.
+ Build fontconfig.def from header files when needed.
+ Detect and use available random number generator (bug 8308)
+ Add sparc64 architecture string.
+ FcStrCanonAbsoluteFilename should be static.
+ Use explicit platform/nameid order when scanning ttf files.
+ Warn (and recover) from config file without <cachedir> elements.
+ Avoid writing uninitialized structure pad bytes to cache files.
+ Fix grep pattern in makealias to work on non-Gnu grep (bug 8368).
+ Add FcFreeTypeQueryFace external API. Bug #7311.
+ Segfault scanning non-font files. Disallow scan edit of user vars. (#8767)
+ Add space between type and formal in devel man pages (bug 8935)
+
+Mike FABIAN:
+ Do not clean cache files for different architectures
+
+Peter Breitenlohner:
+ A VPATH build of fontconfig-2.4.1 fails for various reasons. Bug 8933.
+ Use <literal> instead of <sgmltag> when documenting fonts.conf. Bug 8935.
+ Fix fc-cat documentation (bug 8935).
+
+
+2.4.1
+
+Keith Packard:
+ Update installation notes for 2.4 base.
+ Add ppc64 signature. Bug 8227
+ Add signatures for m68k and mipsel (thanks debian buildd)
+ Add warning flags to fc-cache build. Clean up warnings in fc-cache.
+ Reimplement FcConfigAppFontAddDir; function was lost in 2.4.0.
+
+2.4.0
+
+David Turner:
+ Replace character discovery loop with simpler, faster version.
+
+James Cloos:
+ Move files from conf.d to conf.avail
+ Standardize conf.avail number prefixing convention
+ Support all five possibilities for sub-pixel
+ Move user and local conf file loading into conf.avail files
+ Number the remaining conf.avail files
+ Update Makefile.am to match conf.avail changes
+ Replace load of conf.d in fonts.conf.in
+ Make room for chunks from fonts.conf in conf.avail
+ Re-order old conf.d files
+ Move some section from fonts.conf into conf.avail files
+ Update Makefile.am files
+ Make conf.avail and conf.d work
+
+Keith Packard:
+ Create fc_cachedir at install time. Bug 8157.
+ Reference patterns in FcCacheCopySet.
+ Replace gnu-specific sed command with simple grep.
+ Attempt to fix makealias usage for build on Mac OS X.
+ Accept locale environment variables that do not contain territory.
+ Merge branch 'jhcloos'
+ Insert newly created caches into reference data structure.
+ Add XML headers to new conf files. Move link make commands to conf.avail dir
+ Rename conf.avail to conf.d
+ Fix conf.d directory sorting.
+ Include cachedir in fonts.dtd.
+ Don't display tests for DESTDIR on make install.
+ Split much of the configuration into separate files. Renumber files
+
+2.3.97
+
+Carl Worth:
+ Rename FcPatternThawAll to FcPatternFini.
+ Add a configuration file that disables hinting for the Lohit Gujarati font
+
+Keith Packard:
+ Various GCC 4 cleanups for signed vs unsigned char
+ Finish INSTALL changes. .gitignore ChangeLog
+ Merge branch 'fc-2_4_branch' to master
+ Remove all .cvsignore files
+ Hide private functions in shared library. Export functionality for utilities.
+ Hide FreeType glue code from library ABI.
+ Can't typecheck values for objects with no known type.
+ Leave cache files mapped permanently.
+ Reference count cache objects.
+ Make cache reference counting more efficient.
+ Oops, fc-lang broke when I added cache referencing.
+ Correct reference count when sharing cache file objects.
+ Eliminate .so PLT entries for local symbols. (thanks to Arjan van de Ven)
+ Update architecture signatures for x86-64 and ppc.
+ Parallel build fix for fcalias.h and fcaliastail.h
+ Charset hashing depended on uniqueness of leaves.
+
+Patrick Lam:
+ file Makefile.am was initially added on branch fc-2_4_branch.
+ Modify config file to use Greek fonts before Asian fonts with Greek glyphs.
+ Use libtool -no-undefined flag on all platforms.
+ file ftglue.c was initially added on branch fc-2_4_branch.
+ 2005-11-23 Frederic Crozat <fcrozat@mandriva.com>: reviewed by: plam
+ file 10-fonts-persian.conf was initially added on branch fc-2_4_branch.
+ Sort directory entries while scanning them from disk; prevents Heisenbugs
+ file ln.orth was initially added on branch fc-2_4_branch.
+ Fix typos in orth files. Reported by Denis Jacquerye.
+ On Windows, unlink before rename. Reported by Tim Evans.
+ file fc-match.sgml was initially added on branch fc-2_4_branch.
+
+2.3.96
+
+Keith Packard:
+ Make path names in cache files absolute (NB, cache format change) Stop
+ Eliminate pattern freezing
+ Add .gitignore
+ Construct short architecture name from architecture signature.
+ Write caches to first directory with permission. Valid cache in FcDirCacheOpen.
+ Eliminate NormalizeDir. Eliminate gratuitous stat/access calls per dir.
+ Add architecture to cache filename.
+ Eliminate global cache. Eliminate multi-arch cache code.
+ Fix up fc-cache and fc-cat for no global cache changes.
+ Eliminate ./ and ../ elements from font directory names when scanning.
+ Regenerate x86 line in fcarch.tmpl.h to match change in cache data.
+ Add x86-64 architecture and signature.
+ During test run, remove cache directory to avoid stale cache usage.
+ Add ppc architecture
+ Revert to original FcFontSetMatch algorithm to avoid losing fonts.
+ Rework cache files to use offsets for all data structures.
+ Fix build problems caused by cache rework.
+ FcCharSetSerialize was using wrong offset for leaves. Make fc-cat work.
+ Rework Object name database to unify typechecking and object lookup.
+ Skip broken caches. Cache files are auto-written, don't rewrite in fc-cache.
+ Fix fc-cat again. Sigh.
+ Use intptr_t instead of off_t inside FcCache structure.
+ Serialized value lists were only including one value.
+ Automatically remove invalid cache files.
+ With no args, fc-cat now dumps all directories.
+ Revert ABI changes from version 2.3
+ Change $(pkgcachedir) to $(fc_cachedir) in fc-cat and fc-cache Makefile.am
+ Allow FcTypeLangSet to match either FcTypeLangSet or FcTypeString.
+ Remove stale architecture signatures.
+ Pass directory information around in FcCache structure. Freeze charsets.
+ Fix fc-lang to use new charset freezer API.
+ Fontset pattern references are relative to fontset, not array.
+ Add some ignores
+ Only rebuild caches for system fonts at make install time.
+ Fix memory leaks in fc-cache directory cleaning code.
+ Add @EXPAT_LIBS@ to Libs.private in fontconfig.pc (bug 7683)
+ Avoid #warning directives on non-GCC compilers. (bug 7683)
+ Chinese/Macau needs the Hong Kong orthography instead of Taiwan (bug 7884)
+ Add Assamese orthography (as.orth). Bug #8050
+ Really only rebuild caches for system fonts at make install time.
+ Fonts matching lang not territory should satisfy sort pattern lang.
+ Prefer Bitstream Vera to DejaVu families.
+ Guess that mac roman names with lots of high bits are actually SJIS.
+ Document FC_DEBUG values (bug 6393). Document name \ escape syntax.
+ Move Free family names to bottom of respective aliases. (bug 7429)
+ Unify directory canonicalization into FcStrAddFilename.
+ Allow font caches to contain newer version numbers
+ Add FcMatchScan to resolve Delicious font matching issues (bug #6769)
+ Fix missing initialization/destruction of new 'scan' target subst list.
+ Don't segfault when string values can't be parsed as charsets or langsets.
+ Using uninitialized (and wrong) variable in FcStrCopyFilename.
+ Oops; missed the 60-delicious.conf file.
+
+Patrick Lam:
+ Keith Packard <keithp@keithp.com>
+ 2006-04-27 Paolo Borelli (pborelli@katamail.com) reviewed by: plam
+ 2006-05-31 Yong Li (rigel863@gmail.com) reviewed by: plam, Bedhad Esfahbod
+ 2006-07-19 Jon Burgess (jburgess@uklinux.net) reviewed by: plam
+ 2006-08-04 Keith Packard (keithp@keithp.com) reviewed by: plam
+
+2.3.95
+
+Match 'Standard Symbols L' for 'Symbol'. Add URW fonts as aliases for
+all of the PostScript fonts. (reported by Miguel Rodriguez). Fix a
+number of Coverity defects (Frederic Crozat). Speed up FcFontSort
+(fix suggested by Kenichi Handa). Fix error with charsets. Survive
+missing docbook2pdf. Compile on HP-UX, AIX, SGI and Windows (Cygwin,
+MinGW). Fix intel compiler warnings. Fix multiarch support (don't
+destroy multiarch files!) Require pkg-config. (Thanks Behdad; better
+solution wanted for libxml2 detection!) Fix typos in orth files and
+add orth for Lingala (reported by Denis Jacquerye). Remove debian/
+directory. Add a configuration file that disables hinting for the
+Lohit Gujarati font (since the hinting distorts some glyphs quite
+badly). Sort directory entries while scanning them from disk;
+prevents Heisenbugs due to file ordering in a directory (due to Egmont
+Koblinger). Fix Wine's problem with finding fonts. (Reported by
+Bernhard Rosenkraenzer.) Fix the issues with GNU libiconv vs. libc
+iconv (which especially appear on Solarii); patch by Behdad Esfahbod,
+approach suggested by Tim Mooney.
+
+2.3.94
+
+fc-cat can take directories as input and creates old-style fonts.cache
+listings.
+fc-cache takes -r --really-force which blows away all old caches and
+regenerates.
+Robustness fixes, integer overflow fixes (notably to cache handling
+code), toast broken global cache files.
+Change binary format to make it compatible with static langset
+information (thanks to Takashi Iwai).
+Open hashed caches before fonts.cache-2 (Takashi Iwai).
+Fix FcFontSetMatch's algorithm, which used to unjustly kill fonts for
+not declaring certain elements (Takashi Iwai).
+Fix matching bug when multiple elements match; don't use
+the sum of all scores, but the best score (James Su).
+Make fc-lang more friendly to Windows systems.
+Remove archaic chars from Georgian charset; add Euro character to
+charsets for European languages.
+Fix treatment of broken PCF fonts that don't declare family names.
+Pass O_BINARY to open if appropriate (reported by Doodle).
+Normalize font directories to the form in which they appear in
+config files.
+Add a record of the cached directory to the cache file.
+Perf optimizations (Dirk Mueller; some reported by Michael Meeks.)
+Don't loop infinitely on recursive symlinks.
+Make 'make distcheck' work with automake 1.6.3.
+Replace 'stamp' target with mkinstalldirs.
+Don't stop scanning if a directory in fonts.conf doesn't exist,
+because subsequent directories might exist.
+Put directory names into global cache (reported by Ronny V. Vindenes).
+Treat zh-hk fonts differently from zh-tw fonts. This patch may cause
+fontconfig to treat A-X fonts differently from A-Y fonts; please mail
+the fontconfig list if this causes any problems.
+Fix for unaligned memory accesses (Andreas Schwab).
+Fix treatment of cache directory as read from cache file; don't use
+string equality to determine if we have the right file, use inode
+equality.
+Properly skip past dir caches that contain zero fonts, as occurs
+in global caches (reported by Mike Fabian).
+Print out full pathname in fc-match -v (reported by Frederic Crozat).
+Fix bug where fc-match crashes when given __DUMMY__ property to
+match on.
+
+2.3.93
+
+Create cache files in /var/cache/fontconfig with hashed filenames, if
+possible, for added FHS compliance.
+Make fc-cat read both per-directory and global cache files.
+Add config file for Persian fonts from Sharif FarsiWeb, Inc.
+Major performance improvements by Dirk Mueller, Stephen Kulow, and Michael Matz at SuSE: in particular, speed up FcFontSetMatch, and inline many functions.
+Fix treatment of globs in config files, broken since 2.3.2 and discovered by Mathias Clasen.
+Don't use freetype internal headers (patch by Matthias Clasen).
+Further space improvements: create langsets statically, so that they can live in .rodata.
+Properly align mmapped data structures to make e.g. ia64 happy.
+Bug fixes.
+
+2.3.92
+
+Fix corrupted caches bugs from 2.3.91 (reported by Mike Fabian).
+Store only basename in the cache, reconstitute on demand
+(reported by James Cloos).
+Change the rule for artificial emboldening in fonts.conf.in. This
+enables the support for artificial emboldening included in cairo
+(patch by Zhe Su).
+Add FC_EMBEDDED_BITMAP object type to tell Xft/Cairo whether
+to load embedded bitmaps or not (patch by Jinghua Luo).
+Fix GCC4 warnings (some by Behdad Esfahbod).
+Support localized font family and style names; this has been reported
+to break old apps like xfd, but modern (gtk+/qt/mozilla) apps work
+fine (patch by Zhe Su).
+Prevent fc-list from escaping strings when printing them (reported by
+Matthias Clasen).
+Add valist sentinel markup for FcObjectSetBuild and
+FcPatternBuild (patch by Marcus Meissner).
+Add consts to variables so as to move arrays into .rodata (patch by
+Ross Burton).
+Modify config file to use Greek fonts before Asian fonts with
+Greek glyphs. (patch by Simos Xenitellis).
+Use libtool -no-undefined flag on all platforms (patch by Christian
+Biesinger).
+
+2.3.91
+
+Use libxml2 if requested or if expat not available. (Mathias Hasselmann)
+Fix multi-arch cache files: compute the position for the
+block to be added using info from OrigFile, not NewFile. (plam)
+Cast results of sizeof() to unsigned int to get rid of
+warnings on x86_64 (reported by Matthias Clasen).
+Use FcAtomic to rewrite cache files; don't unlink the fonts.cache-2
+file even if there's no data to write; just write an empty cache file.
+(Reported by Lubos Lunak)
+Allocate room for the subdirectory names in each directory cache.
+(Reported by James Cloos)
+
+2.3.90
+
+Development release of mmap patch: load pattern information
+directly from cache files. (Patrick Lam)
+
+2.3.2
+
+Patch memory leaks in using iconv. (Reported by Chris Capoccia)
+Patch memory leaks in fc-cache. (Reported by Chris Capoccia)
+Fetch bitmap glyphs to get widths during font evaluation. (keithp)
+Share strings through FcObjectStaticName (Ross Burton)
+Windows build updates (Tor Lillqvist)
+
+2.3.1
+
+Be more careful about broken GSUB/GPOS tables (Manish Singh)
+Include debian packaging stuff in CVS (Josselin Mouette)
+Add more conf.d examples (Keith Packard)
+Make manuals build again (Keith Packard)
+Johap -> Johab (Funda Wang)
+
+2.3.0
+
+Fix memory leak of patterns rejected by configuration (#2518)
+
+Create prototype /etc/fonts/conf.d directory and populate it with a few
+sample files. These samples are unused as the file names don't start with
+numbers.
+
+Update documentation.
+
+2.2.99
+
+Verify cache for FC_FILE and FC_FAMILY in every entry (#2219)
+
+Update blanks list from recent Unicode docs (#86)
+
+Various small build fixes (#280, #2278,
+
+Documentation fixes (#2085, #2284, #2285)
+
+Add polite typechecking to config file loader (#229)
+
+2.2.98
+
+Share object name strings (Michael Meeks)
+
+Eliminate a couple of codepoints from Russian orthography (John Thacker)
+
+Add synthetic emboldening configuration changes (Jakub Pavelek)
+
+Change FcFontSetSort to ignore language after fonts with the requested
+languages have been found. (Owen Taylor)
+
+Add some RedHat font configuration changes (Owen Tayler).
+
+Add full Unicode case folding support to case-ignoring string functions
+(Keith Packard)
+
+Remove Han characters from Korean orthography (Tor Andersson)
+
+2.2.97
+
+Fc-cache sleeps before exiting to ensure filesystem timestamps are well
+ordered.
+
+Added Punjai orthography.
+
+The timestamp in fonts.conf is gone now. Too many problems.
+
+The default font path includes all of the X fonts; use selectfont/rejectfont
+to eliminate bitmaps, as shown in the sample local.conf file.
+
+<include> configuration elements may now reference a directory. Files
+in that directory matching [0-9]* are loaded in UTF-8 collating sequence order.
+
+<selectfont> configuration added to control which fonts are used.
+
+fontformat font pattern elements built from the FT_Get_X11_Font_Format
+function in newer versions of FreeType.
+
+'capability' list constructed from gsub/gpos and silf values in TrueType
+files.
+
+Multi-lingual names (style, family, fullname) extracted and stored with
+parallel <foo>lang properties marking language.
+
+2.2.96
+
+Fix FcConfigUpToDate to actually check all font directories and eliminate
+a typo which completely prevented it from working (Lubos Lunak
+<l.lunak@suse.cz>)
+
+Remove comma at end of FcResult enum definition for picky compilers.
+
+2.2.95
+
+Add FcResultOutOfMemory so FcFontSetMatch can return accurate error.
+
+Replace MIN/MAX/ABS macros which happened to be in old FreeType releases
+with FC_MIN/FC_MAX/FC_ABS macros owned by fontconfig.
+
+2.2.94
+
+The 2.2.93 release was prepared with a broken libtool which created
+the shared library without the '.so' in the file names.
+
+2.2.93
+
+This is the third prerelease of fontconfig 2.3. Significant changes from
+2.2.92 are:
+
+ o Use new FreeType #include syntax
+ o use y_ppem field instead of 'height' in bitmap sizes rec -
+ FreeType changed the semantics. Still uses height for
+ older versions of FreeType
+ o Don't construct program manuals unless docbook is available
+
+2.2.92
+
+ o make distcheck work
+
+2.2.91
+
+ o Switch to SGML manuals
+ o Add FC_DUAL width spacing value
+ o Add FcFini to close out fontconfig and release all memory
+
+2.2
+
+This is the third public release of fontconfig, a font configuration and
+customization library. Fontconfig is designed to locate fonts within the
+system and select them according to requirements specified by applications.
+
+Fontconfig is not a rasterization library, nor does it impose a particular
+rasterization library on the application. The X-specific library
+'Xft' uses fontconfig along with freetype to specify and rasterize fonts.
+
+Keith Packard
+keithp@keithp.com
diff --git a/chromium/third_party/fontconfig/src/Tools.mk b/chromium/third_party/fontconfig/src/Tools.mk
new file mode 100644
index 00000000000..f0fa0ec50cb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/Tools.mk
@@ -0,0 +1,64 @@
+# -*- encoding: utf-8 -*-
+#
+# Copyright © 2003 Keith Packard
+# Copyright © 2013 Google, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Google Author(s): Behdad Esfahbod
+
+DIR=fc-$(TAG)
+OUT=fc$(TAG)
+TMPL=$(OUT).tmpl.h
+TARG=$(OUT).h
+TSRC=$(DIR).c
+TOOL=./$(DIR)$(EXEEXT_FOR_BUILD)
+
+EXTRA_DIST = $(TARG) $(TMPL) $(TSRC) $(DIST)
+
+AM_CPPFLAGS = \
+ -I$(builddir) \
+ -I$(srcdir) \
+ -I$(top_builddir)/src \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir) \
+ -I$(top_srcdir) \
+ -DHAVE_CONFIG_H \
+ $(WARN_CFLAGS)
+
+$(TOOL): $(TSRC) $(ALIAS_FILES)
+ $(AM_V_GEN) $(CC_FOR_BUILD) -o $(TOOL) $< $(AM_CPPFLAGS)
+
+$(TARG): $(TMPL) $(TSRC) $(DEPS)
+ $(AM_V_GEN) $(MAKE) $(TOOL) && \
+ $(RM) $(TARG) && \
+ $(TOOL) $(ARGS) < $< > $(TARG).tmp && \
+ mv $(TARG).tmp $(TARG) || ( $(RM) $(TARG).tmp && false )
+noinst_HEADERS=$(TARG)
+
+ALIAS_FILES = fcalias.h fcaliastail.h
+
+BUILT_SOURCES = $(ALIAS_FILES)
+
+$(ALIAS_FILES):
+ $(AM_V_GEN) touch $@
+
+CLEANFILES = $(ALIAS_FILES) $(TOOL)
+
+MAINTAINERCLEANFILES = $(TARG)
diff --git a/chromium/third_party/fontconfig/src/autogen.sh b/chromium/third_party/fontconfig/src/autogen.sh
new file mode 100755
index 00000000000..1482e401c51
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/autogen.sh
@@ -0,0 +1,124 @@
+#!/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}
+ACLOCAL_FLAGS="-I m4"
+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" -a -z "$NOCONFIGURE"; 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" -a -z "$NOCONFIGURE"; then
+ echo Running $srcdir/configure "$@"
+ $srcdir/configure "$@"
+
+ echo
+ echo "Now type 'make' to compile $PROJECT."
+fi
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-autohint.conf b/chromium/third_party/fontconfig/src/conf.d/10-autohint.conf
new file mode 100644
index 00000000000..f9032ba3134
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-autohint.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Use the Autohinter -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="autohint" mode="append"><bool>true</bool></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-no-sub-pixel.conf b/chromium/third_party/fontconfig/src/conf.d/10-no-sub-pixel.conf
new file mode 100644
index 00000000000..cf124656176
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-no-sub-pixel.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="rgba" mode="append"><const>none</const></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-scale-bitmap-fonts.conf b/chromium/third_party/fontconfig/src/conf.d/10-scale-bitmap-fonts.conf
new file mode 100644
index 00000000000..e3bcd46cdc0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-scale-bitmap-fonts.conf
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<match target="font">
+ <test name="scalable" compare="eq">
+ <bool>false</bool>
+ </test>
+ <edit name="pixelsizefixupfactor" mode="assign">
+ <divide>
+ <name target="pattern">pixelsize</name>
+ <name target="font" >pixelsize</name>
+ </divide>
+ </edit>
+</match>
+<match target="font">
+ <test name="scalable" compare="eq">
+ <bool>false</bool>
+ </test>
+ <edit name="scalingnotneeded" mode="assign">
+ <and>
+ <less>
+ <name>pixelsizefixupfactor</name>
+ <double>1.2</double>
+ </less>
+ <more>
+ <name>pixelsizefixupfactor</name>
+ <double>0.8</double>
+ </more>
+ </and>
+ </edit>
+</match>
+<!--
+ So far we determined the scale factor. Now, check and if
+ scaling is NOT desirable, just reset the scale factor to 1.0.
+ -->
+<match target="font">
+ <test name="scalable" compare="eq">
+ <bool>false</bool>
+ </test>
+ <test name="pixelsize" target="pattern" compare="less">
+ <double>64</double>
+ </test>
+ <test name="hinting" compare="eq">
+ <bool>true</bool>
+ </test>
+ <test name="scalingnotneeded" compare="eq">
+ <bool>true</bool>
+ </test>
+ <edit name="pixelsizefixupfactor" mode="assign">
+ <double>1.0</double>
+ </edit>
+</match>
+<!--
+ If we *are* going to scale, go ahead and do it.
+ -->
+<match target="font">
+ <test name="scalable" compare="eq">
+ <bool>false</bool>
+ </test>
+ <test name="pixelsizefixupfactor" compare="not_eq">
+ <double>1.0</double>
+ </test>
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix>
+ <name>pixelsizefixupfactor</name> <double>0</double>
+ <double>0</double> <name>pixelsizefixupfactor</name>
+ </matrix>
+ </times>
+ </edit>
+ <edit name="size" mode="assign">
+ <divide>
+ <name>size</name>
+ <name>pixelsizefixupfactor</name>
+ </divide>
+ </edit>
+</match>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-bgr.conf b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-bgr.conf
new file mode 100644
index 00000000000..1378195dd3d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-bgr.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="rgba" mode="append"><const>bgr</const></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-rgb.conf b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-rgb.conf
new file mode 100644
index 00000000000..757c3b6a775
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-rgb.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="rgba" mode="append"><const>rgb</const></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vbgr.conf b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vbgr.conf
new file mode 100644
index 00000000000..c807e5c0550
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vbgr.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="rgba" mode="append"><const>vbgr</const></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vrgb.conf b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vrgb.conf
new file mode 100644
index 00000000000..b5985e03c32
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-sub-pixel-vrgb.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Enable sub-pixel rendering -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="rgba" mode="append"><const>vrgb</const></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/10-unhinted.conf b/chromium/third_party/fontconfig/src/conf.d/10-unhinted.conf
new file mode 100644
index 00000000000..a25e3b1dc9d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/10-unhinted.conf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Disable hinting -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit name="hinting" mode="append"><bool>false</bool></edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-default.conf b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-default.conf
new file mode 100644
index 00000000000..9d7d11f90ad
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-default.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Use lcddefault as default for LCD filter -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit mode="append" name="lcdfilter">
+ <const>lcddefault</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-legacy.conf b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-legacy.conf
new file mode 100644
index 00000000000..7e2b2567557
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-legacy.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Use lcdlegacy as default for LCD filter -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit mode="append" name="lcdfilter">
+ <const>lcdlegacy</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-light.conf b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-light.conf
new file mode 100644
index 00000000000..0dd0a9007a0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/11-lcdfilter-light.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Use lcdlight as default for LCD filter -->
+ <match target="pattern">
+ <!--
+ This configuration is available on the major desktop environments.
+ We shouldn't overwrite it with "assign" unconditionally.
+ Most clients may picks up the first value only. so using "append"
+ may simply works to avoid it.
+ -->
+ <edit mode="append" name="lcdfilter">
+ <const>lcdlight</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/20-unhint-small-vera.conf b/chromium/third_party/fontconfig/src/conf.d/20-unhint-small-vera.conf
new file mode 100644
index 00000000000..c9505ca8e46
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/20-unhint-small-vera.conf
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ The Bitstream Vera fonts have GASP entries suggesting that hinting be
+ disabled below 8 ppem, but FreeType ignores those, preferring to use
+ the data found in the instructed hints. The initial Vera release
+ didn't include the right instructions in the 'prep' table. Fix this
+ by disabling hinting manually at smaller sizes (< 8ppem)
+ -->
+
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Bitstream Vera Sans</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Bitstream Vera Serif</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Bitstream Vera Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/25-unhint-nonlatin.conf b/chromium/third_party/fontconfig/src/conf.d/25-unhint-nonlatin.conf
new file mode 100644
index 00000000000..9adffa71a72
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/25-unhint-nonlatin.conf
@@ -0,0 +1,128 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!-- We can't hint CJK fonts well, so turn off hinting for CJK fonts. -->
+
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Kochi Mincho</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Kochi Gothic</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Sazanami Mincho</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Sazanami Gothic</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Baekmuk Batang</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Baekmuk Dotum</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Baekmuk Gulim</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Baekmuk Headline</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL Mingti2L Big5</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL ShanHeiSun Uni</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL KaitiM Big5</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL ZenKai Uni</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL SungtiL GB</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>AR PL KaitiM GB</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>ZYSong18030</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/30-metric-aliases.conf b/chromium/third_party/fontconfig/src/conf.d/30-metric-aliases.conf
new file mode 100644
index 00000000000..d0d9ea2e0eb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/30-metric-aliases.conf
@@ -0,0 +1,497 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!--
+
+Alias similar/metric-compatible families from various sources:
+
+PostScript fonts: URW fonts: GUST fonts: Windows fonts:
+====================== ==================== ================= ==================
+Helvetica Nimbus Sans L TeX Gyre Heros
+Helvetica Condensed TeX Gyre Heros Cn
+Times Nimbus Roman No9 L TeX Gyre Termes
+Courier Nimbus Mono L TeX Gyre Cursor
+ITC Avant Garde Gothic URW Gothic L TeX Gyre Adventor
+ITC Bookman URW Bookman L TeX Gyre Bonum Bookman Old Style
+ITC Zapf Chancery URW Chancery L TeX Gyre Chorus
+Palatino URW Palladio L TeX Gyre Pagella Palatino Linotype
+New Century Schoolbook Century Schoolbook L TeX Gyre Schola Century Schoolbook
+
+Microsoft fonts: Liberation fonts: Google CrOS core fonts: StarOffice fonts: AMT fonts:
+================ ====================== ======================= ================= ==============
+Arial Liberation Sans Arimo Albany Albany AMT
+Arial Narrow Liberation Sans Narrow
+Times New Roman Liberation Serif Cousine Thorndale Thorndale AMT
+Courier New Liberation Mono Tinos Cumberland Cumberland AMT
+
+Microsoft fonts: Other fonts:
+================ ============
+Georgia Gelasio
+
+We want for each of them to fallback to any of these available,
+but in an order preferring similar designs first. We do this in three steps:
+
+1) Alias each specific to its generic family.
+ e.g. Liberation Sans to Arial
+
+2) Weak alias each generic to the other generic of its family.
+ e.g. Arial to Helvetica
+
+3) Alias each generic to its specifics.
+ e.g. Arial to Liberation Sans, Arimo, Albany, and Albany AMT
+
+-->
+
+<!-- Map specifics to generics -->
+
+ <!-- PostScript -->
+ <alias binding="same">
+ <family>Nimbus Sans L</family>
+ <default>
+ <family>Helvetica</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Heros</family>
+ <default>
+ <family>Helvetica</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Heros Cn</family>
+ <default>
+ <family>Helvetica Condensed</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Nimbus Roman No9 L</family>
+ <default>
+ <family>Times</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Termes</family>
+ <default>
+ <family>Times</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Nimbus Mono L</family>
+ <default>
+ <family>Courier</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Cursor</family>
+ <default>
+ <family>Courier</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Avant Garde</family>
+ <default>
+ <family>ITC Avant Garde Gothic</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>URW Gothic L</family>
+ <default>
+ <family>ITC Avant Garde Gothic</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Adventor</family>
+ <default>
+ <family>ITC Avant Garde Gothic</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Bookman</family>
+ <default>
+ <family>ITC Bookman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>URW Bookman L</family>
+ <default>
+ <family>ITC Bookman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Bonum</family>
+ <default>
+ <family>ITC Bookman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Bookman Old Style</family>
+ <default>
+ <family>ITC Bookman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Zapf Chancery</family>
+ <default>
+ <family>ITC Zapf Chancery</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>URW Chancery L</family>
+ <default>
+ <family>ITC Zapf Chancery</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Chorus</family>
+ <default>
+ <family>ITC Zapf Chancery</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>URW Palladio L</family>
+ <default>
+ <family>Palatino</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Pagella</family>
+ <default>
+ <family>Palatino</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Palatino Linotype</family>
+ <default>
+ <family>Palatino</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Century Schoolbook L</family>
+ <default>
+ <family>New Century Schoolbook</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>TeX Gyre Schola</family>
+ <default>
+ <family>New Century Schoolbook</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Century Schoolbook</family>
+ <default>
+ <family>New Century Schoolbook</family>
+ </default>
+ </alias>
+
+
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Arimo</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Liberation Sans</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Liberation Sans Narrow</family>
+ <default>
+ <family>Arial Narrow</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Albany</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Albany AMT</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Tinos</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Liberation Serif</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Thorndale</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Thorndale AMT</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Cousine</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Liberation Mono</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Cumberland</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Cumberland AMT</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
+ <family>Gelasio</family>
+ <default>
+ <family>Georgia</family>
+ </default>
+ </alias>
+
+
+
+<!-- Accept the other group as fallback -->
+
+ <!-- PostScript -->
+ <alias>
+ <family>Helvetica</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Helvetica Condensed</family>
+ <default>
+ <family>Arial Narrow</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Times</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Courier</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+
+ <!-- Microsoft -->
+ <alias>
+ <family>Arial</family>
+ <default>
+ <family>Helvetica</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Arial Narrow</family>
+ <default>
+ <family>Helvetica Condensed</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Times New Roman</family>
+ <default>
+ <family>Times</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Courier New</family>
+ <default>
+ <family>Courier</family>
+ </default>
+ </alias>
+
+
+
+<!-- Map generics to specifics -->
+
+ <!-- PostScript -->
+ <alias binding="same">
+ <family>Helvetica</family>
+ <accept>
+ <family>TeX Gyre Heros</family>
+ <family>Nimbus Sans L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Helvetica Condensed</family>
+ <accept>
+ <family>TeX Gyre Heros Cn</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Times</family>
+ <accept>
+ <family>TeX Gyre Termes</family>
+ <family>Nimbus Roman No9 L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Courier</family>
+ <accept>
+ <family>TeX Gyre Cursor</family>
+ <family>Nimbus Mono L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>ITC Avant Garde Gothic</family>
+ <accept>
+ <family>TeX Gyre Adventor</family>
+ <family>URW Gothic L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>ITC Bookman</family>
+ <accept>
+ <family>Bookman Old Style</family>
+ <family>TeX Gyre Bonum</family>
+ <family>URW Bookman L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>ITC Zapf Chancery</family>
+ <accept>
+ <family>TeX Gyre Chorus</family>
+ <family>URW Chancery L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Palatino</family>
+ <accept>
+ <family>Palatino Linotype</family>
+ <family>TeX Gyre Pagella</family>
+ <family>URW Palladio L</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>New Century Schoolbook</family>
+ <accept>
+ <family>Century Schoolbook</family>
+ <family>TeX Gyre Schola</family>
+ <family>Century Schoolbook L</family>
+ </accept>
+ </alias>
+
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Arial</family>
+ <accept>
+ <family>Arimo</family>
+ <family>Liberation Sans</family>
+ <family>Albany</family>
+ <family>Albany AMT</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Arial Narrow</family>
+ <accept>
+ <family>Liberation Sans Narrow</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Times New Roman</family>
+ <accept>
+ <family>Tinos</family>
+ <family>Liberation Serif</family>
+ <family>Thorndale</family>
+ <family>Thorndale AMT</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Courier New</family>
+ <accept>
+ <family>Cousine</family>
+ <family>Liberation Mono</family>
+ <family>Cumberland</family>
+ <family>Cumberland AMT</family>
+ </accept>
+ </alias>
+
+ <alias binding="same">
+ <family>Georgia</family>
+ <accept>
+ <family>Gelasio</family>
+ </accept>
+ </alias>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/30-urw-aliases.conf b/chromium/third_party/fontconfig/src/conf.d/30-urw-aliases.conf
new file mode 100644
index 00000000000..e0d45da8760
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/30-urw-aliases.conf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ URW provides metric and shape compatible fonts for some Adobe families.
+ Most of these are handled in 30-metric-aliases.conf.
+ -->
+ <alias binding="same">
+ <family>Zapf Dingbats</family>
+ <accept><family>Dingbats</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>ITC Zapf Dingbats</family>
+ <accept><family>Dingbats</family></accept>
+ </alias>
+ <match target="pattern">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Symbol</string>
+ </test>
+ <edit name="family" mode="append" binding="same">
+ <string>Standard Symbols L</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/40-nonlatin.conf b/chromium/third_party/fontconfig/src/conf.d/40-nonlatin.conf
new file mode 100644
index 00000000000..c900fd4e7f9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/40-nonlatin.conf
@@ -0,0 +1,231 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Mark common families with their generics so we'll get
+ something reasonable
+-->
+
+<!--
+ Serif faces
+ -->
+ <alias>
+ <family>Nazli</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Lotoos</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Mitra</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Ferdosi</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Badr</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Zar</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Titr</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Jadid</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Kochi Mincho</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL SungtiL GB</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL Mingti2L Big5</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>ï¼­ï¼³ 明æœ</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>NanumMyeongjo</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>UnBatang</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Baekmuk Batang</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>MgOpen Canonica</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Sazanami Mincho</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL ZenKai Uni</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>ZYSong18030</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>FreeSerif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>SimSun</family>
+ <default><family>serif</family></default>
+ </alias>
+<!--
+ Sans-serif faces
+ -->
+ <alias>
+ <family>Arshia</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Elham</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Farnaz</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Nasim</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Sina</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Roya</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Koodak</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Terafik</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Kochi Gothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL KaitiM GB</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL KaitiM Big5</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>MS ゴシック</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>NanumGothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>UnDotum</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Baekmuk Dotum</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>MgOpen Modata</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Sazanami Gothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>AR PL ShanHeiSun Uni</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>ZYSong18030</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>FreeSans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+<!--
+ Monospace faces
+ -->
+ <alias>
+ <family>NSimSun</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>ZYSong18030</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>NanumGothicCoding</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>FreeMono</family>
+ <default><family>monospace</family></default>
+ </alias>
+
+<!--
+ Fantasy faces
+ -->
+ <alias>
+ <family>Homa</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Kamran</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Fantezi</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Tabassom</family>
+ <default><family>fantasy</family></default>
+ </alias>
+
+<!--
+ Cursive faces
+ -->
+ <alias>
+ <family>IranNastaliq</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
+ <family>Nafees Nastaleeq</family>
+ <default><family>cursive</family></default>
+ </alias>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/45-latin.conf b/chromium/third_party/fontconfig/src/conf.d/45-latin.conf
new file mode 100644
index 00000000000..aa62ed42e7f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/45-latin.conf
@@ -0,0 +1,189 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Mark common families with their generics so we'll get
+ something reasonable
+-->
+
+<!--
+ Serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Liberation Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Times New Roman</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Times</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Nimbus Roman No9 L</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Luxi Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Thorndale AMT</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Thorndale</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Georgia</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Garamond</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Palatino Linotype</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>Trebuchet MS</family>
+ <default><family>serif</family></default>
+ </alias>
+<!--
+ Sans-serif faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Liberation Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Arial</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Helvetica</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Verdana</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Albany AMT</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Albany</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Nimbus Sans L</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>Luxi Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+<!--
+ Monospace faces
+ -->
+ <alias>
+ <family>Bitstream Vera Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Liberation Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Inconsolata</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Courier New</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Courier</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Andale Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Luxi Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Cumberland AMT</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Cumberland</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>Nimbus Mono L</family>
+ <default><family>monospace</family></default>
+ </alias>
+<!--
+ Fantasy faces
+ -->
+ <alias>
+ <family>Impact</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Copperplate Gothic Std</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Cooper Std</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
+ <family>Bauhaus Std</family>
+ <default><family>fantasy</family></default>
+ </alias>
+<!--
+ Cursive faces
+ -->
+ <alias>
+ <family>ITC Zapf Chancery Std</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
+ <family>Zapfino</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
+ <family>Comic Sans MS</family>
+ <default><family>cursive</family></default>
+ </alias>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/49-sansserif.conf b/chromium/third_party/fontconfig/src/conf.d/49-sansserif.conf
new file mode 100644
index 00000000000..c6209a7d315
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/49-sansserif.conf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ If the font still has no generic name, add sans-serif
+ -->
+ <match target="pattern">
+ <test qual="all" name="family" compare="not_eq">
+ <string>sans-serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>serif</string>
+ </test>
+ <test qual="all" name="family" compare="not_eq">
+ <string>monospace</string>
+ </test>
+ <edit name="family" mode="append_last">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/50-user.conf b/chromium/third_party/fontconfig/src/conf.d/50-user.conf
new file mode 100644
index 00000000000..07c9182e788
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/50-user.conf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <!--
+ Load per-user customization files where stored on XDG Base Directory
+ specification compliant places. it should be usually:
+ $HOME/.config/fontconfig/conf.d
+ $HOME/.config/fontconfig/fonts.conf
+ -->
+ <include ignore_missing="yes" prefix="xdg">fontconfig/conf.d</include>
+ <include ignore_missing="yes" prefix="xdg">fontconfig/fonts.conf</include>
+ <!-- the following elements will be removed in the future -->
+ <include ignore_missing="yes" deprecated="yes">~/.fonts.conf.d</include>
+ <include ignore_missing="yes" deprecated="yes">~/.fonts.conf</include>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/51-local.conf b/chromium/third_party/fontconfig/src/conf.d/51-local.conf
new file mode 100644
index 00000000000..ca9fbe19592
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/51-local.conf
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <!-- Load local system customization file -->
+ <include ignore_missing="yes">local.conf</include>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/60-latin.conf b/chromium/third_party/fontconfig/src/conf.d/60-latin.conf
new file mode 100644
index 00000000000..2107e31e4b4
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/60-latin.conf
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Bitstream Vera Serif</family>
+ <family>DejaVu Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale AMT</family>
+ <family>Luxi Serif</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Times</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Bitstream Vera Sans</family>
+ <family>DejaVu Sans</family>
+ <family>Verdana</family>
+ <family>Arial</family>
+ <family>Albany AMT</family>
+ <family>Luxi Sans</family>
+ <family>Nimbus Sans L</family>
+ <family>Helvetica</family>
+ <family>Lucida Sans Unicode</family>
+ <family>BPG Glaho International</family> <!-- lat,cyr,arab,geor -->
+ <family>Tahoma</family> <!-- lat,cyr,greek,heb,arab,thai -->
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Bitstream Vera Sans Mono</family>
+ <family>DejaVu Sans Mono</family>
+ <family>Inconsolata</family>
+ <family>Andale Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland AMT</family>
+ <family>Luxi Mono</family>
+ <family>Nimbus Mono L</family>
+ <family>Courier</family>
+ </prefer>
+ </alias>
+<!--
+ Fantasy faces
+ -->
+ <alias>
+ <family>fantasy</family>
+ <prefer>
+ <family>Impact</family>
+ <family>Copperplate Gothic Std</family>
+ <family>Cooper Std</family>
+ <family>Bauhaus Std</family>
+ </prefer>
+ </alias>
+<!--
+ Cursive faces
+ -->
+ <alias>
+ <family>cursive</family>
+ <prefer>
+ <family>ITC Zapf Chancery Std</family>
+ <family>Zapfino</family>
+ <family>Comic Sans MS</family>
+ </prefer>
+ </alias>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/65-fonts-persian.conf b/chromium/third_party/fontconfig/src/conf.d/65-fonts-persian.conf
new file mode 100644
index 00000000000..ea00661208a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/65-fonts-persian.conf
@@ -0,0 +1,419 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!--
+ fonts-persian.conf
+ To configure Persian fonts from The FarsiWeb Project.
+
+ Copyright (C) 2005 Sharif FarsiWeb, Inc. <license@farsiweb.info>
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of Sharif FarsiWeb, Inc. not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. Sharif FarsiWeb, Inc. makes no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ SHARIF FARSIWEB, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+
+ ChangeLog:
+ 2005-04-03 Behdad Esfahbod: Initial revision.
+ 2005-10-09 Behdad Esfahbod: Turned off back-slant and Tahoma sections.
+ 2005-11-30 Behdad Esfahbod: Set Titr susbtitution size to 24 points.
+ 2008 Behdad Esfahbod: Cleanup. Add fantasy and cursive.
+ -->
+<fontconfig>
+
+
+<!-- Deprecated fonts are discouraged -->
+
+ <!-- Nesf[2] is officially deprecated and has problematic tables -->
+ <alias binding="same">
+ <family>Nesf</family>
+ <accept><family>Nesf2</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Nesf2</family>
+ <accept><family>Persian_sansserif_default</family></accept>
+ </alias>
+
+<!-- Name changes and spelling variant aliases -->
+
+ <alias binding="same">
+ <family>Nazanin</family>
+ <accept><family>Nazli</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Lotus</family>
+ <accept><family>Lotoos</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Yaqut</family>
+ <accept><family>Yaghoot</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Yaghut</family>
+ <accept><family>Yaghoot</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Traffic</family>
+ <accept><family>Terafik</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Ferdowsi</family>
+ <accept><family>Ferdosi</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Fantezy</family>
+ <accept><family>Fantezi</family></accept>
+ </alias>
+
+
+<!-- Classify fonts. -->
+
+ <!-- Persian_title class -->
+ <alias binding="same">
+ <family>Jadid</family>
+ <accept><family>Persian_title</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Titr</family>
+ <accept><family>Persian_title</family></accept>
+ </alias>
+
+ <!-- Persian_fantasy class -->
+ <alias binding="same">
+ <family>Kamran</family>
+ <accept>
+ <family>Persian_fantasy</family>
+ <family>Homa</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Homa</family>
+ <accept>
+ <family>Persian_fantasy</family>
+ <family>Kamran</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Fantezi</family>
+ <accept><family>Persian_fantasy</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Tabassom</family>
+ <accept><family>Persian_fantasy</family></accept>
+ </alias>
+
+ <!-- Persian_square class -->
+ <alias binding="same">
+ <family>Arshia</family>
+ <accept><family>Persian_square</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Nasim</family>
+ <accept><family>Persian_square</family></accept>
+ </alias>
+ <alias binding="same">
+ <family>Elham</family>
+ <accept>
+ <family>Persian_square</family>
+ <family>Farnaz</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Farnaz</family>
+ <accept>
+ <family>Persian_square</family>
+ <family>Elham</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Sina</family>
+ <accept><family>Persian_square</family></accept>
+ </alias>
+
+<!-- Font ordering per class -->
+
+ <!-- Persian_title class -->
+ <alias binding="same">
+ <family>Persian_title</family>
+ <accept>
+ <family>Titr</family>
+ <family>Jadid</family>
+ <family>Persian_serif</family>
+ </accept>
+ </alias>
+
+ <!-- Persian_fantasy class -->
+ <alias binding="same">
+ <family>Persian_fantasy</family>
+ <accept>
+ <family>Homa</family>
+ <family>Kamran</family>
+ <family>Fantezi</family>
+ <family>Tabassom</family>
+ <family>Persian_square</family>
+ </accept>
+ </alias>
+
+ <!-- Persian_square class -->
+ <alias binding="same">
+ <family>Persian_square</family>
+ <accept>
+ <family>Arshia</family>
+ <family>Elham</family>
+ <family>Farnaz</family>
+ <family>Nasim</family>
+ <family>Sina</family>
+ <family>Persian_serif</family>
+ </accept>
+ </alias>
+
+<!-- Register the fonts that we actually do have -->
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Elham</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Homa</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Koodak</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Nazli</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Roya</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Terafik</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+ <match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Titr</string>
+ </test>
+ <edit name="foundry">
+ <string>farsiweb</string>
+ </edit>
+ </match>
+
+
+<!-- Our fonts should oblique to the other side (TURNED-OFF) -->
+
+ <match target="font">
+ <test name="foundry">
+ <!--string>farsiweb</string-->
+ <string>TURNED-OFF</string>
+ </test>
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>-0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ </match>
+
+
+<!--
+ We can't hint our fonts well, so turn off hinting.
+ Moreover, the bitmaps we have designed (well, they
+ have designed), suck, so disable them too.
+ -->
+
+ <match target="font">
+ <test name="foundry">
+ <string>farsiweb</string>
+ </test>
+ <edit name="autohint">
+ <bool>false</bool>
+ </edit>
+ <edit name="hinting">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+
+<!-- Alias our fonts to common families -->
+
+ <!-- Persian serif fonts -->
+ <alias>
+ <family>serif</family>
+ <accept>
+ <family>Nazli</family>
+ <family>Lotoos</family>
+ <family>Mitra</family>
+ <family>Ferdosi</family>
+ <family>Badr</family>
+ <family>Zar</family>
+ </accept>
+ </alias>
+
+ <!-- Persian sans-serif fonts -->
+ <alias>
+ <family>sans-serif</family>
+ <accept>
+ <family>Roya</family>
+ <family>Koodak</family>
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+ <!-- Persian monospace fonts -->
+ <alias>
+ <family>monospace</family>
+ <accept>
+ <!-- Not really monospace -->
+ <family>Terafik</family>
+ </accept>
+ </alias>
+
+ <!-- Persian fantasy fonts -->
+ <alias>
+ <family>fantasy</family>
+ <accept>
+ <family>Homa</family>
+ <family>Kamran</family>
+ <family>Fantezi</family>
+ <family>Tabassom</family>
+ </accept>
+ </alias>
+
+ <!-- Persian (and Urdu) Nastaliq/cursive fonts -->
+ <alias>
+ <family>cursive</family>
+ <accept>
+ <family>IranNastaliq</family>
+ <family>Nafees Nastaleeq</family>
+ </accept>
+ </alias>
+
+<!-- Use Titr in titles -->
+
+ <!-- Both serif... -->
+ <match>
+ <test name="family">
+ <string>serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and sans-serif. -->
+ <match>
+ <test name="family">
+ <string>sans-serif</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+ <!-- and more. -->
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <test name="weight" compare="more_eq">
+ <int>200</int>
+ </test>
+ <test name="size" compare="more_eq">
+ <double>24</double>
+ </test>
+ <edit name="family" mode="prepend" binding="same">
+ <string>Titr</string>
+ </edit>
+ </match>
+
+
+<!-- Default substituted for deprecated sans-serif fonts -->
+
+ <match>
+ <test name="family">
+ <string>Persian_sansserif_default</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>Roya</string>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/65-khmer.conf b/chromium/third_party/fontconfig/src/conf.d/65-khmer.conf
new file mode 100644
index 00000000000..f9d06f2a97a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/65-khmer.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Khmer OS"</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Khmer OS"</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/65-nonlatin.conf b/chromium/third_party/fontconfig/src/conf.d/65-nonlatin.conf
new file mode 100644
index 00000000000..9306f74922f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/65-nonlatin.conf
@@ -0,0 +1,196 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Artsounk</family> <!-- armenian -->
+ <family>BPG UTF8 M</family> <!-- georgian -->
+ <family>Kinnari</family> <!-- thai -->
+ <family>Norasi</family> <!-- thai -->
+ <family>Frank Ruehl</family> <!-- hebrew -->
+ <family>Dror</family> <!-- hebrew -->
+ <family>JG LaoTimes</family> <!-- lao -->
+ <family>Saysettha Unicode</family> <!-- lao -->
+ <family>Pigiarniq</family> <!-- canadian syllabics -->
+ <family>B Davat</family> <!-- arabic (fa) -->
+ <family>B Compset</family> <!-- arabic (fa) -->
+ <family>Kacst-Qr</family> <!-- arabic (ar) -->
+ <family>Urdu Nastaliq Unicode</family> <!-- arabic (ur) -->
+ <family>Raghindi</family> <!-- devanagari -->
+ <family>Mukti Narrow</family> <!-- bengali -->
+ <family>malayalam</family> <!-- malayalam -->
+ <family>Sampige</family> <!-- kannada -->
+ <family>padmaa</family> <!-- gujarati -->
+ <family>Hapax Berbère</family> <!-- tifinagh -->
+ <family>MS Mincho</family> <!-- han (ja) -->
+ <family>SimSun</family> <!-- han (zh-cn,zh-tw) -->
+ <family>PMingLiu</family> <!-- han (zh-tw) -->
+ <family>WenQuanYi Zen Hei</family> <!-- han (zh-cn,zh-tw) -->
+ <family>WenQuanYi Bitmap Song</family> <!-- han (zh-cn,zh-tw) -->
+ <family>AR PL ShanHeiSun Uni</family> <!-- han (ja,zh-cn,zh-tw) -->
+ <family>AR PL New Sung</family> <!-- han (zh-cn,zh-tw) -->
+ <family>ZYSong18030</family> <!-- han (zh-cn,zh-tw) -->
+ <family>HanyiSong</family> <!-- han (zh-cn,zh-tw) -->
+ <family>MgOpen Canonica</family>
+ <family>Sazanami Mincho</family>
+ <family>IPAMonaMincho</family>
+ <family>IPAMincho</family>
+ <family>Kochi Mincho</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>AR PL Zenkai Uni</family>
+ <family>ï¼­ï¼³ 明æœ</family>
+ <family>ZYSong18030</family>
+ <family>NanumMyeongjo</family> <!-- hangul (ko) -->
+ <family>UnBatang</family> <!-- hangul (ko) -->
+ <family>Baekmuk Batang</family> <!-- hangul (ko) -->
+ <family>KacstQura</family>
+ <family>Frank Ruehl CLM</family>
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Marathi</family>
+ <family>Lohit Maithili</family>
+ <family>Lohit Kashmiri</family>
+ <family>Lohit Konkani</family>
+ <family>Lohit Nepali</family>
+ <family>Lohit Sindhi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Meera</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Nachlieli</family> <!-- hebrew -->
+ <family>Lucida Sans Unicode</family>
+ <family>Yudit Unicode</family>
+ <family>Kerkis</family> <!-- greek -->
+ <family>ArmNet Helvetica</family> <!-- armenian -->
+ <family>Artsounk</family> <!-- armenian -->
+ <family>BPG UTF8 M</family> <!-- georgian -->
+ <family>Waree</family> <!-- thai -->
+ <family>Loma</family> <!-- thai -->
+ <family>Garuda</family> <!-- thai -->
+ <family>Umpush</family> <!-- thai -->
+ <family>Saysettha Unicode</family> <!-- lao? -->
+ <family>JG Lao Old Arial</family> <!-- lao -->
+ <family>GF Zemen Unicode</family> <!-- ethiopic -->
+ <family>Pigiarniq</family> <!-- canadian syllabics -->
+ <family>B Davat</family> <!-- arabic (fa) -->
+ <family>B Compset</family> <!-- arabic (fa) -->
+ <family>Kacst-Qr</family> <!-- arabic (ar) -->
+ <family>Urdu Nastaliq Unicode</family> <!-- arabic (ur) -->
+ <family>Raghindi</family> <!-- devanagari -->
+ <family>Mukti Narrow</family> <!-- bengali -->
+ <family>malayalam</family> <!-- malayalam -->
+ <family>Sampige</family> <!-- kannada -->
+ <family>padmaa</family> <!-- gujarati -->
+ <family>Hapax Berbère</family> <!-- tifinagh -->
+ <family>MS Gothic</family> <!-- han (ja) -->
+ <family>UmePlus P Gothic</family> <!-- han (ja) -->
+ <!-- chinese fonts are actually serifed -->
+ <family>SimSun</family> <!-- han (zh-cn,zh-tw) -->
+ <family>PMingLiu</family> <!-- han (zh-tw) -->
+ <family>WenQuanYi Zen Hei</family> <!-- han (zh-cn,zh-tw) -->
+ <family>WenQuanYi Bitmap Song</family> <!-- han (zh-cn,zh-tw) -->
+ <family>AR PL ShanHeiSun Uni</family> <!--han (ja,zh-cn,zh-tw) -->
+ <family>AR PL New Sung</family> <!-- han (zh-cn,zh-tw) -->
+ <family>MgOpen Modata</family>
+ <family>VL Gothic</family>
+ <family>IPAMonaGothic</family>
+ <family>IPAGothic</family>
+ <family>Sazanami Gothic</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>AR PL KaitiM Big5</family>
+ <family>AR PL ShanHeiSun Uni</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>MS ゴシック</family>
+ <family>ZYSong18030</family> <!-- han (zh-cn,zh-tw) -->
+ <family>TSCu_Paranar</family> <!-- tamil -->
+ <family>NanumGothic</family> <!-- hangul (ko) -->
+ <family>UnDotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Dotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Gulim</family> <!-- hangul (ko) -->
+ <family>KacstQura</family>
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Marathi</family>
+ <family>Lohit Maithili</family>
+ <family>Lohit Kashmiri</family>
+ <family>Lohit Konkani</family>
+ <family>Lohit Nepali</family>
+ <family>Lohit Sindhi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Meera</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Miriam Mono</family> <!-- hebrew -->
+ <family>VL Gothic</family>
+ <family>IPAMonaGothic</family>
+ <family>IPAGothic</family>
+ <family>Sazanami Gothic</family>
+ <family>Kochi Gothic</family>
+ <family>AR PL KaitiM GB</family>
+ <family>MS Gothic</family> <!-- han (ja) -->
+ <family>UmePlus Gothic</family> <!-- han (ja) -->
+ <family>NSimSun</family> <!-- han (zh-cn,zh-tw) -->
+ <family>MingLiu</family> <!-- han (zh-tw) -->
+ <family>AR PL ShanHeiSun Uni</family> <!-- han (ja,zh-cn,zh-tw) -->
+ <family>AR PL New Sung Mono</family> <!-- han (zh-cn,zh-tw) -->
+ <family>HanyiSong</family> <!-- han (zh-cn) -->
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>ZYSong18030</family> <!-- han (zh-cn,zh-tw) -->
+ <family>NanumGothicCoding</family> <!-- hangul (ko) -->
+ <family>NanumGothic</family> <!-- hangul (ko) -->
+ <family>UnDotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Dotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Gulim</family> <!-- hangul (ko) -->
+ <family>TlwgTypo</family> <!-- thai -->
+ <family>TlwgTypist</family> <!-- thai -->
+ <family>TlwgTypewriter</family> <!-- thai -->
+ <family>TlwgMono</family> <!-- thai -->
+ <family>Hasida</family> <!-- hebrew -->
+ <family>Mitra Mono</family> <!-- bengali -->
+ <family>GF Zemen Unicode</family> <!-- ethiopic -->
+ <family>Hapax Berbère</family> <!-- tifinagh -->
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Marathi</family>
+ <family>Lohit Maithili</family>
+ <family>Lohit Kashmiri</family>
+ <family>Lohit Konkani</family>
+ <family>Lohit Nepali</family>
+ <family>Lohit Sindhi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Meera</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/69-unifont.conf b/chromium/third_party/fontconfig/src/conf.d/69-unifont.conf
new file mode 100644
index 00000000000..177dec5d4ed
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/69-unifont.conf
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>FreeSerif</family>
+ <family>Code2000</family>
+ <family>Code2001</family> <!-- plane1 and beyond -->
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>FreeSans</family>
+ <family>Arial Unicode MS</family>
+ <family>Arial Unicode</family>
+ <family>Code2000</family> <!-- almost everything; serif actually -->
+ <family>Code2001</family> <!-- plane1 and beyond -->
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>FreeMono</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/70-no-bitmaps.conf b/chromium/third_party/fontconfig/src/conf.d/70-no-bitmaps.conf
new file mode 100644
index 00000000000..6b506e82a0a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/70-no-bitmaps.conf
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Reject bitmap fonts -->
+ <selectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </rejectfont>
+ </selectfont>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/70-yes-bitmaps.conf b/chromium/third_party/fontconfig/src/conf.d/70-yes-bitmaps.conf
new file mode 100644
index 00000000000..c153aebdca9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/70-yes-bitmaps.conf
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Accept bitmap fonts -->
+ <selectfont>
+ <acceptfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </acceptfont>
+ </selectfont>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/80-delicious.conf b/chromium/third_party/fontconfig/src/conf.d/80-delicious.conf
new file mode 100644
index 00000000000..845647bed44
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/80-delicious.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- Fix-ups for Delicious family -->
+
+<!-- Delicious 'heavy' variant says its Medium weight -->
+<match target="scan">
+ <test name="family" compare="eq" ignore-blanks="true">
+ <string>Delicious</string>
+ </test>
+ <test name="style">
+ <string>Heavy</string>
+ </test>
+ <edit name="weight">
+ <const>heavy</const>
+ </edit>
+</match>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/90-synthetic.conf b/chromium/third_party/fontconfig/src/conf.d/90-synthetic.conf
new file mode 100644
index 00000000000..b8d1e85e1fb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/90-synthetic.conf
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is roman -->
+ <test name="slant">
+ <const>roman</const>
+ </test>
+ <!-- check to see if the pattern requested non-roman -->
+ <test target="pattern" name="slant" compare="not_eq">
+ <const>roman</const>
+ </test>
+ <!-- multiply the matrix to slant the font -->
+ <edit name="matrix" mode="assign">
+ <times>
+ <name>matrix</name>
+ <matrix><double>1</double><double>0.2</double>
+ <double>0</double><double>1</double>
+ </matrix>
+ </times>
+ </edit>
+ <!-- pretend the font is oblique now -->
+ <edit name="slant" mode="assign">
+ <const>oblique</const>
+ </edit>
+ <!-- and disable embedded bitmaps for artificial oblique -->
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+ Synthetic emboldening for fonts that do not have bold face available
+ -->
+
+ <match target="font">
+ <!-- check to see if the font is just regular -->
+ <test name="weight" compare="less_eq">
+ <const>medium</const>
+ </test>
+ <!-- check to see if the pattern requests bold -->
+ <test target="pattern" name="weight" compare="more">
+ <const>medium</const>
+ </test>
+ <!--
+ set the embolden flag
+ needed for applications using cairo, e.g. gucharmap, gedit, ...
+ -->
+ <edit name="embolden" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <!--
+ set weight to bold
+ needed for applications using Xft directly, e.g. Firefox, ...
+ -->
+ <edit name="weight" mode="assign">
+ <const>bold</const>
+ </edit>
+ </match>
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/conf.d/Makefile.am b/chromium/third_party/fontconfig/src/conf.d/Makefile.am
new file mode 100644
index 00000000000..d61756b816c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/Makefile.am
@@ -0,0 +1,103 @@
+#
+# 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.
+
+BUILT_SOURCES = README
+DOC_SOURCES = README.in
+DOC_FILES = $(DOC_SOURCES:.in=)
+
+CONF_LINKS = \
+ 10-scale-bitmap-fonts.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 = $(template_DATA) $(DOC_SOURCES)
+CLEANFILES = $(DOC_FILES)
+
+configdir = $(CONFIGDIR)
+config_DATA = $(DOC_FILES)
+
+templatedir = $(TEMPLATEDIR)
+template_DATA = \
+ 10-autohint.conf \
+ 10-no-sub-pixel.conf \
+ 10-scale-bitmap-fonts.conf \
+ 10-sub-pixel-bgr.conf \
+ 10-sub-pixel-rgb.conf \
+ 10-sub-pixel-vbgr.conf \
+ 10-sub-pixel-vrgb.conf \
+ 10-unhinted.conf \
+ 11-lcdfilter-default.conf \
+ 11-lcdfilter-legacy.conf \
+ 11-lcdfilter-light.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
+
+README: $(srcdir)/README.in
+ sed "s|\@TEMPLATEDIR\@|$(templatedir)|" $< > $@
+
+install-data-hook:
+ mkdir -p $(DESTDIR)$(configdir)
+ @(echo cd $(DESTDIR)$(configdir); \
+ cd $(DESTDIR)$(configdir); \
+ for i in $(CONF_LINKS); do \
+ echo $(RM) $$i";" ln -s $(templatedir)/$$i .; \
+ $(RM) $$i; \
+ ln -s $(templatedir)/$$i .; \
+ done)
+uninstall-local:
+ @(echo cd $(DESTDIR)$(configdir); \
+ cd $(DESTDIR)$(configdir); \
+ for i in $(CONF_LINKS); do \
+ echo $(RM) $$i; \
+ $(RM) $$i; \
+ done)
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/conf.d/README.in b/chromium/third_party/fontconfig/src/conf.d/README.in
new file mode 100644
index 00000000000..90c45de5253
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/conf.d/README.in
@@ -0,0 +1,23 @@
+conf.d/README
+
+Each file in this directory is a fontconfig configuration file. Fontconfig
+scans this directory, loading all files of the form [0-9][0-9]*.conf.
+These files are normally installed in @TEMPLATEDIR@
+and then symlinked here, allowing them to be easily installed and then
+enabled/disabled by adjusting the symlinks.
+
+The files are loaded in numeric order, the structure of the configuration
+has led to the following conventions in usage:
+
+ Files begining with: Contain:
+
+ 00 through 09 Font directories
+ 10 through 19 system rendering defaults (AA, etc)
+ 20 through 29 font rendering options
+ 30 through 39 family substitution
+ 40 through 49 generic identification, map family->generic
+ 50 through 59 alternate config file loading
+ 60 through 69 generic aliases, map generic->family
+ 70 through 79 select font (adjust which fonts are available)
+ 80 through 89 match target="scan" (modify scanned patterns)
+ 90 through 99 font synthesis
diff --git a/chromium/third_party/fontconfig/src/config-fixups.h b/chromium/third_party/fontconfig/src/config-fixups.h
new file mode 100644
index 00000000000..93ebf5bb37f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config-fixups.h
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+/* This header file is supposed to be included in config.h */
+
+/* just a hack to build the fat binaries:
+ * https://bugs.freedesktop.org/show_bug.cgi?id=20208
+ */
+#ifdef __APPLE__
+# include <machine/endian.h>
+# undef SIZEOF_VOID_P
+# undef ALIGNOF_DOUBLE
+# ifdef __LP64__
+# define SIZEOF_VOID_P 8
+# define ALIGNOF_DOUBLE 8
+# else
+# define SIZEOF_VOID_P 4
+# define ALIGNOF_DOUBLE 4
+# endif
+#endif
diff --git a/chromium/third_party/fontconfig/src/config/Makedefs.in b/chromium/third_party/fontconfig/src/config/Makedefs.in
new file mode 100644
index 00000000000..ae75aff4911
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config/Makedefs.in
@@ -0,0 +1,76 @@
+#
+# fontconfig/config/Makedefs.in
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+SHELL = @SHELL@
+
+srcdir=@srcdir@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+bindir=@bindir@
+datadir=@datadir@
+includedir=@includedir@
+sysconfdir=@sysconfdir@
+confdir=@confdir@
+
+DSO_LDOPTS=@DSO_LDOPTS@
+DSO_CFLAGS=@DSO_CFLAGS@
+DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@
+
+INSTALL=@INSTALL@
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_SCRIPT=@INSTALL_SCRIPT@
+INSTALL_DATA=@INSTALL_DATA@
+MKSHLIB=@MKSHLIB@
+LN_S=@LN_S@
+
+# shared libraries
+LIBDIR=$(libdir)
+# programs
+BINDIR=$(bindir)
+# font configuration files
+CONFDIR=@CONFDIR@
+# include files
+INCLUDEDIR=$(includedir)/fontconfig
+
+X_FONT_DIR=@X_FONT_DIR@
+FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@
+FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\"
+
+CDEBUGFLAGS=@CFLAGS@
+
+INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@
+
+CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES)
+
+LIBBASE=libfontconfig.so
+LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@
+LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@
+
+LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig
+
+SRCDIR=$(TOPDIR)/src
+
+INCDIR=$(TOPDIR)/fontconfig
+HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h
diff --git a/chromium/third_party/fontconfig/src/config/config-subst b/chromium/third_party/fontconfig/src/config/config-subst
new file mode 100644
index 00000000000..5907e03286a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config/config-subst
@@ -0,0 +1,10 @@
+#!/bin/sh
+script=config-subst.$$
+trap "rm $script" 0
+rm -f $script
+for i in ${1+"$@"}; do
+ var="`echo "$i" | sed 's/=.*$//'`"
+ val="`echo "$i" | sed 's/^[^=]*=//'`"
+ echo "s;@$var@;$val;" >> $script
+done
+sed -f $script
diff --git a/chromium/third_party/fontconfig/src/config/config.guess b/chromium/third_party/fontconfig/src/config/config.guess
new file mode 100644
index 00000000000..c38553dc74b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config/config.guess
@@ -0,0 +1,1497 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2006-02-23'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS_NT-*:*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ x86:Interix*:[345]*)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T:Interix*:[345]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/chromium/third_party/fontconfig/src/config/config.sub b/chromium/third_party/fontconfig/src/config/config.sub
new file mode 100644
index 00000000000..ad9f3957118
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config/config.sub
@@ -0,0 +1,1608 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2006-02-23'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m32c)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ m32c-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16c)
+ basic_machine=cr16c-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/chromium/third_party/fontconfig/src/config/install.sh b/chromium/third_party/fontconfig/src/config/install.sh
new file mode 100644
index 00000000000..ddbcef3d91d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/config/install.sh
@@ -0,0 +1,240 @@
+#! /bin/sh
+#
+# fontconfig/config/install.sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+tranformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/chromium/third_party/fontconfig/src/configure.ac b/chromium/third_party/fontconfig/src/configure.ac
new file mode 100644
index 00000000000..c3743f43589
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/configure.ac
@@ -0,0 +1,751 @@
+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_PREREQ(2.61)
+
+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
+AC_INIT([fontconfig], [2.11.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig])
+AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2])
+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=9
+LIBT_REVISION=0
+AC_SUBST(LIBT_CURRENT)
+AC_SUBST(LIBT_REVISION)
+LIBT_AGE=8
+
+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)
+
+PKGCONFIG_REQUIRES=
+PKGCONFIG_REQUIRES_PRIVATELY=
+
+dnl ==========================================================================
+
+AC_CONFIG_HEADERS(config.h)
+AC_CONFIG_MACRO_DIR([m4])
+
+AC_PROG_CC
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
+
+AM_MISSING_PROG([GIT], [git])
+AM_MISSING_PROG([GPERF], [gperf])
+
+AC_MSG_CHECKING([for RM macro])
+_predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
+if test "x$_predefined_rm" = "x"; then
+ AC_MSG_RESULT([no predefined RM])
+ AC_CHECK_PROG(RM, rm, [rm -f])
+else
+ AC_MSG_RESULT($_predefined_rm)
+fi
+
+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 ==========================================================================
+
+AX_CC_FOR_BUILD()
+AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
+AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
+AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
+
+dnl ==========================================================================
+
+AC_ARG_WITH(arch,
+ [AC_HELP_STRING([--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 regex.h stdlib.h string.h unistd.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h])
+AX_CREATE_STDINT_H([src/fcstdint.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_C_FLEXIBLE_ARRAY_MEMBER
+AC_TYPE_PID_T
+
+# Checks for library functions.
+AC_FUNC_VPRINTF
+AC_FUNC_MMAP
+AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs lstat])
+
+dnl AC_CHECK_FUNCS doesn't check for header files.
+dnl posix_fadvise() may be not available in older libc.
+fc_saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
+AC_MSG_CHECKING([for posix_fadvise])
+AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <fcntl.h>
+ int main(void) {
+ return posix_fadvise(0, 0, 0, 0);
+ }
+ ]])],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the 'posix_fadvise' function.])
+ ],[AC_MSG_RESULT([no])])
+if test "$os_win32" = "no"; then
+ AC_MSG_CHECKING([for scandir])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <dirent.h>
+ int comp(const struct dirent **, const struct dirent **);
+ int comp(const struct dirent **a, const struct dirent **b) { return 0; }
+ int main(void) {
+ struct dirent **d;
+ return scandir(".", &d, 0, &comp) >= 0;
+ }
+ ]])],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_SCANDIR], [1], [Define to 1 if you have the 'scandir' function.])
+ ],[
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <dirent.h>
+ int comp(const void *, const void *);
+ int comp(const void *a, const void *b) { return 0; }
+ int main(void) {
+ struct dirent **d;
+ return scandir(".", &d, 0, &comp) >= 0;
+ }
+ ]])],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_SCANDIR_VOID_P], [1], [Define to 1 if you have the 'scandir' function with int (* compar)(const void *, const void *)])
+ ],[
+ AC_MSG_ERROR([
+*** No scandir function available.])
+ ])
+ ])
+fi
+CFLAGS="$fc_saved_CFLAGS"
+
+#
+if test "x$ac_cv_func_fstatvfs" = "xyes"; then
+ AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
+ [#include <sys/statvfs.h>])
+fi
+if test "x$ac_cv_func_fstatfs" = "xyes"; then
+ AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif])
+fi
+AC_CHECK_MEMBERS([struct dirent.d_type],,,
+ [#include <dirent.h>])
+#
+# regex
+#
+if test "x$ac_cv_func_regcomp" = "xyes" -a "x$ac_cv_func_regerror" = "xyes" -a "x$ac_cv_func_regexec" = "xyes" -a "x$ac_cv_func_regfree"; then
+ AC_DEFINE(USE_REGEX,,[Use regex])
+fi
+
+#
+# Checks for iconv
+#
+AC_ARG_ENABLE(iconv,
+ [AC_HELP_STRING([--enable-iconv],
+ [Use iconv to support non-Unicode SFNT name])],
+ ,enable_iconv=no)
+AC_ARG_WITH(libiconv,
+ [AC_HELP_STRING([--with-libiconv=DIR],
+ [Use libiconv in DIR])],
+ [if test "x$withval" = "xyes"; then
+ libiconv_prefix=$prefix
+ else
+ libiconv_prefix=$withval
+ fi],
+ [libiconv_prefix=auto])
+AC_ARG_WITH(libiconv-includes,
+ [AC_HELP_STRING([--with-libiconv-includes=DIR],
+ [Use libiconv includes in DIR])],
+ [libiconv_includes=$withval],
+ [libiconv_includes=auto])
+AC_ARG_WITH(libiconv-lib,
+ [AC_HELP_STRING([--with-libiconv-lib=DIR],
+ [Use libiconv library in DIR])],
+ [libiconv_lib=$withval],
+ [libiconv_lib=auto])
+
+# if no libiconv,libiconv-includes,libiconv-lib are specified,
+# libc's iconv has a priority.
+if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
+ libiconv_cflags="-I${libiconv_includes}"
+elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
+ libiconv_cflags="-I${libiconv_prefix}/include"
+else
+ libiconv_cflags=""
+fi
+libiconv_libs=""
+if test "x$libiconv_cflags" != "x"; then
+ if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
+ libiconv_libs="-L${libiconv_lib} -liconv"
+ elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
+ libiconv_libs="-L${libiconv_prefix}/lib -liconv"
+ else
+ libiconv_libs="-liconv"
+ fi
+fi
+
+use_iconv=0
+if test "x$enable_iconv" != "xno"; then
+ AC_MSG_CHECKING([for a usable iconv])
+ if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
+ iconvsaved_CFLAGS="$CFLAGS"
+ iconvsaved_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $libiconv_cflags"
+ LIBS="$LIBS $libiconv_libs"
+
+ AC_TRY_LINK([#include <iconv.h>],
+ [iconv_open ("from", "to");],
+ [iconv_type="libiconv"
+ use_iconv=1
+ ICONV_CFLAGS="$libiconv_cflags"
+ ICONV_LIBS="$libiconv_libs"
+ ],
+ [use_iconv=0])
+
+ CFLAGS="$iconvsaved_CFLAGS"
+ LIBS="$iconvsaved_LIBS"
+ fi
+ if test "x$use_iconv" = "x0"; then
+ AC_TRY_LINK([#include <iconv.h>],
+ [iconv_open ("from", "to");],
+ [iconv_type="libc"
+ use_iconv=1],
+ [iconv_type="not found"
+ use_iconv=0])
+ fi
+
+ AC_MSG_RESULT([$iconv_type])
+ AC_SUBST(ICONV_CFLAGS)
+ AC_SUBST(ICONV_LIBS)
+fi
+AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
+#
+# Checks for FreeType
+#
+PKG_CHECK_MODULES(FREETYPE, freetype2)
+PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2"
+
+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,
+ [AC_HELP_STRING([--with-expat=DIR],
+ [Use Expat in DIR])],
+ [expat_prefix=$withval],
+ [expat_prefix=auto])
+AC_ARG_WITH(expat-includes,
+ [AC_HELP_STRING([--with-expat-includes=DIR],
+ [Use Expat includes in DIR])],
+ [expat_includes=$withval],
+ [expat_includes=auto])
+AC_ARG_WITH(expat-lib,
+ [AC_HELP_STRING([--with-expat-lib=DIR])],
+ [expat_lib=$withval],
+ [expat_lib=auto])
+
+if test "$enable_libxml2" != "yes"; then
+ use_pkgconfig_for_expat=yes
+ if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
+ PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
+ else
+ use_pkgconfig_for_expat=no
+ fi
+ if test "x$use_pkgconfig_for_expat" = "xno"; then
+ if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
+ EXPAT_CFLAGS="-I${expat_includes}"
+ elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
+ EXPAT_CFLAGS="-I${expat_prefix}/include"
+ else
+ EXPAT_CFLAGS=""
+ fi
+ if test "$expat_lib" != "auto"; then
+ EXPAT_LIBS="-L${expat_lib} -lexpat"
+ elif test "$expat_prefix" != "auto"; then
+ EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
+ else
+ EXPAT_LIBS="-lexpat"
+ fi
+ else
+ PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat"
+ fi
+
+ expatsaved_CPPFLAGS="$CPPFLAGS"
+ expatsaved_LIBS="$LIBS"
+ CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
+ LIBS="$LIBS $EXPAT_LIBS"
+
+ AC_CHECK_HEADER(expat.h)
+ if test "$ac_cv_header_expat_h" = "no"; then
+ AC_CHECK_HEADER(xmlparse.h)
+ if test "$ac_cv_header_xmlparse_h" = "yes"; then
+ 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])
+ else
+ AC_MSG_ERROR([
+*** expat is required. or try to use --enable-libxml2])
+ fi
+ fi
+ AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
+ if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
+ AC_MSG_ERROR([
+*** expat is required. or try to use --enable-libxml2])
+ fi
+ CPPFLAGS="$expatsaved_CPPFLAGS"
+ LIBS="$expatsaved_LIBS"
+
+ AC_SUBST(EXPAT_CFLAGS)
+ AC_SUBST(EXPAT_LIBS)
+fi
+
+#
+# Check libxml2 configuration
+#
+AC_ARG_ENABLE(libxml2,
+ [AC_HELP_STRING([--enable-libxml2],
+ [Use libxml2 instead of Expat])])
+
+if test "$enable_libxml2" = "yes"; then
+ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
+ PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0"
+ AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
+
+ AC_SUBST(LIBXML2_CFLAGS)
+ AC_SUBST(LIBXML2_LIBS)
+
+ fc_saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
+ AC_MSG_CHECKING([SAX1 support in libxml2])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ #include <libxml/xmlversion.h>
+ #if !defined(LIBXML_SAX1_ENABLED)
+ # include "error: No SAX1 support in libxml2"
+ #endif
+ ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
+*** SAX1 support in libxml2 is required. enable it or use expat instead.])])
+ CFLAGS="$fc_saved_CFLAGS"
+fi
+
+#
+# Set default font directory
+#
+
+AC_ARG_WITH(default-fonts,
+ [AC_HELP_STRING([--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,
+ [AC_HELP_STRING([--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,
+ [AC_HELP_STRING([--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)
+
+#
+# Set configuration paths
+#
+
+AC_ARG_WITH(templatedir,
+ [AC_HELP_STRING([--with-templatedir=DIR],
+ [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
+ [templatedir="$withval"],
+ [templatedir=yes])
+AC_ARG_WITH(baseconfigdir,
+ [AC_HELP_STRING([--with-baseconfigdir=DIR],
+ [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
+ [baseconfigdir="$withval"],
+ [baseconfigdir=yes])
+AC_ARG_WITH(configdir,
+ [AC_HELP_STRING([--with-configdir=DIR],
+ [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
+ [configdir="$withval"],
+ [configdir=yes])
+AC_ARG_WITH(xmldir,
+ [AC_HELP_STRING([--with-xmldir=DIR],
+ [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
+ [xmldir="$withval"],
+ [xmldir=yes])
+
+case "$templatedir" in
+no|yes)
+ templatedir='${datadir}'/fontconfig/conf.avail
+ ;;
+*)
+ ;;
+esac
+case "$baseconfigdir" in
+no|yes)
+ baseconfigdir='${sysconfdir}'/fonts
+ ;;
+*)
+ ;;
+esac
+case "$configdir" in
+no|yes)
+ configdir='${BASECONFIGDIR}'/conf.d
+ ;;
+*)
+ ;;
+esac
+case "$xmldir" in
+no|yes)
+ xmldir='${datadir}'/xml/fontconfig
+ ;;
+*)
+ ;;
+esac
+
+TEMPLATEDIR=${templatedir}
+BASECONFIGDIR=${baseconfigdir}
+CONFIGDIR=${configdir}
+XMLDIR=${xmldir}
+AC_SUBST(TEMPLATEDIR)
+AC_SUBST(BASECONFIGDIR)
+AC_SUBST(CONFIGDIR)
+AC_SUBST(XMLDIR)
+
+
+dnl ===========================================================================
+
+#
+# Thread-safety primitives
+#
+
+AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
+ fc_cv_have_intel_atomic_primitives=false
+ AC_TRY_LINK([
+ void memory_barrier (void) { __sync_synchronize (); }
+ int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
+ int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
+ void mutex_unlock (int *m) { __sync_lock_release (m); }
+ ], [], fc_cv_have_intel_atomic_primitives=true
+ )
+])
+if $fc_cv_have_intel_atomic_primitives; then
+ AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
+fi
+
+AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
+ fc_cv_have_solaris_atomic_ops=false
+ AC_TRY_LINK([
+ #include <atomic.h>
+ /* This requires Solaris Studio 12.2 or newer: */
+ #include <mbarrier.h>
+ void memory_barrier (void) { __machine_rw_barrier (); }
+ int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
+ void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
+ ], [], fc_cv_have_solaris_atomic_ops=true
+ )
+])
+if $fc_cv_have_solaris_atomic_ops; then
+ AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
+fi
+
+if test "$os_win32" = no && ! $have_pthread; then
+ AC_CHECK_HEADERS(sched.h)
+ AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
+fi
+
+have_pthread=false
+if test "$os_win32" = no; then
+ AX_PTHREAD([have_pthread=true])
+fi
+if $have_pthread; then
+ LIBS="$PTHREAD_LIBS $LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ CC="$PTHREAD_CC"
+ AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
+fi
+AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
+
+
+dnl ===========================================================================
+
+#
+# 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,
+ [AC_HELP_STRING([--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
+ 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
+ DOCMAN3=""
+fi
+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])
+
+dnl include the header file for workaround of miscalculating size on autoconf
+dnl particularly for fat binaries
+AH_BOTTOM([#include "config-fixups.h"])
+
+dnl
+dnl
+AC_SUBST(PKGCONFIG_REQUIRES)
+AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
+
+dnl
+AC_CONFIG_FILES([
+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
+fc-validate/Makefile
+doc/Makefile
+doc/version.sgml
+test/Makefile
+fontconfig.spec
+fontconfig.pc
+fontconfig-zip
+])
+AC_OUTPUT
diff --git a/chromium/third_party/fontconfig/src/doc/Makefile.am b/chromium/third_party/fontconfig/src/doc/Makefile.am
new file mode 100644
index 00000000000..78a7cdbf1e2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/Makefile.am
@@ -0,0 +1,219 @@
+# -*- encoding: utf-8 -*-
+#
+# 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.
+
+NULL =
+EXTRA_DIST = \
+ $(BUILT_DOCS) \
+ $(DOC_FUNCS_FNCS) \
+ $(DOC_FUNCS_SGML) \
+ $(HTML_DIR)/* \
+ $(SGML_FILES) \
+ $(check_SCRIPTS) \
+ confdir.sgml.in \
+ func.sgml \
+ $(NULL)
+MAINTAINERCLEANFILES = \
+ $(DOC_FUNCS_SGML) \
+ $(NULL)
+CLEANFILES = \
+ $(BUILT_DOCS) \
+ $(LOCAL_SGML_FILES) \
+ confdir.sgml \
+ func.refs \
+ $(NULL)
+BUILT_SOURCES = \
+ $(NULL)
+SUFFIXES = \
+ .fncs \
+ .sgml \
+ .txt \
+ .html \
+ $(NULL)
+TESTS = \
+ check-missing-doc \
+ $(NULL)
+TESTS_ENVIRONMENT = \
+ top_srcdir=${top_srcdir}; export top_srcdir; \
+ $(NULL)
+LOG_COMPILER = sh
+#
+DOC2HTML = docbook2html
+DOC2TXT = docbook2txt
+DOC2MAN = docbook2man
+DOC2PDF = docbook2pdf
+
+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 \
+ $(NULL)
+SGML_FILES = \
+ fontconfig-user.sgml \
+ fontconfig-devel.sgml \
+ $(NULL)
+LOCAL_SGML_FILES = \
+ local-fontconfig-user.sgml \
+ local-fontconfig-devel.sgml \
+ $(NULL)
+
+DOC_FUNCS_SGML = $(DOC_FUNCS_FNCS:.fncs=.sgml)
+BUILT_DOCS = \
+ $(HTML_FILES) \
+ $(PDF_FILES) \
+ $(TXT_FILES) \
+ $(man3_MANS) \
+ $(man5_MANS) \
+ $(NULL)
+DOCS_DEPS = \
+ $(DOC_FUNCS_SGML) \
+ confdir.sgml \
+ version.sgml \
+ $(NULL)
+
+TXT_FILES = $(SGML_FILES:.sgml=.txt)
+PDF_FILES = $(SGML_FILES:.sgml=.pdf)
+HTML_FILES = \
+ fontconfig-user.html \
+ $(NULL)
+HTML_DIR = fontconfig-devel
+#
+noinst_PROGRAMS = \
+ $(NULL)
+##
+edit_sgml_SOURCES = \
+ edit-sgml.c \
+ $(NULL)
+edit_sgml_CC = $(CC_FOR_BUILD)
+#
+check_SCRIPTS = \
+ check-missing-doc \
+ $(NULL)
+#
+man3_MANS = \
+ $(DOCMAN3) \
+ $(NULL)
+man5_MANS = \
+ fonts-conf.5 \
+ $(NULL)
+#
+doc_DATA = \
+ $(TXT_FILES) \
+ $(PDF_FILES) \
+ $(HTML_FILES) \
+ $(NULL)
+#
+htmldocdir = $(docdir)/$(HTML_DIR)
+htmldoc_DATA = \
+ $(NULL)
+
+if USEDOCBOOK
+BUILT_SOURCES += \
+ $(LOCAL_SGML_FILES) \
+ $(NULL)
+noinst_PROGRAMS += \
+ edit-sgml \
+ $(NULL)
+htmldoc_DATA += $(HTML_DIR)/*
+
+##
+.fncs.sgml:
+ $(AM_V_GEN) $(RM) $@; \
+ $(builddir)/edit-sgml$(EXEEXT) $(srcdir)/func.sgml < '$(srcdir)/$*.fncs' > $*.sgml
+.sgml.txt:
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2TXT) $*.sgml
+.sgml.pdf:
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2PDF) $*.sgml
+.sgml.html:
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2HTML) -u $*.sgml > $@
+##
+fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) local-fontconfig-user.sgml && \
+ $(RM) manpage.*
+##
+$(man3_MANS): func.refs
+func.refs: local-fontconfig-devel.sgml $(DOCS_DEPS)
+ $(AM_V_GEN) $(RM) $@; \
+ $(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 || rm $@ || :
+confdir.sgml: $(srcdir)/confdir.sgml.in
+ $(AM_V_GEN) sed -e 's,@CONFDIR\@,${CONFDIR},' $(srcdir)/$@.in | awk '{if (NR > 1) printf("\n"); printf("%s", $$0);}' > $@
+##
+$(DOC_FUNCS_SGML): $(DOC_FUNCS_FNCS) edit-sgml$(EXEEXT) $(srcdir)/func.sgml
+$(TXT_FILES): $(DOCS_DEPS)
+$(PDF_FILES): $(DOCS_DEPS)
+$(HTML_FILES): $(DOCS_DEPS)
+$(HTML_DIR)/*: $(HTML_DIR)
+$(HTML_DIR): local-fontconfig-devel.sgml $(DOCS_DEPS)
+ $(AM_V_GEN) $(RM) -r $@; \
+ $(DOC2HTML) -V '%use-id-as-filename%' -o $@ local-fontconfig-devel.sgml
+local-fontconfig-user.sgml: $(srcdir)/fontconfig-user.sgml
+ $(AM_V_GEN) $(LN_S) $(srcdir)/fontconfig-user.sgml $@; \
+ [ ! -f $(builddir)/fontconfig-user.sgml ] && cp -a $(srcdir)/fontconfig-user.sgml $(builddir)/fontconfig-user.sgml || :
+local-fontconfig-devel.sgml: $(srcdir)/fontconfig-devel.sgml
+ $(AM_V_GEN) $(LN_S) $(srcdir)/fontconfig-devel.sgml $@; \
+ [ ! -f $(builddir)/fontconfig-devel.sgml ] && cp -a $(srcdir)/fontconfig-devel.sgml $(builddir)/fontconfig-devel.sgml || :
+#
+all-local: $(BUILT_DOCS) $(HTML_DIR)/*
+clean-local:
+ $(RM) -r $(HTML_DIR) devel-man
+ [ "x$(builddir)" != "x$(srcdir)" ] && $(RM) $(builddir)/*.sgml || :
+dist-local-check-docs-enabled:
+ @true
+else
+htmldoc_DATA += $(srcdir)/$(HTML_DIR)/*
+all-local:
+clean-local:
+dist-local-check-docs-enabled:
+ @echo "*** --enable-man must be used in order to make dist"
+ @false
+endif
+
+# force doc rebulid after configure
+dist-hook-local: dist-local-check-docs-enabled
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/doc/check-missing-doc b/chromium/third_party/fontconfig/src/doc/check-missing-doc
new file mode 100644
index 00000000000..195ec003be6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/check-missing-doc
@@ -0,0 +1,24 @@
+#!/bin/sh
+header=fontconfig-header
+doc=fontconfig-doc
+trap "rm $header $doc" 0 1 15
+top_srcdir=${top_srcdir-".."}
+(
+cat $top_srcdir/fontconfig/*.h | grep '^Fc' |
+ grep -v FcPublic | sed 's/[^a-zA-Z0-9].*//';
+ cat $top_srcdir/fontconfig/*.h |
+ sed -n 's/#define \(Fc[a-zA-Z]*\)(.*$/\1/p') |
+ sort -u > $header
+
+grep '@FUNC[+]*@' $top_srcdir/doc/*.fncs |
+awk '{print $2}' |
+sort -u > $doc
+
+if cmp $doc $header > /dev/null; then
+ exit 0
+fi
+
+echo \
+'Library Export Documentation'
+diff -y $header $doc | grep '[<>]'
+exit 1
diff --git a/chromium/third_party/fontconfig/src/doc/confdir.sgml.in b/chromium/third_party/fontconfig/src/doc/confdir.sgml.in
new file mode 100644
index 00000000000..cfcaa9f6e5b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/confdir.sgml.in
@@ -0,0 +1,26 @@
+<!--
+ fontconfig/doc/confdir.sgml.in
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+<!-- this is filled in at make time -->
+<!--@CONFDIR@-->
+/etc/fonts
diff --git a/chromium/third_party/fontconfig/src/doc/edit-sgml.c b/chromium/third_party/fontconfig/src/doc/edit-sgml.c
new file mode 100644
index 00000000000..cc2ee763303
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/edit-sgml.c
@@ -0,0 +1,546 @@
+/*
+ * fontconfig/doc/edit-sgml.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+static void *
+New (int size);
+
+static void *
+Reallocate (void *p, int size);
+
+static void
+Dispose (void *p);
+
+typedef enum { False, True } Bool;
+
+typedef struct {
+ char *buf;
+ int size;
+ int len;
+} String;
+
+static String *
+StringNew (void);
+
+static void
+StringAdd (String *s, char c);
+
+static void
+StringAddString (String *s, char *buf);
+
+static String *
+StringMake (char *buf);
+
+static void
+StringDel (String *s);
+
+static void
+StringPut (FILE *f, String *s);
+
+static void
+StringDispose (String *s);
+
+typedef struct {
+ String *tag;
+ String *text;
+} Replace;
+
+static Replace *
+ReplaceNew (void);
+
+static void
+ReplaceDispose (Replace *r);
+
+static void
+Bail (const char *format, int line, const char *arg);
+
+static Replace *
+ReplaceRead (FILE *f, int *linep);
+
+typedef struct _replaceList {
+ struct _replaceList *next;
+ Replace *r;
+} ReplaceList;
+
+static ReplaceList *
+ReplaceListNew (Replace *r, ReplaceList *next);
+
+static void
+ReplaceListDispose (ReplaceList *l);
+
+typedef struct {
+ ReplaceList *head;
+} ReplaceSet;
+
+static ReplaceSet *
+ReplaceSetNew (void);
+
+static void
+ReplaceSetDispose (ReplaceSet *s);
+
+static void
+ReplaceSetAdd (ReplaceSet *s, Replace *r);
+
+static Replace *
+ReplaceSetFind (ReplaceSet *s, char *tag);
+
+static ReplaceSet *
+ReplaceSetRead (FILE *f, int *linep);
+
+typedef struct _skipStack {
+ struct _skipStack *prev;
+ int skipping;
+} SkipStack;
+
+static SkipStack *
+SkipStackPush (SkipStack *prev, int skipping);
+
+static SkipStack *
+SkipStackPop (SkipStack *prev);
+
+typedef struct _loopStack {
+ struct _loopStack *prev;
+ String *tag;
+ String *extra;
+ long pos;
+} LoopStack;
+
+static LoopStack *
+LoopStackPush (LoopStack *prev, FILE *f, char *tag);
+
+static LoopStack *
+LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f);
+
+static void
+LineSkip (FILE *f, int *linep);
+
+static void
+DoReplace (FILE *f, int *linep, ReplaceSet *s);
+
+#define STRING_INIT 128
+
+static void *
+New (int size)
+{
+ void *m = malloc (size);
+ if (!m)
+ abort ();
+ return m;
+}
+
+static void *
+Reallocate (void *p, int size)
+{
+ void *r = realloc (p, size);
+
+ if (!r)
+ abort ();
+ return r;
+}
+
+static void
+Dispose (void *p)
+{
+ free (p);
+}
+
+static String *
+StringNew (void)
+{
+ String *s;
+
+ s = New (sizeof (String));
+ s->buf = New (STRING_INIT);
+ s->size = STRING_INIT - 1;
+ s->buf[0] = '\0';
+ s->len = 0;
+ return s;
+}
+
+static void
+StringAdd (String *s, char c)
+{
+ if (s->len == s->size)
+ s->buf = Reallocate (s->buf, (s->size *= 2) + 1);
+ s->buf[s->len++] = c;
+ s->buf[s->len] = '\0';
+}
+
+static void
+StringAddString (String *s, char *buf)
+{
+ while (*buf)
+ StringAdd (s, *buf++);
+}
+
+static String *
+StringMake (char *buf)
+{
+ String *s = StringNew ();
+ StringAddString (s, buf);
+ return s;
+}
+
+static void
+StringDel (String *s)
+{
+ if (s->len)
+ s->buf[--s->len] = '\0';
+}
+
+static void
+StringPut (FILE *f, String *s)
+{
+ char *b = s->buf;
+
+ while (*b)
+ putc (*b++, f);
+}
+
+#define StringLast(s) ((s)->len ? (s)->buf[(s)->len - 1] : '\0')
+
+static void
+StringDispose (String *s)
+{
+ Dispose (s->buf);
+ Dispose (s);
+}
+
+static Replace *
+ReplaceNew (void)
+{
+ Replace *r = New (sizeof (Replace));
+ r->tag = StringNew ();
+ r->text = StringNew ();
+ return r;
+}
+
+static void
+ReplaceDispose (Replace *r)
+{
+ StringDispose (r->tag);
+ StringDispose (r->text);
+ Dispose (r);
+}
+
+static void
+Bail (const char *format, int line, const char *arg)
+{
+ fprintf (stderr, "fatal: ");
+ fprintf (stderr, format, line, arg);
+ fprintf (stderr, "\n");
+ exit (1);
+}
+
+static int
+Getc (FILE *f, int *linep)
+{
+ int c = getc (f);
+ if (c == '\n')
+ ++(*linep);
+ return c;
+}
+
+static void
+Ungetc (int c, FILE *f, int *linep)
+{
+ if (c == '\n')
+ --(*linep);
+ ungetc (c, f);
+}
+
+static Replace *
+ReplaceRead (FILE *f, int *linep)
+{
+ int c;
+ Replace *r;
+
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ return 0;
+ }
+ r = ReplaceNew();
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ {
+ ReplaceDispose (r);
+ return 0;
+ }
+ if (isspace (c))
+ Bail ("%d: invalid character after tag %s", *linep, r->tag->buf);
+ StringAdd (r->tag, c);
+ }
+ if (r->tag->buf[0] == '\0')
+ {
+ ReplaceDispose (r);
+ return 0;
+ }
+ while (isspace ((c = Getc (f, linep))))
+ ;
+ Ungetc (c, f, linep);
+ while ((c = Getc (f, linep)) != '@' && c != EOF)
+ StringAdd (r->text, c);
+ if (c == '@')
+ Ungetc (c, f, linep);
+ while (isspace (StringLast (r->text)))
+ StringDel (r->text);
+ if (StringLast(r->text) == '%')
+ {
+ StringDel (r->text);
+ StringAdd (r->text, ' ');
+ }
+ return r;
+}
+
+static ReplaceList *
+ReplaceListNew (Replace *r, ReplaceList *next)
+{
+ ReplaceList *l = New (sizeof (ReplaceList));
+ l->r = r;
+ l->next = next;
+ return l;
+}
+
+static void
+ReplaceListDispose (ReplaceList *l)
+{
+ if (l)
+ {
+ ReplaceListDispose (l->next);
+ ReplaceDispose (l->r);
+ Dispose (l);
+ }
+}
+
+static ReplaceSet *
+ReplaceSetNew (void)
+{
+ ReplaceSet *s = New (sizeof (ReplaceSet));
+ s->head = 0;
+ return s;
+}
+
+static void
+ReplaceSetDispose (ReplaceSet *s)
+{
+ ReplaceListDispose (s->head);
+ Dispose (s);
+}
+
+static void
+ReplaceSetAdd (ReplaceSet *s, Replace *r)
+{
+ s->head = ReplaceListNew (r, s->head);
+}
+
+static Replace *
+ReplaceSetFind (ReplaceSet *s, char *tag)
+{
+ ReplaceList *l;
+
+ for (l = s->head; l; l = l->next)
+ if (!strcmp (tag, l->r->tag->buf))
+ return l->r;
+ return 0;
+}
+
+static ReplaceSet *
+ReplaceSetRead (FILE *f, int *linep)
+{
+ ReplaceSet *s = ReplaceSetNew ();
+ Replace *r;
+
+ while ((r = ReplaceRead (f, linep)))
+ {
+ while (ReplaceSetFind (s, r->tag->buf))
+ StringAdd (r->tag, '+');
+ ReplaceSetAdd (s, r);
+ }
+ if (!s->head)
+ {
+ ReplaceSetDispose (s);
+ s = 0;
+ }
+ return s;
+}
+
+static SkipStack *
+SkipStackPush (SkipStack *prev, int skipping)
+{
+ SkipStack *ss = New (sizeof (SkipStack));
+ ss->prev = prev;
+ ss->skipping = skipping;
+ return ss;
+}
+
+static SkipStack *
+SkipStackPop (SkipStack *prev)
+{
+ SkipStack *ss = prev->prev;
+ Dispose (prev);
+ return ss;
+}
+
+static LoopStack *
+LoopStackPush (LoopStack *prev, FILE *f, char *tag)
+{
+ LoopStack *ls = New (sizeof (LoopStack));
+ ls->prev = prev;
+ ls->tag = StringMake (tag);
+ ls->extra = StringNew ();
+ ls->pos = ftell (f);
+ return ls;
+}
+
+static LoopStack *
+LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f)
+{
+ String *s = StringMake (ls->tag->buf);
+ LoopStack *ret = ls;
+ Bool loop;
+
+ StringAdd (ls->extra, '+');
+ StringAddString (s, ls->extra->buf);
+ loop = ReplaceSetFind (rs, s->buf) != 0;
+ StringDispose (s);
+ if (loop)
+ fseek (f, ls->pos, SEEK_SET);
+ else
+ {
+ ret = ls->prev;
+ StringDispose (ls->tag);
+ StringDispose (ls->extra);
+ Dispose (ls);
+ }
+ return ret;
+}
+
+static void
+LineSkip (FILE *f, int *linep)
+{
+ int c;
+
+ while ((c = Getc (f, linep)) == '\n')
+ ;
+ Ungetc (c, f, linep);
+}
+
+static void
+DoReplace (FILE *f, int *linep, ReplaceSet *s)
+{
+ int c;
+ String *tag;
+ Replace *r;
+ SkipStack *ss = 0;
+ LoopStack *ls = 0;
+ int skipping = 0;
+
+ while ((c = Getc (f, linep)) != EOF)
+ {
+ if (c == '@')
+ {
+ tag = StringNew ();
+ while ((c = Getc (f, linep)) != '@')
+ {
+ if (c == EOF)
+ abort ();
+ StringAdd (tag, c);
+ }
+ if (ls)
+ StringAddString (tag, ls->extra->buf);
+ switch (tag->buf[0]) {
+ case '?':
+ ss = SkipStackPush (ss, skipping);
+ if (!ReplaceSetFind (s, tag->buf + 1))
+ skipping++;
+ LineSkip (f, linep);
+ break;
+ case ':':
+ if (!ss)
+ abort ();
+ if (ss->skipping == skipping)
+ ++skipping;
+ else
+ --skipping;
+ LineSkip (f, linep);
+ break;
+ case ';':
+ skipping = ss->skipping;
+ ss = SkipStackPop (ss);
+ LineSkip (f, linep);
+ break;
+ case '{':
+ ls = LoopStackPush (ls, f, tag->buf + 1);
+ LineSkip (f, linep);
+ break;
+ case '}':
+ ls = LoopStackLoop (s, ls, f);
+ LineSkip (f, linep);
+ break;
+ default:
+ r = ReplaceSetFind (s, tag->buf);
+ if (r && !skipping)
+ StringPut (stdout, r->text);
+ break;
+ }
+ StringDispose (tag);
+ }
+ else if (!skipping)
+ putchar (c);
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ FILE *f;
+ ReplaceSet *s;
+ int iline, oline;
+
+ if (!argv[1])
+ Bail ("usage: %*s <template.sgml>", 0, argv[0]);
+ f = fopen (argv[1], "r");
+ if (!f)
+ {
+ Bail ("can't open file %s", 0, argv[1]);
+ exit (1);
+ }
+ iline = 1;
+ while ((s = ReplaceSetRead (stdin, &iline)))
+ {
+ oline = 1;
+ DoReplace (f, &oline, s);
+ ReplaceSetDispose (s);
+ rewind (f);
+ }
+ if (ferror (stdout))
+ Bail ("%s", 0, "error writing output");
+ exit (0);
+}
diff --git a/chromium/third_party/fontconfig/src/doc/fcatomic.fncs b/chromium/third_party/fontconfig/src/doc/fcatomic.fncs
new file mode 100644
index 00000000000..017756af1b6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcatomic.fncs
@@ -0,0 +1,95 @@
+/*
+ * fontconfig/doc/fcatomic.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcAtomic *
+@FUNC@ FcAtomicCreate
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ create an FcAtomic object
+@DESC@
+Creates a data structure containing data needed to control access to <parameter>file</parameter>.
+Writing is done to a separate file. Once that file is complete, the original
+configuration file is atomically replaced so that reading process always see
+a consistent and complete file without the need to lock for reading.
+@@
+
+@RET@ FcBool
+@FUNC@ FcAtomicLock
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ lock a file
+@DESC@
+Attempts to lock the file referenced by <parameter>atomic</parameter>.
+Returns FcFalse if the file is already locked, else returns FcTrue and
+leaves the file locked.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcAtomicNewFile
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ return new temporary file name
+@DESC@
+Returns the filename for writing a new version of the file referenced
+by <parameter>atomic</parameter>.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcAtomicOrigFile
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ return original file name
+@DESC@
+Returns the file referenced by <parameter>atomic</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcAtomicReplaceOrig
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ replace original with new
+@DESC@
+Replaces the original file referenced by <parameter>atomic</parameter> with
+the new file. Returns FcFalse if the file cannot be replaced due to
+permission issues in the filesystem. Otherwise returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicDeleteNew
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ delete new file
+@DESC@
+Deletes the new file. Used in error recovery to back out changes.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicUnlock
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ unlock a file
+@DESC@
+Unlocks the file.
+@@
+
+@RET@ void
+@FUNC@ FcAtomicDestroy
+@TYPE1@ FcAtomic * @ARG1@ atomic
+@PURPOSE@ destroy an FcAtomic object
+@DESC@
+Destroys <parameter>atomic</parameter>.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcblanks.fncs b/chromium/third_party/fontconfig/src/doc/fcblanks.fncs
new file mode 100644
index 00000000000..b0996d64484
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcblanks.fncs
@@ -0,0 +1,58 @@
+/*
+ * fontconfig/doc/fcblanks.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcBlanks *
+@FUNC@ FcBlanksCreate
+@TYPE1@ void
+@PURPOSE@ Create an FcBlanks
+@DESC@
+Creates an empty FcBlanks object.
+@@
+
+@RET@ void
+@FUNC@ FcBlanksDestroy
+@TYPE1@ FcBlanks * @ARG1@ b
+@PURPOSE@ Destroy and FcBlanks
+@DESC@
+Destroys an FcBlanks object, freeing any associated memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcBlanksAdd
+@TYPE1@ FcBlanks * @ARG1@ b
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Add a character to an FcBlanks
+@DESC@
+Adds a single character to an FcBlanks object, returning FcFalse
+if this process ran out of memory.
+@@
+
+@RET@ FcBool
+@FUNC@ FcBlanksIsMember
+@TYPE1@ FcBlanks * @ARG1@ b
+@TYPE2@ FcChar32% @ARG2@ ucs4
+@PURPOSE@ Query membership in an FcBlanks
+@DESC@
+Returns whether the specified FcBlanks object contains the indicated Unicode
+value.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fccache.fncs b/chromium/third_party/fontconfig/src/doc/fccache.fncs
new file mode 100644
index 00000000000..ca8ffa03c0d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fccache.fncs
@@ -0,0 +1,86 @@
+/*
+ * 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.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirCacheClean
+@TYPE1@ const FcChar8 * @ARG1@ cache_dir
+@TYPE2@ FcBool @ARG2@ verbose
+@PURPOSE@
+This tries to clean up the cache directory of <parameter>cache_dir</parameter>.
+This returns FcTrue if the operation is successfully complete. otherwise FcFalse.
+@@
+
+@RET@ void
+@FUNC@ FcCacheCreateTagFile
+@TYPE1@ const FcConfig * @ARG1@ config
+@PURPOSE@ Create CACHEDIR.TAG at cache directory.
+@DESC@
+This tries to create CACHEDIR.TAG file at the cache directory registered
+to <parameter>config</parameter>.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fccharset.fncs b/chromium/third_party/fontconfig/src/doc/fccharset.fncs
new file mode 100644
index 00000000000..efcd0ccf15d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fccharset.fncs
@@ -0,0 +1,241 @@
+/*
+ * 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 in <parameter>map</parameter> marking the
+first page of Unicode coverage of <parameter>a</parameter>.
+<parameter>*next</parameter> is set to contains the base code point
+for the next page in <parameter>a</parameter>. Returns the base code
+point for the page, or <constant>FC_CHARSET_DONE</constant> if
+<parameter>a</parameter> contains no pages. As an example, if
+<function>FcCharSetFirstPage</function> returns
+<literal>0x300</literal> and fills <parameter>map</parameter> with
+<literallayout class="monospaced">
+0xffffffff 0xffffffff 0x01000008 0x44300002 0xffffd7f0 0xfffffffb 0xffff7fff 0xffff0003
+</literallayout>
+Then the page contains code points <literal>0x300</literal> through
+<literal>0x33f</literal> (the first 64 code points on the page)
+because <parameter>map[0]</parameter> and
+<parameter>map[1]</parameter> both have all their bits set. It also
+contains code points <literal>0x343</literal> (<parameter>0x300 + 32*2
++ (4-1)</parameter>) and <literal>0x35e</literal> (<parameter>0x300 +
+32*2 + (31-1)</parameter>) because <parameter>map[2]</parameter> has
+the 4th and 31st bits set. The code points represented by
+<literal>map[3]</literal> and later are left as an excercise for the
+reader ;).
+@@
+
+@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 in <parameter>map</parameter> marking the
+Unicode coverage of <parameter>a</parameter> for page containing
+<parameter>*next</parameter> (see the
+<function>FcCharSetFirstPage</function> description for details).
+<parameter>*next</parameter> is set to contains the base code point
+for the next page in <parameter>a</parameter>. Returns the base of
+code point for the page, or <constant>FC_CHARSET_DONE</constant> if
+<parameter>a</parameter> does not contain
+<parameter>*next</parameter>.
+@@
+
+@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/chromium/third_party/fontconfig/src/doc/fcconfig.fncs b/chromium/third_party/fontconfig/src/doc/fcconfig.fncs
new file mode 100644
index 00000000000..0491a566f48
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcconfig.fncs
@@ -0,0 +1,394 @@
+/*
+ * 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@ const 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
+FONTCONFIG_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
+FONTCONFIG_PATH 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.
+@@
+
+@RET@ const FcChar8 *
+@FUNC@ FcConfigGetSysRoot
+@TYPE1@ const FcConfig * @ARG1@ config
+@PURPOSE@ Obtain the system root directory
+@DESC@
+Obtrains the system root directory in 'config' if available.
+@@
+
+@RET@ void
+@FUNC@ FcConfigSetSysRoot
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ const FcChar8 * @ARG2@ sysroot
+@PURPOSE@ Set the system root directory
+@DESC@
+Set 'sysroot' as the system root directory. fontconfig prepend 'sysroot'
+to the cache directories in order to allow people to generate caches at
+the build time. Note that this causes changing current config. i.e.
+this function calls FcConfigSetCurrent() internally.
+@@
+
diff --git a/chromium/third_party/fontconfig/src/doc/fcconstant.fncs b/chromium/third_party/fontconfig/src/doc/fcconstant.fncs
new file mode 100644
index 00000000000..8f4c8789804
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcconstant.fncs
@@ -0,0 +1,58 @@
+/*
+ * 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@
+Deprecated. Does nothing. Returns FcFalse.
+@@
+
+@RET@ FcBool
+@FUNC@ FcNameUnregisterConstants
+@TYPE1@ const FcConstant * @ARG1@ consts
+@TYPE2@ int% @ARG2@ nconsts
+@PURPOSE@ Unregister symbolic constants
+@DESC@
+Deprecated. Does nothing. Returns FcFalse.
+@@
+
+@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/chromium/third_party/fontconfig/src/doc/fcdircache.fncs b/chromium/third_party/fontconfig/src/doc/fcdircache.fncs
new file mode 100644
index 00000000000..24dea8bc56b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcdircache.fncs
@@ -0,0 +1,88 @@
+/*
+ * 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@ FcBool
+@FUNC@ FcDirCacheUnlink
+@TYPE1@ const FcChar8 * @ARG1@ dir
+@TYPE2@ FcConfig * @ARG2@ config
+@PURPOSE@ Remove all caches related to <parameter>dir</parameter>
+@DESC@
+Scans the cache directories in <parameter>config</parameter>, removing any
+instances of the cache file for <parameter>dir</parameter>. Returns FcFalse
+when some internal error occurs (out of memory, etc). Errors actually
+unlinking any files are ignored.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirCacheValid
+@TYPE1@ const FcChar8 * @ARG1@ dir
+@PURPOSE@ check directory cache
+@DESC@
+Returns FcTrue if <parameter>dir</parameter> has an associated valid cache
+file, else returns FcFalse
+@@
+
+@RET@ FcCache *
+@FUNC@ FcDirCacheLoad
+@TYPE1@ const FcChar8 * @ARG1@ dir
+@TYPE2@ FcConfig * @ARG2@ config
+@TYPE3@ FcChar8 ** @ARG3@ cache_file
+@PURPOSE@ load a directory cache
+@DESC@
+Loads the cache related to <parameter>dir</parameter>. If no cache file
+exists, returns NULL. The name of the cache file is returned in
+<parameter>cache_file</parameter>, unless that is NULL. See also
+FcDirCacheRead.
+@@
+
+@RET@ FcCache *
+@FUNC@ FcDirCacheRead
+@TYPE1@ const FcChar8 * @ARG1@ dir
+@TYPE2@ FcBool% @ARG2@ force
+@TYPE3@ FcConfig * @ARG3@ config
+@PURPOSE@ read or construct a directory cache
+@DESC@
+This returns a cache for <parameter>dir</parameter>. If
+<parameter>force</parameter> is FcFalse, then an existing, valid cache file
+will be used. Otherwise, a new cache will be created by scanning the
+directory and that returned.
+@@
+
+@RET@ FcCache *
+@FUNC@ FcDirCacheLoadFile
+@TYPE1@ const FcChar8 * @ARG1@ cache_file
+@TYPE2@ struct stat * @ARG2@ file_stat
+@PURPOSE@ load a cache file
+@DESC@
+This function loads a directory cache from
+<parameter>cache_file</parameter>. If <parameter>file_stat</parameter> is
+non-NULL, it will be filled with the results of stat(2) on the cache file.
+@@
+
+@RET@ void
+@FUNC@ FcDirCacheUnload
+@TYPE1@ FcCache * @ARG1@ cache
+@PURPOSE@ unload a cache file
+@DESC@
+This function dereferences <parameter>cache</parameter>. When no other
+references to it remain, all memory associated with the cache will be freed.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcfile.fncs b/chromium/third_party/fontconfig/src/doc/fcfile.fncs
new file mode 100644
index 00000000000..5f5f32a8a27
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcfile.fncs
@@ -0,0 +1,88 @@
+/*
+ * fontconfig/doc/fcfile.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcBool
+@FUNC@ FcFileScan
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ FcFileCache * @ARG3@ cache
+@TYPE4@ FcBlanks * @ARG4@ blanks
+@TYPE5@ const FcChar8 * @ARG5@ file
+@TYPE6@ FcBool% @ARG6@ force
+@PURPOSE@ scan a font file
+@DESC@
+Scans a single file and adds all fonts found to <parameter>set</parameter>.
+If <parameter>force</parameter> is FcTrue, then the file is scanned even if
+associated information is found in <parameter>cache</parameter>. If
+<parameter>file</parameter> is a directory, it is added to
+<parameter>dirs</parameter>. Whether fonts are found depends on fontconfig
+policy as well as the current configuration. Internally, fontconfig will
+ignore BDF and PCF fonts which are not in Unicode (or the effectively
+equivalent ISO Latin-1) encoding as those are not usable by Unicode-based
+applications. The configuration can ignore fonts based on filename or
+contents of the font file itself. Returns FcFalse if any of the fonts cannot be
+added (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcFileIsDir
+@TYPE1@ const FcChar8 * @ARG1@ file
+@PURPOSE@ check whether a file is a directory
+@DESC@
+Returns FcTrue if <parameter>file</parameter> is a directory, otherwise
+returns FcFalse.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirScan
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ FcFileCache * @ARG3@ cache
+@TYPE4@ FcBlanks * @ARG4@ blanks
+@TYPE5@ const FcChar8 * @ARG5@ dir
+@TYPE6@ FcBool% @ARG6@ force
+@PURPOSE@ scan a font directory without caching it
+@DESC@
+If <parameter>cache</parameter> is not zero or if <parameter>force</parameter>
+is FcFalse, this function currently returns FcFalse. Otherwise, it scans an
+entire directory and adds all fonts found to <parameter>set</parameter>.
+Any subdirectories found are added to <parameter>dirs</parameter>. Calling
+this function does not create any cache files. Use FcDirCacheRead() if
+caching is desired.
+@@
+
+@RET@ FcBool
+@FUNC@ FcDirSave
+@TYPE1@ FcFontSet * @ARG1@ set
+@TYPE2@ FcStrSet * @ARG2@ dirs
+@TYPE3@ const FcChar8 * @ARG3@ dir
+@PURPOSE@ DEPRECATED: formerly used to save a directory cache
+@DESC@
+This function now does nothing aside from returning FcFalse. It used to creates the
+per-directory cache file for <parameter>dir</parameter> and populates it
+with the fonts in <parameter>set</parameter> and subdirectories in
+<parameter>dirs</parameter>. All of this functionality is now automatically
+managed by FcDirCacheLoad and FcDirCacheRead.
+@@
+
diff --git a/chromium/third_party/fontconfig/src/doc/fcfontset.fncs b/chromium/third_party/fontconfig/src/doc/fcfontset.fncs
new file mode 100644
index 00000000000..e076d8b92e7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcfontset.fncs
@@ -0,0 +1,140 @@
+/*
+ * fontconfig/doc/fcfontset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcFontSet *
+@FUNC@ FcFontSetCreate
+@TYPE1@ void
+@PURPOSE@ Create a font set
+@DESC@
+Creates an empty font set.
+@@
+
+@RET@ void
+@FUNC@ FcFontSetDestroy
+@TYPE1@ FcFontSet * @ARG1@ s
+@PURPOSE@ Destroy a font set
+@DESC@
+Destroys a font set. Note that this destroys any referenced patterns as
+well.
+@@
+
+@RET@ FcBool
+@FUNC@ FcFontSetAdd
+@TYPE1@ FcFontSet * @ARG1@ s
+@TYPE2@ FcPattern * @ARG2@ font
+@PURPOSE@ Add to a font set
+@DESC@
+Adds a pattern to a font set. Note that the pattern is not copied before
+being inserted into the set. Returns FcFalse if the pattern cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ FcFontSet *
+@FUNC@ FcFontSetList
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcObjectSet * @ARG5@ object_set
+@PURPOSE@ List fonts from a set of font sets
+@DESC@
+Selects fonts matching <parameter>pattern</parameter> from
+<parameter>sets</parameter>, creates patterns from those
+fonts containing only the objects in <parameter>object_set</parameter> and returns
+the set of unique such patterns.
+If <parameter>config</parameter> is NULL, the default configuration is checked
+to be up to date, and used.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcFontSetMatch
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcResult * @ARG5@ result
+@PURPOSE@ Return the best font from a set of font sets
+@DESC@
+Finds the font in <parameter>sets</parameter> most closely matching
+<parameter>pattern</parameter> and returns the result of
+<function>FcFontRenderPrepare</function> for that font and the provided
+pattern. This function should be called only after
+<function>FcConfigSubstitute</function> and
+<function>FcDefaultSubstitute</function> have been called for
+<parameter>pattern</parameter>; otherwise the results will not be correct.
+If <parameter>config</parameter> is NULL, the current configuration is used.
+Returns NULL if an error occurs during this process.
+@@
+
+@RET@ void
+@FUNC@ FcFontSetPrint
+@TYPE1@ FcFontSet * @ARG1@ set
+@PURPOSE@ Print a set of patterns to stdout
+@DESC@
+This function is useful for diagnosing font related issues, printing the
+complete contents of every pattern in <parameter>set</parameter>. The format
+of the output is designed to be of help to users and developers, and may
+change at any time.
+@@
+
+@RET@
+@FUNC@ FcFontSetSort
+@TYPE1@ FcConfig * @ARG1@ config
+@TYPE2@ FcFontSet ** @ARG2@ sets
+@TYPE3@ int @ARG3@ nsets
+@TYPE4@ FcPattern * @ARG4@ pattern
+@TYPE5@ FcBool% @ARG5@ trim
+@TYPE6@ FcCharSet ** @ARG6@ csp
+@TYPE7@ FcResult * @ARG7@ result
+@PURPOSE@ Add to a font set
+@DESC@
+Returns the list of fonts from <parameter>sets</parameter>
+sorted by closeness to <parameter>pattern</parameter>.
+If <parameter>trim</parameter> is FcTrue,
+elements in the list which don't include Unicode coverage not provided by
+earlier elements in the list are elided. The union of Unicode coverage of
+all of the fonts is returned in <parameter>csp</parameter>,
+if <parameter>csp</parameter> is not NULL. This function
+should be called only after FcConfigSubstitute and FcDefaultSubstitute have
+been called for <parameter>p</parameter>;
+otherwise the results will not be correct.
+ </para><para>
+The returned FcFontSet references FcPattern structures which may be shared
+by the return value from multiple FcFontSort calls, applications cannot
+modify these patterns. Instead, they should be passed, along with
+<parameter>pattern</parameter> to
+<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
+ </para><para>
+The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy.
+@@
+
+@RET@
+@FUNC@ FcFontSetSortDestroy
+@TYPE1@ FcFontSet * @ARG1@ set
+@PURPOSE@ DEPRECATED destroy a font set
+@DESC@
+This function is DEPRECATED. <function>FcFontSetSortDestroy</function>
+destroys <parameter>set</parameter> by calling
+<function>FcFontSetDestroy</function>. Applications should use
+<function>FcFontSetDestroy</function> directly instead.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcformat.fncs b/chromium/third_party/fontconfig/src/doc/fcformat.fncs
new file mode 100644
index 00000000000..c136e8cf27c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcformat.fncs
@@ -0,0 +1,308 @@
+/*
+ * fontconfig/doc/fcformat.fncs
+ *
+ * Copyright © 2008 Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ FcChar8 *
+@FUNC@ FcPatternFormat
+@TYPE1@ FcPattern * @ARG1@ pat
+@TYPE2@ const FcChar8 * @ARG2@ format
+@PURPOSE@ Format a pattern into a string according to a format specifier
+@DESC@
+
+Converts given pattern <parameter>pat</parameter> into text described by
+the format specifier <parameter>format</parameter>.
+The return value refers to newly allocated memory which should be freed by the
+caller using free(), or NULL if <parameter>format</parameter> is invalid.
+
+</para><para>
+
+The format is loosely modeled after printf-style format string.
+The format string is composed of zero or more directives: ordinary
+characters (not "%"), which are copied unchanged to the output stream;
+and tags which are interpreted to construct text from the pattern in a
+variety of ways (explained below).
+Special characters can be escaped
+using backslash. C-string style special characters like \n and \r are
+also supported (this is useful when the format string is not a C string
+literal).
+It is advisable to always escape curly braces that
+are meant to be copied to the output as ordinary characters.
+
+</para><para>
+
+Each tag is introduced by the character "%",
+followed by an optional minimum field width,
+followed by tag contents in curly braces ({}).
+If the minimum field width value is provided the tag
+will be expanded and the result padded to achieve the minimum width.
+If the minimum field width is positive, the padding will right-align
+the text. Negative field width will left-align.
+The rest of this section describes various supported tag contents
+and their expansion.
+
+</para><para>
+
+A <firstterm>simple</firstterm> tag
+is one where the content is an identifier. When simple
+tags are expanded, the named identifier will be looked up in
+<parameter>pattern</parameter> and the resulting list of values returned,
+joined together using comma. For example, to print the family name and style of the
+pattern, use the format "%{family} %{style}\n". To extend the family column
+to forty characters use "%-40{family}%{style}\n".
+
+</para><para>
+
+Simple tags expand to list of all values for an element. To only choose
+one of the values, one can index using the syntax "%{elt[idx]}". For example,
+to get the first family name only, use "%{family[0]}".
+
+</para><para>
+
+If a simple tag ends with "=" and the element is found in the pattern, the
+name of the element followed by "=" will be output before the list of values.
+For example, "%{weight=}" may expand to the string "weight=80". Or to the empty
+string if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+If a simple tag starts with ":" and the element is found in the pattern, ":"
+will be printed first. For example, combining this with the =, the format
+"%{:weight=}" may expand to ":weight=80" or to the empty string
+if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+If a simple tag contains the string ":-", the rest of the the tag contents
+will be used as a default string. The default string is output if the element
+is not found in the pattern. For example, the format
+"%{:weight=:-123}" may expand to ":weight=80" or to the string
+":weight=123" if <parameter>pattern</parameter> does not have weight set.
+
+</para><para>
+
+A <firstterm>count</firstterm> tag
+is one that starts with the character "#" followed by an element
+name, and expands to the number of values for the element in the pattern.
+For example, "%{#family}" expands to the number of family names
+<parameter>pattern</parameter> has set, which may be zero.
+
+</para><para>
+
+A <firstterm>sub-expression</firstterm> tag
+is one that expands a sub-expression. The tag contents
+are the sub-expression to expand placed inside another set of curly braces.
+Sub-expression tags are useful for aligning an entire sub-expression, or to
+apply converters (explained later) to the entire sub-expression output.
+For example, the format "%40{{%{family} %{style}}}" expands the sub-expression
+to construct the family name followed by the style, then takes the entire
+string and pads it on the left to be at least forty characters.
+
+</para><para>
+
+A <firstterm>filter-out</firstterm> tag
+is one starting with the character "-" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+has the listed elements removed from it.
+For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr"
+with <parameter>pattern</parameter> sans the size and pixelsize elements.
+
+</para><para>
+
+A <firstterm>filter-in</firstterm> tag
+is one starting with the character "+" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+only has the listed elements from the surrounding pattern.
+For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr"
+with a sub-pattern consisting only the family and family lang elements of
+<parameter>pattern</parameter>.
+
+</para><para>
+
+A <firstterm>conditional</firstterm> tag
+is one starting with the character "?" followed by a
+comma-separated list of element conditions, followed by two sub-expression
+enclosed in curly braces. An element condition can be an element name,
+in which case it tests whether the element is defined in pattern, or
+the character "!" followed by an element name, in which case the test
+is negated. The conditional passes if all the element conditions pass.
+The tag expands the first sub-expression if the conditional passes, and
+expands the second sub-expression otherwise.
+For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand
+to "pass" if <parameter>pattern</parameter> has size and dpi elements but
+no pixelsize element, and to "fail" otherwise.
+
+</para><para>
+
+An <firstterm>enumerate</firstterm> tag
+is one starting with the string "[]" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The list of values for the named elements are walked in
+parallel and the sub-expression expanded each time with a pattern just having
+a single value for those elements, starting from the first value and
+continuing as long as any of those elements has a value.
+For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}"
+will expand the pattern "%{family} (%{familylang})\n" with a pattern
+having only the first value of the family and familylang elements, then expands
+it with the second values, then the third, etc.
+
+</para><para>
+
+As a special case, if an enumerate tag has only one element, and that element
+has only one value in the pattern, and that value is of type FcLangSet, the
+individual languages in the language set are enumerated.
+
+</para><para>
+
+A <firstterm>builtin</firstterm> tag
+is one starting with the character "=" followed by a builtin
+name. The following builtins are defined:
+
+<variablelist>
+
+<varlistentry><term>
+unparse
+</term><listitem><para>
+Expands to the result of calling FcNameUnparse() on the pattern.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+fcmatch
+</term><listitem><para>
+Expands to the output of the default output format of the fc-match
+command on the pattern, without the final newline.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+fclist
+</term><listitem><para>
+Expands to the output of the default output format of the fc-list
+command on the pattern, without the final newline.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+fccat
+</term><listitem><para>
+Expands to the output of the default output format of the fc-cat
+command on the pattern, without the final newline.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+pkgkit
+</term><listitem><para>
+Expands to the list of PackageKit font() tags for the pattern.
+Currently this includes tags for each family name, and each language
+from the pattern, enumerated and sanitized into a set of tags terminated
+by newline. Package management systems can use these tags to tag their
+packages accordingly.
+</para></listitem></varlistentry>
+
+</variablelist>
+
+For example, the format "%{+family,style{%{=unparse}}}\n" will expand
+to an unparsed name containing only the family and style element values
+from <parameter>pattern</parameter>.
+
+</para><para>
+
+The contents of any tag can be followed by a set of zero or more
+<firstterm>converter</firstterm>s. A converter is specified by the
+character "|" followed by the converter name and arguments. The
+following converters are defined:
+
+<variablelist>
+
+<varlistentry><term>
+basename
+</term><listitem><para>
+Replaces text with the results of calling FcStrBasename() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+dirname
+</term><listitem><para>
+Replaces text with the results of calling FcStrDirname() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+downcase
+</term><listitem><para>
+Replaces text with the results of calling FcStrDowncase() on it.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+shescape
+</term><listitem><para>
+Escapes text for one level of shell expansion.
+(Escapes single-quotes, also encloses text in single-quotes.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+cescape
+</term><listitem><para>
+Escapes text such that it can be used as part of a C string literal.
+(Escapes backslash and double-quotes.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+xmlescape
+</term><listitem><para>
+Escapes text such that it can be used in XML and HTML.
+(Escapes less-than, greater-than, and ampersand.)
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+delete(<parameter>chars</parameter>)
+</term><listitem><para>
+Deletes all occurrences of each of the characters in <parameter>chars</parameter>
+from the text.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+escape(<parameter>chars</parameter>)
+</term><listitem><para>
+Escapes all occurrences of each of the characters in <parameter>chars</parameter>
+by prepending it by the first character in <parameter>chars</parameter>.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+<varlistentry><term>
+translate(<parameter>from</parameter>,<parameter>to</parameter>)
+</term><listitem><para>
+Translates all occurrences of each of the characters in <parameter>from</parameter>
+by replacing them with their corresponding character in <parameter>to</parameter>.
+If <parameter>to</parameter> has fewer characters than
+<parameter>from</parameter>, it will be extended by repeating its last
+character.
+FIXME: This converter is not UTF-8 aware yet.
+</para></listitem></varlistentry>
+
+</variablelist>
+
+For example, the format "%{family|downcase|delete( )}\n" will expand
+to the values of the family element in <parameter>pattern</parameter>,
+lower-cased and with spaces removed.
+
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcfreetype.fncs b/chromium/third_party/fontconfig/src/doc/fcfreetype.fncs
new file mode 100644
index 00000000000..e4cca46a3a6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcfreetype.fncs
@@ -0,0 +1,106 @@
+/*
+ * fontconfig/doc/fcfreetype.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@SYNOPSIS@
+#include &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/chromium/third_party/fontconfig/src/doc/fcinit.fncs b/chromium/third_party/fontconfig/src/doc/fcinit.fncs
new file mode 100644
index 00000000000..014af0deaeb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcinit.fncs
@@ -0,0 +1,92 @@
+/*
+ * fontconfig/doc/fcinit.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcConfig *
+@FUNC@ FcInitLoadConfig
+@TYPE1@ void
+@PURPOSE@ load configuration
+@DESC@
+Loads the default configuration file and returns the resulting configuration.
+Does not load any font information.
+@@
+
+@RET@ FcConfig *
+@FUNC@ FcInitLoadConfigAndFonts
+@TYPE1@ void
+@PURPOSE@ load configuration and font data
+@DESC@
+Loads the default configuration file and builds information about the
+available fonts. Returns the resulting configuration.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInit
+@TYPE1@ void
+@PURPOSE@ initialize fontconfig library
+@DESC@
+Loads the default configuration file and the fonts referenced therein and
+sets the default configuration to that result. Returns whether this
+process succeeded or not. If the default configuration has already
+been loaded, this routine does nothing and returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcFini
+@TYPE1@ void
+@PURPOSE@ finalize fontconfig library
+@DESC@
+Frees all data structures allocated by previous calls to fontconfig
+functions. Fontconfig returns to an uninitialized state, requiring a
+new call to one of the FcInit functions before any other fontconfig
+function may be called.
+@@
+
+@RET@ int
+@FUNC@ FcGetVersion
+@TYPE1@ void
+@PURPOSE@ library version number
+@DESC@
+Returns the version number of the library.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInitReinitialize
+@TYPE1@ void
+@PURPOSE@ re-initialize library
+@DESC@
+Forces the default configuration file to be reloaded and resets the default
+configuration. Returns FcFalse if the configuration cannot be reloaded (due
+to configuration file errors, allocation failures or other issues) and leaves the
+existing configuration unchanged. Otherwise returns FcTrue.
+@@
+
+@RET@ FcBool
+@FUNC@ FcInitBringUptoDate
+@TYPE1@ void
+@PURPOSE@ reload configuration files if needed
+@DESC@
+Checks the rescan interval in the default configuration, checking the
+configuration if the interval has passed and reloading the configuration if
+when any changes are detected. Returns FcFalse if the configuration cannot
+be reloaded (see FcInitReinitialize). Otherwise returns FcTrue.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fclangset.fncs b/chromium/third_party/fontconfig/src/doc/fclangset.fncs
new file mode 100644
index 00000000000..c08d60c7096
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fclangset.fncs
@@ -0,0 +1,195 @@
+/*
+ * 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@ FcGetDefaultLangs
+@TYPE1@ void
+@PURPOSE@ Get the default languages list
+@DESC@
+Returns a string set of the default languages according to the environment variables on the system.
+This function looks for them in order of FC_LANG, LC_ALL, LC_CTYPE and LANG then.
+If there are no valid values in those environment variables, "en" will be set as fallback.
+
+@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@ FcChar8 *
+@FUNC@ FcLangNormalize
+@TYPE1@ const FcChar8 * @ARG1@ lang
+@PURPOSE@ Normalize the language string
+@DESC@
+Returns a string to make <parameter>lang</parameter> suitable on fontconfig.
+@@
+
+@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/chromium/third_party/fontconfig/src/doc/fcmatrix.fncs b/chromium/third_party/fontconfig/src/doc/fcmatrix.fncs
new file mode 100644
index 00000000000..a53ade9464d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcmatrix.fncs
@@ -0,0 +1,125 @@
+/*
+ * fontconfig/doc/fcmatrix.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@RET@ void
+@FUNC@ FcMatrixInit
+@PURPOSE@ initialize an FcMatrix structure
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@DESC@
+<function>FcMatrixInit</function> initializes <parameter>matrix</parameter>
+to the identity matrix.
+@@
+
+@FUNC@ FcMatrixCopy
+@PURPOSE@ Copy a matrix
+@TYPE1@ const FcMatrix *
+@ARG1@ matrix
+@DESC@
+<function>FcMatrixCopy</function> allocates a new FcMatrix
+and copies <parameter>mat</parameter> into it.
+@@
+
+@FUNC@ FcMatrixEqual
+@PURPOSE@ Compare two matrices
+@TYPE1@ const FcMatrix *
+@ARG1@ matrix1
+@TYPE2@ const FcMatrix *
+@ARG2@ matrix2
+@DESC@
+<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter>
+and <parameter>matrix2</parameter> returning FcTrue when they are equal and
+FcFalse when they are not.
+@@
+
+@FUNC@ FcMatrixMultiply
+@PURPOSE@ Multiply matrices
+@TYPE1@ FcMatrix *
+@ARG1@ result
+@TYPE2@ const FcMatrix *
+@ARG2@ matrix1
+@TYPE3@ const FcMatrix *
+@ARG3@ matrix2
+@DESC@
+<function>FcMatrixMultiply</function> multiplies
+<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing
+the result in <parameter>result</parameter>.
+@@
+
+@FUNC@ FcMatrixRotate
+@PURPOSE@ Rotate a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ cos
+@TYPE3@ double%
+@ARG3@ sin
+@DESC@
+<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter>
+by the angle who's sine is <parameter>sin</parameter> and cosine is
+<parameter>cos</parameter>. This is done by multiplying by the
+matrix:
+<programlisting>
+ cos -sin
+ sin cos
+</programlisting>
+@@
+
+@FUNC@ FcMatrixScale
+@PURPOSE@ Scale a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ sx
+@TYPE3@ double%
+@ARG3@ dy
+@DESC@
+<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter>
+x values by <parameter>sx</parameter> and y values by
+<parameter>dy</parameter>. This is done by multiplying by
+the matrix:
+<programlisting>
+ sx 0
+ 0 dy
+</programlisting>
+@@
+
+@FUNC@ FcMatrixShear
+@PURPOSE@ Shear a matrix
+@TYPE1@ FcMatrix *
+@ARG1@ matrix
+@TYPE2@ double%
+@ARG2@ sh
+@TYPE3@ double%
+@ARG3@ sv
+@DESC@
+<function>FcMatrixShare</function> shears <parameter>matrix</parameter>
+horizontally by <parameter>sh</parameter> and vertically by
+<parameter>sv</parameter>. This is done by multiplying by
+the matrix:
+<programlisting>
+ 1 sh
+ sv 1
+</programlisting>
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcobjectset.fncs b/chromium/third_party/fontconfig/src/doc/fcobjectset.fncs
new file mode 100644
index 00000000000..57e1750d1c1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcobjectset.fncs
@@ -0,0 +1,73 @@
+/*
+ * fontconfig/doc/fcobjectset.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcObjectSet *
+@FUNC@ FcObjectSetCreate
+@TYPE1@ void
+@PURPOSE@ Create an object set
+@DESC@
+Creates an empty set.
+@@
+
+@RET@ FcBool
+@FUNC@ FcObjectSetAdd
+@TYPE1@ FcObjectSet * @ARG1@ os
+@TYPE2@ const char * @ARG2@ object
+@PURPOSE@ Add to an object set
+@DESC@
+Adds a property name to the set. Returns FcFalse if the property name cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+@@
+
+@RET@ void
+@FUNC@ FcObjectSetDestroy
+@TYPE1@ FcObjectSet * @ARG1@ os
+@PURPOSE@ Destroy an object set
+@DESC@
+Destroys an object set.
+@@
+
+@RET@ FcObjectSet *
+@FUNC@ FcObjectSetBuild
+@TYPE1@ const char * @ARG1@ first
+@TYPE2@ ...
+
+@PROTOTYPE+@
+@RET+@ FcObjectSet *
+@FUNC+@ FcObjectSetVaBuild
+@TYPE1+@ const char * @ARG1+@ first
+@TYPE2+@ va_list% @ARG2+@ va
+
+@PROTOTYPE++@
+@RET++@ void
+@FUNC++@ FcObjectSetVapBuild
+@TYPE1++@ FcObjectSet * @ARG1++@ result
+@TYPE2++@ const char * @ARG2++@ first
+@TYPE3++@ va_list% @ARG3++@ va
+
+@PURPOSE@ Build object set from args
+@DESC@
+These build an object set from a null-terminated list of property names.
+FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns
+the result in the <parameter>result</parameter> variable directly.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcobjecttype.fncs b/chromium/third_party/fontconfig/src/doc/fcobjecttype.fncs
new file mode 100644
index 00000000000..3f976e431b7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcobjecttype.fncs
@@ -0,0 +1,48 @@
+/*
+ * 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@
+Deprecated. Does nothing. Returns FcFalse.
+@@
+
+@RET@ FcBool
+@FUNC@ FcNameUnregisterObjectTypes
+@TYPE1@ const FcObjectType * @ARG1@ types
+@TYPE2@ int% @ARG2@ ntype
+@PURPOSE@ Unregister object types
+@DESC@
+Deprecated. Does nothing. Returns FcFalse.
+@@
+
+@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/chromium/third_party/fontconfig/src/doc/fcpattern.fncs b/chromium/third_party/fontconfig/src/doc/fcpattern.fncs
new file mode 100644
index 00000000000..1df1c4f6184
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcpattern.fncs
@@ -0,0 +1,397 @@
+/*
+ * fontconfig/doc/fcpattern.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ FcPattern *
+@FUNC@ FcPatternCreate
+@TYPE1@ void
+@PURPOSE@ Create a pattern
+@DESC@
+Creates a pattern with no properties; used to build patterns from scratch.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternDuplicate
+@TYPE1@ const FcPattern * @ARG1@ p
+@PURPOSE@ Copy a pattern
+@DESC@
+Copy a pattern, returning a new pattern that matches
+<parameter>p</parameter>. Each pattern may be modified without affecting the
+other.
+@@
+
+@RET@ void
+@FUNC@ FcPatternReference
+@TYPE1@ FcPattern * @ARG1@ p
+@PURPOSE@ Increment pattern reference count
+@DESC@
+Add another reference to <parameter>p</parameter>. Patterns are freed only
+when the reference count reaches zero.
+@@
+
+@RET@ void
+@FUNC@ FcPatternDestroy
+@TYPE1@ FcPattern * @ARG1@ p
+@PURPOSE@ Destroy a pattern
+@DESC@
+Decrement the pattern reference count. If all references are gone, destroys
+the pattern, in the process destroying all related values.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternEqual
+@TYPE1@ const FcPattern * @ARG1@ pa
+@TYPE2@ const FcPattern * @ARG2@ pb
+@PURPOSE@ Compare patterns
+@DESC@
+Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> are exactly alike.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternEqualSubset
+@TYPE1@ const FcPattern * @ARG1@ pa
+@TYPE2@ const FcPattern * @ARG2@ pb
+@TYPE3@ const FcObjectSet * @ARG3@ os
+@PURPOSE@ Compare portions of patterns
+@DESC@
+Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> have exactly the same values for all of the
+objects in <parameter>os</parameter>.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternFilter
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const FcObjectSet * @ARG1@ os
+@PURPOSE@ Filter the objects of pattern
+@DESC@
+Returns a new pattern that only has those objects from
+<parameter>p</parameter> that are in <parameter>os</parameter>.
+If <parameter>os</parameter> is NULL, a duplicate of
+<parameter>p</parameter> is returned.
+@@
+
+@RET@ FcChar32
+@FUNC@ FcPatternHash
+@TYPE1@ const FcPattern * @ARG1@ p
+@PURPOSE@ Compute a pattern hash value
+@DESC@
+Returns a 32-bit number which is the same for any two patterns which are
+equal.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternAdd
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ FcValue% @ARG3@ value
+@TYPE4@ FcBool% @ARG4@ append
+@PURPOSE@ Add a value to a pattern
+@DESC@
+Adds a single value to the list of values associated with the property named
+`object<parameter>. If `append</parameter> is FcTrue, the value is added at the end of any
+existing list, otherwise it is inserted at the beginning. `value' is saved
+(with FcValueSave) when inserted into the pattern so that the library
+retains no reference to any application-supplied data structure.
+@@
+
+@RET@ FcBool
+@FUNC@ FcPatternAddWeak
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ FcValue% @ARG3@ value
+@TYPE4@ FcBool% @ARG4@ append
+@PURPOSE@ Add a value to a pattern with weak binding
+@DESC@
+FcPatternAddWeak is essentially the same as FcPatternAdd except that any
+values added to the list have binding <parameter>weak</parameter> instead of <parameter>strong</parameter>.
+@@
+
+@TITLE@ FcPatternAdd-Type
+@RET@ FcBool
+@FUNC@ FcPatternAddInteger
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ i
+
+@PROTOTYPE+@
+@RET+@ FcBool
+@FUNC+@ FcPatternAddDouble
+@TYPE1+@ FcPattern * @ARG1+@ p
+@TYPE2+@ const char * @ARG2+@ object
+@TYPE3+@ double% @ARG3+@ d
+
+@PROTOTYPE++@
+@RET++@ FcBool
+@FUNC++@ FcPatternAddString
+@TYPE1++@ FcPattern * @ARG1++@ p
+@TYPE2++@ const char * @ARG2++@ object
+@TYPE3++@ const FcChar8 * @ARG3++@ s
+
+@PROTOTYPE+++@
+@RET+++@ FcBool
+@FUNC+++@ FcPatternAddMatrix
+@TYPE1+++@ FcPattern * @ARG1+++@ p
+@TYPE2+++@ const char * @ARG2+++@ object
+@TYPE3+++@ const FcMatrix * @ARG3+++@ m
+
+@PROTOTYPE++++@
+@RET++++@ FcBool
+@FUNC++++@ FcPatternAddCharSet
+@TYPE1++++@ FcPattern * @ARG1++++@ p
+@TYPE2++++@ const char * @ARG2++++@ object
+@TYPE3++++@ const FcCharSet * @ARG3++++@ c
+
+@PROTOTYPE+++++@
+@RET+++++@ FcBool
+@FUNC+++++@ FcPatternAddBool
+@TYPE1+++++@ FcPattern * @ARG1+++++@ p
+@TYPE2+++++@ const char * @ARG2+++++@ object
+@TYPE3+++++@ FcBool% @ARG3+++++@ b
+
+@PROTOTYPE++++++@
+@RET++++++@ FcBool
+@FUNC++++++@ FcPatternAddFTFace
+@TYPE1++++++@ FcPattern * @ARG1++++++@ p
+@TYPE2++++++@ const char * @ARG2++++++@ object
+@TYPE3++++++@ const FT_Face @ARG3++++++@ f
+
+@PROTOTYPE+++++++@
+@RET+++++++@ FcBool
+@FUNC+++++++@ FcPatternAddLangSet
+@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
+@TYPE2+++++++@ const char * @ARG2+++++++@ object
+@TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l
+
+@PURPOSE@ Add a typed value to a pattern
+@DESC@
+These are all convenience functions that insert objects of the specified
+type into the pattern. Use these in preference to FcPatternAdd as they
+will provide compile-time typechecking. These all append values to
+any existing list of values.
+@@
+
+@RET@ FcResult
+@FUNC@ FcPatternGet
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ id
+@TYPE4@ FcValue * @ARG4@ v
+@PURPOSE@ Return a value from a pattern
+@DESC@
+Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value
+associated with the property <parameter>object</parameter>.
+The value returned is not a copy, but rather refers to the data stored
+within the pattern directly. Applications must not free this value.
+@@
+
+@TITLE@ FcPatternGet-Type
+@PROTOTYPE@
+@RET@ FcResult
+@FUNC@ FcPatternGetInteger
+@TYPE1@ FcPattern * @ARG1@ p
+@TYPE2@ const char * @ARG2@ object
+@TYPE3@ int% @ARG3@ n
+@TYPE4@ int * @ARG4@ i
+
+@PROTOTYPE+@
+@RET+@ FcResult
+@FUNC+@ FcPatternGetDouble
+@TYPE1+@ FcPattern * @ARG1+@ p
+@TYPE2+@ const char * @ARG2+@ object
+@TYPE3+@ int% @ARG3+@ n
+@TYPE4+@ double * @ARG4+@ d
+
+@PROTOTYPE++@
+@RET++@ FcResult
+@FUNC++@ FcPatternGetString
+@TYPE1++@ FcPattern * @ARG1++@ p
+@TYPE2++@ const char * @ARG2++@ object
+@TYPE3++@ int% @ARG3++@ n
+@TYPE4++@ FcChar8 ** @ARG4++@ s
+
+@PROTOTYPE+++@
+@RET+++@ FcResult
+@FUNC+++@ FcPatternGetMatrix
+@TYPE1+++@ FcPattern * @ARG1+++@ p
+@TYPE2+++@ const char * @ARG2+++@ object
+@TYPE3+++@ int% @ARG3+++@ n
+@TYPE4+++@ FcMatrix ** @ARG4+++@ s
+
+@PROTOTYPE++++@
+@RET++++@ FcResult
+@FUNC++++@ FcPatternGetCharSet
+@TYPE1++++@ FcPattern * @ARG1++++@ p
+@TYPE2++++@ const char * @ARG2++++@ object
+@TYPE3++++@ int% @ARG3++++@ n
+@TYPE4++++@ FcCharSet ** @ARG4++++@ c
+
+@PROTOTYPE+++++@
+@RET+++++@ FcResult
+@FUNC+++++@ FcPatternGetBool
+@TYPE1+++++@ FcPattern * @ARG1+++++@ p
+@TYPE2+++++@ const char * @ARG2+++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE4+++++@ FcBool * @ARG4+++++@ b
+
+@PROTOTYPE++++++@
+@RET++++++@ FcResult
+@FUNC++++++@ FcPatternGetFTFace
+@TYPE1++++++@ FcPattern * @ARG1++++++@ p
+@TYPE2++++++@ const char * @ARG2++++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE3++++++@ FT_Face * @ARG3++++++@ f
+
+@PROTOTYPE+++++++@
+@RET+++++++@ FcResult
+@FUNC+++++++@ FcPatternGetLangSet
+@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
+@TYPE2+++++++@ const char * @ARG2+++++++@ object
+@TYPE3+++++@ int% @ARG3+++++@ n
+@TYPE3+++++++@ FcLangSet ** @ARG3+++++++@ l
+
+@PURPOSE@ Return a typed value from a pattern
+@DESC@
+These are convenience functions that call FcPatternGet and verify that the
+returned data is of the expected type. They return FcResultTypeMismatch if
+this is not the case. Note that these (like FcPatternGet) do not make a
+copy of any data structure referenced by the return value. Use these
+in preference to FcPatternGet to provide compile-time typechecking.
+@@
+
+@RET@ FcPattern *
+@FUNC@ FcPatternBuild
+@TYPE1@ FcPattern * @ARG1@ pattern
+@TYPE2@ ...
+
+@PROTOTYPE+@
+@RET+@ FcPattern *
+@FUNC+@ FcPatternVaBuild
+@TYPE1+@ FcPattern * @ARG1+@ pattern
+@TYPE2+@ va_list% @ARG2+@ va
+
+@PROTOTYPE++@
+@RET++@ void
+@FUNC++@ FcPatternVapBuild
+@TYPE1++@ FcPattern * @ARG1++@ result
+@TYPE2++@ FcPattern * @ARG2++@ pattern
+@TYPE3++@ va_list% @ARG3++@ va
+
+@PURPOSE@ Create patterns from arguments
+@DESC@
+Builds a pattern using a list of objects, types and values. Each
+value to be entered in the pattern is specified with three arguments:
+</para>
+<orderedlist>
+<listitem><para>
+Object name, a string describing the property to be added.
+</para></listitem><listitem><para>
+Object type, one of the FcType enumerated values
+</para></listitem><listitem><para>
+Value, not an FcValue, but the raw type as passed to any of the
+FcPatternAdd&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/chromium/third_party/fontconfig/src/doc/fcstring.fncs b/chromium/third_party/fontconfig/src/doc/fcstring.fncs
new file mode 100644
index 00000000000..0412bbd1aed
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcstring.fncs
@@ -0,0 +1,244 @@
+/*
+ * fontconfig/doc/fcstring.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+ <variablelist>
+
+@RET@ int
+@FUNC@ FcUtf8ToUcs4
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcChar32 * @ARG2@ dst
+@TYPE3@ int% @ARG3@ len
+@PURPOSE@ convert UTF-8 to UCS4
+@DESC@
+Converts the next Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes containing the
+char. <parameter>src</parameter> must be at least
+<parameter>len</parameter> bytes long.
+@@
+
+@RET@ int
+@FUNC@ FcUcs4ToUtf8
+@TYPE1@ FcChar32% @ARG1@ src
+@TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN]
+@PURPOSE@ convert UCS4 to UTF-8
+@DESC@
+Converts the Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes needed to encode
+the char.
+@@
+
+@RET@ FcBool
+@FUNC@ FcUtf8Len
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ int% @ARG2@ len
+@TYPE3@ int * @ARG3@ nchar
+@TYPE4@ int * @ARG4@ wchar
+@PURPOSE@ count UTF-8 encoded chars
+@DESC@
+Counts the number of Unicode chars in <parameter>len</parameter> bytes of
+<parameter>src</parameter>. Places that count in
+<parameter>nchar</parameter>. <parameter>wchar</parameter> contains 1, 2 or
+4 depending on the number of bytes needed to hold the largest Unicode char
+counted. The return value indicates whether <parameter>src</parameter> is a
+well-formed UTF8 string.
+@@
+
+@RET@ int
+@FUNC@ FcUtf16ToUcs4
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcEndian% @ARG2@ endian
+@TYPE3@ FcChar32 * @ARG3@ dst
+@TYPE4@ int% @ARG4@ len
+@PURPOSE@ convert UTF-16 to UCS4
+@DESC@
+Converts the next Unicode char from <parameter>src</parameter> into
+<parameter>dst</parameter> and returns the number of bytes containing the
+char. <parameter>src</parameter> must be at least <parameter>len</parameter>
+bytes long. Bytes of <parameter>src</parameter> are combined into 16-bit
+units according to <parameter>endian</parameter>.
+@@
+
+@RET@ FcBool
+@FUNC@ FcUtf16Len
+@TYPE1@ FcChar8 * @ARG1@ src
+@TYPE2@ FcEndian% @ARG2@ endian
+@TYPE3@ int% @ARG3@ len
+@TYPE4@ int * @ARG4@ nchar
+@TYPE5@ int * @ARG5@ wchar
+@PURPOSE@ count UTF-16 encoded chars
+@DESC@
+Counts the number of Unicode chars in <parameter>len</parameter> bytes of
+<parameter>src</parameter>. Bytes of <parameter>src</parameter> are
+combined into 16-bit units according to <parameter>endian</parameter>.
+Places that count in <parameter>nchar</parameter>.
+<parameter>wchar</parameter> contains 1, 2 or 4 depending on the number of
+bytes needed to hold the largest Unicode char counted. The return value
+indicates whether <parameter>string</parameter> is a well-formed UTF16
+string.
+@@
+
+@RET@ FcBool
+@FUNC@ FcIsLower
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ check for lower case ASCII character
+@DESC@
+This macro checks whether <parameter>c</parameter> is an lower case ASCII
+letter.
+@@
+
+@RET@ FcBool
+@FUNC@ FcIsUpper
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ check for upper case ASCII character
+@DESC@
+This macro checks whether <parameter>c</parameter> is a upper case ASCII
+letter.
+@@
+
+@RET@ FcChar8
+@FUNC@ FcToLower
+@TYPE1@ FcChar8 @ARG1@ c
+@PURPOSE@ convert upper case ASCII to lower case
+@DESC@
+This macro converts upper case ASCII <parameter>c</parameter> to the
+equivalent lower case letter.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrCopy
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ duplicate a string
+@DESC@
+Allocates memory, copies <parameter>s</parameter> and returns the resulting
+buffer. Yes, this is <function>strdup</function>, but that function isn't
+available on every platform.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrDowncase
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ create a lower case translation of a string
+@DESC@
+Allocates memory, copies <parameter>s</parameter>, converting upper case
+letters to lower case and returns the allocated buffer.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrCopyFilename
+@TYPE1@ const FcChar8 * @ARG1@ s
+@PURPOSE@ create a complete path from a filename
+@DESC@
+<function>FcStrCopyFilename</function> constructs an absolute pathname from
+<parameter>s</parameter>. It converts any leading '~' characters in
+to the value of the HOME environment variable, and any relative paths are
+converted to absolute paths using the current working directory. Sequences
+of '/' characters are converted to a single '/', and names containing the
+current directory '.' or parent directory '..' are correctly reconstructed.
+Returns NULL if '~' is the leading character and HOME is unset or disabled
+(see <function>FcConfigEnableHome</function>).
+@@
+
+@RET@ int
+@FUNC@ FcStrCmp
+@TYPE1@ const FcChar8 * @ARG1@ s1
+@TYPE2@ const FcChar8 * @ARG2@ s2
+@PURPOSE@ compare UTF-8 strings
+@DESC@
+Returns the usual &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/chromium/third_party/fontconfig/src/doc/fcstrset.fncs b/chromium/third_party/fontconfig/src/doc/fcstrset.fncs
new file mode 100644
index 00000000000..b96489a43f6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcstrset.fncs
@@ -0,0 +1,123 @@
+/*
+ * 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@ void
+@FUNC@ FcStrListFirst
+@TYPE1@ FcStrList * @ARG1@ list
+@PURPOSE@ get first string in iteration
+@DESC@
+Returns the first string in <parameter>list</parameter>.
+@@
+
+@RET@ FcChar8 *
+@FUNC@ FcStrListNext
+@TYPE1@ FcStrList * @ARG1@ list
+@PURPOSE@ get next string in iteration
+@DESC@
+Returns the next string in <parameter>list</parameter>.
+@@
+
+@RET@ void
+@FUNC@ FcStrListDone
+@TYPE1@ FcStrList * @ARG1@ list
+@PURPOSE@ destroy a string iterator
+@DESC@
+Destroys the enumerator <parameter>list</parameter>.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fcvalue.fncs b/chromium/third_party/fontconfig/src/doc/fcvalue.fncs
new file mode 100644
index 00000000000..83a5b3aa906
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fcvalue.fncs
@@ -0,0 +1,61 @@
+/*
+ * fontconfig/doc/fcvalue.fncs
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+@RET@ void
+@FUNC@ FcValueDestroy
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Free a value
+@DESC@
+Frees any memory referenced by <parameter>v</parameter>. Values of type FcTypeString,
+FcTypeMatrix and FcTypeCharSet reference memory, the other types do not.
+@@
+
+@RET@ FcValue
+@FUNC@ FcValueSave
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Copy a value
+@DESC@
+Returns a copy of <parameter>v</parameter> duplicating any object referenced by it so that <parameter>v</parameter>
+may be safely destroyed without harming the new value.
+@@
+
+@RET@ void
+@FUNC@ FcValuePrint
+@TYPE1@ FcValue% @ARG1@ v
+@PURPOSE@ Print a value to stdout
+@DESC@
+Prints a human-readable representation of <parameter>v</parameter> to
+stdout. The format should not be considered part of the library
+specification as it may change in the future.
+@@
+
+@RET@ FcBool
+@FUNC@ FcValueEqual
+@TYPE1@ FcValue% @ARG1@ v_a
+@TYPE2@ FcValue% @ARG2@ v_b
+@PURPOSE@ Test two values for equality
+@DESC@
+Compares two values. Integers and Doubles are compared as numbers; otherwise
+the two values have to be the same type to be considered equal. Strings are
+compared ignoring case.
+@@
diff --git a/chromium/third_party/fontconfig/src/doc/fontconfig-devel.sgml b/chromium/third_party/fontconfig/src/doc/fontconfig-devel.sgml
new file mode 100644
index 00000000000..7306d79247a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fontconfig-devel.sgml
@@ -0,0 +1,582 @@
+<!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 (deprecated)
+ 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 (deprecated)
+ 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
+ fontfeatures FC_FONT_FEATURES String List of extra feature tags in
+ OpenType to be enabled
+ namelang FC_NAMELANG String Language name to be used for the
+ default value of familylang,
+ stylelang and fullnamelang
+ prgname FC_PRGNAME String Name of the running program
+ hash FC_HASH String SHA256 hash value of the font data
+ with "sha256:" prefix.
+ postscriptname FC_POSTSCRIPT_NAME String Font name in PostScript
+ </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/chromium/third_party/fontconfig/src/doc/fontconfig-user.sgml b/chromium/third_party/fontconfig/src/doc/fontconfig-user.sgml
new file mode 100644
index 00000000000..775d1f725c2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/fontconfig-user.sgml
@@ -0,0 +1,795 @@
+<!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
+ $XDG_CONFIG_HOME/fontconfig/conf.d
+ $XDG_CONFIG_HOME/fontconfig/fonts.conf
+ ~/.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 (deprecated)
+ 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 (deprecated)
+ 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
+ fontfeatures String List of the feature tags in OpenType to be enabled
+ prgname String String Name of the running program
+ </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 id="debug"><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;cachedir&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 prefix="default"&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. If 'prefix' is set to "xdg", the value in the XDG_DATA_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details.
+ </para></refsect2>
+ <refsect2><title><literal>&lt;cachedir prefix="default"&gt;</literal></title><para>
+This element contains a directory name that is supposed to be stored or read
+the cache of font information. If multiple elements are specified in
+the configuration file, the directory that can be accessed first in the list
+will be used to store the cache files. If it starts with '~', it refers to
+a directory in the users home directory. If 'prefix' is set to "xdg", the value in the XDG_CACHE_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details.
+The default directory is ``$XDG_CACHE_HOME/fontconfig'' and it contains the cache files
+named ``<literal>&lt;hash value&gt;</literal>-<literal>&lt;architecture&gt;</literal>.cache-<literal>&lt;version</literal>'',
+where <literal>&lt;version&gt;</literal> is the font configureation file
+version number (currently 3).
+ </para></refsect2>
+ <refsect2><title><literal>&lt;include ignore_missing="no" prefix="default"&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. If 'prefix' is set to "xdg", the value in the XDG_CONFIG_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details.
+ </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", "more_eq", "contains" or
+"not_contains". '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. 'ignore-blanks' takes a boolean value. if 'ignore-blanks' is set "true", any blanks in the string will be ignored on its comparison. this takes effects only when compare="eq" or compare="not_eq".
+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
+ "delete" Delete matching value Delete all values
+ "delete_all" Delete all values Delete all values
+ </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 four numerical expressions of an affine transformation.
+At their simplest these will be four <literal>&lt;double&gt;</literal> elements
+but they can also be more involved expressions.
+ </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 pattern. If the 'target' attribute is not present, it will default to
+'default', in which case the property is returned from the font pattern
+during a target="font" match, and to the pattern during a target="pattern"
+match. The attribute can also take the values 'font' or 'pattern' to
+explicitly choose which pattern to use. It is an error to use a target
+of 'font' in a match that has target="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>, <literal>&lt;contains&gt;</literal>, <literal>&lt;not_contains</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-serif'
+--&gt;
+&lt;match target="pattern"&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;&lt;string&gt;sans-serif&lt;/string&gt;&lt;/test&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;&lt;string&gt;serif&lt;/string&gt;&lt;/test&gt;
+ &lt;test qual="all" name="family" mode="not_eq"&gt;&lt;string&gt;monospace&lt;/string&gt;&lt;/test&gt;
+ &lt;edit name="family" mode="append_last"&gt;&lt;string&gt;sans-serif&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" prefix="xdg"&gt;fontconfig/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;--
+ The example of the requirements of OR operator;
+ If the 'family' contains 'Courier New' OR 'Courier'
+ add 'monospace' as the alternative
+--&gt;
+&lt;match target="pattern"&gt;
+ &lt;test name="family" mode="eq"&gt;
+ &lt;string&gt;Courier New&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;monospace&lt;/string&gt;
+ &lt;/edit&gt;
+&lt;/match&gt;
+&lt;match target="pattern"&gt;
+ &lt;test name="family" mode="eq"&gt;
+ &lt;string&gt;Courier&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;monospace&lt;/string&gt;
+ &lt;/edit&gt;
+&lt;/match&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
+$XDG_CONFIG_HOME/fontconfig/fonts.conf
+ </para>
+ <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE fontconfig SYSTEM "fonts.dtd"&gt;
+&lt;!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --&gt;
+&lt;fontconfig&gt;
+
+&lt;!--
+ Private font directory
+--&gt;
+&lt;dir prefix="xdg"&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;!--
+ use WenQuanYi Zen Hei font when serif is requested for Chinese
+--&gt;
+&lt;match&gt;
+ &lt;!--
+ If you don't want to use WenQuanYi Zen Hei font for zh-tw etc,
+ you can use zh-cn instead of zh.
+ Please note, even if you set zh-cn, it still matches zh.
+ if you don't like it, you can use compare="eq"
+ instead of compare="contains".
+ --&gt;
+ &lt;test name="lang" compare="contains"&gt;
+ &lt;string&gt;zh&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;test name="family"&gt;
+ &lt;string&gt;serif&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;WenQuanYi Zen Hei&lt;/string&gt;
+ &lt;/edit&gt;
+&lt;/match&gt;
+&lt;!--
+ use VL Gothic font when sans-serif is requested for Japanese
+--&gt;
+&lt;match&gt;
+ &lt;test name="lang" compare="contains"&gt;
+ &lt;string&gt;ja&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;test name="family"&gt;
+ &lt;string&gt;sans-serif&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;VL Gothic&lt;/string&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>$XDG_CONFIG_HOME/fontconfig/conf.d</emphasis> and <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. please note that ~/.fonts.conf.d is deprecated now. it will not be read by default in the future version.
+ </para>
+ <para>
+<emphasis>$XDG_CONFIG_HOME/fontconfig/fonts.conf</emphasis> and <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. please note that ~/.fonts.conf is deprecated now. it will not be read by default in the future version.
+ </para>
+ <para>
+<emphasis>$XDG_CACHE_HOME/fontconfig/*.cache-*</emphasis> and <emphasis> ~/.fontconfig/*.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. please note that ~/.fontconfig/*.cache-* is deprecated now. it will not be read by default in the future version.
+ </para>
+</refsect1>
+<refsect1><title>Environment variables</title>
+ <para>
+<emphasis>FONTCONFIG_FILE</emphasis>
+is used to override the default configuration file.
+ </para>
+ <para>
+<emphasis>FONTCONFIG_PATH</emphasis>
+is used to override the default configuration directory.
+ </para>
+ <para>
+<emphasis>FC_DEBUG</emphasis>
+is used to output the detailed debugging messages. see <link linkend="debug">Debugging Applications</link> section for more details.
+ </para>
+ <para>
+<emphasis>FONTCONFIG_USE_MMAP</emphasis>
+is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway.
+ </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/chromium/third_party/fontconfig/src/doc/func.sgml b/chromium/third_party/fontconfig/src/doc/func.sgml
new file mode 100644
index 00000000000..73e7761ce39
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/func.sgml
@@ -0,0 +1,90 @@
+<!--
+ fontconfig/doc/func.sgml
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ -->
+@?TITLE@
+ <refentry id="@TITLE@">
+@:@
+ <refentry id="@FUNC@">
+@;@
+ <refmeta>
+@?TITLE@
+ <refentrytitle>@TITLE@</refentrytitle>
+@:@
+ <refentrytitle>@FUNC@</refentrytitle>
+@;@
+ <manvolnum>3</manvolnum>
+ </refmeta>
+ <refnamediv>
+@{PROTOTYPE@
+ <refname>@FUNC@</refname>
+@}PROTOTYPE@
+ <refpurpose>@PURPOSE@</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcsynopsisinfo>
+@?SYNOPSIS@
+@SYNOPSIS@
+@:@
+#include &lt;fontconfig/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/chromium/third_party/fontconfig/src/doc/version.sgml.in b/chromium/third_party/fontconfig/src/doc/version.sgml.in
new file mode 100644
index 00000000000..13315ba6d8f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/doc/version.sgml.in
@@ -0,0 +1,24 @@
+<!--
+ fontconfig/doc/version.sgml.in
+
+ Copyright © 2003 Keith Packard
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the author(s) not be used in
+ advertising or publicity pertaining to distribution of the software without
+ specific, written prior permission. The authors make no
+ representations about the suitability of this software for any purpose. It
+ is provided "as is" without express or implied warranty.
+
+ THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+-->
+@VERSION@
diff --git a/chromium/third_party/fontconfig/src/fc-cache/Makefile.am b/chromium/third_party/fontconfig/src/fc-cache/Makefile.am
new file mode 100644
index 00000000000..0e1078629e3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cache/Makefile.am
@@ -0,0 +1,69 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-cache/fc-cache.c b/chromium/third_party/fontconfig/src/fc-cache/fc-cache.c
new file mode 100644
index 00000000000..af7ba6dd6a9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cache/fc-cache.c
@@ -0,0 +1,406 @@
+/*
+ * 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.
+ */
+
+#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'},
+ {"sysroot", 0, 0, 'y'},
+ {"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] [-y SYSROOT] [--force|--really-force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] [--help] [dirs]\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-frsvVh] [-y SYSROOT] [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, " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\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, " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\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, FcBool recursive, 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 (recursive && 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++;
+ }
+ }
+
+ if (recursive)
+ {
+ 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, recursive, changed);
+ FcStrListDone (sublist);
+ }
+ else
+ FcDirCacheUnload (cache);
+ }
+ 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 (!FcDirCacheClean (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;
+ FcChar8 *sysroot = NULL;
+ int i;
+ int changed;
+ int ret;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "frsy:Vvh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "frsy:Vvh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'r':
+ really_force = FcTrue;
+ /* fall through */
+ case 'f':
+ force = FcTrue;
+ break;
+ case 's':
+ systemOnly = FcTrue;
+ break;
+ case 'y':
+ sysroot = FcStrCopy ((const FcChar8 *)optarg);
+ 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);
+ if (sysroot)
+ {
+ FcConfigSetSysRoot (NULL, sysroot);
+ FcStrFree (sysroot);
+ config = FcConfigGetCurrent();
+ }
+ else
+ {
+ 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, FcTrue, &changed);
+ /* Update the directory cache again to avoid the race condition as much as possible */
+ FcStrListFirst (list);
+ ret += scanDirs (list, config, FcTrue, really_force, verbose, FcFalse, &changed);
+ FcStrListDone (list);
+
+ /*
+ * Try to create CACHEDIR.TAG anyway.
+ * This expects the fontconfig cache directory already exists.
+ * If it doesn't, it won't be simply created.
+ */
+ FcCacheCreateTagFile (config);
+
+ FcStrSetDestroy (processed_dirs);
+
+ cleanCacheDirectories (config, verbose);
+
+ FcConfigDestroy (config);
+ FcFini ();
+ /*
+ * 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.
+ */
+ /* the resolution of mtime on FAT is 2 seconds */
+ if (changed)
+ sleep (2);
+ if (verbose)
+ printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded");
+ return ret;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-cache/fc-cache.sgml b/chromium/third_party/fontconfig/src/fc-cache/fc-cache.sgml
new file mode 100644
index 00000000000..3740be77f66
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cache/fc-cache.sgml
@@ -0,0 +1,220 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
+ <!ENTITY dhsurname "<surname>Mouette</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>joss@debian.org</email>">
+ <!ENTITY dhusername "Josselin Mouette">
+ <!ENTITY dhucpackage "<refentrytitle>fc-cache</refentrytitle>">
+ <!ENTITY dhpackage "fc-cache">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>build font information cache files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-frsvVh</option></arg>
+ <arg><option>--force</option></arg>
+ <arg><option>--really-force</option></arg>
+ <arg><option>--system-only</option></arg>
+ <arg><option>--verbose</option></arg>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg rep="repeat"><option><replaceable>dir</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> scans the font directories on
+ the system and builds font information cache files for
+ applications using fontconfig for their font handling.</para>
+
+ <para>If directory arguments are not given,
+ <command>&dhpackage;</command> uses each directory in the
+ current font configuration. Each directory is scanned for
+ font files readable by FreeType. A cache is created which
+ contains properties of each font and the associated filename.
+ This cache is used to speed up application startup when using
+ the fontconfig library.</para>
+
+ <para>Note that <command>&dhpackage;</command> must be executed
+ once per architecture to generate font information customized
+ for that architecture.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--force</option>
+ </term>
+ <listitem>
+ <para>Force re-generation of apparently up-to-date cache files,
+ overriding the timestamp checking.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>
+ <option>--really-force</option>
+ </term>
+ <listitem>
+ <para>Erase all existing cache files and rescan.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>
+ <option>--system-only</option>
+ </term>
+ <listitem>
+ <para>Only scan system-wide directories, omitting the places
+ located in the user's home directory.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Display status information while busy.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>dir</replaceable></option>
+ </term>
+ <listitem>
+ <para>Directory to scan for fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename><replaceable>%cachdir%</replaceable>/*-<replaceable>%arch%</replaceable>.cache-2</filename></term>
+ <listitem>
+ <para>These files are generated by <command>&dhpackage;</command>
+ and contain maps from file names to font properties. They are
+ read by the fontconfig library at application startup to locate
+ appropriate fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-cat</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was written by Keith Packard
+ <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/chromium/third_party/fontconfig/src/fc-case/CaseFolding.txt b/chromium/third_party/fontconfig/src/fc-case/CaseFolding.txt
new file mode 100644
index 00000000000..cf5779f4075
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-case/CaseFolding.txt
@@ -0,0 +1,1226 @@
+# CaseFolding-6.3.0.txt
+# Date: 2012-12-20, 22:14:35 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2013 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.)
+#
+# =================================================================
+
+# Property: Case_Folding
+
+# All code points not explicitly listed for Case_Folding
+# have the value C for the status field, and the code point itself for the mapping field.
+
+# @missing: 0000..10FFFF; C; <code point>
+
+# =================================================================
+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
+10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN
+10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN
+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
+2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI
+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
+A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR
+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
+A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK
+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
+#
+# EOF
diff --git a/chromium/third_party/fontconfig/src/fc-case/Makefile.am b/chromium/third_party/fontconfig/src/fc-case/Makefile.am
new file mode 100644
index 00000000000..662f771af6d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-case/Makefile.am
@@ -0,0 +1,33 @@
+# -*- encoding: utf-8 -*-
+#
+# Copyright © 2003 Keith Packard
+# Copyright © 2013 Google, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Google Author(s): Behdad Esfahbod
+
+TAG=case
+DEPS = $(srcdir)/CaseFolding.txt
+ARGS = $(srcdir)/CaseFolding.txt
+DIST = $(srcdir)/CaseFolding.txt
+
+include $(top_srcdir)/Tools.mk
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-case/fc-case.c b/chromium/third_party/fontconfig/src/fc-case/fc-case.c
new file mode 100644
index 00000000000..236bff5f0c7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-case/fc-case.c
@@ -0,0 +1,363 @@
+/*
+ * fontconfig/fc-case/fc-case.c
+ *
+ * Copyright © 2004 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <ctype.h>
+
+#define MAX_OUT 32
+#define MAX_LINE 8192
+
+typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass;
+
+typedef struct _caseFoldClassMap {
+ const char *name;
+ CaseFoldClass class;
+} CaseFoldClassMap;
+
+static const CaseFoldClassMap caseFoldClassMap[] = {
+ { "C", CaseFoldCommon },
+ { "F", CaseFoldFull },
+ { "S", CaseFoldSimple },
+ { "T", CaseFoldTurkic },
+ { 0, 0 }
+};
+
+typedef struct _caseFoldRaw {
+ FcChar32 upper;
+ CaseFoldClass class;
+ int nout;
+ FcChar32 lower[MAX_OUT];
+} CaseFoldRaw;
+
+static void
+panic (const char *reason)
+{
+ fprintf (stderr, "fc-case: panic %s\n", reason);
+ exit (1);
+}
+
+int maxExpand;
+static FcCaseFold *folds;
+int nfolds;
+
+static FcCaseFold *
+addFold (void)
+{
+ if (folds)
+ folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold));
+ else
+ folds = malloc (sizeof (FcCaseFold));
+ if (!folds)
+ panic ("out of memory");
+ return &folds[nfolds++];
+}
+
+static int
+ucs4_to_utf8 (FcChar32 ucs4,
+ FcChar8 dest[FC_UTF8_MAX_LEN])
+{
+ int bits;
+ FcChar8 *d = dest;
+
+ if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
+ else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
+ else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
+ else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
+ else return 0;
+
+ for ( ; bits >= 0; bits-= 6) {
+ *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
+ }
+ return d - dest;
+}
+
+static int
+utf8_size (FcChar32 ucs4)
+{
+ FcChar8 utf8[FC_UTF8_MAX_LEN];
+ return ucs4_to_utf8 (ucs4, utf8 );
+}
+
+static FcChar8 *foldChars;
+static int nfoldChars;
+static int maxFoldChars;
+static FcChar32 minFoldChar;
+static FcChar32 maxFoldChar;
+
+static void
+addChar (FcChar32 c)
+{
+ FcChar8 utf8[FC_UTF8_MAX_LEN];
+ int len;
+ int i;
+
+ len = ucs4_to_utf8 (c, utf8);
+ if (foldChars)
+ foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8));
+ else
+ foldChars = malloc (sizeof (FcChar8) * len);
+ if (!foldChars)
+ panic ("out of memory");
+ for (i = 0; i < len; i++)
+ foldChars[nfoldChars + i] = utf8[i];
+ nfoldChars += len;
+}
+
+static int
+foldExtends (FcCaseFold *fold, CaseFoldRaw *raw)
+{
+ switch (fold->method) {
+ case FC_CASE_FOLD_RANGE:
+ if ((short) (raw->lower[0] - raw->upper) != fold->offset)
+ return 0;
+ if (raw->upper != fold->upper + fold->count)
+ return 0;
+ return 1;
+ case FC_CASE_FOLD_EVEN_ODD:
+ if ((short) (raw->lower[0] - raw->upper) != 1)
+ return 0;
+ if (raw->upper != fold->upper + fold->count + 1)
+ return 0;
+ return 1;
+ case FC_CASE_FOLD_FULL:
+ break;
+ }
+ return 0;
+}
+
+static const char *
+case_fold_method_name (FcChar16 method)
+{
+ switch (method) {
+ case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,";
+ case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,";
+ case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,";
+ default: return "unknown";
+ }
+}
+
+static void
+dump (void)
+{
+ int i;
+
+ printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds);
+ printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars);
+ printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars);
+ printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand);
+ printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar);
+ printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar);
+ printf ( "\n");
+
+ /*
+ * Dump out ranges
+ */
+ printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n");
+ for (i = 0; i < nfolds; i++)
+ {
+ printf (" { 0x%08x, %-22s 0x%04x, %6d },\n",
+ folds[i].upper, case_fold_method_name (folds[i].method),
+ folds[i].count, folds[i].offset);
+ }
+ printf ("};\n\n");
+
+ /*
+ * Dump out "other" values
+ */
+
+ printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n");
+ for (i = 0; i < nfoldChars; i++)
+ {
+ printf ("0x%02x", foldChars[i]);
+ if (i != nfoldChars - 1)
+ {
+ if ((i & 0xf) == 0xf)
+ printf (",\n");
+ else
+ printf (",");
+ }
+ }
+ printf ("\n};\n");
+}
+
+/*
+ * Read the standard Unicode CaseFolding.txt file
+ */
+#define SEP "; \t\n"
+
+static int
+parseRaw (char *line, CaseFoldRaw *raw)
+{
+ char *tok, *end;
+ int i;
+
+ if (!isxdigit (line[0]))
+ return 0;
+ /*
+ * Get upper case value
+ */
+ tok = strtok (line, SEP);
+ if (!tok || tok[0] == '#')
+ return 0;
+ raw->upper = strtol (tok, &end, 16);
+ if (end == tok)
+ return 0;
+ /*
+ * Get class
+ */
+ tok = strtok (NULL, SEP);
+ if (!tok || tok[0] == '#')
+ return 0;
+ for (i = 0; caseFoldClassMap[i].name; i++)
+ if (!strcmp (tok, caseFoldClassMap[i].name))
+ {
+ raw->class = caseFoldClassMap[i].class;
+ break;
+ }
+ if (!caseFoldClassMap[i].name)
+ return 0;
+
+ /*
+ * Get list of result characters
+ */
+ for (i = 0; i < MAX_OUT; i++)
+ {
+ tok = strtok (NULL, SEP);
+ if (!tok || tok[0] == '#')
+ break;
+ raw->lower[i] = strtol (tok, &end, 16);
+ if (end == tok)
+ break;
+ }
+ if (i == 0)
+ return 0;
+ raw->nout = i;
+ return 1;
+}
+
+static int
+caseFoldReadRaw (FILE *in, CaseFoldRaw *raw)
+{
+ char line[MAX_LINE];
+
+ for (;;)
+ {
+ if (!fgets (line, sizeof (line) - 1, in))
+ return 0;
+ if (parseRaw (line, raw))
+ return 1;
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ FcCaseFold *fold = 0;
+ CaseFoldRaw raw;
+ int i;
+ FILE *caseFile;
+ char line[MAX_LINE];
+ int expand;
+
+ if (argc != 2)
+ panic ("usage: fc-case CaseFolding.txt");
+ caseFile = fopen (argv[1], "r");
+ if (!caseFile)
+ panic ("can't open case folding file");
+
+ while (caseFoldReadRaw (caseFile, &raw))
+ {
+ if (!minFoldChar)
+ minFoldChar = raw.upper;
+ maxFoldChar = raw.upper;
+ switch (raw.class) {
+ case CaseFoldCommon:
+ case CaseFoldFull:
+ if (raw.nout == 1)
+ {
+ if (fold && foldExtends (fold, &raw))
+ fold->count = raw.upper - fold->upper + 1;
+ else
+ {
+ fold = addFold ();
+ fold->upper = raw.upper;
+ fold->offset = raw.lower[0] - raw.upper;
+ if (fold->offset == 1)
+ fold->method = FC_CASE_FOLD_EVEN_ODD;
+ else
+ fold->method = FC_CASE_FOLD_RANGE;
+ fold->count = 1;
+ }
+ expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper);
+ }
+ else
+ {
+ fold = addFold ();
+ fold->upper = raw.upper;
+ fold->method = FC_CASE_FOLD_FULL;
+ fold->offset = nfoldChars;
+ for (i = 0; i < raw.nout; i++)
+ addChar (raw.lower[i]);
+ fold->count = nfoldChars - fold->offset;
+ if (fold->count > maxFoldChars)
+ maxFoldChars = fold->count;
+ expand = fold->count - utf8_size (raw.upper);
+ }
+ if (expand > maxExpand)
+ maxExpand = expand;
+ break;
+ case CaseFoldSimple:
+ break;
+ case CaseFoldTurkic:
+ break;
+ }
+ }
+ /*
+ * Scan the input until the marker is found
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ {
+ if (!strncmp (line, "@@@", 3))
+ break;
+ fputs (line, stdout);
+ }
+
+ /*
+ * Dump these tables
+ */
+ dump ();
+
+ /*
+ * And flush out the rest of the input file
+ */
+
+ while (fgets (line, sizeof (line), stdin))
+ fputs (line, stdout);
+
+ fflush (stdout);
+ exit (ferror (stdout));
+}
diff --git a/chromium/third_party/fontconfig/src/fc-case/fccase.tmpl.h b/chromium/third_party/fontconfig/src/fc-case/fccase.tmpl.h
new file mode 100644
index 00000000000..c8e2925b9ca
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-case/fccase.tmpl.h
@@ -0,0 +1,25 @@
+/*
+ * fontconfig/fc-case/fccase.tmpl.h
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/chromium/third_party/fontconfig/src/fc-cat/Makefile.am b/chromium/third_party/fontconfig/src/fc-cat/Makefile.am
new file mode 100644
index 00000000000..04c1cc48c9d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cat/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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}
+
+CLEANFILES =
+
+fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-cat/fc-cat.c b/chromium/third_party/fontconfig/src/fc-cat/fc-cat.c
new file mode 100644
index 00000000000..9a2abb3fa31
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cat/fc-cat.c
@@ -0,0 +1,390 @@
+/*
+ * 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 putc must do thread-safe locking,
+ * this is a serious performance problem for applications doing large
+ * amounts of IO with putc (as is done here). If available, use
+ * the putc_unlocked varient instead.
+ */
+
+#if defined(putc_unlocked) || defined(_IO_putc_unlocked)
+#define PUTC(c,f) putc_unlocked(c,f)
+#else
+#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" FC_CACHE_SUFFIX "|directory]...\n",
+ program, FC_ARCHITECTURE);
+ fprintf (file, " %s [-Vh] [--version] [--help]\n", program);
+#else
+ fprintf (file, "usage: %s [-rvVh] [*-%s" FC_CACHE_SUFFIX "|directory]...\n",
+ program, FC_ARCHITECTURE);
+#endif
+ fprintf (file, "Reads font information cache from:\n");
+ fprintf (file, " 1) specified fontconfig cache file\n");
+ fprintf (file, " 2) related to a particular font directory\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -r, --recurse recurse into subdirectories\n");
+ fprintf (file, " -v, --verbose be verbose\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -r (recurse) recurse into subdirectories\n");
+ fprintf (file, " -v (verbose) be verbose\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+/*
+ * return the path from the directory containing 'cache' to 'file'
+ */
+
+static const FcChar8 *
+file_base_name (const FcChar8 *cache, const FcChar8 *file)
+{
+ int cache_len = strlen ((char *) cache);
+
+ if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/')
+ return file + cache_len + 1;
+ return file;
+}
+
+#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
+
+static FcBool
+cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose)
+{
+ FcChar8 *dir;
+ const FcChar8 *base;
+ int n;
+ int ndir = 0;
+ FcStrList *list;
+
+ list = FcStrListCreate (dirs);
+ if (!list)
+ goto bail2;
+
+ while ((dir = FcStrListNext (list)))
+ {
+ base = file_base_name (base_name, dir);
+ if (!write_string (stdout, base))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_int (stdout, 0))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_string (stdout, FC_FONT_FILE_DIR))
+ goto bail3;
+ if (PUTC ('\n', stdout) == EOF)
+ goto bail3;
+ ndir++;
+ }
+
+ for (n = 0; n < set->nfont; n++)
+ {
+ FcPattern *font = set->fonts[n];
+ FcChar8 *s;
+
+ s = FcPatternFormat (font, (const FcChar8 *) "%{=fccat}\n");
+ if (s)
+ {
+ printf ("%s", s);
+ FcStrFree (s);
+ }
+ }
+ if (verbose && !set->nfont && !ndir)
+ printf ("<empty>\n");
+
+ FcStrListDone (list);
+
+ return FcTrue;
+
+bail3:
+ FcStrListDone (list);
+bail2:
+ return FcFalse;
+}
+
+int
+main (int argc, char **argv)
+{
+ int i;
+ int ret = 0;
+ FcFontSet *fs;
+ FcStrSet *dirs;
+ FcStrSet *args = NULL;
+ FcStrList *arglist;
+ FcCache *cache;
+ FcConfig *config;
+ FcChar8 *arg;
+ int verbose = 0;
+ int recurse = 0;
+ FcBool first = FcTrue;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "Vvrh")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'V':
+ fprintf (stderr, "fontconfig version %d.%d.%d\n",
+ FC_MAJOR, FC_MINOR, FC_REVISION);
+ exit (0);
+ case 'v':
+ verbose++;
+ break;
+ case 'r':
+ recurse++;
+ break;
+ case 'h':
+ usage (argv[0], 0);
+ default:
+ usage (argv[0], 1);
+ }
+ }
+ i = optind;
+#else
+ i = 1;
+#endif
+
+ config = FcInitLoadConfig ();
+ if (!config)
+ {
+ fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
+ return 1;
+ }
+ FcConfigSetCurrent (config);
+
+ args = FcStrSetCreate ();
+ if (!args)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ if (i < argc)
+ {
+ for (; i < argc; i++)
+ {
+ if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i]))
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ }
+ arglist = FcStrListCreate (args);
+ if (!arglist)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ }
+ else
+ {
+ recurse++;
+ arglist = FcConfigGetFontDirs (config);
+ while ((arg = FcStrListNext (arglist)))
+ if (!FcStrSetAdd (args, arg))
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+ FcStrListDone (arglist);
+ }
+ arglist = FcStrListCreate (args);
+ if (!arglist)
+ {
+ fprintf (stderr, "%s: malloc failure\n", argv[0]);
+ return 1;
+ }
+
+ while ((arg = FcStrListNext (arglist)))
+ {
+ int j;
+ FcChar8 *cache_file = NULL;
+ struct stat file_stat;
+
+ if (FcFileIsDir (arg))
+ cache = FcDirCacheLoad (arg, config, &cache_file);
+ else
+ cache = FcDirCacheLoadFile (arg, &file_stat);
+ if (!cache)
+ {
+ perror ((char *) arg);
+ ret++;
+ continue;
+ }
+
+ dirs = FcStrSetCreate ();
+ fs = FcCacheCopySet (cache);
+ for (j = 0; j < FcCacheNumSubdir (cache); j++)
+ {
+ FcStrSetAdd (dirs, FcCacheSubdir (cache, j));
+ if (recurse)
+ FcStrSetAdd (args, FcCacheSubdir (cache, j));
+ }
+
+ if (verbose)
+ {
+ if (!first)
+ printf ("\n");
+ printf ("Directory: %s\nCache: %s\n--------\n",
+ FcCacheDir(cache), cache_file ? cache_file : arg);
+ first = FcFalse;
+ }
+ cache_print_set (fs, dirs, FcCacheDir (cache), verbose);
+
+ FcStrSetDestroy (dirs);
+
+ FcFontSetDestroy (fs);
+ FcDirCacheUnload (cache);
+ if (cache_file)
+ FcStrFree (cache_file);
+ }
+
+ FcFini ();
+ return 0;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-cat/fc-cat.sgml b/chromium/third_party/fontconfig/src/fc-cat/fc-cat.sgml
new file mode 100644
index 00000000000..ce4736de5e8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-cat/fc-cat.sgml
@@ -0,0 +1,169 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
+ <!ENTITY dhsurname "<surname>Lam</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>plam@mit.edu</email>">
+ <!ENTITY dhusername "Patrick Lam">
+ <!ENTITY dhucpackage "<refentrytitle>fc-cat</refentrytitle>">
+ <!ENTITY dhpackage "fc-cat">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2005</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>read font information cache files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-rvVh</option></arg>
+ <arg><option>--recurse</option></arg>
+ <arg><option>--verbose</option></arg>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <group rep="repeat">
+ <arg><option><replaceable>fonts-cache-2-files</replaceable></option></arg>
+ <arg><option><replaceable>dirs</replaceable></option></arg>
+ </group>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> reads the font information from
+ cache files or related to font directories
+ and emits it in ASCII form.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-r</option>
+ <option>--recurse</option>
+ </term>
+ <listitem>
+ <para>Recurse into subdirectories.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Be verbose.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was written by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/chromium/third_party/fontconfig/src/fc-glyphname/Makefile.am b/chromium/third_party/fontconfig/src/fc-glyphname/Makefile.am
new file mode 100644
index 00000000000..12725674c50
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-glyphname/Makefile.am
@@ -0,0 +1,33 @@
+# -*- encoding: utf-8 -*-
+#
+# Copyright © 2003 Keith Packard
+# Copyright © 2013 Google, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Google Author(s): Behdad Esfahbod
+
+TAG = glyphname
+DEPS = $(srcdir)/zapfdingbats.txt
+ARGS = $(srcdir)/zapfdingbats.txt
+DIST = $(srcdir)/zapfdingbats.txt
+
+include $(top_srcdir)/Tools.mk
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-glyphname/fc-glyphname.c b/chromium/third_party/fontconfig/src/fc-glyphname/fc-glyphname.c
new file mode 100644
index 00000000000..84027816430
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-glyphname/fc-glyphname.c
@@ -0,0 +1,325 @@
+/*
+ * fontconfig/fc-glyphname/fc-glyphname.c
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+
+static int
+rawindex (const FcGlyphName *gn);
+
+static void
+scan (FILE *f, char *filename);
+
+static int
+isprime (int i);
+
+static void
+find_hash (void);
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name);
+
+static void
+insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h);
+
+static void
+dump (FcGlyphName * const *table, const char *name);
+
+static FcGlyphName *
+FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
+{
+ FcGlyphName *gn;
+
+ gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name));
+ if (!gn)
+ return 0;
+ gn->ucs = ucs;
+ strcpy ((char *) gn->name, (char *) name);
+ return gn;
+}
+
+static void
+fatal (const char *file, int lineno, const char *msg)
+{
+ if (lineno)
+ fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
+ else
+ fprintf (stderr, "%s: %s\n", file, msg);
+
+ exit (1);
+}
+
+#define MAX_GLYPHFILE 256
+#define MAX_GLYPHNAME 10240
+#define MAX_NAMELEN 1024
+
+static FcGlyphName *raw[MAX_GLYPHNAME];
+static int nraw;
+static int max_name_len;
+static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
+static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
+static unsigned int hash, rehash;
+
+static int
+rawindex (const FcGlyphName *gn)
+{
+ int i;
+
+ for (i = 0; i < nraw; i++)
+ if (raw[i] == gn)
+ return i;
+ return -1;
+}
+
+static void
+scan (FILE *f, char *filename)
+{
+ char buf[MAX_NAMELEN];
+ char name[MAX_NAMELEN];
+ unsigned long ucs;
+ FcGlyphName *gn;
+ int lineno = 0;
+ int len;
+
+ while (fgets (buf, sizeof (buf), f))
+ {
+ lineno++;
+ if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2)
+ continue;
+ gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name);
+ if (!gn)
+ fatal (filename, lineno, "out of memory");
+ len = strlen (name);
+ if (len > max_name_len)
+ max_name_len = len;
+ raw[nraw++] = gn;
+ }
+}
+
+static int compare_string (const void *a, const void *b)
+{
+ const char *const *as = a, *const *bs = b;
+ return strcmp (*as, *bs);
+}
+
+static int compare_glyphname (const void *a, const void *b)
+{
+ const FcGlyphName *const *ag = a, *const *bg = b;
+
+ return strcmp ((char *) (*ag)->name, (char *) (*bg)->name);
+}
+
+static int
+isqrt (int a)
+{
+ int l, h, m;
+
+ l = 2;
+ h = a/2;
+ while ((h-l) > 1)
+ {
+ m = (h+l) >> 1;
+ if (m * m < a)
+ l = m;
+ else
+ h = m;
+ }
+ return h;
+}
+
+static int
+isprime (int i)
+{
+ int l, t;
+
+ if (i < 2)
+ return FcFalse;
+ if ((i & 1) == 0)
+ {
+ if (i == 2)
+ return FcTrue;
+ return FcFalse;
+ }
+ l = isqrt (i) + 1;
+ for (t = 3; t <= l; t += 2)
+ if (i % t == 0)
+ return 0;
+ return 1;
+}
+
+/*
+ * Find a prime pair that leaves at least 25% of the hash table empty
+ */
+
+static void
+find_hash (void)
+{
+ int h;
+
+ h = nraw + nraw / 4;
+ if ((h & 1) == 0)
+ h++;
+ while (!isprime(h-2) || !isprime(h))
+ h += 2;
+ hash = h;
+ rehash = h-2;
+}
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name)
+{
+ FcChar32 h = 0;
+ FcChar8 c;
+
+ while ((c = *name++))
+ {
+ h = ((h << 1) | (h >> 31)) ^ c;
+ }
+ return h;
+}
+
+static void
+insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
+{
+ unsigned int i, r = 0;
+
+ i = (int) (h % hash);
+ while (table[i])
+ {
+ if (!r) r = (h % rehash + 1);
+ i += r;
+ if (i >= hash)
+ i -= hash;
+ }
+ table[i] = gn;
+}
+
+static void
+dump (FcGlyphName * const *table, const char *name)
+{
+ unsigned 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 FC_UNUSED, char **argv)
+{
+ char *files[MAX_GLYPHFILE];
+ char line[1024];
+ FILE *f;
+ int i;
+ const 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/chromium/third_party/fontconfig/src/fc-glyphname/fcglyphname.tmpl.h b/chromium/third_party/fontconfig/src/fc-glyphname/fcglyphname.tmpl.h
new file mode 100644
index 00000000000..d4f8a95245d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-glyphname/fcglyphname.tmpl.h
@@ -0,0 +1,25 @@
+/*
+ * fontconfig/fc-glyphname/fcglyphname.tmpl.h
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/chromium/third_party/fontconfig/src/fc-glyphname/zapfdingbats.txt b/chromium/third_party/fontconfig/src/fc-glyphname/zapfdingbats.txt
new file mode 100644
index 00000000000..bcad2e28597
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-glyphname/zapfdingbats.txt
@@ -0,0 +1,212 @@
+# Name: ITC Zapf Dingbats Glyph List
+# Table version: 2.0
+# Date: September 20, 2002
+#
+# See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
+#
+# Format: Semicolon-delimited fields:
+# (1) glyph name
+# (2) Unicode scalar value
+#
+a100;275E
+a101;2761
+a102;2762
+a103;2763
+a104;2764
+a105;2710
+a106;2765
+a107;2766
+a108;2767
+a109;2660
+a10;2721
+a110;2665
+a111;2666
+a112;2663
+a117;2709
+a118;2708
+a119;2707
+a11;261B
+a120;2460
+a121;2461
+a122;2462
+a123;2463
+a124;2464
+a125;2465
+a126;2466
+a127;2467
+a128;2468
+a129;2469
+a12;261E
+a130;2776
+a131;2777
+a132;2778
+a133;2779
+a134;277A
+a135;277B
+a136;277C
+a137;277D
+a138;277E
+a139;277F
+a13;270C
+a140;2780
+a141;2781
+a142;2782
+a143;2783
+a144;2784
+a145;2785
+a146;2786
+a147;2787
+a148;2788
+a149;2789
+a14;270D
+a150;278A
+a151;278B
+a152;278C
+a153;278D
+a154;278E
+a155;278F
+a156;2790
+a157;2791
+a158;2792
+a159;2793
+a15;270E
+a160;2794
+a161;2192
+a162;27A3
+a163;2194
+a164;2195
+a165;2799
+a166;279B
+a167;279C
+a168;279D
+a169;279E
+a16;270F
+a170;279F
+a171;27A0
+a172;27A1
+a173;27A2
+a174;27A4
+a175;27A5
+a176;27A6
+a177;27A7
+a178;27A8
+a179;27A9
+a17;2711
+a180;27AB
+a181;27AD
+a182;27AF
+a183;27B2
+a184;27B3
+a185;27B5
+a186;27B8
+a187;27BA
+a188;27BB
+a189;27BC
+a18;2712
+a190;27BD
+a191;27BE
+a192;279A
+a193;27AA
+a194;27B6
+a195;27B9
+a196;2798
+a197;27B4
+a198;27B7
+a199;27AC
+a19;2713
+a1;2701
+a200;27AE
+a201;27B1
+a202;2703
+a203;2750
+a204;2752
+a205;276E
+a206;2770
+a20;2714
+a21;2715
+a22;2716
+a23;2717
+a24;2718
+a25;2719
+a26;271A
+a27;271B
+a28;271C
+a29;2722
+a2;2702
+a30;2723
+a31;2724
+a32;2725
+a33;2726
+a34;2727
+a35;2605
+a36;2729
+a37;272A
+a38;272B
+a39;272C
+a3;2704
+a40;272D
+a41;272E
+a42;272F
+a43;2730
+a44;2731
+a45;2732
+a46;2733
+a47;2734
+a48;2735
+a49;2736
+a4;260E
+a50;2737
+a51;2738
+a52;2739
+a53;273A
+a54;273B
+a55;273C
+a56;273D
+a57;273E
+a58;273F
+a59;2740
+a5;2706
+a60;2741
+a61;2742
+a62;2743
+a63;2744
+a64;2745
+a65;2746
+a66;2747
+a67;2748
+a68;2749
+a69;274A
+a6;271D
+a70;274B
+a71;25CF
+a72;274D
+a73;25A0
+a74;274F
+a75;2751
+a76;25B2
+a77;25BC
+a78;25C6
+a79;2756
+a7;271E
+a81;25D7
+a82;2758
+a83;2759
+a84;275A
+a85;276F
+a86;2771
+a87;2772
+a88;2773
+a89;2768
+a8;271F
+a90;2769
+a91;276C
+a92;276D
+a93;276A
+a94;276B
+a95;2774
+a96;2775
+a97;275B
+a98;275C
+a99;275D
+a9;2720
+#-- end
diff --git a/chromium/third_party/fontconfig/src/fc-lang/Makefile.am b/chromium/third_party/fontconfig/src/fc-lang/Makefile.am
new file mode 100644
index 00000000000..6f76ee0152f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/Makefile.am
@@ -0,0 +1,286 @@
+# -*- encoding: utf-8 -*-
+#
+# Copyright © 2003 Keith Packard
+# Copyright © 2013 Google, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Google Author(s): Behdad Esfahbod
+
+TAG = lang
+DEPS = $(ORTH)
+ARGS = -d $(srcdir) $(ORTH)
+DIST = $(ORTH)
+
+include $(top_srcdir)/Tools.mk
+
+# 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 \
+ quz.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 \
+ nqo.orth \
+ brx.orth \
+ sat.orth \
+ doi.orth \
+ mni.orth
+# ^-------------- Add new orth files here
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-lang/aa.orth b/chromium/third_party/fontconfig/src/fc-lang/aa.orth
new file mode 100644
index 00000000000..cd5ac64c3f6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/aa.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/aa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Afar (AA)
+#
+# Taken from http://www.arhotaba.com/waldegram.htm
+# and http://www.arhotaba.com/alphabet.htm
+#
+0041-005a # afar doesn't use J, P, V or Z
+0061-007a # afar doesn't use j, p, v or z
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ab.orth b/chromium/third_party/fontconfig/src/fc-lang/ab.orth
new file mode 100644
index 00000000000..82ab4290d52
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ab.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/ab.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Abkhazia (AB)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab # double angle quotes
+#00bb # double angle quotes
+0401
+040f
+0410-044f
+0451
+045f
+049e-049f
+04a6-04a9
+04ac-04ad
+04b2-04b7
+04bc-04bf
+04d8
+04d9
+04e0-04e1
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/af.orth b/chromium/third_party/fontconfig/src/fc-lang/af.orth
new file mode 100644
index 00000000000..d8b3776604a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/af.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/af.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Afrikaans (AF)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c8
+00e8
+00c9
+00e9
+00ca
+00ea
+00cb
+00eb
+00ce
+00ee
+00cf
+00ef
+00d4
+00f4
+00db
+00fb
+0149
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ak.orth b/chromium/third_party/fontconfig/src/fc-lang/ak.orth
new file mode 100644
index 00000000000..de94f077188
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ak.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/ak.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Akan (ak)
+#
+# According to ISO 639-3, Akan is a macro-language of Twi and Fanti.
+# Information on the web indicates Twi and Fanti now have a unified
+# orthography. We include Twi.
+#
+include tw.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/am.orth b/chromium/third_party/fontconfig/src/fc-lang/am.orth
new file mode 100644
index 00000000000..42c8d49fb86
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/am.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/am.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Amharic (AM)
+#
+# The same as Ethiopic
+#
+include gez.orth
+1238-123f # xe-xWa
+1268-126e # ve-vo
+1278-127f # ce-cWa
+1298-129f # Ne-NWa
+12a8 # ea
+12e0-12e8 # Ze-ZWa
+1300-1307 # je-jWa
+1328-132f # Ce-CWa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/an.orth b/chromium/third_party/fontconfig/src/fc-lang/an.orth
new file mode 100644
index 00000000000..7236886fcd2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/an.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/an.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Aragonese (an)
+#
+# Source:
+# * Consello d’a Fabla Aragonesa, "Normas graficas de l’aragonés", at
+# http://www.charrando.com/normasgraficas.pdf
+#
+0041-005A
+0061-007A
+00C1
+00C9
+00CD
+00D1
+00D3
+00DA
+00DC
+00E1
+00E9
+00ED
+00F1
+00F3
+00FA
+00FC
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ar.orth b/chromium/third_party/fontconfig/src/fc-lang/ar.orth
new file mode 100644
index 00000000000..fd673c6728e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ar.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/ar.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Arabic (ar)
+#
+# We are assuming that:
+# * Most fonts that claim to support an Arabic letter actually do so;
+# * Most modern text rendering software use OpenType tables, instead of
+# directly using presentation forms.
+# * Some good Arabic fonts do not support codepoints for Arabic presentation
+# forms.
+# Thus, we are switching to general forms of Arabic letters.
+#
+# General forms:
+0621-063a
+0641-064a
+# Presentations forms:
+# fe80-fefc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/as.orth b/chromium/third_party/fontconfig/src/fc-lang/as.orth
new file mode 100644
index 00000000000..7b7cef84abe
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/as.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/as.orth
+#
+# Copyright © 2006 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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Assamese (as)
+#
+# Source: Unicode coverage and notes for Bengali script, Unicode internal
+# documents, Wikipedia articles
+0981-0983
+0985-098c
+098f-0990
+0993-09a8
+09aa-09af
+# 09b0 # Assamese uses U+09F0 instead
+09b2
+09b6-09b9
+09bc
+09be-09c4
+09c7-09c8
+09cb-09cd
+# 09d7 # Only used as a part of U+09CC
+09dc-09dd
+09df
+# 09e0-09e3 # These are for Sanskrit
+09f0-09f1
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ast.orth b/chromium/third_party/fontconfig/src/fc-lang/ast.orth
new file mode 100644
index 00000000000..55aaed5122d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ast.orth
@@ -0,0 +1,47 @@
+#
+# 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
+1e24
+1e25
+1e36
+1e37
diff --git a/chromium/third_party/fontconfig/src/fc-lang/av.orth b/chromium/third_party/fontconfig/src/fc-lang/av.orth
new file mode 100644
index 00000000000..bb3e6abca16
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/av.orth
@@ -0,0 +1,97 @@
+#
+# fontconfig/fc-lang/av.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Avaric (av)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ay.orth b/chromium/third_party/fontconfig/src/fc-lang/ay.orth
new file mode 100644
index 00000000000..538bc80f7c7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ay.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/ay.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Aymara (KW)
+#
+# Orthography from http://www.aymara.org/arusa/qillqa_eng.html
+#
+0041-005a
+0061-007a
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
diff --git a/chromium/third_party/fontconfig/src/fc-lang/az_az.orth b/chromium/third_party/fontconfig/src/fc-lang/az_az.orth
new file mode 100644
index 00000000000..3c96715725e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/az_az.orth
@@ -0,0 +1,53 @@
+#
+# fontconfig/fc-lang/az_az.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER 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 Azerbaijan (az-AZ)
+#
+# The complete orthography was from http://www.evertype.com
+#
+# This had been verified with the latin and cyrillic orthographies found at
+# http://www.eki.ee/letter
+#
+# Cyrillic was removed because the switch to Latin is almost finished.
+# The letter “ä†is also deprecated and replaced with “ə†since 1992.
+#
+0041-005a
+0061-007a
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00E7 # LATIN SMALL LETTER C WITH CEDILLA
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+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
+018F # LATIN CAPITAL LETTER SCHWA
+0259 # LATIN SMALL LETTER SCHWA
+#02BC # MODIFIER LETTER APOSTROPHE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/az_ir.orth b/chromium/third_party/fontconfig/src/fc-lang/az_ir.orth
new file mode 100644
index 00000000000..1a5aea9a7ba
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/az_ir.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/az_ir.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Azerbaijani in Iran (AZ-IR)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE
+# (only used over FARSI YEH).
+#
+include fa.orth
+0654 # ARABIC HAMZA ABOVE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ba.orth b/chromium/third_party/fontconfig/src/fc-lang/ba.orth
new file mode 100644
index 00000000000..9c91dda6c2b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ba.orth
@@ -0,0 +1,56 @@
+#
+# fontconfig/fc-lang/ba.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bashkir (BA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00AA # FEMININE ORDINAL INDICATOR
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com
+#0451 # CYRILLIC SMALL LETTER IO in evertype.com
+
+0410-044f # CYRILLIC
+0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
+0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1 # CYRILLIC SMALL LETTER BASHKIR KA
+04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AE # CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF # CYRILLIC SMALL LETTER STRAIGHT U
+04BA # CYRILLIC CAPITAL LETTER SHHA
+04BB # CYRILLIC SMALL LETTER SHHA
+04D8 # CYRILLIC CAPITAL LETTER SCHWA
+04D9 # CYRILLIC SMALL LETTER SCHWA
+04E8 # CYRILLIC CAPITAL LETTER BARRED O
+04E9 # CYRILLIC SMALL LETTER BARRED O
+#2018-2019 # single quotes
+#201c-201d # double quotes
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/be.orth b/chromium/third_party/fontconfig/src/fc-lang/be.orth
new file mode 100644
index 00000000000..1bf5e32348f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/be.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/be.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Byelorussian (BE)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#02BC # MODIFIER LETTER APOSTROPHE
+#0401 # CYRILLIC CAPITAL LETTER IO evertype.com
+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+0410-044f
+#0451 # CYRILLIC SMALL LETTER IO evertype.com
+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ber_dz.orth b/chromium/third_party/fontconfig/src/fc-lang/ber_dz.orth
new file mode 100644
index 00000000000..bfd20f7deb8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ber_dz.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/ber_dz.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Berber in Algeria (ber-DZ)
+#
+# Algerian Berber is usually Kabyle
+include kab.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ber_ma.orth b/chromium/third_party/fontconfig/src/fc-lang/ber_ma.orth
new file mode 100644
index 00000000000..3e63e91f663
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ber_ma.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/ber_ma.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Berber in Morocco (ber-MA)
+#
+# Tifinagh is the official script for Berber language(s) in Morocco.
+# The character list comes from Institut Royal de la Culture Amazighe (IRCAM).
+# Sources:
+# http://www.omniglot.com/writing/tifinagh.htm
+# http://www.win.tue.nl/~aeb/natlang/berber/tifinagh/tifinagh.html
+2D30-2D31
+2D33
+2D37
+2D39
+2D3B-2D3D
+2D40
+2D43-2D45
+2D47
+2D49-2D4A
+2D4D-2D4F
+2D53-2D56
+2D59-2D5C
+2D5F
+2D61-2D63
+2D65
+2D6F
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bg.orth b/chromium/third_party/fontconfig/src/fc-lang/bg.orth
new file mode 100644
index 00000000000..c947490f097
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bg.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/bg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bulgarian (BG)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com
+#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com
+0410-042a
+042c
+042e-042f
+0430-044a
+044c
+044e-044f
+#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com
+#045d # CYRILLIC SMALL I WITH GRAVE evertype.com
+#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com
+#0463 # CYRILLIC SMALL LETTER YAT evertype.com
+#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com
+#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bh.orth b/chromium/third_party/fontconfig/src/fc-lang/bh.orth
new file mode 100644
index 00000000000..2dd749cb432
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bh.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/bh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bihari (Devanagari script) (BH)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bho.orth b/chromium/third_party/fontconfig/src/fc-lang/bho.orth
new file mode 100644
index 00000000000..b5e34d85125
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bho.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/bho.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bhojpuri (Devanagari script) (BHO)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bi.orth b/chromium/third_party/fontconfig/src/fc-lang/bi.orth
new file mode 100644
index 00000000000..521d5298137
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bi.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/bi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bislama (BI)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c9
+00e9
+00cf
+00ef
+#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code)
+#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code)
+#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code)
+#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code)
+00dc
+00fc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bin.orth b/chromium/third_party/fontconfig/src/fc-lang/bin.orth
new file mode 100644
index 00000000000..b9db3a1824e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bin.orth
@@ -0,0 +1,55 @@
+#
+# fontconfig/fc-lang/bin.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Edo or Bini (BIN)
+#
+# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CC # LATIN CAPITAL LETTER I WITH GRAVE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00EC # LATIN SMALL LETTER I WITH GRAVE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F2 # LATIN SMALL LETTER O WITH GRAVE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
+1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD # LATIN SMALL LETTER O WITH DOT BELOW
+0300 # COMBINING GRAVE ACCENT (Varia)
+0301 # COMBINING ACUTE ACCENT (Oxia, Tonos)
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bm.orth b/chromium/third_party/fontconfig/src/fc-lang/bm.orth
new file mode 100644
index 00000000000..fca67e86e2c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bm.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/bm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bambara (bm)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0190
+025b
+014a
+014b
+019d
+0272
+0186
+0254
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bn.orth b/chromium/third_party/fontconfig/src/fc-lang/bn.orth
new file mode 100644
index 00000000000..151ced25bfb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bn.orth
@@ -0,0 +1,44 @@
+#
+# fontconfig/fc-lang/bn.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bengali (bn)
+#
+# Source: Unicode coverage and notes for Bengali script, Unicode internal
+# documents
+0981-0983
+0985-098c
+098f-0990
+0993-09a8
+09aa-09b0
+09b2
+09b6-09b9
+09bc
+09be-09c4
+09c7-09c8
+09cb-09cd
+# 09d7 # Only used as a part of U+09CC
+09dc-09dd
+09df
+# 09e0-09e3 # These are for Sanskrit
+# 09f0-09f1 # These are for Assamese
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bo.orth b/chromium/third_party/fontconfig/src/fc-lang/bo.orth
new file mode 100644
index 00000000000..a347759c5cb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bo.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/bo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tibetan (BO)
+#
+# Taken from the Unicode coverage of this language
+#
+0f40-0f47
+0f49-0f69
+0f71-0f76
+0f78
+0f7a-0f7d
+0f80-0f81
+0f90-0f97
+0f99-0fb9
+# Fixed-form subjoined consonants
+# These characters are used only for transliteration and transcription.
+#0fba-0fbc
+
diff --git a/chromium/third_party/fontconfig/src/fc-lang/br.orth b/chromium/third_party/fontconfig/src/fc-lang/br.orth
new file mode 100644
index 00000000000..9d126ab5969
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/br.orth
@@ -0,0 +1,47 @@
+#
+# fontconfig/fc-lang/br.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Breton (BR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#0027
+0041-005a
+0061-007a
+#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#2019-201a # single quote and comma
diff --git a/chromium/third_party/fontconfig/src/fc-lang/brx.orth b/chromium/third_party/fontconfig/src/fc-lang/brx.orth
new file mode 100644
index 00000000000..eab20462a3c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/brx.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/brx.orth
+#
+# Copyright © 2012 Parag Nemade
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Keith Packard makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bodo (Devanagari script) (brx)
+#
+# Source: Enhanced inscript: http://pune.cdac.in/html/gist/down/inscript_d.asp
+# Or
+# Source: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 44
+#
+0901-0903 # Various Signs
+0905-090c # Independent vowels
+090f-0910 # Independent vowels
+0913-0914 # Independent vowels
+0915-0928 # Consonants
+092a-0930 # Consonants
+0932-0932 # Consonants
+0935-0939 # Consonants
+093c-0944 # Various and Dependent vowel signs
+0947-0948 # Dependent vowel signs
+094b-094d # Dependent vowel signs and virama
+0950-0952 # Sign and vedic tone marks
+0960-0963 # Additional vowels
+0964-0965 # Punctuations
+0966-096F # Digits
+0970 # Abbrevation sign
+
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bs.orth b/chromium/third_party/fontconfig/src/fc-lang/bs.orth
new file mode 100644
index 00000000000..3ef93090845
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bs.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/bs.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Bosnian (BS)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0106
+0107
+010c
+010d
+0110
+0111
+0160
+0161
+017d
+017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/bua.orth b/chromium/third_party/fontconfig/src/fc-lang/bua.orth
new file mode 100644
index 00000000000..8618310f3e6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/bua.orth
@@ -0,0 +1,102 @@
+#
+# fontconfig/fc-lang/bua.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Buriat (Buryat) (BUA)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+04ae
+04af
+04ba
+04bb
diff --git a/chromium/third_party/fontconfig/src/fc-lang/byn.orth b/chromium/third_party/fontconfig/src/fc-lang/byn.orth
new file mode 100644
index 00000000000..539feebc1e9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/byn.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/byn.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Blin/Bilin (byn)
+#
+# Copying Tigrinya of Eritrea, as does glibc
+include ti_er.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ca.orth b/chromium/third_party/fontconfig/src/fc-lang/ca.orth
new file mode 100644
index 00000000000..3436ab99584
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ca.orth
@@ -0,0 +1,58 @@
+#
+# fontconfig/fc-lang/ca.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Catalan (CA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00B7 # MIDDLE DOT
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee
+00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E7 # LATIN SMALL LETTER C WITH CEDILLA
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee
+00F2 # LATIN SMALL LETTER O WITH GRAVE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ce.orth b/chromium/third_party/fontconfig/src/fc-lang/ce.orth
new file mode 100644
index 00000000000..fb9785a2e55
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ce.orth
@@ -0,0 +1,97 @@
+#
+# fontconfig/fc-lang/ce.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Chechen (CE)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ch.orth b/chromium/third_party/fontconfig/src/fc-lang/ch.orth
new file mode 100644
index 00000000000..8e8ac6fb33f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ch.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/ch.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chamorro (CH)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00e2
+00d1
+00f1
+00dc
+00fc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/chm.orth b/chromium/third_party/fontconfig/src/fc-lang/chm.orth
new file mode 100644
index 00000000000..3ff7d3b243a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/chm.orth
@@ -0,0 +1,109 @@
+#
+# fontconfig/fc-lang/chm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Mari (Lower Cheremis / Upper Cheremis) (CHM)
+#
+# I've merged both of these languages together so that a font
+# for 'chm' will cover both orthographies
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+04a4
+04a5
+04d2
+04d3
+04e6
+04e7
+04f0
+04f1
+04f8
+04f9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/chr.orth b/chromium/third_party/fontconfig/src/fc-lang/chr.orth
new file mode 100644
index 00000000000..22972613d02
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/chr.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/chr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Cherokee (chr)
+13a0-13f4
diff --git a/chromium/third_party/fontconfig/src/fc-lang/co.orth b/chromium/third_party/fontconfig/src/fc-lang/co.orth
new file mode 100644
index 00000000000..4c67f755fa0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/co.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/co.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Corsican (CO)
+include fr.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/crh.orth b/chromium/third_party/fontconfig/src/fc-lang/crh.orth
new file mode 100644
index 00000000000..4e4a9860b71
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/crh.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/crh.orth
+#
+# Copyright © 2009 Roozbeh Pournader
+# Copyright © 2009 Reşat SABIQ
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Crimean Tatar/Crimean Turkish (crh)
+#
+# Sources:
+# * http://www.omniglot.com/writing/crimeantatar.php
+# * http://en.wikipedia.org/wiki/Crimean_Tatar_language
+# * http://www.vatankirim.net/yazi.asp?yaziNo=31
+#
+0041-005A
+0061-007A
+00C2
+00C7
+00D1
+00D6
+00DC
+00E2
+00E7
+00F1
+00F6
+00FC
+011E-011F
+0130-0131
+015E-015F
diff --git a/chromium/third_party/fontconfig/src/fc-lang/cs.orth b/chromium/third_party/fontconfig/src/fc-lang/cs.orth
new file mode 100644
index 00000000000..3c03e80d22a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/cs.orth
@@ -0,0 +1,67 @@
+#
+# fontconfig/fc-lang/cs.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Czech (CS)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+010C # LATIN CAPITAL LETTER C WITH CARON
+010D # LATIN SMALL LETTER C WITH CARON
+010E # LATIN CAPITAL LETTER D WITH CARON
+010F # LATIN SMALL LETTER D WITH CARON
+011A # LATIN CAPITAL LETTER E WITH CARON
+011B # LATIN SMALL LETTER E WITH CARON
+0147 # LATIN CAPITAL LETTER N WITH CARON
+0148 # LATIN SMALL LETTER N WITH CARON
+0158 # LATIN CAPITAL LETTER R WITH CARON
+0159 # LATIN SMALL LETTER R WITH CARON
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+0164 # LATIN CAPITAL LETTER T WITH CARON
+0165 # LATIN SMALL LETTER T WITH CARON
+016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+016F # LATIN SMALL LETTER U WITH RING ABOVE
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
diff --git a/chromium/third_party/fontconfig/src/fc-lang/csb.orth b/chromium/third_party/fontconfig/src/fc-lang/csb.orth
new file mode 100644
index 00000000000..4f69fff5255
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/csb.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/csb.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kashubian (CSB)
+#
+# Sources:
+# http://www.omniglot.com/writing/kashubian.htm
+# http://www.evertype.com/alphabets/kashubian.pdf
+#
+0041-005A
+0061-007A
+00C3
+00C9
+00CB
+00D2-00D4
+00D9
+00E3
+00E9
+00EB
+00F2-00F4
+00F9
+0104-0105
+#0118-0119 # E with ogonek - only in evertype
+0141-0144
+#015A-015B # S with acute - only in evertype
+017B-017C
diff --git a/chromium/third_party/fontconfig/src/fc-lang/cu.orth b/chromium/third_party/fontconfig/src/fc-lang/cu.orth
new file mode 100644
index 00000000000..f4f51277810
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/cu.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/cu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Old Church Slavonic (CU)
+#
+# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf
+#
+0401-0402
+0405-0406
+0408
+040b
+040d
+040f-0418
+041a-042c
+042e-044c
+044e-0450
+0452
+0455-456
+0458
+045b
+045d
+045f-0479
diff --git a/chromium/third_party/fontconfig/src/fc-lang/cv.orth b/chromium/third_party/fontconfig/src/fc-lang/cv.orth
new file mode 100644
index 00000000000..58c739b2343
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/cv.orth
@@ -0,0 +1,109 @@
+#
+# fontconfig/fc-lang/cv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Chuvash (CV)
+#
+#
+# I'm guessing the c cedilla is really es with descender
+#
+#00c7 # C cedilla
+#00e7 # c cedilla
+04aa # capital es with descender
+04ab # small es with descender
+0102
+0103
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+04d6
+04d7
+04f2
+04f3
diff --git a/chromium/third_party/fontconfig/src/fc-lang/cy.orth b/chromium/third_party/fontconfig/src/fc-lang/cy.orth
new file mode 100644
index 00000000000..7d1b8a4db37
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/cy.orth
@@ -0,0 +1,63 @@
+#
+# fontconfig/fc-lang/cy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Welsh (CY)
+#
+# Coverage given by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
+# and separately by Jessica Perry Hekman <jphekman@arborius.net>
+# with help from Mark Kille and Jerry Hunter.
+#
+0041-005a
+0061-007a
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+#
+# Non-Latin-1 characters needed for Welsh:
+#
+0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+#
+# And stricktly speaking for dictionary authors also:
+#
+1E80 # LATIN CAPITAL LETTER W WITH GRAVE
+1E81 # LATIN SMALL LETTER W WITH GRAVE
+1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+1E83 # LATIN SMALL LETTER W WITH ACUTE
+1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85 # LATIN SMALL LETTER W WITH DIAERESIS
+1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3 # LATIN SMALL LETTER Y WITH GRAVE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/da.orth b/chromium/third_party/fontconfig/src/fc-lang/da.orth
new file mode 100644
index 00000000000..a10ac7370e0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/da.orth
@@ -0,0 +1,89 @@
+#
+# fontconfig/fc-lang/da.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Danish (DA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+# Note:
+# The sources cited at www.evertype.com appear to have unified
+# all of the nordic languages making the orthography significantly
+# larger than needed for Danish. The orthography used here is
+# just that from eki.ee with the evertype.com additions commented out
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+#00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+#00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8 # LATIN CAPITAL LETTER O WITH STROKE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+#00DE # LATIN CAPITAL LETTER THORN (Icelandic)
+#00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+00E6 # LATIN SMALL LETTER AE (ash) *
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA
+#00E8 # LATIN SMALL LETTER E WITH GRAVE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+#00EB # LATIN SMALL LETTER E WITH DIAERESIS
+00ED # LATIN SMALL LETTER I WITH ACUTE
+#00F0 # LATIN SMALL LETTER ETH (Icelandic)
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00F8 # LATIN SMALL LETTER O WITH STROKE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+#00FE # LATIN SMALL LETTER THORN (Icelandic)
+#0152 # LATIN CAPITAL LIGATURE OE
+#0153 # LATIN SMALL LIGATURE OE
+#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
+#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) *
+#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/de.orth b/chromium/third_party/fontconfig/src/fc-lang/de.orth
new file mode 100644
index 00000000000..63a2eebf4b5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/de.orth
@@ -0,0 +1,49 @@
+#
+# fontconfig/fc-lang/de.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# German (DE)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DF # LATIN SMALL LETTER SHARP S (German)
+#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#2018 # single quotes
+#201a # single quotes
+#201c # double quotes
+#201e # double quotes
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/doi.orth b/chromium/third_party/fontconfig/src/fc-lang/doi.orth
new file mode 100644
index 00000000000..d4a274af9ef
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/doi.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/doi.orth
+#
+# Copyright © 2012 Pravin Satpute <psatpute@redhat.com>
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dogri (doi)
+#
+# Source: Enhanced inscript: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 58
+# Encircled these characters in Unicode chart: http://pravins.fedorapeople.org/Dogri-characters.pdf
+# documents
+0902-0903
+0905-090c
+090f-0910
+0913-0928
+092a-0930
+0932
+0935-0939
+093c-0944
+0947-0948
+094b-094d
+0950-0952
+095b-096f
diff --git a/chromium/third_party/fontconfig/src/fc-lang/dv.orth b/chromium/third_party/fontconfig/src/fc-lang/dv.orth
new file mode 100644
index 00000000000..289358480de
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/dv.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/dv.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Divehi/Dhivehi/Maldivian (dv)
+#
+# Sources:
+# * The Unicode standard
+# * http://www.omniglot.com/writing/thaana.htm
+# * http://en.wikipedia.org/wiki/T%C4%81na
+#
+0780-0797 # main consonants
+0798-07A5 # consonants used for loanwords
+07A6-07B0 # vowels
+#07B1 # used only in dialectic or historic Divehi
diff --git a/chromium/third_party/fontconfig/src/fc-lang/dz.orth b/chromium/third_party/fontconfig/src/fc-lang/dz.orth
new file mode 100644
index 00000000000..0d530657298
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/dz.orth
@@ -0,0 +1,28 @@
+#
+# fontconfig/fc-lang/dz.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dzongkha (DZ)
+#
+# Uses Tibetan script
+#
+include bo.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ee.orth b/chromium/third_party/fontconfig/src/fc-lang/ee.orth
new file mode 100644
index 00000000000..089c47e30d4
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ee.orth
@@ -0,0 +1,77 @@
+#
+# fontconfig/fc-lang/ee.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ewe (ee)
+#
+# Sources:
+# * http://www.uni-koeln.de/phil-fak/afrikanistik/down/publikationen/basic_ewe.pdf
+# * http://en.wikipedia.org/wiki/Ewe_language
+# * http://www.omniglot.com/writing/ewe.htm
+# * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Gbe
+#
+# We amend the main alphabet with tone marks over each vowel, but some
+# combinations lack precomposed forms in Unicode, so we also add indiviual
+# combining marks.
+#
+# Sources also differ on the notation used for the fourth tone: circumflex
+# vs combining line above (U+030D). At the moment, we are not including any
+# of the two.
+#
+# There is also a nasalization mark for vowels (combining tilde), but there
+# is a need for more research to find which vowels it's used with. The
+# combination of nasalization and tones may also exist, resulting in double
+# accents.
+#
+# C, J, and Q are not used.
+#
+0041-005A
+0061-007A
+00C0-00C1
+00C8-00C9
+00CC-00CD
+00D2-00D3
+00D9-00DA
+00E0-00E1
+00E8-00E9
+00EC-00ED
+00F2-00F3
+00F9-00FA
+011A-011B
+014A-014B
+0186
+0189
+# 018A # according to Unicode characters notes for U+0257
+0190-0192
+0194
+01B2
+01CD-01D4
+0254
+0256
+# 0257 # according to Unicode character notes
+025B
+0263
+028B
+0300-0301 # to be used with open e and open o
+# 0303 # combining tilde
+030C # to be used with open e and open o
+# 030D # combining vertical line above
diff --git a/chromium/third_party/fontconfig/src/fc-lang/el.orth b/chromium/third_party/fontconfig/src/fc-lang/el.orth
new file mode 100644
index 00000000000..460d7407479
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/el.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/el.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Greek (EL)
+#
+# From vvas@hal.csd.auth.gr (Vasilis Vasaitis)
+#
+0386
+0388-038a
+038c
+038e-03a1
+03a3-03ce
diff --git a/chromium/third_party/fontconfig/src/fc-lang/en.orth b/chromium/third_party/fontconfig/src/fc-lang/en.orth
new file mode 100644
index 00000000000..94e74dbcf36
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/en.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/en.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# English (EN)
+0041-005a
+0061-007a
+00c0
+00c7-00cb
+00cf
+00d1
+00d4
+00d6
+00e0
+00e7-00eb
+00ef
+00f1
+00f4
+00f6
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/eo.orth b/chromium/third_party/fontconfig/src/fc-lang/eo.orth
new file mode 100644
index 00000000000..65351c82929
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/eo.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/eo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Esperanto (EO)
+0041-005a
+0061-007a
+0108-0109
+011c-011d
+0124-0125
+0134-0135
+015c-015d
+016c-016d
diff --git a/chromium/third_party/fontconfig/src/fc-lang/es.orth b/chromium/third_party/fontconfig/src/fc-lang/es.orth
new file mode 100644
index 00000000000..b9db47bac04
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/es.orth
@@ -0,0 +1,50 @@
+#
+# fontconfig/fc-lang/es.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Spanish (ES)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00A1 # INVERTED EXCLAMATION MARK
+#00BF # INVERTED QUESTION MARK
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+#
diff --git a/chromium/third_party/fontconfig/src/fc-lang/et.orth b/chromium/third_party/fontconfig/src/fc-lang/et.orth
new file mode 100644
index 00000000000..16c3684c50c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/et.orth
@@ -0,0 +1,47 @@
+#
+# fontconfig/fc-lang/et.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Estonian (ET)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00D5 # LATIN CAPITAL LETTER O WITH TILDE
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00F5 # LATIN SMALL LETTER O WITH TILDE
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
+#2018 # # single quote
+#201a # # single quote
+#201c # # double quote
+#201e # # double quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/eu.orth b/chromium/third_party/fontconfig/src/fc-lang/eu.orth
new file mode 100644
index 00000000000..ab7b9070e45
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/eu.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/eu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Basque (EU)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# The orthography from evertype.com comes from the Académie de la Langue
+# Basque prior to 1926. eki.ee adds some additional letters, marked here
+# and commented out. I've also commented out some older letters
+# from the evertype.com orthography which are (apparently) no longer
+# in use
+#
+0041-005a
+0061-007a
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee
+00D1 LATIN CAPITAL LETTER N WITH TILDE
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee
+00F1 LATIN SMALL LETTER N WITH TILDE
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com
+#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fa.orth b/chromium/third_party/fontconfig/src/fc-lang/fa.orth
new file mode 100644
index 00000000000..6e680f2d291
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fa.orth
@@ -0,0 +1,73 @@
+#
+# fontconfig/fc-lang/fa.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Persian (fa)
+#
+# Sources:
+# * ISIRI 6219:2002, "Information Technology — Persian Information
+# Interchange and Display Mechanism, using Unicode"
+# * "Dastur-e Khat-te FÄrsi", Iranian Academy of Persian Language and
+# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available
+# at http://www.persianacademy.ir/fa/das.aspx
+#
+# We are assuming that:
+# * Most fonts that claim to support an Arabic letter actually do so;
+# * Most modern text rendering software use OpenType tables, instead of
+# directly using presentation forms.
+# * Some good Arabic fonts do not support codepoints for Arabic presentation
+# forms.
+# Thus, we are switching to general forms of Arabic letters.
+#
+# General forms:
+0621-0624
+0626-0628
+0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography
+062a-063a
+0641-0642
+0644-0648
+064b # FATHATAN, considered mandatory in the official orthography
+# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare
+# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography
+# 0651 # SHADDA, considered mandatory only for legal texts
+# 0652 # SUKUN, not mandatory in the official orthography
+0654 # HAMZA ABOVE, considered mandatory in the official orthography
+# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used
+# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory
+067e
+0686
+0698
+06a9
+06af
+06cc
+# Presentations forms:
+#fb56-fb59
+#fb7a-fb7d
+#fb8a-fb8b
+#fb8e-fb95
+#fbfc-fbff
+#fe80-fe86
+#fe89-fed8
+#fedd-feee
+##fef5-fef8 # These four happen very rarely
+#fefb-fefc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fat.orth b/chromium/third_party/fontconfig/src/fc-lang/fat.orth
new file mode 100644
index 00000000000..f3cba103687
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fat.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/fat.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Fanti (fat)
+#
+# According to ISO 639-3, Akan is a macro-language of Twi and Fanti.
+# Information on the web indicates Twi and Fanti now have a unified
+# orthography. We include Twi.
+#
+include tw.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fc-lang.c b/chromium/third_party/fontconfig/src/fc-lang/fc-lang.c
new file mode 100644
index 00000000000..0f4217f78f5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fc-lang.c
@@ -0,0 +1,587 @@
+/*
+ * 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
+ */
+
+FcPrivate void
+FcCacheObjectReference (void *object FC_UNUSED)
+{
+}
+
+FcPrivate void
+FcCacheObjectDereference (void *object FC_UNUSED)
+{
+}
+
+FcPrivate FcChar8 *
+FcLangNormalize (const FcChar8 *lang FC_UNUSED)
+{
+ return NULL;
+}
+
+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)))
+
+int
+main (int argc FC_UNUSED, 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/chromium/third_party/fontconfig/src/fc-lang/fc-lang.man b/chromium/third_party/fontconfig/src/fc-lang/fc-lang.man
new file mode 100644
index 00000000000..f520c51154d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fc-lang.man
@@ -0,0 +1,39 @@
+.\"
+.\" Copyright © 2002 Keith Packard
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software and its
+.\" documentation for any purpose is hereby granted without fee, provided that
+.\" the above copyright notice appear in all copies and that both that
+.\" copyright notice and this permission notice appear in supporting
+.\" documentation, and that the name of the author(s) not be used in
+.\" advertising or publicity pertaining to distribution of the software without
+.\" specific, written prior permission. The authors make no
+.\" representations about the suitability of this software for any purpose. It
+.\" is provided "as is" without express or implied warranty.
+.\"
+.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+.\" PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\"
+.\" fontconfig/fc-lang/fc-lang.man
+.\"
+.TH FC-LANG 1 __vendorversion__
+.SH NAME
+fc-lang, fclang.h \- create an database of language orthographies
+.SH SYNOPSIS
+.B "fc-lang"
+.RI [ language-coverage
+\|.\|.\|. ]
+.SH DESCRIPTION
+.I Fc-lang
+builds the fclang.h file used in the fontconfig library to automatically
+determine language coverage for fonts which don't contain this information.
+.SH FILES
+.TP 15
+.B fclang.tmpl.h
+The template file in which the tables are inserted
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fclang.tmpl.h b/chromium/third_party/fontconfig/src/fc-lang/fclang.tmpl.h
new file mode 100644
index 00000000000..605614870f3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fclang.tmpl.h
@@ -0,0 +1,25 @@
+/*
+ * fontconfig/fc-lang/fclang.tmpl.h
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+@@@
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ff.orth b/chromium/third_party/fontconfig/src/fc-lang/ff.orth
new file mode 100644
index 00000000000..bed81aeed2e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ff.orth
@@ -0,0 +1,38 @@
+#
+# fontconfig/fc-lang/ff.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Fulah (Fula) (ff)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0181
+0253
+018a
+0257
+014a
+014b
+019d
+0272
+01b3-01b4
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fi.orth b/chromium/third_party/fontconfig/src/fc-lang/fi.orth
new file mode 100644
index 00000000000..c0e19d99ee8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fi.orth
@@ -0,0 +1,51 @@
+#
+# fontconfig/fc-lang/fi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Finnish (FI)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com
+#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com
+#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+0160 # LATIN CAPITAL LETTER S WITH CARON
+0161 # LATIN SMALL LETTER S WITH CARON
+017D # LATIN CAPITAL LETTER Z WITH CARON
+017E # LATIN SMALL LETTER Z WITH CARON
+#2019 # single quote
+#201d # double quote
+#203a # angle quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fil.orth b/chromium/third_party/fontconfig/src/fc-lang/fil.orth
new file mode 100644
index 00000000000..0f2719522a8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fil.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/fil.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Filipino (fil)
+#
+# Sources:
+# * Paul Morrow, "A Brief Guide to Filipino Pronunciation",
+# http://www.mts.net/~pmorrow/filpro.htm
+# * Komisyon sa Wikang Filipino, "Ang Ortograpiya ng Wikang Pambansa",
+# http://wika.pbwiki.com/f/ORTOPDF.pdf (in Filipino)
+# * CLDR exemplar set for Filipino:
+# http://unicode.org/cldr/data/common/main/fil.xml
+#
+0041-005A
+0061-007A
+00C0-00C2
+00C8-00CA
+00CC-00CE
+00D1-00D4
+00D9-00DB
+00E0-00E2
+00E8-00EA
+00EC-00EE
+00F1-00F4
+00F9-00FB
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fj.orth b/chromium/third_party/fontconfig/src/fc-lang/fj.orth
new file mode 100644
index 00000000000..07f2f518dc8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fj.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/fj.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Fijian (KW)
+#
+# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html
+#
+# There may be diacritical marks used, but I couldn't find any information
+# about them, nor any Fijian text using them.
+#
+# Fijian doesn't use h, x, z and uses f, j and p in loan words
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fo.orth b/chromium/third_party/fontconfig/src/fc-lang/fo.orth
new file mode 100644
index 00000000000..d4b055b3640
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fo.orth
@@ -0,0 +1,59 @@
+#
+# fontconfig/fc-lang/fo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Faroese (FO)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
+00D8 # LATIN CAPITAL LETTER O WITH STROKE
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
+00E6 # LATIN SMALL LETTER AE (ash) *
+00ED # LATIN SMALL LETTER I WITH ACUTE
+00F0 # LATIN SMALL LETTER ETH (Icelandic)
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
+00F8 # LATIN SMALL LETTER O WITH STROKE
+00FA # LATIN SMALL LETTER U WITH ACUTE
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00FD # LATIN SMALL LETTER Y WITH ACUTE
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fr.orth b/chromium/third_party/fontconfig/src/fc-lang/fr.orth
new file mode 100644
index 00000000000..6e88ff92720
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fr.orth
@@ -0,0 +1,58 @@
+#
+# fontconfig/fc-lang/fr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# French (FR)
+0041-005a
+0061-007a
+00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00E0 # LATIN SMALL LETTER A WITH GRAVE
+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+00E7 # LATIN SMALL LETTER C WITH CEDILLA
+00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+00E8 # LATIN SMALL LETTER E WITH GRAVE
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+00EB # LATIN SMALL LETTER E WITH DIAERESIS
+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+00EF # LATIN SMALL LETTER I WITH DIAERESIS
+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0152 # LATIN CAPITAL LIGATURE OE
+0153 # LATIN SMALL LIGATURE OE
+00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+00F9 # LATIN SMALL LETTER U WITH GRAVE
+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+00C6 # LATIN CAPITAL LETTER AE (ash) *
+00E6 # LATIN SMALL LETTER AE (ash) *
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fur.orth b/chromium/third_party/fontconfig/src/fc-lang/fur.orth
new file mode 100644
index 00000000000..bf47ccd4414
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fur.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/fur.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Friulian (FUR)
+#
+# Orthography from http://www.evertype.com/alphabets/friulian.pdf
+#
+0041-005a
+0061-007a
+00c0-00c2
+00c8
+00cc
+00d2
+00d9
+00e0-00e2
+00e8
+00ec
+00f2
+00f9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/fy.orth b/chromium/third_party/fontconfig/src/fc-lang/fy.orth
new file mode 100644
index 00000000000..b75112e6272
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/fy.orth
@@ -0,0 +1,61 @@
+#
+# fontconfig/fc-lang/fy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Frisian (FY)
+#
+# West Frisian orthography from
+# http://www.evertype.com/alphabets/west-frisian.pdf
+#
+#
+# Checked with orthography from eki.ee/letter which include
+# a few others (commented out here).
+#
+# Added in ß from German orthography
+#
+0041-005a
+0061-007a
+00c2
+00c4
+00c9
+00ca
+00cb
+#00ce # eki.ee
+00cf
+00d4
+00d6
+00da
+00db
+00dc
+00df
+00e2
+00e4
+00e9
+00ea
+00eb
+#00ee # eki.ee
+00ef
+00f4
+00f6
+00fa
+00fb
+00fc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ga.orth b/chromium/third_party/fontconfig/src/fc-lang/ga.orth
new file mode 100644
index 00000000000..57fa7f5d396
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ga.orth
@@ -0,0 +1,84 @@
+#
+# fontconfig/fc-lang/ga.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Irish (GA)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# The orthography from evertype.com includes the lenited consonants
+# as indicated with seimhiu (dot above). I've included those here
+# even though they're not present in the orthography listed from eki.ee;
+# eki.ee mentions that the seimhiu form is still written but is
+# often written by a following h instead.
+#
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
+00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com
+#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com
+00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com
+00CD # LATIN CAPITAL LETTER I WITH ACUTE
+#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com
+00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com
+00DA # LATIN CAPITAL LETTER U WITH ACUTE
+#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
+00E1 # LATIN SMALL LETTER A WITH ACUTE
+#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com
+#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com
+00E9 # LATIN SMALL LETTER E WITH ACUTE
+#00EC # LATIN SMALL LETTER I WITH GRAVE
+00ED # LATIN SMALL LETTER I WITH ACUTE
+#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com
+00F3 # LATIN SMALL LETTER O WITH ACUTE
+#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com
+00FA # LATIN SMALL LETTER U WITH ACUTE
+010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B # LATIN SMALL LETTER C WITH DOT ABOVE
+0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+#017F # LATIN SMALL LETTER LONG S evertype.com
+#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com
+1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com
+#1680-169c # Ogham
+#2018-2019 # single quotes
+#201c-201d # double quotes
+#204a # tironian sign et
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gd.orth b/chromium/third_party/fontconfig/src/fc-lang/gd.orth
new file mode 100644
index 00000000000..035a3df049a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gd.orth
@@ -0,0 +1,51 @@
+#
+# fontconfig/fc-lang/gd.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Scots Gaelic (GD)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c7
+00c8
+00c9
+00cc
+00d2
+00d3
+00d9
+00e0
+00e1
+00e7
+00e8
+00e9
+00ec
+00f2
+00f3
+00f9
+#2018-2019 # single quotes
+#201c-201d # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gez.orth b/chromium/third_party/fontconfig/src/fc-lang/gez.orth
new file mode 100644
index 00000000000..70c369485e0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gez.orth
@@ -0,0 +1,60 @@
+#
+# fontconfig/fc-lang/gez.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ethiopic (Geez) (eth)
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-1226 # me-`so, skip `sWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1260-1267 # be-bWa
+1270-1277 # te-to
+1280-1286 # `he-`ho
+1288 # hWe
+128a-128d # hWi-hW
+1290-1297 # ne-nWa
+12a0-12a7 # a-o, skip ea
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12df # ze-zWa
+12e8-12ee # ye-yo
+12f0-12f7 # de-dWa
+1308-130e # ge-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-1328 # Te-TWa
+1330-1346 # Pe-`So
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+#1361-1368 # punctuation
+#1369-1371 # digits
+#1372-137c # numbers
+#
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gl.orth b/chromium/third_party/fontconfig/src/fc-lang/gl.orth
new file mode 100644
index 00000000000..5617088a3d4
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gl.orth
@@ -0,0 +1,50 @@
+#
+# fontconfig/fc-lang/gl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Galician (GL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00a1
+#00ab
+#00bb
+#00bf
+00c1
+00c9
+00cd
+00d1
+00d3
+00da
+00dc
+00e1
+00e9
+00ed
+00f1
+00f3
+00fa
+00fc
+#2019-201a # single qutoes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gn.orth b/chromium/third_party/fontconfig/src/fc-lang/gn.orth
new file mode 100644
index 00000000000..644ab93308f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gn.orth
@@ -0,0 +1,48 @@
+#
+# fontconfig/fc-lang/gn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Guaraní (GN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00e3
+00c9
+00e9
+1ebd
+#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS)
+00cd
+00ed
+0129
+00d1
+00f1
+00d3
+00f3
+00f5
+00da
+00fa
+0169
+1ef9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gu.orth b/chromium/third_party/fontconfig/src/fc-lang/gu.orth
new file mode 100644
index 00000000000..5e556ce129e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gu.orth
@@ -0,0 +1,41 @@
+#
+# fontconfig/fc-lang/gu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Gujarati (gu)
+#
+# Taken from the Unicode coverage of this language
+#
+0a81-0a83
+0a85-0a8b
+0a8d
+0a8f-0a91
+0a93-0aa8
+0aaa-0ab0
+0ab2-0ab3
+0ab5-0ab9
+0abc-0ac5
+0ac7-0ac9
+0acb-0acd
+0ad0
+0ae0
+#0ae6-0aef # Digits
diff --git a/chromium/third_party/fontconfig/src/fc-lang/gv.orth b/chromium/third_party/fontconfig/src/fc-lang/gv.orth
new file mode 100644
index 00000000000..3d44e80a859
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/gv.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/gv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Manx Gaelic (GV)
+#
+# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf
+#
+0041-005a
+0061-007a
+00c7
+00e7
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ha.orth b/chromium/third_party/fontconfig/src/fc-lang/ha.orth
new file mode 100644
index 00000000000..3a3d286709d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ha.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/ha.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hausa (HA)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0181
+0253
+018a
+0257
+0198-0199
+01b3 # used in Niger
+01b4 # used in Niger
diff --git a/chromium/third_party/fontconfig/src/fc-lang/haw.orth b/chromium/third_party/fontconfig/src/fc-lang/haw.orth
new file mode 100644
index 00000000000..cdd24477a9f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/haw.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/haw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hawaiian (HAW)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+02bb
diff --git a/chromium/third_party/fontconfig/src/fc-lang/he.orth b/chromium/third_party/fontconfig/src/fc-lang/he.orth
new file mode 100644
index 00000000000..756c191b27a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/he.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/he.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hebrew (HE)
+05d0-05ea
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hi.orth b/chromium/third_party/fontconfig/src/fc-lang/hi.orth
new file mode 100644
index 00000000000..3d18da5b8d6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hi.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/hi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hindi (Devanagari script) (HI)
+#
+# From Unicode coverage for Devanagari
+#
+0905-0914 # Independent vowels
+0915-0939 # Consonants
+093f-094c # Dependent vowel signs
+094d # virama
+#0958-095f # Additional consonants
+#0960-0965 # Generic additions
+#0966-096f # Digits
+#0970 # Abbreviation sign
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hne.orth b/chromium/third_party/fontconfig/src/fc-lang/hne.orth
new file mode 100644
index 00000000000..3a0bacc9dd0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hne.orth
@@ -0,0 +1,28 @@
+#
+# fontconfig/fc-lang/hne.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chhattisgarhi (hne)
+#
+# The government of India considers this a dialect of Hindi:
+# including Hindi until further information is found.
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ho.orth b/chromium/third_party/fontconfig/src/fc-lang/ho.orth
new file mode 100644
index 00000000000..ade4e8afbf1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ho.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/ho.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hiri Motu (HO)
+#
+# I found one sample of Hiri Motu text, a translation of the first part of
+# Genesis at
+# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six
+#
+# It appears to use only ASCII glyphs, so we'll go with that for now
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hr.orth b/chromium/third_party/fontconfig/src/fc-lang/hr.orth
new file mode 100644
index 00000000000..008ff792148
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hr.orth
@@ -0,0 +1,49 @@
+#
+# fontconfig/fc-lang/hr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Croatian (HR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00c0 # evertype.com
+#00c8 # evertype.com
+#00cc # evertype.com
+#00d2 # evertype.com
+#00d9 # evertype.com
+#00e0 # evertype.com
+#00e8 # evertype.com
+#00ec # evertype.com
+#00f2 # evertype.com
+#00f9 # evertype.com
+0106-0107
+010c-010d
+0110-0111
+0160-0161
+017d-017e
+#01c4-01cc # evertype.com
+#01f1-01f5 # evertype.com
+#0200-0217 # evertype.com
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hsb.orth b/chromium/third_party/fontconfig/src/fc-lang/hsb.orth
new file mode 100644
index 00000000000..b03e45437a0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hsb.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/hsb.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Upper Sorbian (hsb)
+#
+# Sources:
+# http://www.omniglot.com/writing/sorbian.htm
+# http://www.evertype.com/alphabets/upper-sorbian.pdf
+#
+# Q, V, and X are not used
+0041-005A
+0061-007A
+00D3
+00F3
+0106-0107
+010C-010D
+011A-011B
+0141-0144
+0158-0159
+0160-0161
+0179-017A
+017D-017E
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ht.orth b/chromium/third_party/fontconfig/src/fc-lang/ht.orth
new file mode 100644
index 00000000000..d45302094f0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ht.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/ht.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Haitian/Haitian Creole (ht)
+#
+# Sources:
+# * http://www.omniglot.com/writing/haitiancreole.htm
+# * http://www.lecorde.com/creole/kreyol/index.php?page=Pronunciation
+#
+0041-005A
+0061-007A
+00C8
+00D2
+00E8
+00F2
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hu.orth b/chromium/third_party/fontconfig/src/fc-lang/hu.orth
new file mode 100644
index 00000000000..3e597fd4d11
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hu.orth
@@ -0,0 +1,49 @@
+#
+# fontconfig/fc-lang/hu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Hungarian (HU)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
+00c1
+00c9
+00cd
+00d3
+00d6
+00da
+00dc
+#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
+00e1
+00e9
+00ed
+00f3
+00f6
+00fa
+00fc
+0150-0151
+0170-0171
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hy.orth b/chromium/third_party/fontconfig/src/fc-lang/hy.orth
new file mode 100644
index 00000000000..0ccc9eb74bf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hy.orth
@@ -0,0 +1,26 @@
+#
+# fontconfig/fc-lang/hy.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Armenian (HY)
+0531-0556
+0561-0587
diff --git a/chromium/third_party/fontconfig/src/fc-lang/hz.orth b/chromium/third_party/fontconfig/src/fc-lang/hz.orth
new file mode 100644
index 00000000000..91a32855c33
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/hz.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/hz.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Herero (hz)
+#
+# Source:
+# * http://www.omniglot.com/writing/herero.php
+#
+# C, Q, and X are not used.
+#
+0041-005A
+0061-007A
+032F # used under S and Z
+1E12-1E13
+1E4A-1E4B
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ia.orth b/chromium/third_party/fontconfig/src/fc-lang/ia.orth
new file mode 100644
index 00000000000..60a9582f97d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ia.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/ia.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Interlingua (IA)
+#
+# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/id.orth b/chromium/third_party/fontconfig/src/fc-lang/id.orth
new file mode 100644
index 00000000000..36071be29f6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/id.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/id.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Indonesian (ID)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c9
+00e9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ie.orth b/chromium/third_party/fontconfig/src/fc-lang/ie.orth
new file mode 100644
index 00000000000..19b35a2d6d3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ie.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/ie.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Interlingue (IE)
+#
+# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ig.orth b/chromium/third_party/fontconfig/src/fc-lang/ig.orth
new file mode 100644
index 00000000000..9999117cbbe
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ig.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/ig.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Igbo (ig)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+1eca
+1ecb
+1ecc
+1ecd
+1ee4
+1ee5
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ii.orth b/chromium/third_party/fontconfig/src/fc-lang/ii.orth
new file mode 100644
index 00000000000..52fe69966e3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ii.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/ii.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sichuan Yi/Nuosu (ii)
+#
+# Sources:
+# * http://www.babelstone.co.uk/Yi/unicode.html
+# * http://www.babelstone.co.uk/Yi/script.html
+# * http://en.wikipedia.org/wiki/Yi_script
+#
+# As of Unicode 5.1, every encoded syllable (U+A000..A48C) is used. The
+# radicals (U+A490..A4C6) are for linguistic use only.
+#
+A000-A48C
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ik.orth b/chromium/third_party/fontconfig/src/fc-lang/ik.orth
new file mode 100644
index 00000000000..87e26207c75
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ik.orth
@@ -0,0 +1,100 @@
+#
+# fontconfig/fc-lang/ik.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Inupiaq (Inupiak, Eskimo) (IK)
+#
+# I'm making a guess that this is language is set using Cyrillic
+#
+0401
+040e
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+045e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/io.orth b/chromium/third_party/fontconfig/src/fc-lang/io.orth
new file mode 100644
index 00000000000..407261d10bf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/io.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/io.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ido (IO)
+#
+# Orthography taken from http://www.homunculus.com/babel/aido.html
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/is.orth b/chromium/third_party/fontconfig/src/fc-lang/is.orth
new file mode 100644
index 00000000000..2867f8e3595
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/is.orth
@@ -0,0 +1,64 @@
+#
+# fontconfig/fc-lang/is.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Icelandic (IS)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
+#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
+00c6
+00c9
+#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com
+00cd
+00d0
+00d3
+#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee
+#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com
+00da
+#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
+00dd
+00de
+00e1
+#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
+#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
+00e6
+00e9
+00ed
+00f0
+00f3
+#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee
+#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com
+00fa
+#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
+00fd
+00fe
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/iso-3166.txt b/chromium/third_party/fontconfig/src/fc-lang/iso-3166.txt
new file mode 100644
index 00000000000..715656dfbdb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/iso-3166.txt
@@ -0,0 +1,242 @@
+This list states the country names (official short names in English) in alphabetical order as given in ISO 3166-1 and the corresponding ISO 3166-1-alpha-2 code elements. The list is updated whenever a change to the official code list in ISO 3166-1 is effected by the ISO 3166/MA. It lists 240 official short names and code elements. One line of text contains one entry. A country name and its code element are separated by a semicolon (;).
+
+AFGHANISTAN;AF
+ÅLAND ISLANDS;AX
+ALBANIA;AL
+ALGERIA;DZ
+AMERICAN SAMOA;AS
+ANDORRA;AD
+ANGOLA;AO
+ANGUILLA;AI
+ANTARCTICA;AQ
+ANTIGUA AND BARBUDA;AG
+ARGENTINA;AR
+ARMENIA;AM
+ARUBA;AW
+AUSTRALIA;AU
+AUSTRIA;AT
+AZERBAIJAN;AZ
+BAHAMAS;BS
+BAHRAIN;BH
+BANGLADESH;BD
+BARBADOS;BB
+BELARUS;BY
+BELGIUM;BE
+BELIZE;BZ
+BENIN;BJ
+BERMUDA;BM
+BHUTAN;BT
+BOLIVIA;BO
+BOSNIA AND HERZEGOVINA;BA
+BOTSWANA;BW
+BOUVET ISLAND;BV
+BRAZIL;BR
+BRITISH INDIAN OCEAN TERRITORY;IO
+BRUNEI DARUSSALAM;BN
+BULGARIA;BG
+BURKINA FASO;BF
+BURUNDI;BI
+CAMBODIA;KH
+CAMEROON;CM
+CANADA;CA
+CAPE VERDE;CV
+CAYMAN ISLANDS;KY
+CENTRAL AFRICAN REPUBLIC;CF
+CHAD;TD
+CHILE;CL
+CHINA;CN
+CHRISTMAS ISLAND;CX
+COCOS (KEELING) ISLANDS;CC
+COLOMBIA;CO
+COMOROS;KM
+CONGO;CG
+CONGO, THE DEMOCRATIC REPUBLIC OF THE;CD
+COOK ISLANDS;CK
+COSTA RICA;CR
+COTE D'IVOIRE;CI
+CROATIA;HR
+CUBA;CU
+CYPRUS;CY
+CZECH REPUBLIC;CZ
+DENMARK;DK
+DJIBOUTI;DJ
+DOMINICA;DM
+DOMINICAN REPUBLIC;DO
+ECUADOR;EC
+EGYPT;EG
+EL SALVADOR;SV
+EQUATORIAL GUINEA;GQ
+ERITREA;ER
+ESTONIA;EE
+ETHIOPIA;ET
+FALKLAND ISLANDS (MALVINAS);FK
+FAROE ISLANDS;FO
+FIJI;FJ
+FINLAND;FI
+FRANCE;FR
+FRENCH GUIANA;GF
+FRENCH POLYNESIA;PF
+FRENCH SOUTHERN TERRITORIES;TF
+GABON;GA
+GAMBIA;GM
+GEORGIA;GE
+GERMANY;DE
+GHANA;GH
+GIBRALTAR;GI
+GREECE;GR
+GREENLAND;GL
+GRENADA;GD
+GUADELOUPE;GP
+GUAM;GU
+GUATEMALA;GT
+GUINEA;GN
+GUINEA-BISSAU;GW
+GUYANA;GY
+HAITI;HT
+HEARD ISLAND AND MCDONALD ISLANDS;HM
+HOLY SEE (VATICAN CITY STATE);VA
+HONDURAS;HN
+HONG KONG;HK
+HUNGARY;HU
+ICELAND;IS
+INDIA;IN
+INDONESIA;ID
+IRAN, ISLAMIC REPUBLIC OF;IR
+IRAQ;IQ
+IRELAND;IE
+ISRAEL;IL
+ITALY;IT
+JAMAICA;JM
+JAPAN;JP
+JORDAN;JO
+KAZAKHSTAN;KZ
+KENYA;KE
+KIRIBATI;KI
+KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF;KP
+KOREA, REPUBLIC OF;KR
+KUWAIT;KW
+KYRGYZSTAN;KG
+LAO PEOPLE'S DEMOCRATIC REPUBLIC;LA
+LATVIA;LV
+LEBANON;LB
+LESOTHO;LS
+LIBERIA;LR
+LIBYAN ARAB JAMAHIRIYA;LY
+LIECHTENSTEIN;LI
+LITHUANIA;LT
+LUXEMBOURG;LU
+MACAO;MO
+MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF;MK
+MADAGASCAR;MG
+MALAWI;MW
+MALAYSIA;MY
+MALDIVES;MV
+MALI;ML
+MALTA;MT
+MARSHALL ISLANDS;MH
+MARTINIQUE;MQ
+MAURITANIA;MR
+MAURITIUS;MU
+MAYOTTE;YT
+MEXICO;MX
+MICRONESIA, FEDERATED STATES OF;FM
+MOLDOVA, REPUBLIC OF;MD
+MONACO;MC
+MONGOLIA;MN
+MONTSERRAT;MS
+MOROCCO;MA
+MOZAMBIQUE;MZ
+MYANMAR;MM
+NAMIBIA;NA
+NAURU;NR
+NEPAL;NP
+NETHERLANDS;NL
+NETHERLANDS ANTILLES;AN
+NEW CALEDONIA;NC
+NEW ZEALAND;NZ
+NICARAGUA;NI
+NIGER;NE
+NIGERIA;NG
+NIUE;NU
+NORFOLK ISLAND;NF
+NORTHERN MARIANA ISLANDS;MP
+NORWAY;NO
+OMAN;OM
+PAKISTAN;PK
+PALAU;PW
+PALESTINIAN TERRITORY, OCCUPIED;PS
+PANAMA;PA
+PAPUA NEW GUINEA;PG
+PARAGUAY;PY
+PERU;PE
+PHILIPPINES;PH
+PITCAIRN;PN
+POLAND;PL
+PORTUGAL;PT
+PUERTO RICO;PR
+QATAR;QA
+REUNION;RE
+ROMANIA;RO
+RUSSIAN FEDERATION;RU
+RWANDA;RW
+SAINT HELENA;SH
+SAINT KITTS AND NEVIS;KN
+SAINT LUCIA;LC
+SAINT PIERRE AND MIQUELON;PM
+SAINT VINCENT AND THE GRENADINES;VC
+SAMOA;WS
+SAN MARINO;SM
+SAO TOME AND PRINCIPE;ST
+SAUDI ARABIA;SA
+SENEGAL;SN
+SERBIA AND MONTENEGRO;CS
+SEYCHELLES;SC
+SIERRA LEONE;SL
+SINGAPORE;SG
+SLOVAKIA;SK
+SLOVENIA;SI
+SOLOMON ISLANDS;SB
+SOMALIA;SO
+SOUTH AFRICA;ZA
+SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS;GS
+SPAIN;ES
+SRI LANKA;LK
+SUDAN;SD
+SURINAME;SR
+SVALBARD AND JAN MAYEN;SJ
+SWAZILAND;SZ
+SWEDEN;SE
+SWITZERLAND;CH
+SYRIAN ARAB REPUBLIC;SY
+TAIWAN, PROVINCE OF CHINA;TW
+TAJIKISTAN;TJ
+TANZANIA, UNITED REPUBLIC OF;TZ
+THAILAND;TH
+TIMOR-LESTE;TL
+TOGO;TG
+TOKELAU;TK
+TONGA;TO
+TRINIDAD AND TOBAGO;TT
+TUNISIA;TN
+TURKEY;TR
+TURKMENISTAN;TM
+TURKS AND CAICOS ISLANDS;TC
+TUVALU;TV
+UGANDA;UG
+UKRAINE;UA
+UNITED ARAB EMIRATES;AE
+UNITED KINGDOM;GB
+UNITED STATES;US
+UNITED STATES MINOR OUTLYING ISLANDS;UM
+URUGUAY;UY
+UZBEKISTAN;UZ
+VANUATU;VU
+VENEZUELA;VE
+VIET NAM;VN
+VIRGIN ISLANDS, BRITISH;VG
+VIRGIN ISLANDS, U.S.;VI
+WALLIS AND FUTUNA;WF
+WESTERN SAHARA;EH
+YEMEN;YE
+ZAMBIA;ZM
+ZIMBABWE;ZW
diff --git a/chromium/third_party/fontconfig/src/fc-lang/iso639-1 b/chromium/third_party/fontconfig/src/fc-lang/iso639-1
new file mode 100644
index 00000000000..02e340b099b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/iso639-1
@@ -0,0 +1,139 @@
+AA * Afar Djibouti, N Ethiopia Hamito-Semitic F., Cushitic Br.
+AB * Abkhazian Abkhazia (Georgia) Caucasian F.
+AF * Afrikaans South Africa, Namibia Indo-European F., Germanic Br. 10
+AM * Amharic Ethiopia Hamito-Semitic F., Semitic Br. 20
+AR * Arabic Middle East, N Africa Hamito-Semitic F., Semitic Br. 218
+AS * Assamese Assam (India) Indo-European F., Indo-Iranian Br. 23
+AY * Aymara Bolivia, Peru Andean-Equatorial F., Andean Br. 2
+AZ * Azerbaijani Iran, Azerbaijan Uralo-Altaic F., Turkic Br. 15
+BA * Bashkir Bashkir (S Urals, Russia) Uralo-Altaic F., Turkic Br. 1
+BE * Byelorussian Byelorussia Indo-European F., Balto-Slavic Br. 10
+BG * Bulgarian Bulgaria, Yugoslavia, Greece Indo-European F., Balto-Slavic Br. 9
+BH * Bihari Bihar (India) Indo-European F., Indo-Iranian Br.
+BI * Bislama Vanuatu, New Caledonia English based creole, Pacific
+BN * Bengali, Bangla Bangladesh, West Bengal (India) Indo-European F., Indo-Iranian Br. 196
+BO * Tibetan Tibet, Bhutan, Nepal, India Sino-Tibetan F., Tibeto-Burmese Br. 5 BO from Bodskad
+BR * Breton Britanny (W France) Indo-European F., Celtic Br.
+CA * Catalan Catalania (NE Spain), Balearic Islands, Sardinia, S France, Andorra, Argentina Indo-European F., Italic Br. 9
+CO * Corsican Corsica (France) Indo-European F., Italic Br.
+CS * Czech Czech Republic Indo-European F., Balto-Slavic Br. 11
+CY * Welsh Wales (United Kingdom) Indo-European F., Celtic Br.
+DA * Danish Denmark, Germany Indo-European F., Germanic Br. 5
+DE * German Germany, Austria, Switzerland, U.S.A. Indo-European F., Germanic Br. 121 DE from Deutsch
+DZ * Bhutani, Bhutanese Bhutan Sino-Tibetan F., Tibeto-Burmese Br.
+EL * Greek Greece, Cyprus, Turkey Indo-European F., Hellenic Br. 12
+EN * English North America, British Isles, Australia, New Zealand, South Africa Indo-European F., Germanic Br. 470
+EO * Esperanto 2 Artificial language
+ES * Spanish Spain, Latin America, U.S.A. Indo-European F., Italic Br. 381
+ET * Estonian Estonia Uralo-Altaic F., Finno-Ugric Br. 1
+EU * Basque W Pyrenees (France, Spain) (Isolate) EU from Euskera
+FA * Persian Iran, Afghanistan Indo-European F., Indo-Iranian Br. 35 FA from Farsi
+FI * Finnish, Suomi Finland, Russia, Sweden Uralo-Altaic F., Finno-Ugric Br. 6
+FJ * Fiji, Fijian Fiji Austric F., Malayo-Polynesian Br.
+FO * Faroese, Faeroese Faeroe Islands (Denmark) Indo-European F., Germanic Br.
+FR * French France, Belgium, Canada, U.S.A., Switzerland Indo-European F., Italic Br. 124
+FY * Frisian Frisian Islands (Netherlands-Germany) Indo-European F., Germanic Br.
+GA * Irish Ireland Indo-European F., Celtic Br. GA from Gaeilge
+GD * Scots Gaelic Scotland Indo-European F., Celtic Br.
+GL * Galician Spanish Galicia Indo-European F., Italic Br. 4
+GN * Guaran? Paraguay, Bolivia, S Brazil Andean-Equatorial F., Equatorial Br. 4
+GU * Gujarati, Gujerati Gujarat (India), Bombay, Pakistan, South Africa Indo-European F., Indo-Iranian Br. 40
+HA * Hausa N Nigeria, Niger, Cameroun Hamito-Semitic F., Chadic Br. 37
+HE * Hebrew Israel Hamito-Semitic F., Semitic Br. 5 Formerly IW from Iwrith. See Note 4.
+HI * Hindi India, Pakistan, Trinidad, Guyana, Fiji, Mauritius Indo-European F., Indo-Iranian Br. 418 Same as Urdu [UR] except for writing system. See Note 3.
+HR * Croatian, Croat Croatia Indo-European F., Balto-Slavic Br. HR from Hrvatski. See Note 2.
+HU * Hungarian, Magyar Hungary, Romania, Yugoslavia, Czechoslovakia Uralo-Altaic F., Finno-Ugric Br. 14
+HY * Armenian Armenia, Middle East Indo-European F., Armenian Br. 5 HY from Hayeren
+IA * Interlingua Artificial language
+ID * Indonesian, Bahasa Indonesia Indonesia, Malaysia, Thailand, Singapore, Brunei Austric F., Malayo-Polynesian Br. Formerly IN. See Note 4.
+IE * Interlingue Artificial language. Prototype of Interlingua [IA]
+IK * Inupiak Greenland, N Canada, Alaska (U.S.A.) Eskimo-Aleut F.
+IS * Icelandic Iceland Indo-European F., Germanic Br. IS from Islenzk
+IT * Italian Italy, U.S.A., France, Argentina, Switzerland, Canada, Brazil Indo-European F., Italic Br. 62
+IU * Inuktitut NE Canada Eskimo-Aleut F. See Note 5.
+JA * Japanese, Nihongo Japan, Brazil, California (U.S.A.), Hawaii (U.S.A.) Japanese-Korean F. 126
+JW Javanese Java, Malaysia, Surinam Austric F., Malayo-Polynesian Br. 64 JW from Bahasa Jawa
+KA * Georgian Georgia Caucasian F. 3 KA from Kartuli
+KK * Kazakh Kazakhstan, Sinkiang (China), Afghanistan Uralo-Altaic F., Turkic Br. 8
+KL * Greenlandic Greenland Eskimo-Aleut F. KL from Kalaallisut
+KM * Cambodian Cambodia, Thailand, Viet Nam Austric F., Austrio-Asiatic Br. 9 KM from Khmer
+KN * Kannada Karnatuka (India) Dravidian F. 44
+KO * Korean, Choson-o South Korea, North Korea, NE China, Japan, Siberia, Hawaii (U.S.A.) Japanese-Korean F. 75
+KS * Kashmiri Kashmir (India-Pakistan) Indo-European F., Indo-Iranian Br. 4
+KU * Kurdish, Zimany Kurdy Turkey, Iran, Iraq, Syria Indo-European F., Indo-Iranian Br. 11
+KY * Kirghiz Kirghiz, Sinkiang (China), Afghanistan Uralo-Altaic F., Turkic Br. 2 KY from Kyrgyz
+LA * Latin Indo-European F., Italic Br. Ancient language nearing extinction
+LN * Lingala, liNgala Zaire, Congo Niger-Kordofanian F., Non-Mande Br. 7
+LO * Laothian, Pha Xa Lao, Lao Laos, Thailand Sino-Tibetan F., Sino-Siamese Br. 4
+LT * Lithuanian Lithuania Indo-European F., Balto-Slavic Br. 3
+LV * Latvian, Lettish Latvia Indo-European F., Balto-Slavic Br. 2
+MG * Malagasy Madagascar Austric F., Malayo-Polynesian Br. 12
+MI * Maori New Zealand Austric F., Malayo-Polynesian Br.
+MK * Macedonian Macedonia, Bulgaria, Greece Indo-European F., Balto-Slavic Br. 2
+ML * Malayalam Kerala (SW India) Dravidian F. 35
+MN * Mongolian Mongolia Uralo-Altaic F., Mongolic Br.
+MO * Moldavian
+MR * Marathi, Mahrati Maharashtra (W India) Indo-European F., Indo-Iranian Br. 69
+MS Malay Malaysia, Indonesia Austric F., Malayo-Polynesian Br. 155 MS from Bahasa Malaysia
+MT * Maltese Malta Hamito-Semitic F., Semitic Br.
+MY * Burmese Burma, Bangladesh Sino-Tibetan F., Tibeto-Burmese Br. 30 MY from Myanmasa
+NA Nauru, Nauruan Nauru Austric F., Malayo-Polynesian Br.
+NE * Nepali, Nepalese Nepal, Uttar Pradesh (India) Indo-European F., Indo-Iranian Br. 16
+NL * Dutch Netherlands, Belgium Indo-European F., Germanic Br. 21 NL from Nederlands
+NO * Norwegian Norway Indo-European F., Germanic Br. 5
+OC * Occitan S France Indo-European F., Italic Br. 4
+OM * (Afan) Oromo, Galla Ethiopia, Kenya Hamito-Semitic F., Cushitic Br. 10
+OR * Oriya Orissa (E India) Indo-European F., Indo-Iranian Br. 31
+PA Punjabi Punjab (India), Pakistan Indo-European F., Indo-Iranian Br. 93 PA from Panjabi
+PL * Polish Poland, U.S.A. Indo-European F., Balto-Slavic Br. 44
+PS Pashto, Pushto, Pushtu Afghanistan, Pakistan Indo-European F., Indo-Iranian Br. 21
+PT * Portuguese Brazil, Portugal, Spain, Uruguay, Argentina, Azores, Goa, Madeira Indo-European F., Italic Br. 182
+QU Quechua Peru, Ecuador, Bolivia Andean-Equatorial F., Andean Br. 8
+RM * Rhaeto-Romance, Rhaeto-Romanic, Romansch S Switzerland, N Italy, Tyrol (Austria) Indo-European F., Italic Br.
+RN Kirundi, kiRundi Niger-Kordofanian F., Non-Mande Br.
+RO * Romanian, Rumanian Rumania Indo-European F., Italic Br. 25
+RU * Russian Russia, former USSR republics Indo-European F., Balto-Slavic Br. 288
+RW Kinyarwanda, kinyaRuanda Rwanda, Burundi, Uganda, Zaire, Tanzania Niger-Kordofanian F., Non-Mande Br. RW from Rwanda
+SA * Sanskrit India Indo-European F., Indo-Iranian Br. Ancient language
+SD Sindhi Pakistan, Sind (India) Indo-European F., Indo-Iranian Br. 18
+SG Sangho, Sango-Ngbandi Central African Republic, Zaire Niger-Kordofanian F., Non-Mande Br. 4
+SH * Serbo-Croatian Croatia Indo-European F., Balto-Slavic Br. 20 See Note 2.
+SI * Singhalese, Sinhalese Sri Lanka Indo-European F., Indo-Iranian Br. 13
+SK * Slovak Slovakia Indo-European F., Balto-Slavic Br. 5
+SL * Slovenian, Slovene Slovenia, Italy, Austria Indo-European F., Balto-Slavic Br. 2
+SM * Samoan Samoa Austric F., Malayo-Polynesian Br.
+SN Shona, chiShona Rhodesia, Mozambique Niger-Kordofanian F., Non-Mande Br. 8
+SO * Somali Somalia, Ethiopia, Kenya Hamito-Semitic F., Cushitic Br. 5
+SQ * Albanian Albania, Kosovo (Yugoslavia), Italy, Greece Indo-European F., Albanian Br. 5 SQ from Shqip
+SR * Serbian Serbia Indo-European F., Balto-Slavic Br. SR from Srpski. See Note 2.
+SS * Siswati, siSwati South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br.
+ST * Sesotho, siSuthu South Africa, Lesotho, Botswana Niger-Kordofanian F., Non-Mande Br.
+SU Sundanese West Java Austric F., Malayo-Polynesian Br. 26
+SV * Swedish Sweden, Finland Indo-European F., Germanic Br. 9 SV from Svenska
+SW * Swahili, kiSwahili Tanzania, Comoro Islands, Kenya, Mozambique, Zaire Niger-Kordofanian F., Non-Mande Br. 48
+TA * Tamil Tamil Nadu (S India), Sri Lanka, Malaysia, Singapore Dravidian F. 71
+TE * Telugu, Telegu Andhra Pradesh (India) Dravidian F. 73
+TG * Tajik, Tajiki Tadzhikstan Indo-European F., Indo-Iranian Br. 5
+TH * Thai Thailand 50
+TI * Tigrinya N Ethiopia Hamito-Semitic F., Semitic Br. 4
+TK * Turkmen, Turkoman, Turcoman Turkmenistan, Iran, Afghanistan Uralo-Altaic F., Turkic Br. 3
+TL * Tagalog Philippines Austric F., Malayo-Polynesian Br. 54
+TN * Setswana South Africa
+TO * Tonga Niger-Kordofanian F., Non-Mande Br. 7
+TR * Turkish Turkey, Bulgaria, Yugoslavia, Cyprus, Greece Uralo-Altaic F., Turkic Br. 59
+TS * Tsonga 3
+TT * Tatar, Tartar Tatarstan Uralo-Altaic F., Turkic Br. 8
+TW * Twi, Tshi W Africa Niger-Kordofanian F., Non-Mande Br.
+UG * Uigur, Uighur, Uyghur Sinkiang (China), Kazakhstan, Uzbekistan, Afghanistan Uralo-Altaic F., Turkic Br. 8 See Note 5.
+UK * Ukrainian Ukraine, Canada, U.S.A. Indo-European F., Balto-Slavic Br. 47
+UR * Urdu Pakistan, India Indo-European F., Indo-Iranian Br. 102 Same as Hindi [HI] except for writing system. See Note 3.
+UZ * Uzbek, Uzbeg, Usbek, Usbeg Uzbekstan, Tadzhikstan, Afghanistan Uralo-Altaic F., Turkic Br. 14
+VI * Vietnamese Viet Nam, Thailand, Cambodia, Laos, New Caledonia, France, Dakar Sino-Tibetan F., Sino-Siamese Br. 65
+VO * Volap?k Artificial language
+WO * Wolof Senegal, Gambia Niger-Kordofanian F., Non-Mande Br. 7
+XH * Xhosa, Xosa, isiXhosa South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br. 8
+YI * Yiddish U.S.A., Israel, former USSR, Latin America, Canada, E Europe Indo-European F., Germanic Br. Formerly JI from Jiddisch. See Note 4.
+YO * Yoruba Western, Lagos and Kwara States (Nigeria), Benin Niger-Kordofanian F., Non-Mande Br. 20
+ZA Zhuang, Chwang, Chuang China 15 See Note 5.
+ZH * Chinese China Sino-Tibetan F., Sino-Siamese Br. 1,200 ZH from Zhongwen. See Note 1.
+ZU * Zulu, isiZulu South Africa, Rhodesia, Swaziland Niger-Kordofanian F., Non-Mande Br. 9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/iso639-2 b/chromium/third_party/fontconfig/src/fc-lang/iso639-2
new file mode 100644
index 00000000000..6b8132c0eb3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/iso639-2
@@ -0,0 +1,473 @@
+ISO 639-1 is the alpha-2 code. Multiple codes for the same language are to
+be considered synonyms. Entries marked with '*' have Unicode orthographies
+built.
+
+ 639-2 639-1 Language Name (English) Language Name (French)
+
+* aar aa Afar afar
+* abk ab Abkhazian abkhaze
+ ace Achinese aceh
+ ach Acoli acoli
+ ada Adangme adangme
+ afa Afro-Asiatic (Other) afro-asiatiques, autres langues
+ afh Afrihili afrihili
+* afr af Afrikaans afrikaans
+ aka Akan akan
+ akk Akkadian akkadien
+* alb/sqi* sq Albanian albanais
+ ale Aleut aléoute
+ alg Algonquian languages algonquines, langues
+* amh am Amharic amharique
+ ang English, Old (ca.450-1100) anglo-saxon (ca.450-1100)
+ apa Apache languages apache
+* ara ar Arabic arabe
+ arc Aramaic araméen
+* arm/hye* hy Armenian arménien
+ arn Araucanian araucan
+ arp Arapaho arapaho
+ art Artificial (Other) artificielles, autres langues
+ arw Arawak arawak
+ asm as Assamese assamais
+* ast Asturian; Bable asturien; bable
+ ath Athapascan languages athapascanes, langues
+ aus Australian languages australiennes, langues
+* ava Avaric avar
+ ave ae Avestan avestique
+ awa Awadhi awadhi
+* aym ay Aymara aymara
+* aze az Azerbaijani azéri
+ bad Banda banda
+ bai Bamileke languages bamilékés, langues
+* bak ba Bashkir bachkir
+ bal Baluchi baloutchi
+* bam Bambara bambara
+ ban Balinese balinais
+* baq/eus* eu Basque basque
+ bas Basa basa
+ bat Baltic (Other) baltiques, autres langues
+ bej Beja bedja
+* bel be Belarusian biélorusse
+ bem Bemba bemba
+* ben bn Bengali bengali
+ ber Berber (Other) berbères, autres langues
+ bho Bhojpuri bhojpuri
+* bih bh Bihari bihari
+ bik Bikol bikol
+* bin Bini bini
+* bis bi Bislama bichlamar
+ bla Siksika blackfoot
+ bnt Bantu (Other) bantoues, autres langues
+* tib/bod* bo Tibetan tibétain
+* bos bs Bosnian bosniaque
+ bra Braj braj
+* bre br Breton breton
+ btk Batak (Indonesia) batak (Indonésie)
+* bua Buriat bouriate
+ bug Buginese bugi
+* bul bg Bulgarian bulgare
+* bur/mya* my Burmese birman
+ cad Caddo caddo
+ cai Central American Indian (Other) indiennes d'Amérique centrale, autres langues
+ car Carib caribe
+* cat ca Catalan catalan
+ cau Caucasian (Other) caucasiennes, autres langues
+ ceb Cebuano cebuano
+ cel Celtic (Other) celtiques, autres langues
+* cze/ces* cs Czech tchèque
+* cha ch Chamorro chamorro
+ chb Chibcha chibcha
+* che ce Chechen tchétchène
+ chg Chagatai djaghataï
+* chi/zho* zh Chinese chinois
+ chk Chuukese chuuk
+* chm Mari mari
+ chn Chinook jargon chinook, jargon
+ cho Choctaw choctaw
+ chp Chipewyan chipewyan
+* chr Cherokee cherokee
+* chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic slavon d'église; vieux slave; slavon liturgique; vieux bulgare
+* chv cv Chuvash tchouvache
+ chy Cheyenne cheyenne
+ cmc Chamic languages chames, langues
+ cop Coptic copte
+* cor kw Cornish cornique
+* cos co Corsican corse
+ cpe Creoles and pidgins, English based (Other) créoles et pidgins anglais, autres
+ cpf Creoles and pidgins, French-based (Other) créoles et pidgins français, autres
+ cpp Creoles and pidgins, Portuguese-based (Other) créoles et pidgins portugais, autres
+ cre Cree cree
+ crp Creoles and pidgins (Other) créoles et pidgins divers
+ cus Cushitic (Other) couchitiques, autres langues
+* wel/cym* cy Welsh gallois
+* cze/ces* cs Czech tchèque
+ dak Dakota dakota
+* dan da Danish danois
+ day Dayak dayak
+ del Delaware delaware
+ den Slave (Athapascan) esclave (athapascan)
+* ger/deu* de German allemand
+ dgr Dogrib dogrib
+ din Dinka dinka
+ div Divehi maldivien
+ doi Dogri dogri
+ dra Dravidian (Other) dravidiennes, autres langues
+ dua Duala douala
+ dum Dutch, Middle (ca.1050-1350) néerlandais moyen (ca. 1050-1350)
+* dut/nld* nl Dutch néerlandais
+ dyu Dyula dioula
+* dzo dz Dzongkha dzongkha
+ efi Efik efik
+ egy Egyptian (Ancient) égyptien
+ eka Ekajuk ekajuk
+* gre/ell* el Greek, Modern (1453-) grec moderne (après 1453)
+ elx Elamite élamite
+* eng en English anglais
+ enm English, Middle (1100-1500) anglais moyen (1100-1500)
+* epo eo Esperanto espéranto
+* est et Estonian estonien
+* baq/eus* eu Basque basque
+ ewe Ewe éwé
+ ewo Ewondo éwondo
+ fan Fang fang
+* fao fo Faroese féroïen
+* per/fas* fa Persian persan
+ fat Fanti fanti
+* fij fj Fijian fidjien
+* fin fi Finnish finnois
+ fiu Finno-Ugrian (Other) finno-ougriennes, autres langues
+ fon Fon fon
+* fre/fra* fr French français
+ frm French, Middle (ca.1400-1800) français moyen (1400-1800)
+ fro French, Old (842-ca.1400) français ancien (842-ca.1400)
+* fry fy Frisian frison
+* ful Fulah peul
+* fur Friulian frioulan
+ gaa Ga ga
+ gay Gayo gayo
+ gba Gbaya gbaya
+ gem Germanic (Other) germaniques, autres langues
+* geo/kat* ka Georgian géorgien
+* ger/deu* de German allemand
+* gez Geez guèze
+ gil Gilbertese kiribati
+* gla gd Gaelic; Scottish Gaelic gaélique; gaélique écossais
+* gle ga Irish irlandais
+* glg gl Gallegan galicien
+* glv gv Manx manx; mannois
+ gmh German, Middle High (ca.1050-1500) allemand, moyen haut (ca. 1050-1500)
+ goh German, Old High (ca.750-1050) allemand, vieux haut (ca. 750-1050)
+ gon Gondi gond
+ gor Gorontalo gorontalo
+ got Gothic gothique
+ grb Grebo grebo
+ grc Greek, Ancient (to 1453) grec ancien (jusqu'à 1453)
+* gre/ell* el Greek, Modern (1453-) grec moderne (après 1453)
+* grn gn Guarani guarani
+* guj gu Gujarati goudjrati
+ gwi Gwich´in gwich´in
+ hai Haida haida
+* hau ha Hausa haoussa
+* haw Hawaiian hawaïen
+* heb he Hebrew hébreu
+ her hz Herero herero
+ hil Hiligaynon hiligaynon
+ him Himachali himachali
+* hin hi Hindi hindi
+ hit Hittite hittite
+ hmn Hmong hmong
+* hmo ho Hiri Motu hiri motu
+* scr/hrv* hr Croatian croate
+* hun hu Hungarian hongrois
+ hup Hupa hupa
+* arm/hye* hy Armenian arménien
+ iba Iban iban
+* ibo Igbo igbo
+* ice/isl* is Icelandic islandais
+* ido io Ido ido
+ ijo Ijo ijo
+* iku iu Inuktitut inuktitut
+* ile ie Interlingue interlingue
+ ilo Iloko ilocano
+* ina ia Interlingua (International Auxiliary Language Association) interlingua (langue auxiliaire internationale)
+ inc Indic (Other) indo-aryennes, autres langues
+* ind id Indonesian indonésien
+ ine Indo-European (Other) indo-européennes, autres langues
+* ipk ik Inupiaq inupiaq
+ ira Iranian (Other) iraniennes, autres langues
+ iro Iroquoian languages iroquoises, langues (famille)
+* ice/isl* is Icelandic islandais
+* ita it Italian italien
+ jav jv Javanese javanais
+* jpn ja Japanese japonais
+ jpr Judeo-Persian judéo-persan
+ jrb Judeo-Arabic judéo-arabe
+* kaa Kara-Kalpak karakalpak
+ kab Kabyle kabyle
+ kac Kachin kachin
+* kal kl Kalaallisut groenlandais
+ kam Kamba kamba
+* kan kn Kannada kannada
+ kar Karen karen
+* kas ks Kashmiri kashmiri
+* geo/kat* ka Georgian géorgien
+ kau Kanuri kanouri
+ kaw Kawi kawi
+* kaz kk Kazakh kazakh
+ kha Khasi khasi
+ khi Khoisan (Other) khoisan, autres langues
+* khm km Khmer khmer
+ kho Khotanese khotanais
+* kik ki Kikuyu; Gikuyu kikuyu
+ kin rw Kinyarwanda rwanda
+* kir ky Kirghiz kirghize
+ kmb Kimbundu kimbundu
+* kok Konkani konkani
+* kom kv Komi kom
+ kon Kongo kongo
+* kor ko Korean coréen
+ kos Kosraean kosrae
+ kpe Kpelle kpellé
+ kro Kru krou
+ kru Kurukh kurukh
+ kua kj Kuanyama; Kwanyama kuanyama; kwanyama
+* kum Kumyk koumyk
+* kur ku Kurdish kurde
+ kut Kutenai kutenai
+ lad Ladino judéo-espagnol
+ lah Lahnda lahnda
+ lam Lamba lamba
+* lao lo Lao lao
+* lat la Latin latin
+* lav lv Latvian letton
+* lez Lezghian lezghien
+* lin ln Lingala lingala
+* lit lt Lithuanian lituanien
+ lol Mongo mongo
+ loz Lozi lozi
+* ltz lb Luxembourgish; Letzeburgesch luxembourgeois
+ lua Luba-Lulua luba-lulua
+ lub Luba-Katanga luba-katanga
+ lug Ganda ganda
+ lui Luiseno luiseno
+ lun Lunda lunda
+ luo Luo (Kenya and Tanzania) luo (Kenya et Tanzanie)
+ lus lushai Lushai
+* mac/mkd* mk Macedonian macédonien
+ mad Madurese madourais
+ mag Magahi magahi
+* mah mh Marshallese marshall
+ mai Maithili maithili
+ mak Makasar makassar
+* mal ml Malayalam malayalam
+ man Mandingo mandingue
+* mao/mri* mi Maori maori
+ map Austronesian (Other) malayo-polynésiennes, autres langues
+* mar mr Marathi marathe
+ mas Masai massaï
+ may/msa* ms Malay malais
+ mdr Mandar mandar
+ men Mende mendé
+ mga Irish, Middle (900-1200) irlandais moyen (900-1200)
+ mic Micmac micmac
+ min Minangkabau minangkabau
+ mis Miscellaneous languages diverses, langues
+* mac/mkd* mk Macedonian macédonien
+ mkh Mon-Khmer (Other) môn-khmer, autres langues
+* mlg mg Malagasy malgache
+* mlt mt Maltese maltais
+ mnc Manchu mandchou
+ mni Manipuri manipuri
+ mno Manobo languages manobo, langues
+ moh Mohawk mohawk
+* mol mo Moldavian moldave
+* mon mn Mongolian mongol
+ mos Mossi moré
+* mao/mri* mi Maori maori
+ may/msa* ms Malay malais
+ mul Multiple languages multilingue
+ mun Munda languages mounda, langues
+ mus Creek muskogee
+ mwr Marwari marvari
+* bur/mya* my Burmese birman
+ myn Mayan languages maya, langues
+ nah Nahuatl nahuatl
+ nai North American Indian indiennes d'Amérique du Nord, autres langues
+ nau na Nauru nauruan
+ nav nv Navajo; Navaho navaho
+* nbl nr Ndebele, South; South Ndebele ndébélé du Sud
+ nde nd Ndebele, North; North Ndebele ndébélé du Nord
+ ndo ng Ndonga ndonga
+ nds Low German; Low Saxon; German, Low; Saxon, Low bas allemand; bas saxon; allemand, bas; saxon, bas
+* nep ne Nepali népalais
+ new Newari newari
+ nia Nias nias
+ nic Niger-Kordofanian (Other) nigéro-congolaises, autres langues
+ niu Niuean niué
+* dut/nld* nl Dutch néerlandais
+ non Norse, Old norrois, vieux
+* nor no Norwegian norvégien
+* nno nn Norwegian Nynorsk; Nynorsk, Norwegian norvégien nynorsk; nynorsk, norvégien
+* nob nb Norwegian Bokmål; Bokmål, Norwegian norvégien bokmål; bokmål, norvégien
+* nso Sotho, Northern sotho du Nord
+ nub Nubian languages nubiennes, langues
+* nya ny Chichewa; Chewa; Nyanja chichewa; chewa; nyanja
+ nym Nyamwezi nyamwezi
+ nyn Nyankole nyankolé
+ nyo Nyoro nyoro
+ nzi Nzima nzema
+* oci oc Occitan (post 1500); Provençal occitan (après 1500); provençal
+ oji Ojibwa ojibwa
+* ori or Oriya oriya
+* orm om Oromo galla
+ osa Osage osage
+* oss os Ossetian; Ossetic ossète
+ ota Turkish, Ottoman (1500-1928) turc ottoman (1500-1928)
+ oto Otomian languages otomangue, langues
+ paa Papuan (Other) papoues, autres langues
+ pag Pangasinan pangasinan
+ pal Pahlavi pahlavi
+ pam Pampanga pampangan
+ pan pa Panjabi pendjabi
+ pap Papiamento papiamento
+ pau Palauan palau
+ peo Persian, Old (ca.600-400 B.C.) perse, vieux (ca. 600-400 av. J.-C.)
+* per/fas* fa Persian persan
+ phi Philippine (Other) philippines, autres langues
+ phn Phoenician phénicien
+ pli pi Pali pali
+* pol pl Polish polonais
+ pon Pohnpeian pohnpei
+* por pt Portuguese portugais
+ pra Prakrit languages prâkrit
+ pro Provençal, Old (to 1500) provençal ancien (jusqu'à 1500)
+ pus ps Pushto pachto
+ qaa-qtz Reserved for local use réservée à l'usage local
+ que qu Quechua quechua
+ raj Rajasthani rajasthani
+ rap Rapanui rapanui
+ rar Rarotongan rarotonga
+ roa Romance (Other) romanes, autres langues
+* roh rm Raeto-Romance rhéto-roman
+ rom Romany tsigane
+* rum/ron* ro Romanian roumain
+ run rn Rundi rundi
+* rus ru Russian russe
+ sad Sandawe sandawe
+ sag sg Sango sango
+* sah Yakut iakoute
+ sai South American Indian (Other) indiennes d'Amérique du Sud, autres langues
+ sal Salishan languages salish, langues
+ sam Samaritan Aramaic samaritain
+* san sa Sanskrit sanskrit
+ sas Sasak sasak
+ sat Santali santal
+* scc/srp* sr Serbian serbe
+* sco Scots écossais
+* scr/hrv* hr Croatian croate
+* sel Selkup selkoupe
+ sem Semitic (Other) sémitiques, autres langues
+ sga Irish, Old (to 900) irlandais ancien (jusqu'à 900)
+ sgn Sign Languages langues des signes
+ shn Shan chan
+ sid Sidamo sidamo
+* sin si Sinhalese singhalais
+ sio Siouan languages sioux, langues
+ sit Sino-Tibetan (Other) sino-tibétaines, autres langues
+ sla Slavic (Other) slaves, autres langues
+* slo/slk* sk Slovak slovaque
+* slv sl Slovenian slovène
+* sma Southern Sami sami du Sud
+* sme se Northern Sami sami du Nord
+ smi Sami languages (Other) sami, autres langues
+* smj Lule Sami sami de Lule
+* smn Inari Sami sami d'Inari
+* smo sm Samoan samoan
+* sms Skolt Sami sami skolt
+ sna sn Shona shona
+ snd sd Sindhi sindhi
+ snk Soninke soninké
+ sog Sogdian sogdien
+* som so Somali somali
+ son Songhai songhai
+* sot st Sotho, Southern sotho du Sud
+* spa es Spanish; Castilian espagnol; castillan
+* alb/sqi* sq Albanian albanais
+ srd sc Sardinian sarde
+* scc/srp* sr Serbian serbe
+* sh Serbo-Croatian serbo-croate
+ srr Serer sérère
+ ssa Nilo-Saharan (Other) nilo-sahariennes, autres langues
+* ssw ss Swati swati
+ suk Sukuma sukuma
+ sun su Sundanese soundanais
+ sus Susu soussou
+ sux Sumerian sumérien
+* swa sw Swahili swahili
+* swe sv Swedish suédois
+* syr Syriac syriaque
+ tah ty Tahitian tahitien
+ tai Tai (Other) thaïes, autres langues
+* tam ta Tamil tamoul
+* tat tt Tatar tatar
+* tel te Telugu télougou
+ tem Timne temne
+ ter Tereno tereno
+ tet Tetum tetum
+* tgk tg Tajik tadjik
+* tgl tl Tagalog tagalog
+* tha th Thai thaï
+* tib/bod* bo Tibetan tibétain
+ tig Tigre tigré
+* tir ti Tigrinya tigrigna
+ tiv Tiv tiv
+ tkl Tokelau tokelau
+ tli Tlingit tlingit
+ tmh Tamashek tamacheq
+ tog Tonga (Nyasa) tonga (Nyasa)
+* ton to Tonga (Tonga Islands) tongan (ÃŽles Tonga)
+ tpi Tok Pisin tok pisin
+ tsi Tsimshian tsimshian
+* tsn tn Tswana tswana
+* tso ts Tsonga tsonga
+* tuk tk Turkmen turkmène
+ tum Tumbuka tumbuka
+ tup Tupi languages tupi, langues
+* tur tr Turkish turc
+ tut Altaic (Other) altaïques, autres langues
+ tvl Tuvalu tuvalu
+* twi tw Twi twi
+* tyv Tuvinian touva
+ uga Ugaritic ougaritique
+* uig ug Uighur ouïgour
+* ukr uk Ukrainian ukrainien
+ umb Umbundu umbundu
+ und Undetermined indéterminée
+* urd ur Urdu ourdou
+* uzb uz Uzbek ouszbek
+ vai Vai vaï
+* ven Venda venda
+* vie vi Vietnamese vietnamien
+* vol vo Volapük volapük
+* vot Votic vote
+ wak Wakashan languages wakashennes, langues
+ wal Walamo walamo
+ war Waray waray
+ was Washo washo
+* wel/cym* cy Welsh gallois
+* wen Sorbian languages sorabes, langues
+* wln wa Walloon wallon
+* wol wo Wolof wolof
+* xho xh Xhosa xhosa
+ yao Yao yao
+* yap Yapese yapois
+* yid yi Yiddish yiddish
+* yor yo Yoruba yoruba
+ ypk Yupik languages yupik, langues
+ zap Zapotec zapotèque
+ zen Zenaga zenaga
+ zha za Zhuang; Chuang zhuang; chuang
+* chi/zho* zh Chinese chinois
+ znd Zande zandé
+* zul zu Zulu zoulou
+ zun Zuni zuni
+
diff --git a/chromium/third_party/fontconfig/src/fc-lang/it.orth b/chromium/third_party/fontconfig/src/fc-lang/it.orth
new file mode 100644
index 00000000000..329d2f10461
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/it.orth
@@ -0,0 +1,51 @@
+#
+# fontconfig/fc-lang/it.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Italian (IT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+#00c1
+00c8-00c9
+00cc
+00cd
+#00ce
+00cf
+00d2-00d3
+00d9
+00da
+00e0
+#00e1
+00e8-00e9
+00ec
+00ed
+#00ee
+00ef
+00f2-00f3
+00f9
+00fa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/iu.orth b/chromium/third_party/fontconfig/src/fc-lang/iu.orth
new file mode 100644
index 00000000000..24d4102c1cf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/iu.orth
@@ -0,0 +1,77 @@
+#
+# fontconfig/fc-lang/iu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Inuktitut (IU)
+#
+# Taken from alphabetic coverage of the Pigiarniq font as
+# produced by the legislative assembly of Nunavut
+# http://www.assembly.nu.ca/unicode/fonts/
+#
+1401-1406
+140a-140b
+142f-1434
+1438-1439
+1449
+144c-1451
+1455-1456
+1466
+146b-1470
+1472-1473
+1483
+1489-148e
+1490-1491
+14a1
+14a3-14a8
+14aa-14ab
+14bb
+14c0-14c5
+14c7-14c8
+14d0
+14d3-14d8
+14da-14db
+14ea
+14ed-14f2
+14f4-14f5
+14fa
+14fc
+14fe
+1500
+1502
+1505
+1526-152b
+152d-152e
+153e
+1542
+1545-1549
+154b-154c
+1550
+1553-155a
+155d
+1575-1577
+1579-157c
+157e-1585
+158b-1596
+15a0-15a6
+15a8-15ae
+166f
+1670-1676
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ja.orth b/chromium/third_party/fontconfig/src/fc-lang/ja.orth
new file mode 100644
index 00000000000..e87269b85d0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ja.orth
@@ -0,0 +1,6565 @@
+#
+# fontconfig/fc-lang/ja.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage from JIS X 0208 (1990)
+#
+0x3000 # IDEOGRAPHIC SPACE
+0x3001 # IDEOGRAPHIC COMMA
+0x3002 # IDEOGRAPHIC FULL STOP
+0x3005 # IDEOGRAPHIC ITERATION MARK
+0x3006 # IDEOGRAPHIC CLOSING MARK
+0x3007 # IDEOGRAPHIC NUMBER ZERO
+0x3041 # HIRAGANA LETTER SMALL A
+0x3042 # HIRAGANA LETTER A
+0x3043 # HIRAGANA LETTER SMALL I
+0x3044 # HIRAGANA LETTER I
+0x3045 # HIRAGANA LETTER SMALL U
+0x3046 # HIRAGANA LETTER U
+0x3047 # HIRAGANA LETTER SMALL E
+0x3048 # HIRAGANA LETTER E
+0x3049 # HIRAGANA LETTER SMALL O
+0x304A # HIRAGANA LETTER O
+0x304B # HIRAGANA LETTER KA
+0x304C # HIRAGANA LETTER GA
+0x304D # HIRAGANA LETTER KI
+0x304E # HIRAGANA LETTER GI
+0x304F # HIRAGANA LETTER KU
+0x3050 # HIRAGANA LETTER GU
+0x3051 # HIRAGANA LETTER KE
+0x3052 # HIRAGANA LETTER GE
+0x3053 # HIRAGANA LETTER KO
+0x3054 # HIRAGANA LETTER GO
+0x3055 # HIRAGANA LETTER SA
+0x3056 # HIRAGANA LETTER ZA
+0x3057 # HIRAGANA LETTER SI
+0x3058 # HIRAGANA LETTER ZI
+0x3059 # HIRAGANA LETTER SU
+0x305A # HIRAGANA LETTER ZU
+0x305B # HIRAGANA LETTER SE
+0x305C # HIRAGANA LETTER ZE
+0x305D # HIRAGANA LETTER SO
+0x305E # HIRAGANA LETTER ZO
+0x305F # HIRAGANA LETTER TA
+0x3060 # HIRAGANA LETTER DA
+0x3061 # HIRAGANA LETTER TI
+0x3062 # HIRAGANA LETTER DI
+0x3063 # HIRAGANA LETTER SMALL TU
+0x3064 # HIRAGANA LETTER TU
+0x3065 # HIRAGANA LETTER DU
+0x3066 # HIRAGANA LETTER TE
+0x3067 # HIRAGANA LETTER DE
+0x3068 # HIRAGANA LETTER TO
+0x3069 # HIRAGANA LETTER DO
+0x306A # HIRAGANA LETTER NA
+0x306B # HIRAGANA LETTER NI
+0x306C # HIRAGANA LETTER NU
+0x306D # HIRAGANA LETTER NE
+0x306E # HIRAGANA LETTER NO
+0x306F # HIRAGANA LETTER HA
+0x3070 # HIRAGANA LETTER BA
+0x3071 # HIRAGANA LETTER PA
+0x3072 # HIRAGANA LETTER HI
+0x3073 # HIRAGANA LETTER BI
+0x3074 # HIRAGANA LETTER PI
+0x3075 # HIRAGANA LETTER HU
+0x3076 # HIRAGANA LETTER BU
+0x3077 # HIRAGANA LETTER PU
+0x3078 # HIRAGANA LETTER HE
+0x3079 # HIRAGANA LETTER BE
+0x307A # HIRAGANA LETTER PE
+0x307B # HIRAGANA LETTER HO
+0x307C # HIRAGANA LETTER BO
+0x307D # HIRAGANA LETTER PO
+0x307E # HIRAGANA LETTER MA
+0x307F # HIRAGANA LETTER MI
+0x3080 # HIRAGANA LETTER MU
+0x3081 # HIRAGANA LETTER ME
+0x3082 # HIRAGANA LETTER MO
+0x3083 # HIRAGANA LETTER SMALL YA
+0x3084 # HIRAGANA LETTER YA
+0x3085 # HIRAGANA LETTER SMALL YU
+0x3086 # HIRAGANA LETTER YU
+0x3087 # HIRAGANA LETTER SMALL YO
+0x3088 # HIRAGANA LETTER YO
+0x3089 # HIRAGANA LETTER RA
+0x308A # HIRAGANA LETTER RI
+0x308B # HIRAGANA LETTER RU
+0x308C # HIRAGANA LETTER RE
+0x308D # HIRAGANA LETTER RO
+0x308E # HIRAGANA LETTER SMALL WA
+0x308F # HIRAGANA LETTER WA
+0x3090 # HIRAGANA LETTER WI
+0x3091 # HIRAGANA LETTER WE
+0x3092 # HIRAGANA LETTER WO
+0x3093 # HIRAGANA LETTER N
+0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK
+0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+0x309D # HIRAGANA ITERATION MARK
+0x309E # HIRAGANA VOICED ITERATION MARK
+0x30A1 # KATAKANA LETTER SMALL A
+0x30A2 # KATAKANA LETTER A
+0x30A3 # KATAKANA LETTER SMALL I
+0x30A4 # KATAKANA LETTER I
+0x30A5 # KATAKANA LETTER SMALL U
+0x30A6 # KATAKANA LETTER U
+0x30A7 # KATAKANA LETTER SMALL E
+0x30A8 # KATAKANA LETTER E
+0x30A9 # KATAKANA LETTER SMALL O
+0x30AA # KATAKANA LETTER O
+0x30AB # KATAKANA LETTER KA
+0x30AC # KATAKANA LETTER GA
+0x30AD # KATAKANA LETTER KI
+0x30AE # KATAKANA LETTER GI
+0x30AF # KATAKANA LETTER KU
+0x30B0 # KATAKANA LETTER GU
+0x30B1 # KATAKANA LETTER KE
+0x30B2 # KATAKANA LETTER GE
+0x30B3 # KATAKANA LETTER KO
+0x30B4 # KATAKANA LETTER GO
+0x30B5 # KATAKANA LETTER SA
+0x30B6 # KATAKANA LETTER ZA
+0x30B7 # KATAKANA LETTER SI
+0x30B8 # KATAKANA LETTER ZI
+0x30B9 # KATAKANA LETTER SU
+0x30BA # KATAKANA LETTER ZU
+0x30BB # KATAKANA LETTER SE
+0x30BC # KATAKANA LETTER ZE
+0x30BD # KATAKANA LETTER SO
+0x30BE # KATAKANA LETTER ZO
+0x30BF # KATAKANA LETTER TA
+0x30C0 # KATAKANA LETTER DA
+0x30C1 # KATAKANA LETTER TI
+0x30C2 # KATAKANA LETTER DI
+0x30C3 # KATAKANA LETTER SMALL TU
+0x30C4 # KATAKANA LETTER TU
+0x30C5 # KATAKANA LETTER DU
+0x30C6 # KATAKANA LETTER TE
+0x30C7 # KATAKANA LETTER DE
+0x30C8 # KATAKANA LETTER TO
+0x30C9 # KATAKANA LETTER DO
+0x30CA # KATAKANA LETTER NA
+0x30CB # KATAKANA LETTER NI
+0x30CC # KATAKANA LETTER NU
+0x30CD # KATAKANA LETTER NE
+0x30CE # KATAKANA LETTER NO
+0x30CF # KATAKANA LETTER HA
+0x30D0 # KATAKANA LETTER BA
+0x30D1 # KATAKANA LETTER PA
+0x30D2 # KATAKANA LETTER HI
+0x30D3 # KATAKANA LETTER BI
+0x30D4 # KATAKANA LETTER PI
+0x30D5 # KATAKANA LETTER HU
+0x30D6 # KATAKANA LETTER BU
+0x30D7 # KATAKANA LETTER PU
+0x30D8 # KATAKANA LETTER HE
+0x30D9 # KATAKANA LETTER BE
+0x30DA # KATAKANA LETTER PE
+0x30DB # KATAKANA LETTER HO
+0x30DC # KATAKANA LETTER BO
+0x30DD # KATAKANA LETTER PO
+0x30DE # KATAKANA LETTER MA
+0x30DF # KATAKANA LETTER MI
+0x30E0 # KATAKANA LETTER MU
+0x30E1 # KATAKANA LETTER ME
+0x30E2 # KATAKANA LETTER MO
+0x30E3 # KATAKANA LETTER SMALL YA
+0x30E4 # KATAKANA LETTER YA
+0x30E5 # KATAKANA LETTER SMALL YU
+0x30E6 # KATAKANA LETTER YU
+0x30E7 # KATAKANA LETTER SMALL YO
+0x30E8 # KATAKANA LETTER YO
+0x30E9 # KATAKANA LETTER RA
+0x30EA # KATAKANA LETTER RI
+0x30EB # KATAKANA LETTER RU
+0x30EC # KATAKANA LETTER RE
+0x30ED # KATAKANA LETTER RO
+0x30EE # KATAKANA LETTER SMALL WA
+0x30EF # KATAKANA LETTER WA
+0x30F0 # KATAKANA LETTER WI
+0x30F1 # KATAKANA LETTER WE
+0x30F2 # KATAKANA LETTER WO
+0x30F3 # KATAKANA LETTER N
+0x30F4 # KATAKANA LETTER VU
+0x30F5 # KATAKANA LETTER SMALL KA
+0x30F6 # KATAKANA LETTER SMALL KE
+0x30FB # KATAKANA MIDDLE DOT
+0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+0x30FD # KATAKANA ITERATION MARK
+0x30FE # KATAKANA VOICED ITERATION MARK
+0x4E00 # <CJK>
+0x4E01 # <CJK>
+0x4E03 # <CJK>
+0x4E07 # <CJK>
+0x4E08 # <CJK>
+0x4E09 # <CJK>
+0x4E0A # <CJK>
+0x4E0B # <CJK>
+0x4E0D # <CJK>
+0x4E0E # <CJK>
+0x4E10 # <CJK>
+0x4E11 # <CJK>
+0x4E14 # <CJK>
+0x4E15 # <CJK>
+0x4E16 # <CJK>
+0x4E17 # <CJK>
+0x4E18 # <CJK>
+0x4E19 # <CJK>
+0x4E1E # <CJK>
+0x4E21 # <CJK>
+0x4E26 # <CJK>
+0x4E2A # <CJK>
+0x4E2D # <CJK>
+0x4E31 # <CJK>
+0x4E32 # <CJK>
+0x4E36 # <CJK>
+0x4E38 # <CJK>
+0x4E39 # <CJK>
+0x4E3B # <CJK>
+0x4E3C # <CJK>
+0x4E3F # <CJK>
+0x4E42 # <CJK>
+0x4E43 # <CJK>
+0x4E45 # <CJK>
+0x4E4B # <CJK>
+0x4E4D # <CJK>
+0x4E4E # <CJK>
+0x4E4F # <CJK>
+0x4E55 # <CJK>
+0x4E56 # <CJK>
+0x4E57 # <CJK>
+0x4E58 # <CJK>
+0x4E59 # <CJK>
+0x4E5D # <CJK>
+0x4E5E # <CJK>
+0x4E5F # <CJK>
+0x4E62 # <CJK>
+0x4E71 # <CJK>
+0x4E73 # <CJK>
+0x4E7E # <CJK>
+0x4E80 # <CJK>
+0x4E82 # <CJK>
+0x4E85 # <CJK>
+0x4E86 # <CJK>
+0x4E88 # <CJK>
+0x4E89 # <CJK>
+0x4E8A # <CJK>
+0x4E8B # <CJK>
+0x4E8C # <CJK>
+0x4E8E # <CJK>
+0x4E91 # <CJK>
+0x4E92 # <CJK>
+0x4E94 # <CJK>
+0x4E95 # <CJK>
+0x4E98 # <CJK>
+0x4E99 # <CJK>
+0x4E9B # <CJK>
+0x4E9C # <CJK>
+0x4E9E # <CJK>
+0x4E9F # <CJK>
+0x4EA0 # <CJK>
+0x4EA1 # <CJK>
+0x4EA2 # <CJK>
+0x4EA4 # <CJK>
+0x4EA5 # <CJK>
+0x4EA6 # <CJK>
+0x4EA8 # <CJK>
+0x4EAB # <CJK>
+0x4EAC # <CJK>
+0x4EAD # <CJK>
+0x4EAE # <CJK>
+0x4EB0 # <CJK>
+0x4EB3 # <CJK>
+0x4EB6 # <CJK>
+0x4EBA # <CJK>
+0x4EC0 # <CJK>
+0x4EC1 # <CJK>
+0x4EC2 # <CJK>
+0x4EC4 # <CJK>
+0x4EC6 # <CJK>
+0x4EC7 # <CJK>
+0x4ECA # <CJK>
+0x4ECB # <CJK>
+0x4ECD # <CJK>
+0x4ECE # <CJK>
+0x4ECF # <CJK>
+0x4ED4 # <CJK>
+0x4ED5 # <CJK>
+0x4ED6 # <CJK>
+0x4ED7 # <CJK>
+0x4ED8 # <CJK>
+0x4ED9 # <CJK>
+0x4EDD # <CJK>
+0x4EDE # <CJK>
+0x4EDF # <CJK>
+0x4EE3 # <CJK>
+0x4EE4 # <CJK>
+0x4EE5 # <CJK>
+0x4EED # <CJK>
+0x4EEE # <CJK>
+0x4EF0 # <CJK>
+0x4EF2 # <CJK>
+0x4EF6 # <CJK>
+0x4EF7 # <CJK>
+0x4EFB # <CJK>
+0x4F01 # <CJK>
+0x4F09 # <CJK>
+0x4F0A # <CJK>
+0x4F0D # <CJK>
+0x4F0E # <CJK>
+0x4F0F # <CJK>
+0x4F10 # <CJK>
+0x4F11 # <CJK>
+0x4F1A # <CJK>
+0x4F1C # <CJK>
+0x4F1D # <CJK>
+0x4F2F # <CJK>
+0x4F30 # <CJK>
+0x4F34 # <CJK>
+0x4F36 # <CJK>
+0x4F38 # <CJK>
+0x4F3A # <CJK>
+0x4F3C # <CJK>
+0x4F3D # <CJK>
+0x4F43 # <CJK>
+0x4F46 # <CJK>
+0x4F47 # <CJK>
+0x4F4D # <CJK>
+0x4F4E # <CJK>
+0x4F4F # <CJK>
+0x4F50 # <CJK>
+0x4F51 # <CJK>
+0x4F53 # <CJK>
+0x4F55 # <CJK>
+0x4F57 # <CJK>
+0x4F59 # <CJK>
+0x4F5A # <CJK>
+0x4F5B # <CJK>
+0x4F5C # <CJK>
+0x4F5D # <CJK>
+0x4F5E # <CJK>
+0x4F69 # <CJK>
+0x4F6F # <CJK>
+0x4F70 # <CJK>
+0x4F73 # <CJK>
+0x4F75 # <CJK>
+0x4F76 # <CJK>
+0x4F7B # <CJK>
+0x4F7C # <CJK>
+0x4F7F # <CJK>
+0x4F83 # <CJK>
+0x4F86 # <CJK>
+0x4F88 # <CJK>
+0x4F8B # <CJK>
+0x4F8D # <CJK>
+0x4F8F # <CJK>
+0x4F91 # <CJK>
+0x4F96 # <CJK>
+0x4F98 # <CJK>
+0x4F9B # <CJK>
+0x4F9D # <CJK>
+0x4FA0 # <CJK>
+0x4FA1 # <CJK>
+0x4FAB # <CJK>
+0x4FAD # <CJK>
+0x4FAE # <CJK>
+0x4FAF # <CJK>
+0x4FB5 # <CJK>
+0x4FB6 # <CJK>
+0x4FBF # <CJK>
+0x4FC2 # <CJK>
+0x4FC3 # <CJK>
+0x4FC4 # <CJK>
+0x4FCA # <CJK>
+0x4FCE # <CJK>
+0x4FD0 # <CJK>
+0x4FD1 # <CJK>
+0x4FD4 # <CJK>
+0x4FD7 # <CJK>
+0x4FD8 # <CJK>
+0x4FDA # <CJK>
+0x4FDB # <CJK>
+0x4FDD # <CJK>
+0x4FDF # <CJK>
+0x4FE1 # <CJK>
+0x4FE3 # <CJK>
+0x4FE4 # <CJK>
+0x4FE5 # <CJK>
+0x4FEE # <CJK>
+0x4FEF # <CJK>
+0x4FF3 # <CJK>
+0x4FF5 # <CJK>
+0x4FF6 # <CJK>
+0x4FF8 # <CJK>
+0x4FFA # <CJK>
+0x4FFE # <CJK>
+0x5005 # <CJK>
+0x5006 # <CJK>
+0x5009 # <CJK>
+0x500B # <CJK>
+0x500D # <CJK>
+0x500F # <CJK>
+0x5011 # <CJK>
+0x5012 # <CJK>
+0x5014 # <CJK>
+0x5016 # <CJK>
+0x5019 # <CJK>
+0x501A # <CJK>
+0x501F # <CJK>
+0x5021 # <CJK>
+0x5023 # <CJK>
+0x5024 # <CJK>
+0x5025 # <CJK>
+0x5026 # <CJK>
+0x5028 # <CJK>
+0x5029 # <CJK>
+0x502A # <CJK>
+0x502B # <CJK>
+0x502C # <CJK>
+0x502D # <CJK>
+0x5036 # <CJK>
+0x5039 # <CJK>
+0x5043 # <CJK>
+0x5047 # <CJK>
+0x5048 # <CJK>
+0x5049 # <CJK>
+0x504F # <CJK>
+0x5050 # <CJK>
+0x5055 # <CJK>
+0x5056 # <CJK>
+0x505A # <CJK>
+0x505C # <CJK>
+0x5065 # <CJK>
+0x506C # <CJK>
+0x5072 # <CJK>
+0x5074 # <CJK>
+0x5075 # <CJK>
+0x5076 # <CJK>
+0x5078 # <CJK>
+0x507D # <CJK>
+0x5080 # <CJK>
+0x5085 # <CJK>
+0x508D # <CJK>
+0x5091 # <CJK>
+0x5098 # <CJK>
+0x5099 # <CJK>
+0x509A # <CJK>
+0x50AC # <CJK>
+0x50AD # <CJK>
+0x50B2 # <CJK>
+0x50B3 # <CJK>
+0x50B4 # <CJK>
+0x50B5 # <CJK>
+0x50B7 # <CJK>
+0x50BE # <CJK>
+0x50C2 # <CJK>
+0x50C5 # <CJK>
+0x50C9 # <CJK>
+0x50CA # <CJK>
+0x50CD # <CJK>
+0x50CF # <CJK>
+0x50D1 # <CJK>
+0x50D5 # <CJK>
+0x50D6 # <CJK>
+0x50DA # <CJK>
+0x50DE # <CJK>
+0x50E3 # <CJK>
+0x50E5 # <CJK>
+0x50E7 # <CJK>
+0x50ED # <CJK>
+0x50EE # <CJK>
+0x50F5 # <CJK>
+0x50F9 # <CJK>
+0x50FB # <CJK>
+0x5100 # <CJK>
+0x5101 # <CJK>
+0x5102 # <CJK>
+0x5104 # <CJK>
+0x5109 # <CJK>
+0x5112 # <CJK>
+0x5114 # <CJK>
+0x5115 # <CJK>
+0x5116 # <CJK>
+0x5118 # <CJK>
+0x511A # <CJK>
+0x511F # <CJK>
+0x5121 # <CJK>
+0x512A # <CJK>
+0x5132 # <CJK>
+0x5137 # <CJK>
+0x513A # <CJK>
+0x513B # <CJK>
+0x513C # <CJK>
+0x513F # <CJK>
+0x5140 # <CJK>
+0x5141 # <CJK>
+0x5143 # <CJK>
+0x5144 # <CJK>
+0x5145 # <CJK>
+0x5146 # <CJK>
+0x5147 # <CJK>
+0x5148 # <CJK>
+0x5149 # <CJK>
+0x514B # <CJK>
+0x514C # <CJK>
+0x514D # <CJK>
+0x514E # <CJK>
+0x5150 # <CJK>
+0x5152 # <CJK>
+0x5154 # <CJK>
+0x515A # <CJK>
+0x515C # <CJK>
+0x5162 # <CJK>
+0x5165 # <CJK>
+0x5168 # <CJK>
+0x5169 # <CJK>
+0x516A # <CJK>
+0x516B # <CJK>
+0x516C # <CJK>
+0x516D # <CJK>
+0x516E # <CJK>
+0x5171 # <CJK>
+0x5175 # <CJK>
+0x5176 # <CJK>
+0x5177 # <CJK>
+0x5178 # <CJK>
+0x517C # <CJK>
+0x5180 # <CJK>
+0x5182 # <CJK>
+0x5185 # <CJK>
+0x5186 # <CJK>
+0x5189 # <CJK>
+0x518A # <CJK>
+0x518C # <CJK>
+0x518D # <CJK>
+0x518F # <CJK>
+0x5190 # <CJK>
+0x5191 # <CJK>
+0x5192 # <CJK>
+0x5193 # <CJK>
+0x5195 # <CJK>
+0x5196 # <CJK>
+0x5197 # <CJK>
+0x5199 # <CJK>
+0x51A0 # <CJK>
+0x51A2 # <CJK>
+0x51A4 # <CJK>
+0x51A5 # <CJK>
+0x51A6 # <CJK>
+0x51A8 # <CJK>
+0x51A9 # <CJK>
+0x51AA # <CJK>
+0x51AB # <CJK>
+0x51AC # <CJK>
+0x51B0 # <CJK>
+0x51B1 # <CJK>
+0x51B2 # <CJK>
+0x51B3 # <CJK>
+0x51B4 # <CJK>
+0x51B5 # <CJK>
+0x51B6 # <CJK>
+0x51B7 # <CJK>
+0x51BD # <CJK>
+0x51C4 # <CJK>
+0x51C5 # <CJK>
+0x51C6 # <CJK>
+0x51C9 # <CJK>
+0x51CB # <CJK>
+0x51CC # <CJK>
+0x51CD # <CJK>
+0x51D6 # <CJK>
+0x51DB # <CJK>
+#0x51DC # <CJK> # not in kochi fonts
+0x51DD # <CJK>
+0x51E0 # <CJK>
+0x51E1 # <CJK>
+0x51E6 # <CJK>
+0x51E7 # <CJK>
+0x51E9 # <CJK>
+0x51EA # <CJK>
+0x51ED # <CJK>
+0x51F0 # <CJK>
+0x51F1 # <CJK>
+0x51F5 # <CJK>
+0x51F6 # <CJK>
+0x51F8 # <CJK>
+0x51F9 # <CJK>
+0x51FA # <CJK>
+0x51FD # <CJK>
+0x51FE # <CJK>
+0x5200 # <CJK>
+0x5203 # <CJK>
+0x5204 # <CJK>
+0x5206 # <CJK>
+0x5207 # <CJK>
+0x5208 # <CJK>
+0x520A # <CJK>
+0x520B # <CJK>
+0x520E # <CJK>
+0x5211 # <CJK>
+0x5214 # <CJK>
+0x5217 # <CJK>
+0x521D # <CJK>
+0x5224 # <CJK>
+0x5225 # <CJK>
+0x5227 # <CJK>
+0x5229 # <CJK>
+0x522A # <CJK>
+0x522E # <CJK>
+0x5230 # <CJK>
+0x5233 # <CJK>
+0x5236 # <CJK>
+0x5237 # <CJK>
+0x5238 # <CJK>
+0x5239 # <CJK>
+0x523A # <CJK>
+0x523B # <CJK>
+0x5243 # <CJK>
+0x5244 # <CJK>
+0x5247 # <CJK>
+0x524A # <CJK>
+0x524B # <CJK>
+0x524C # <CJK>
+0x524D # <CJK>
+0x524F # <CJK>
+0x5254 # <CJK>
+0x5256 # <CJK>
+0x525B # <CJK>
+0x525E # <CJK>
+0x5263 # <CJK>
+0x5264 # <CJK>
+0x5265 # <CJK>
+0x5269 # <CJK>
+0x526A # <CJK>
+0x526F # <CJK>
+0x5270 # <CJK>
+0x5271 # <CJK>
+0x5272 # <CJK>
+0x5273 # <CJK>
+0x5274 # <CJK>
+0x5275 # <CJK>
+0x527D # <CJK>
+0x527F # <CJK>
+0x5283 # <CJK>
+0x5287 # <CJK>
+0x5288 # <CJK>
+0x5289 # <CJK>
+0x528D # <CJK>
+0x5291 # <CJK>
+0x5292 # <CJK>
+0x5294 # <CJK>
+0x529B # <CJK>
+0x529F # <CJK>
+0x52A0 # <CJK>
+0x52A3 # <CJK>
+0x52A9 # <CJK>
+0x52AA # <CJK>
+0x52AB # <CJK>
+0x52AC # <CJK>
+0x52AD # <CJK>
+0x52B1 # <CJK>
+0x52B4 # <CJK>
+0x52B5 # <CJK>
+0x52B9 # <CJK>
+0x52BC # <CJK>
+0x52BE # <CJK>
+0x52C1 # <CJK>
+0x52C3 # <CJK>
+0x52C5 # <CJK>
+0x52C7 # <CJK>
+0x52C9 # <CJK>
+0x52CD # <CJK>
+0x52D2 # <CJK>
+0x52D5 # <CJK>
+0x52D7 # <CJK>
+0x52D8 # <CJK>
+0x52D9 # <CJK>
+0x52DD # <CJK>
+0x52DE # <CJK>
+0x52DF # <CJK>
+0x52E0 # <CJK>
+0x52E2 # <CJK>
+0x52E3 # <CJK>
+0x52E4 # <CJK>
+0x52E6 # <CJK>
+0x52E7 # <CJK>
+0x52F2 # <CJK>
+0x52F3 # <CJK>
+0x52F5 # <CJK>
+0x52F8 # <CJK>
+0x52F9 # <CJK>
+0x52FA # <CJK>
+0x52FE # <CJK>
+0x52FF # <CJK>
+0x5301 # <CJK>
+0x5302 # <CJK>
+0x5305 # <CJK>
+0x5306 # <CJK>
+0x5308 # <CJK>
+0x530D # <CJK>
+0x530F # <CJK>
+0x5310 # <CJK>
+0x5315 # <CJK>
+0x5316 # <CJK>
+0x5317 # <CJK>
+0x5319 # <CJK>
+0x531A # <CJK>
+0x531D # <CJK>
+0x5320 # <CJK>
+0x5321 # <CJK>
+0x5323 # <CJK>
+0x532A # <CJK>
+0x532F # <CJK>
+0x5331 # <CJK>
+0x5333 # <CJK>
+0x5338 # <CJK>
+0x5339 # <CJK>
+0x533A # <CJK>
+0x533B # <CJK>
+0x533F # <CJK>
+0x5340 # <CJK>
+0x5341 # <CJK>
+0x5343 # <CJK>
+0x5345 # <CJK>
+0x5346 # <CJK>
+0x5347 # <CJK>
+0x5348 # <CJK>
+0x5349 # <CJK>
+0x534A # <CJK>
+0x534D # <CJK>
+0x5351 # <CJK>
+0x5352 # <CJK>
+0x5353 # <CJK>
+0x5354 # <CJK>
+0x5357 # <CJK>
+0x5358 # <CJK>
+0x535A # <CJK>
+0x535C # <CJK>
+0x535E # <CJK>
+0x5360 # <CJK>
+0x5366 # <CJK>
+0x5369 # <CJK>
+0x536E # <CJK>
+0x536F # <CJK>
+0x5370 # <CJK>
+0x5371 # <CJK>
+0x5373 # <CJK>
+0x5374 # <CJK>
+0x5375 # <CJK>
+0x5377 # <CJK>
+0x5378 # <CJK>
+0x537B # <CJK>
+0x537F # <CJK>
+0x5382 # <CJK>
+0x5384 # <CJK>
+0x5396 # <CJK>
+0x5398 # <CJK>
+0x539A # <CJK>
+0x539F # <CJK>
+0x53A0 # <CJK>
+0x53A5 # <CJK>
+0x53A6 # <CJK>
+0x53A8 # <CJK>
+0x53A9 # <CJK>
+0x53AD # <CJK>
+0x53AE # <CJK>
+0x53B0 # <CJK>
+0x53B3 # <CJK>
+0x53B6 # <CJK>
+0x53BB # <CJK>
+0x53C2 # <CJK>
+0x53C3 # <CJK>
+0x53C8 # <CJK>
+0x53C9 # <CJK>
+0x53CA # <CJK>
+0x53CB # <CJK>
+0x53CC # <CJK>
+0x53CD # <CJK>
+0x53CE # <CJK>
+0x53D4 # <CJK>
+0x53D6 # <CJK>
+0x53D7 # <CJK>
+0x53D9 # <CJK>
+0x53DB # <CJK>
+0x53DF # <CJK>
+0x53E1 # <CJK>
+0x53E2 # <CJK>
+0x53E3 # <CJK>
+0x53E4 # <CJK>
+0x53E5 # <CJK>
+0x53E8 # <CJK>
+0x53E9 # <CJK>
+0x53EA # <CJK>
+0x53EB # <CJK>
+0x53EC # <CJK>
+0x53ED # <CJK>
+0x53EE # <CJK>
+0x53EF # <CJK>
+0x53F0 # <CJK>
+0x53F1 # <CJK>
+0x53F2 # <CJK>
+0x53F3 # <CJK>
+0x53F6 # <CJK>
+0x53F7 # <CJK>
+0x53F8 # <CJK>
+0x53FA # <CJK>
+0x5401 # <CJK>
+0x5403 # <CJK>
+0x5404 # <CJK>
+0x5408 # <CJK>
+0x5409 # <CJK>
+0x540A # <CJK>
+0x540B # <CJK>
+0x540C # <CJK>
+0x540D # <CJK>
+0x540E # <CJK>
+0x540F # <CJK>
+0x5410 # <CJK>
+0x5411 # <CJK>
+0x541B # <CJK>
+0x541D # <CJK>
+0x541F # <CJK>
+0x5420 # <CJK>
+0x5426 # <CJK>
+0x5429 # <CJK>
+0x542B # <CJK>
+0x542C # <CJK>
+0x542D # <CJK>
+0x542E # <CJK>
+0x5436 # <CJK>
+0x5438 # <CJK>
+0x5439 # <CJK>
+0x543B # <CJK>
+0x543C # <CJK>
+0x543D # <CJK>
+0x543E # <CJK>
+0x5440 # <CJK>
+0x5442 # <CJK>
+0x5446 # <CJK>
+0x5448 # <CJK>
+0x5449 # <CJK>
+0x544A # <CJK>
+0x544E # <CJK>
+0x5451 # <CJK>
+0x545F # <CJK>
+0x5468 # <CJK>
+0x546A # <CJK>
+0x5470 # <CJK>
+0x5471 # <CJK>
+0x5473 # <CJK>
+0x5475 # <CJK>
+0x5476 # <CJK>
+0x5477 # <CJK>
+0x547B # <CJK>
+0x547C # <CJK>
+0x547D # <CJK>
+0x5480 # <CJK>
+0x5484 # <CJK>
+0x5486 # <CJK>
+0x548B # <CJK>
+0x548C # <CJK>
+0x548E # <CJK>
+0x548F # <CJK>
+0x5490 # <CJK>
+0x5492 # <CJK>
+0x54A2 # <CJK>
+0x54A4 # <CJK>
+0x54A5 # <CJK>
+0x54A8 # <CJK>
+0x54AB # <CJK>
+0x54AC # <CJK>
+0x54AF # <CJK>
+0x54B2 # <CJK>
+0x54B3 # <CJK>
+0x54B8 # <CJK>
+0x54BC # <CJK>
+0x54BD # <CJK>
+0x54BE # <CJK>
+0x54C0 # <CJK>
+0x54C1 # <CJK>
+0x54C2 # <CJK>
+0x54C4 # <CJK>
+0x54C7 # <CJK>
+0x54C8 # <CJK>
+0x54C9 # <CJK>
+0x54D8 # <CJK>
+0x54E1 # <CJK>
+0x54E2 # <CJK>
+0x54E5 # <CJK>
+0x54E6 # <CJK>
+0x54E8 # <CJK>
+0x54E9 # <CJK>
+0x54ED # <CJK>
+0x54EE # <CJK>
+0x54F2 # <CJK>
+0x54FA # <CJK>
+0x54FD # <CJK>
+0x5504 # <CJK>
+0x5506 # <CJK>
+0x5507 # <CJK>
+0x550F # <CJK>
+0x5510 # <CJK>
+0x5514 # <CJK>
+0x5516 # <CJK>
+0x552E # <CJK>
+0x552F # <CJK>
+0x5531 # <CJK>
+0x5533 # <CJK>
+0x5538 # <CJK>
+0x5539 # <CJK>
+0x553E # <CJK>
+0x5540 # <CJK>
+0x5544 # <CJK>
+0x5545 # <CJK>
+0x5546 # <CJK>
+0x554C # <CJK>
+0x554F # <CJK>
+0x5553 # <CJK>
+0x5556 # <CJK>
+0x5557 # <CJK>
+0x555C # <CJK>
+0x555D # <CJK>
+0x5563 # <CJK>
+0x557B # <CJK>
+0x557C # <CJK>
+0x557E # <CJK>
+0x5580 # <CJK>
+0x5583 # <CJK>
+0x5584 # <CJK>
+0x5587 # <CJK>
+0x5589 # <CJK>
+0x558A # <CJK>
+0x558B # <CJK>
+0x5598 # <CJK>
+0x5599 # <CJK>
+0x559A # <CJK>
+0x559C # <CJK>
+0x559D # <CJK>
+0x559E # <CJK>
+0x559F # <CJK>
+0x55A7 # <CJK>
+0x55A8 # <CJK>
+0x55A9 # <CJK>
+0x55AA # <CJK>
+0x55AB # <CJK>
+0x55AC # <CJK>
+0x55AE # <CJK>
+0x55B0 # <CJK>
+0x55B6 # <CJK>
+0x55C4 # <CJK>
+0x55C5 # <CJK>
+0x55C7 # <CJK>
+0x55D4 # <CJK>
+0x55DA # <CJK>
+0x55DC # <CJK>
+0x55DF # <CJK>
+0x55E3 # <CJK>
+0x55E4 # <CJK>
+0x55F7 # <CJK>
+0x55F9 # <CJK>
+0x55FD # <CJK>
+0x55FE # <CJK>
+0x5606 # <CJK>
+0x5609 # <CJK>
+0x5614 # <CJK>
+0x5616 # <CJK>
+0x5617 # <CJK>
+0x5618 # <CJK>
+0x561B # <CJK>
+0x5629 # <CJK>
+0x562F # <CJK>
+0x5631 # <CJK>
+0x5632 # <CJK>
+0x5634 # <CJK>
+0x5636 # <CJK>
+0x5638 # <CJK>
+0x5642 # <CJK>
+0x564C # <CJK>
+0x564E # <CJK>
+0x5650 # <CJK>
+0x565B # <CJK>
+0x5664 # <CJK>
+0x5668 # <CJK>
+0x566A # <CJK>
+0x566B # <CJK>
+0x566C # <CJK>
+0x5674 # <CJK>
+0x5678 # <CJK>
+0x567A # <CJK>
+0x5680 # <CJK>
+0x5686 # <CJK>
+0x5687 # <CJK>
+0x568A # <CJK>
+0x568F # <CJK>
+0x5694 # <CJK>
+0x56A0 # <CJK>
+0x56A2 # <CJK>
+0x56A5 # <CJK>
+0x56AE # <CJK>
+0x56B4 # <CJK>
+0x56B6 # <CJK>
+0x56BC # <CJK>
+0x56C0 # <CJK>
+0x56C1 # <CJK>
+0x56C2 # <CJK>
+0x56C3 # <CJK>
+0x56C8 # <CJK>
+0x56CE # <CJK>
+0x56D1 # <CJK>
+0x56D3 # <CJK>
+0x56D7 # <CJK>
+0x56D8 # <CJK>
+0x56DA # <CJK>
+0x56DB # <CJK>
+0x56DE # <CJK>
+0x56E0 # <CJK>
+0x56E3 # <CJK>
+0x56EE # <CJK>
+0x56F0 # <CJK>
+0x56F2 # <CJK>
+0x56F3 # <CJK>
+0x56F9 # <CJK>
+0x56FA # <CJK>
+0x56FD # <CJK>
+0x56FF # <CJK>
+0x5700 # <CJK>
+0x5703 # <CJK>
+0x5704 # <CJK>
+0x5708 # <CJK>
+0x5709 # <CJK>
+0x570B # <CJK>
+0x570D # <CJK>
+0x570F # <CJK>
+0x5712 # <CJK>
+0x5713 # <CJK>
+0x5716 # <CJK>
+0x5718 # <CJK>
+0x571C # <CJK>
+0x571F # <CJK>
+0x5726 # <CJK>
+0x5727 # <CJK>
+0x5728 # <CJK>
+0x572D # <CJK>
+0x5730 # <CJK>
+0x5737 # <CJK>
+0x5738 # <CJK>
+0x573B # <CJK>
+0x5740 # <CJK>
+0x5742 # <CJK>
+0x5747 # <CJK>
+0x574A # <CJK>
+0x574E # <CJK>
+0x574F # <CJK>
+0x5750 # <CJK>
+0x5751 # <CJK>
+0x5761 # <CJK>
+0x5764 # <CJK>
+0x5766 # <CJK>
+0x5769 # <CJK>
+0x576A # <CJK>
+0x577F # <CJK>
+0x5782 # <CJK>
+0x5788 # <CJK>
+0x5789 # <CJK>
+0x578B # <CJK>
+0x5793 # <CJK>
+0x57A0 # <CJK>
+0x57A2 # <CJK>
+0x57A3 # <CJK>
+0x57A4 # <CJK>
+0x57AA # <CJK>
+0x57B0 # <CJK>
+0x57B3 # <CJK>
+0x57C0 # <CJK>
+0x57C3 # <CJK>
+0x57C6 # <CJK>
+0x57CB # <CJK>
+0x57CE # <CJK>
+0x57D2 # <CJK>
+0x57D3 # <CJK>
+0x57D4 # <CJK>
+0x57D6 # <CJK>
+0x57DC # <CJK>
+0x57DF # <CJK>
+0x57E0 # <CJK>
+0x57E3 # <CJK>
+0x57F4 # <CJK>
+0x57F7 # <CJK>
+0x57F9 # <CJK>
+0x57FA # <CJK>
+0x57FC # <CJK>
+0x5800 # <CJK>
+0x5802 # <CJK>
+0x5805 # <CJK>
+0x5806 # <CJK>
+0x580A # <CJK>
+0x580B # <CJK>
+0x5815 # <CJK>
+0x5819 # <CJK>
+0x581D # <CJK>
+0x5821 # <CJK>
+0x5824 # <CJK>
+0x582A # <CJK>
+0x582F # <CJK>
+0x5830 # <CJK>
+0x5831 # <CJK>
+0x5834 # <CJK>
+0x5835 # <CJK>
+0x583A # <CJK>
+0x583D # <CJK>
+0x5840 # <CJK>
+0x5841 # <CJK>
+0x584A # <CJK>
+0x584B # <CJK>
+0x5851 # <CJK>
+0x5852 # <CJK>
+0x5854 # <CJK>
+0x5857 # <CJK>
+0x5858 # <CJK>
+0x5859 # <CJK>
+0x585A # <CJK>
+0x585E # <CJK>
+0x5862 # <CJK>
+0x5869 # <CJK>
+0x586B # <CJK>
+0x5870 # <CJK>
+0x5872 # <CJK>
+0x5875 # <CJK>
+0x5879 # <CJK>
+0x587E # <CJK>
+0x5883 # <CJK>
+0x5885 # <CJK>
+0x5893 # <CJK>
+0x5897 # <CJK>
+0x589C # <CJK>
+0x589F # <CJK>
+0x58A8 # <CJK>
+0x58AB # <CJK>
+0x58AE # <CJK>
+0x58B3 # <CJK>
+0x58B8 # <CJK>
+0x58B9 # <CJK>
+0x58BA # <CJK>
+0x58BB # <CJK>
+0x58BE # <CJK>
+0x58C1 # <CJK>
+0x58C5 # <CJK>
+0x58C7 # <CJK>
+0x58CA # <CJK>
+0x58CC # <CJK>
+0x58D1 # <CJK>
+0x58D3 # <CJK>
+0x58D5 # <CJK>
+0x58D7 # <CJK>
+0x58D8 # <CJK>
+0x58D9 # <CJK>
+0x58DC # <CJK>
+0x58DE # <CJK>
+0x58DF # <CJK>
+0x58E4 # <CJK>
+0x58E5 # <CJK>
+0x58EB # <CJK>
+0x58EC # <CJK>
+0x58EE # <CJK>
+0x58EF # <CJK>
+0x58F0 # <CJK>
+0x58F1 # <CJK>
+0x58F2 # <CJK>
+0x58F7 # <CJK>
+0x58F9 # <CJK>
+0x58FA # <CJK>
+0x58FB # <CJK>
+0x58FC # <CJK>
+0x58FD # <CJK>
+0x5902 # <CJK>
+0x5909 # <CJK>
+0x590A # <CJK>
+0x590F # <CJK>
+0x5910 # <CJK>
+0x5915 # <CJK>
+0x5916 # <CJK>
+0x5918 # <CJK>
+0x5919 # <CJK>
+0x591A # <CJK>
+0x591B # <CJK>
+0x591C # <CJK>
+0x5922 # <CJK>
+0x5925 # <CJK>
+0x5927 # <CJK>
+0x5929 # <CJK>
+0x592A # <CJK>
+0x592B # <CJK>
+0x592C # <CJK>
+0x592D # <CJK>
+0x592E # <CJK>
+0x5931 # <CJK>
+0x5932 # <CJK>
+0x5937 # <CJK>
+0x5938 # <CJK>
+0x593E # <CJK>
+0x5944 # <CJK>
+0x5947 # <CJK>
+0x5948 # <CJK>
+0x5949 # <CJK>
+0x594E # <CJK>
+0x594F # <CJK>
+0x5950 # <CJK>
+0x5951 # <CJK>
+0x5954 # <CJK>
+0x5955 # <CJK>
+0x5957 # <CJK>
+0x5958 # <CJK>
+0x595A # <CJK>
+0x5960 # <CJK>
+0x5962 # <CJK>
+0x5965 # <CJK>
+0x5967 # <CJK>
+0x5968 # <CJK>
+0x5969 # <CJK>
+0x596A # <CJK>
+0x596C # <CJK>
+0x596E # <CJK>
+0x5973 # <CJK>
+0x5974 # <CJK>
+0x5978 # <CJK>
+0x597D # <CJK>
+0x5981 # <CJK>
+0x5982 # <CJK>
+0x5983 # <CJK>
+0x5984 # <CJK>
+0x598A # <CJK>
+0x598D # <CJK>
+0x5993 # <CJK>
+0x5996 # <CJK>
+0x5999 # <CJK>
+0x599B # <CJK>
+0x599D # <CJK>
+0x59A3 # <CJK>
+0x59A5 # <CJK>
+0x59A8 # <CJK>
+0x59AC # <CJK>
+0x59B2 # <CJK>
+0x59B9 # <CJK>
+0x59BB # <CJK>
+0x59BE # <CJK>
+0x59C6 # <CJK>
+0x59C9 # <CJK>
+0x59CB # <CJK>
+0x59D0 # <CJK>
+0x59D1 # <CJK>
+0x59D3 # <CJK>
+0x59D4 # <CJK>
+0x59D9 # <CJK>
+0x59DA # <CJK>
+0x59DC # <CJK>
+0x59E5 # <CJK>
+0x59E6 # <CJK>
+0x59E8 # <CJK>
+0x59EA # <CJK>
+0x59EB # <CJK>
+0x59F6 # <CJK>
+0x59FB # <CJK>
+0x59FF # <CJK>
+0x5A01 # <CJK>
+0x5A03 # <CJK>
+0x5A09 # <CJK>
+0x5A11 # <CJK>
+0x5A18 # <CJK>
+0x5A1A # <CJK>
+0x5A1C # <CJK>
+0x5A1F # <CJK>
+0x5A20 # <CJK>
+0x5A25 # <CJK>
+0x5A29 # <CJK>
+0x5A2F # <CJK>
+0x5A35 # <CJK>
+0x5A36 # <CJK>
+0x5A3C # <CJK>
+0x5A40 # <CJK>
+0x5A41 # <CJK>
+0x5A46 # <CJK>
+0x5A49 # <CJK>
+0x5A5A # <CJK>
+0x5A62 # <CJK>
+0x5A66 # <CJK>
+0x5A6A # <CJK>
+0x5A6C # <CJK>
+0x5A7F # <CJK>
+0x5A92 # <CJK>
+0x5A9A # <CJK>
+0x5A9B # <CJK>
+0x5ABC # <CJK>
+0x5ABD # <CJK>
+0x5ABE # <CJK>
+0x5AC1 # <CJK>
+0x5AC2 # <CJK>
+0x5AC9 # <CJK>
+0x5ACB # <CJK>
+0x5ACC # <CJK>
+0x5AD0 # <CJK>
+0x5AD6 # <CJK>
+0x5AD7 # <CJK>
+0x5AE1 # <CJK>
+0x5AE3 # <CJK>
+0x5AE6 # <CJK>
+0x5AE9 # <CJK>
+0x5AFA # <CJK>
+0x5AFB # <CJK>
+0x5B09 # <CJK>
+0x5B0B # <CJK>
+0x5B0C # <CJK>
+0x5B16 # <CJK>
+0x5B22 # <CJK>
+0x5B2A # <CJK>
+0x5B2C # <CJK>
+0x5B30 # <CJK>
+0x5B32 # <CJK>
+0x5B36 # <CJK>
+0x5B3E # <CJK>
+0x5B40 # <CJK>
+0x5B43 # <CJK>
+0x5B45 # <CJK>
+0x5B50 # <CJK>
+0x5B51 # <CJK>
+0x5B54 # <CJK>
+0x5B55 # <CJK>
+0x5B57 # <CJK>
+0x5B58 # <CJK>
+0x5B5A # <CJK>
+0x5B5B # <CJK>
+0x5B5C # <CJK>
+0x5B5D # <CJK>
+0x5B5F # <CJK>
+0x5B63 # <CJK>
+0x5B64 # <CJK>
+0x5B65 # <CJK>
+0x5B66 # <CJK>
+0x5B69 # <CJK>
+0x5B6B # <CJK>
+0x5B70 # <CJK>
+0x5B71 # <CJK>
+0x5B73 # <CJK>
+0x5B75 # <CJK>
+0x5B78 # <CJK>
+0x5B7A # <CJK>
+0x5B80 # <CJK>
+0x5B83 # <CJK>
+0x5B85 # <CJK>
+0x5B87 # <CJK>
+0x5B88 # <CJK>
+0x5B89 # <CJK>
+0x5B8B # <CJK>
+0x5B8C # <CJK>
+0x5B8D # <CJK>
+0x5B8F # <CJK>
+0x5B95 # <CJK>
+0x5B97 # <CJK>
+0x5B98 # <CJK>
+0x5B99 # <CJK>
+0x5B9A # <CJK>
+0x5B9B # <CJK>
+0x5B9C # <CJK>
+0x5B9D # <CJK>
+0x5B9F # <CJK>
+0x5BA2 # <CJK>
+0x5BA3 # <CJK>
+0x5BA4 # <CJK>
+0x5BA5 # <CJK>
+0x5BA6 # <CJK>
+0x5BAE # <CJK>
+0x5BB0 # <CJK>
+0x5BB3 # <CJK>
+0x5BB4 # <CJK>
+0x5BB5 # <CJK>
+0x5BB6 # <CJK>
+0x5BB8 # <CJK>
+0x5BB9 # <CJK>
+0x5BBF # <CJK>
+0x5BC2 # <CJK>
+0x5BC3 # <CJK>
+0x5BC4 # <CJK>
+0x5BC5 # <CJK>
+0x5BC6 # <CJK>
+0x5BC7 # <CJK>
+0x5BC9 # <CJK>
+0x5BCC # <CJK>
+0x5BD0 # <CJK>
+0x5BD2 # <CJK>
+0x5BD3 # <CJK>
+0x5BD4 # <CJK>
+0x5BDB # <CJK>
+0x5BDD # <CJK>
+0x5BDE # <CJK>
+0x5BDF # <CJK>
+0x5BE1 # <CJK>
+0x5BE2 # <CJK>
+0x5BE4 # <CJK>
+0x5BE5 # <CJK>
+0x5BE6 # <CJK>
+0x5BE7 # <CJK>
+0x5BE8 # <CJK>
+0x5BE9 # <CJK>
+0x5BEB # <CJK>
+0x5BEE # <CJK>
+0x5BF0 # <CJK>
+0x5BF3 # <CJK>
+0x5BF5 # <CJK>
+0x5BF6 # <CJK>
+0x5BF8 # <CJK>
+0x5BFA # <CJK>
+0x5BFE # <CJK>
+0x5BFF # <CJK>
+0x5C01 # <CJK>
+0x5C02 # <CJK>
+0x5C04 # <CJK>
+0x5C05 # <CJK>
+0x5C06 # <CJK>
+0x5C07 # <CJK>
+0x5C08 # <CJK>
+0x5C09 # <CJK>
+0x5C0A # <CJK>
+0x5C0B # <CJK>
+0x5C0D # <CJK>
+0x5C0E # <CJK>
+0x5C0F # <CJK>
+0x5C11 # <CJK>
+0x5C13 # <CJK>
+0x5C16 # <CJK>
+0x5C1A # <CJK>
+0x5C20 # <CJK>
+0x5C22 # <CJK>
+0x5C24 # <CJK>
+0x5C28 # <CJK>
+0x5C2D # <CJK>
+0x5C31 # <CJK>
+0x5C38 # <CJK>
+0x5C39 # <CJK>
+0x5C3A # <CJK>
+0x5C3B # <CJK>
+0x5C3C # <CJK>
+0x5C3D # <CJK>
+0x5C3E # <CJK>
+0x5C3F # <CJK>
+0x5C40 # <CJK>
+0x5C41 # <CJK>
+0x5C45 # <CJK>
+0x5C46 # <CJK>
+0x5C48 # <CJK>
+0x5C4A # <CJK>
+0x5C4B # <CJK>
+0x5C4D # <CJK>
+0x5C4E # <CJK>
+0x5C4F # <CJK>
+0x5C50 # <CJK>
+0x5C51 # <CJK>
+0x5C53 # <CJK>
+0x5C55 # <CJK>
+0x5C5E # <CJK>
+0x5C60 # <CJK>
+0x5C61 # <CJK>
+0x5C64 # <CJK>
+0x5C65 # <CJK>
+0x5C6C # <CJK>
+0x5C6E # <CJK>
+0x5C6F # <CJK>
+0x5C71 # <CJK>
+0x5C76 # <CJK>
+0x5C79 # <CJK>
+0x5C8C # <CJK>
+0x5C90 # <CJK>
+0x5C91 # <CJK>
+0x5C94 # <CJK>
+0x5CA1 # <CJK>
+0x5CA8 # <CJK>
+0x5CA9 # <CJK>
+0x5CAB # <CJK>
+0x5CAC # <CJK>
+0x5CB1 # <CJK>
+0x5CB3 # <CJK>
+0x5CB6 # <CJK>
+0x5CB7 # <CJK>
+0x5CB8 # <CJK>
+0x5CBB # <CJK>
+0x5CBC # <CJK>
+0x5CBE # <CJK>
+0x5CC5 # <CJK>
+0x5CC7 # <CJK>
+0x5CD9 # <CJK>
+0x5CE0 # <CJK>
+0x5CE1 # <CJK>
+0x5CE8 # <CJK>
+0x5CE9 # <CJK>
+0x5CEA # <CJK>
+0x5CED # <CJK>
+0x5CEF # <CJK>
+0x5CF0 # <CJK>
+0x5CF6 # <CJK>
+0x5CFA # <CJK>
+0x5CFB # <CJK>
+0x5CFD # <CJK>
+0x5D07 # <CJK>
+0x5D0B # <CJK>
+0x5D0E # <CJK>
+0x5D11 # <CJK>
+0x5D14 # <CJK>
+0x5D15 # <CJK>
+0x5D16 # <CJK>
+0x5D17 # <CJK>
+0x5D18 # <CJK>
+0x5D19 # <CJK>
+0x5D1A # <CJK>
+0x5D1B # <CJK>
+0x5D1F # <CJK>
+0x5D22 # <CJK>
+0x5D29 # <CJK>
+0x5D4B # <CJK>
+0x5D4C # <CJK>
+0x5D4E # <CJK>
+0x5D50 # <CJK>
+0x5D52 # <CJK>
+0x5D5C # <CJK>
+0x5D69 # <CJK>
+0x5D6C # <CJK>
+0x5D6F # <CJK>
+0x5D73 # <CJK>
+0x5D76 # <CJK>
+0x5D82 # <CJK>
+0x5D84 # <CJK>
+0x5D87 # <CJK>
+0x5D8B # <CJK>
+0x5D8C # <CJK>
+0x5D90 # <CJK>
+0x5D9D # <CJK>
+0x5DA2 # <CJK>
+0x5DAC # <CJK>
+0x5DAE # <CJK>
+0x5DB7 # <CJK>
+0x5DBA # <CJK>
+0x5DBC # <CJK>
+0x5DBD # <CJK>
+0x5DC9 # <CJK>
+0x5DCC # <CJK>
+0x5DCD # <CJK>
+0x5DD2 # <CJK>
+0x5DD3 # <CJK>
+0x5DD6 # <CJK>
+0x5DDB # <CJK>
+0x5DDD # <CJK>
+0x5DDE # <CJK>
+0x5DE1 # <CJK>
+0x5DE3 # <CJK>
+0x5DE5 # <CJK>
+0x5DE6 # <CJK>
+0x5DE7 # <CJK>
+0x5DE8 # <CJK>
+0x5DEB # <CJK>
+0x5DEE # <CJK>
+0x5DF1 # <CJK>
+0x5DF2 # <CJK>
+0x5DF3 # <CJK>
+0x5DF4 # <CJK>
+0x5DF5 # <CJK>
+0x5DF7 # <CJK>
+0x5DFB # <CJK>
+0x5DFD # <CJK>
+0x5DFE # <CJK>
+0x5E02 # <CJK>
+0x5E03 # <CJK>
+0x5E06 # <CJK>
+0x5E0B # <CJK>
+0x5E0C # <CJK>
+0x5E11 # <CJK>
+0x5E16 # <CJK>
+0x5E19 # <CJK>
+0x5E1A # <CJK>
+0x5E1B # <CJK>
+0x5E1D # <CJK>
+0x5E25 # <CJK>
+0x5E2B # <CJK>
+0x5E2D # <CJK>
+0x5E2F # <CJK>
+0x5E30 # <CJK>
+0x5E33 # <CJK>
+0x5E36 # <CJK>
+0x5E37 # <CJK>
+0x5E38 # <CJK>
+0x5E3D # <CJK>
+0x5E40 # <CJK>
+0x5E43 # <CJK>
+0x5E44 # <CJK>
+0x5E45 # <CJK>
+0x5E47 # <CJK>
+0x5E4C # <CJK>
+0x5E4E # <CJK>
+0x5E54 # <CJK>
+0x5E55 # <CJK>
+0x5E57 # <CJK>
+0x5E5F # <CJK>
+0x5E61 # <CJK>
+0x5E62 # <CJK>
+0x5E63 # <CJK>
+0x5E64 # <CJK>
+0x5E72 # <CJK>
+0x5E73 # <CJK>
+0x5E74 # <CJK>
+0x5E75 # <CJK>
+0x5E76 # <CJK>
+0x5E78 # <CJK>
+0x5E79 # <CJK>
+0x5E7A # <CJK>
+0x5E7B # <CJK>
+0x5E7C # <CJK>
+0x5E7D # <CJK>
+0x5E7E # <CJK>
+0x5E7F # <CJK>
+0x5E81 # <CJK>
+0x5E83 # <CJK>
+0x5E84 # <CJK>
+0x5E87 # <CJK>
+0x5E8A # <CJK>
+0x5E8F # <CJK>
+0x5E95 # <CJK>
+0x5E96 # <CJK>
+0x5E97 # <CJK>
+0x5E9A # <CJK>
+0x5E9C # <CJK>
+0x5EA0 # <CJK>
+0x5EA6 # <CJK>
+0x5EA7 # <CJK>
+0x5EAB # <CJK>
+0x5EAD # <CJK>
+0x5EB5 # <CJK>
+0x5EB6 # <CJK>
+0x5EB7 # <CJK>
+0x5EB8 # <CJK>
+0x5EC1 # <CJK>
+0x5EC2 # <CJK>
+0x5EC3 # <CJK>
+0x5EC8 # <CJK>
+0x5EC9 # <CJK>
+0x5ECA # <CJK>
+0x5ECF # <CJK>
+0x5ED0 # <CJK>
+0x5ED3 # <CJK>
+0x5ED6 # <CJK>
+0x5EDA # <CJK>
+0x5EDB # <CJK>
+0x5EDD # <CJK>
+0x5EDF # <CJK>
+0x5EE0 # <CJK>
+0x5EE1 # <CJK>
+0x5EE2 # <CJK>
+0x5EE3 # <CJK>
+0x5EE8 # <CJK>
+0x5EE9 # <CJK>
+0x5EEC # <CJK>
+0x5EF0 # <CJK>
+0x5EF1 # <CJK>
+0x5EF3 # <CJK>
+0x5EF4 # <CJK>
+0x5EF6 # <CJK>
+0x5EF7 # <CJK>
+0x5EF8 # <CJK>
+0x5EFA # <CJK>
+0x5EFB # <CJK>
+0x5EFC # <CJK>
+0x5EFE # <CJK>
+0x5EFF # <CJK>
+0x5F01 # <CJK>
+0x5F03 # <CJK>
+0x5F04 # <CJK>
+0x5F09 # <CJK>
+0x5F0A # <CJK>
+0x5F0B # <CJK>
+0x5F0C # <CJK>
+0x5F0D # <CJK>
+0x5F0F # <CJK>
+0x5F10 # <CJK>
+0x5F11 # <CJK>
+0x5F13 # <CJK>
+0x5F14 # <CJK>
+0x5F15 # <CJK>
+0x5F16 # <CJK>
+0x5F17 # <CJK>
+0x5F18 # <CJK>
+0x5F1B # <CJK>
+0x5F1F # <CJK>
+0x5F25 # <CJK>
+0x5F26 # <CJK>
+0x5F27 # <CJK>
+0x5F29 # <CJK>
+0x5F2D # <CJK>
+0x5F2F # <CJK>
+0x5F31 # <CJK>
+0x5F35 # <CJK>
+0x5F37 # <CJK>
+0x5F38 # <CJK>
+0x5F3C # <CJK>
+0x5F3E # <CJK>
+0x5F41 # <CJK>
+0x5F48 # <CJK>
+0x5F4A # <CJK>
+0x5F4C # <CJK>
+0x5F4E # <CJK>
+0x5F51 # <CJK>
+0x5F53 # <CJK>
+0x5F56 # <CJK>
+0x5F57 # <CJK>
+0x5F59 # <CJK>
+0x5F5C # <CJK>
+0x5F5D # <CJK>
+0x5F61 # <CJK>
+0x5F62 # <CJK>
+0x5F66 # <CJK>
+0x5F69 # <CJK>
+0x5F6A # <CJK>
+0x5F6B # <CJK>
+0x5F6C # <CJK>
+0x5F6D # <CJK>
+0x5F70 # <CJK>
+0x5F71 # <CJK>
+0x5F73 # <CJK>
+0x5F77 # <CJK>
+0x5F79 # <CJK>
+0x5F7C # <CJK>
+0x5F7F # <CJK>
+0x5F80 # <CJK>
+0x5F81 # <CJK>
+0x5F82 # <CJK>
+0x5F83 # <CJK>
+0x5F84 # <CJK>
+0x5F85 # <CJK>
+0x5F87 # <CJK>
+0x5F88 # <CJK>
+0x5F8A # <CJK>
+0x5F8B # <CJK>
+0x5F8C # <CJK>
+0x5F90 # <CJK>
+0x5F91 # <CJK>
+0x5F92 # <CJK>
+0x5F93 # <CJK>
+0x5F97 # <CJK>
+0x5F98 # <CJK>
+0x5F99 # <CJK>
+0x5F9E # <CJK>
+0x5FA0 # <CJK>
+0x5FA1 # <CJK>
+0x5FA8 # <CJK>
+0x5FA9 # <CJK>
+0x5FAA # <CJK>
+0x5FAD # <CJK>
+0x5FAE # <CJK>
+0x5FB3 # <CJK>
+0x5FB4 # <CJK>
+0x5FB9 # <CJK>
+0x5FBC # <CJK>
+0x5FBD # <CJK>
+0x5FC3 # <CJK>
+0x5FC5 # <CJK>
+0x5FCC # <CJK>
+0x5FCD # <CJK>
+0x5FD6 # <CJK>
+0x5FD7 # <CJK>
+0x5FD8 # <CJK>
+0x5FD9 # <CJK>
+0x5FDC # <CJK>
+0x5FDD # <CJK>
+0x5FE0 # <CJK>
+0x5FE4 # <CJK>
+0x5FEB # <CJK>
+0x5FF0 # <CJK>
+0x5FF1 # <CJK>
+0x5FF5 # <CJK>
+0x5FF8 # <CJK>
+0x5FFB # <CJK>
+0x5FFD # <CJK>
+0x5FFF # <CJK>
+0x600E # <CJK>
+0x600F # <CJK>
+0x6010 # <CJK>
+0x6012 # <CJK>
+0x6015 # <CJK>
+0x6016 # <CJK>
+0x6019 # <CJK>
+0x601B # <CJK>
+0x601C # <CJK>
+0x601D # <CJK>
+0x6020 # <CJK>
+0x6021 # <CJK>
+0x6025 # <CJK>
+0x6026 # <CJK>
+0x6027 # <CJK>
+0x6028 # <CJK>
+0x6029 # <CJK>
+0x602A # <CJK>
+0x602B # <CJK>
+0x602F # <CJK>
+0x6031 # <CJK>
+0x603A # <CJK>
+0x6041 # <CJK>
+0x6042 # <CJK>
+0x6043 # <CJK>
+0x6046 # <CJK>
+0x604A # <CJK>
+0x604B # <CJK>
+0x604D # <CJK>
+0x6050 # <CJK>
+0x6052 # <CJK>
+0x6055 # <CJK>
+0x6059 # <CJK>
+0x605A # <CJK>
+0x605F # <CJK>
+0x6060 # <CJK>
+0x6062 # <CJK>
+0x6063 # <CJK>
+0x6064 # <CJK>
+0x6065 # <CJK>
+0x6068 # <CJK>
+0x6069 # <CJK>
+0x606A # <CJK>
+0x606B # <CJK>
+0x606C # <CJK>
+0x606D # <CJK>
+0x606F # <CJK>
+0x6070 # <CJK>
+0x6075 # <CJK>
+0x6077 # <CJK>
+0x6081 # <CJK>
+0x6083 # <CJK>
+0x6084 # <CJK>
+0x6089 # <CJK>
+0x608B # <CJK>
+0x608C # <CJK>
+0x608D # <CJK>
+0x6092 # <CJK>
+0x6094 # <CJK>
+0x6096 # <CJK>
+0x6097 # <CJK>
+0x609A # <CJK>
+0x609B # <CJK>
+0x609F # <CJK>
+0x60A0 # <CJK>
+0x60A3 # <CJK>
+0x60A6 # <CJK>
+0x60A7 # <CJK>
+0x60A9 # <CJK>
+0x60AA # <CJK>
+0x60B2 # <CJK>
+0x60B3 # <CJK>
+0x60B4 # <CJK>
+0x60B5 # <CJK>
+0x60B6 # <CJK>
+0x60B8 # <CJK>
+0x60BC # <CJK>
+0x60BD # <CJK>
+0x60C5 # <CJK>
+0x60C6 # <CJK>
+0x60C7 # <CJK>
+0x60D1 # <CJK>
+0x60D3 # <CJK>
+0x60D8 # <CJK>
+0x60DA # <CJK>
+0x60DC # <CJK>
+0x60DF # <CJK>
+0x60E0 # <CJK>
+0x60E1 # <CJK>
+0x60E3 # <CJK>
+0x60E7 # <CJK>
+0x60E8 # <CJK>
+0x60F0 # <CJK>
+0x60F1 # <CJK>
+0x60F3 # <CJK>
+0x60F4 # <CJK>
+0x60F6 # <CJK>
+0x60F7 # <CJK>
+0x60F9 # <CJK>
+0x60FA # <CJK>
+0x60FB # <CJK>
+0x6100 # <CJK>
+0x6101 # <CJK>
+0x6103 # <CJK>
+0x6106 # <CJK>
+0x6108 # <CJK>
+0x6109 # <CJK>
+0x610D # <CJK>
+0x610E # <CJK>
+0x610F # <CJK>
+0x6115 # <CJK>
+0x611A # <CJK>
+0x611B # <CJK>
+0x611F # <CJK>
+0x6121 # <CJK>
+0x6127 # <CJK>
+0x6128 # <CJK>
+0x612C # <CJK>
+0x6134 # <CJK>
+0x613C # <CJK>
+0x613D # <CJK>
+0x613E # <CJK>
+0x613F # <CJK>
+0x6142 # <CJK>
+0x6144 # <CJK>
+0x6147 # <CJK>
+0x6148 # <CJK>
+0x614A # <CJK>
+0x614B # <CJK>
+0x614C # <CJK>
+0x614D # <CJK>
+0x614E # <CJK>
+0x6153 # <CJK>
+0x6155 # <CJK>
+0x6158 # <CJK>
+0x6159 # <CJK>
+0x615A # <CJK>
+0x615D # <CJK>
+0x615F # <CJK>
+0x6162 # <CJK>
+0x6163 # <CJK>
+0x6165 # <CJK>
+0x6167 # <CJK>
+0x6168 # <CJK>
+0x616B # <CJK>
+0x616E # <CJK>
+0x616F # <CJK>
+0x6170 # <CJK>
+0x6171 # <CJK>
+0x6173 # <CJK>
+0x6174 # <CJK>
+0x6175 # <CJK>
+0x6176 # <CJK>
+0x6177 # <CJK>
+0x617E # <CJK>
+0x6182 # <CJK>
+0x6187 # <CJK>
+0x618A # <CJK>
+0x618E # <CJK>
+0x6190 # <CJK>
+0x6191 # <CJK>
+0x6194 # <CJK>
+0x6196 # <CJK>
+0x6199 # <CJK>
+0x619A # <CJK>
+0x61A4 # <CJK>
+0x61A7 # <CJK>
+0x61A9 # <CJK>
+0x61AB # <CJK>
+0x61AC # <CJK>
+0x61AE # <CJK>
+0x61B2 # <CJK>
+0x61B6 # <CJK>
+0x61BA # <CJK>
+0x61BE # <CJK>
+0x61C3 # <CJK>
+0x61C6 # <CJK>
+0x61C7 # <CJK>
+0x61C8 # <CJK>
+0x61C9 # <CJK>
+0x61CA # <CJK>
+0x61CB # <CJK>
+0x61CC # <CJK>
+0x61CD # <CJK>
+0x61D0 # <CJK>
+0x61E3 # <CJK>
+0x61E6 # <CJK>
+0x61F2 # <CJK>
+0x61F4 # <CJK>
+0x61F6 # <CJK>
+0x61F7 # <CJK>
+0x61F8 # <CJK>
+0x61FA # <CJK>
+0x61FC # <CJK>
+0x61FD # <CJK>
+0x61FE # <CJK>
+0x61FF # <CJK>
+0x6200 # <CJK>
+0x6208 # <CJK>
+0x6209 # <CJK>
+0x620A # <CJK>
+0x620C # <CJK>
+0x620D # <CJK>
+0x620E # <CJK>
+0x6210 # <CJK>
+0x6211 # <CJK>
+0x6212 # <CJK>
+0x6214 # <CJK>
+0x6216 # <CJK>
+0x621A # <CJK>
+0x621B # <CJK>
+0x621D # <CJK>
+0x621E # <CJK>
+0x621F # <CJK>
+0x6221 # <CJK>
+0x6226 # <CJK>
+0x622A # <CJK>
+0x622E # <CJK>
+0x622F # <CJK>
+0x6230 # <CJK>
+0x6232 # <CJK>
+0x6233 # <CJK>
+0x6234 # <CJK>
+0x6238 # <CJK>
+0x623B # <CJK>
+0x623F # <CJK>
+0x6240 # <CJK>
+0x6241 # <CJK>
+0x6247 # <CJK>
+0x6248 # <CJK>
+0x6249 # <CJK>
+0x624B # <CJK>
+0x624D # <CJK>
+0x624E # <CJK>
+0x6253 # <CJK>
+0x6255 # <CJK>
+0x6258 # <CJK>
+0x625B # <CJK>
+0x625E # <CJK>
+0x6260 # <CJK>
+0x6263 # <CJK>
+0x6268 # <CJK>
+0x626E # <CJK>
+0x6271 # <CJK>
+0x6276 # <CJK>
+0x6279 # <CJK>
+0x627C # <CJK>
+0x627E # <CJK>
+0x627F # <CJK>
+0x6280 # <CJK>
+0x6282 # <CJK>
+0x6283 # <CJK>
+0x6284 # <CJK>
+0x6289 # <CJK>
+0x628A # <CJK>
+0x6291 # <CJK>
+0x6292 # <CJK>
+0x6293 # <CJK>
+0x6294 # <CJK>
+0x6295 # <CJK>
+0x6296 # <CJK>
+0x6297 # <CJK>
+0x6298 # <CJK>
+0x629B # <CJK>
+0x629C # <CJK>
+0x629E # <CJK>
+0x62AB # <CJK>
+0x62AC # <CJK>
+0x62B1 # <CJK>
+0x62B5 # <CJK>
+0x62B9 # <CJK>
+0x62BB # <CJK>
+0x62BC # <CJK>
+0x62BD # <CJK>
+0x62C2 # <CJK>
+0x62C5 # <CJK>
+0x62C6 # <CJK>
+0x62C7 # <CJK>
+0x62C8 # <CJK>
+0x62C9 # <CJK>
+0x62CA # <CJK>
+0x62CC # <CJK>
+0x62CD # <CJK>
+0x62CF # <CJK>
+0x62D0 # <CJK>
+0x62D1 # <CJK>
+0x62D2 # <CJK>
+0x62D3 # <CJK>
+0x62D4 # <CJK>
+0x62D7 # <CJK>
+0x62D8 # <CJK>
+0x62D9 # <CJK>
+0x62DB # <CJK>
+0x62DC # <CJK>
+0x62DD # <CJK>
+0x62E0 # <CJK>
+0x62E1 # <CJK>
+0x62EC # <CJK>
+0x62ED # <CJK>
+0x62EE # <CJK>
+0x62EF # <CJK>
+0x62F1 # <CJK>
+0x62F3 # <CJK>
+0x62F5 # <CJK>
+0x62F6 # <CJK>
+0x62F7 # <CJK>
+0x62FE # <CJK>
+0x62FF # <CJK>
+0x6301 # <CJK>
+0x6302 # <CJK>
+0x6307 # <CJK>
+0x6308 # <CJK>
+0x6309 # <CJK>
+0x630C # <CJK>
+0x6311 # <CJK>
+0x6319 # <CJK>
+0x631F # <CJK>
+0x6327 # <CJK>
+0x6328 # <CJK>
+0x632B # <CJK>
+0x632F # <CJK>
+0x633A # <CJK>
+0x633D # <CJK>
+0x633E # <CJK>
+0x633F # <CJK>
+0x6349 # <CJK>
+0x634C # <CJK>
+0x634D # <CJK>
+0x634F # <CJK>
+0x6350 # <CJK>
+0x6355 # <CJK>
+0x6357 # <CJK>
+0x635C # <CJK>
+0x6367 # <CJK>
+0x6368 # <CJK>
+0x6369 # <CJK>
+0x636B # <CJK>
+0x636E # <CJK>
+0x6372 # <CJK>
+0x6376 # <CJK>
+0x6377 # <CJK>
+0x637A # <CJK>
+0x637B # <CJK>
+0x6380 # <CJK>
+0x6383 # <CJK>
+0x6388 # <CJK>
+0x6389 # <CJK>
+0x638C # <CJK>
+0x638E # <CJK>
+0x638F # <CJK>
+0x6392 # <CJK>
+0x6396 # <CJK>
+0x6398 # <CJK>
+0x639B # <CJK>
+0x639F # <CJK>
+0x63A0 # <CJK>
+0x63A1 # <CJK>
+0x63A2 # <CJK>
+0x63A3 # <CJK>
+0x63A5 # <CJK>
+0x63A7 # <CJK>
+0x63A8 # <CJK>
+0x63A9 # <CJK>
+0x63AA # <CJK>
+0x63AB # <CJK>
+0x63AC # <CJK>
+0x63B2 # <CJK>
+0x63B4 # <CJK>
+0x63B5 # <CJK>
+0x63BB # <CJK>
+0x63BE # <CJK>
+0x63C0 # <CJK>
+0x63C3 # <CJK>
+0x63C4 # <CJK>
+0x63C6 # <CJK>
+0x63C9 # <CJK>
+0x63CF # <CJK>
+0x63D0 # <CJK>
+0x63D2 # <CJK>
+0x63D6 # <CJK>
+0x63DA # <CJK>
+0x63DB # <CJK>
+0x63E1 # <CJK>
+0x63E3 # <CJK>
+0x63E9 # <CJK>
+0x63EE # <CJK>
+0x63F4 # <CJK>
+0x63F6 # <CJK>
+0x63FA # <CJK>
+0x6406 # <CJK>
+0x640D # <CJK>
+0x640F # <CJK>
+0x6413 # <CJK>
+0x6416 # <CJK>
+0x6417 # <CJK>
+0x641C # <CJK>
+0x6426 # <CJK>
+0x6428 # <CJK>
+0x642C # <CJK>
+0x642D # <CJK>
+0x6434 # <CJK>
+0x6436 # <CJK>
+0x643A # <CJK>
+0x643E # <CJK>
+0x6442 # <CJK>
+0x644E # <CJK>
+0x6458 # <CJK>
+0x6467 # <CJK>
+0x6469 # <CJK>
+0x646F # <CJK>
+0x6476 # <CJK>
+0x6478 # <CJK>
+0x647A # <CJK>
+0x6483 # <CJK>
+0x6488 # <CJK>
+0x6492 # <CJK>
+0x6493 # <CJK>
+0x6495 # <CJK>
+0x649A # <CJK>
+0x649E # <CJK>
+0x64A4 # <CJK>
+0x64A5 # <CJK>
+0x64A9 # <CJK>
+0x64AB # <CJK>
+0x64AD # <CJK>
+0x64AE # <CJK>
+0x64B0 # <CJK>
+0x64B2 # <CJK>
+0x64B9 # <CJK>
+0x64BB # <CJK>
+0x64BC # <CJK>
+0x64C1 # <CJK>
+0x64C2 # <CJK>
+0x64C5 # <CJK>
+0x64C7 # <CJK>
+0x64CD # <CJK>
+0x64D2 # <CJK>
+0x64D4 # <CJK>
+0x64D8 # <CJK>
+0x64DA # <CJK>
+0x64E0 # <CJK>
+0x64E1 # <CJK>
+0x64E2 # <CJK>
+0x64E3 # <CJK>
+0x64E6 # <CJK>
+0x64E7 # <CJK>
+0x64EC # <CJK>
+0x64EF # <CJK>
+0x64F1 # <CJK>
+0x64F2 # <CJK>
+0x64F4 # <CJK>
+0x64F6 # <CJK>
+0x64FA # <CJK>
+0x64FD # <CJK>
+0x64FE # <CJK>
+0x6500 # <CJK>
+0x6505 # <CJK>
+0x6518 # <CJK>
+0x651C # <CJK>
+0x651D # <CJK>
+0x6523 # <CJK>
+0x6524 # <CJK>
+0x652A # <CJK>
+0x652B # <CJK>
+0x652C # <CJK>
+0x652F # <CJK>
+0x6534 # <CJK>
+0x6535 # <CJK>
+0x6536 # <CJK>
+0x6537 # <CJK>
+0x6538 # <CJK>
+0x6539 # <CJK>
+0x653B # <CJK>
+0x653E # <CJK>
+0x653F # <CJK>
+0x6545 # <CJK>
+0x6548 # <CJK>
+0x654D # <CJK>
+0x654F # <CJK>
+0x6551 # <CJK>
+0x6555 # <CJK>
+0x6556 # <CJK>
+0x6557 # <CJK>
+0x6558 # <CJK>
+0x6559 # <CJK>
+0x655D # <CJK>
+0x655E # <CJK>
+0x6562 # <CJK>
+0x6563 # <CJK>
+0x6566 # <CJK>
+0x656C # <CJK>
+0x6570 # <CJK>
+0x6572 # <CJK>
+0x6574 # <CJK>
+0x6575 # <CJK>
+0x6577 # <CJK>
+0x6578 # <CJK>
+0x6582 # <CJK>
+0x6583 # <CJK>
+0x6587 # <CJK>
+0x6588 # <CJK>
+0x6589 # <CJK>
+0x658C # <CJK>
+0x658E # <CJK>
+0x6590 # <CJK>
+0x6591 # <CJK>
+0x6597 # <CJK>
+0x6599 # <CJK>
+0x659B # <CJK>
+0x659C # <CJK>
+0x659F # <CJK>
+0x65A1 # <CJK>
+0x65A4 # <CJK>
+0x65A5 # <CJK>
+0x65A7 # <CJK>
+0x65AB # <CJK>
+0x65AC # <CJK>
+0x65AD # <CJK>
+0x65AF # <CJK>
+0x65B0 # <CJK>
+0x65B7 # <CJK>
+0x65B9 # <CJK>
+0x65BC # <CJK>
+0x65BD # <CJK>
+0x65C1 # <CJK>
+0x65C3 # <CJK>
+0x65C4 # <CJK>
+0x65C5 # <CJK>
+0x65C6 # <CJK>
+0x65CB # <CJK>
+0x65CC # <CJK>
+0x65CF # <CJK>
+0x65D2 # <CJK>
+0x65D7 # <CJK>
+0x65D9 # <CJK>
+0x65DB # <CJK>
+0x65E0 # <CJK>
+0x65E1 # <CJK>
+0x65E2 # <CJK>
+0x65E5 # <CJK>
+0x65E6 # <CJK>
+0x65E7 # <CJK>
+0x65E8 # <CJK>
+0x65E9 # <CJK>
+0x65EC # <CJK>
+0x65ED # <CJK>
+0x65F1 # <CJK>
+0x65FA # <CJK>
+0x65FB # <CJK>
+0x6602 # <CJK>
+0x6603 # <CJK>
+0x6606 # <CJK>
+0x6607 # <CJK>
+0x660A # <CJK>
+0x660C # <CJK>
+0x660E # <CJK>
+0x660F # <CJK>
+0x6613 # <CJK>
+0x6614 # <CJK>
+0x661C # <CJK>
+0x661F # <CJK>
+0x6620 # <CJK>
+0x6625 # <CJK>
+0x6627 # <CJK>
+0x6628 # <CJK>
+0x662D # <CJK>
+0x662F # <CJK>
+0x6634 # <CJK>
+0x6635 # <CJK>
+0x6636 # <CJK>
+0x663C # <CJK>
+0x663F # <CJK>
+0x6641 # <CJK>
+0x6642 # <CJK>
+0x6643 # <CJK>
+0x6644 # <CJK>
+0x6649 # <CJK>
+0x664B # <CJK>
+0x664F # <CJK>
+0x6652 # <CJK>
+0x665D # <CJK>
+0x665E # <CJK>
+0x665F # <CJK>
+0x6662 # <CJK>
+0x6664 # <CJK>
+0x6666 # <CJK>
+0x6667 # <CJK>
+0x6668 # <CJK>
+0x6669 # <CJK>
+0x666E # <CJK>
+0x666F # <CJK>
+0x6670 # <CJK>
+0x6674 # <CJK>
+0x6676 # <CJK>
+0x667A # <CJK>
+0x6681 # <CJK>
+0x6683 # <CJK>
+0x6684 # <CJK>
+0x6687 # <CJK>
+0x6688 # <CJK>
+0x6689 # <CJK>
+0x668E # <CJK>
+0x6691 # <CJK>
+0x6696 # <CJK>
+0x6697 # <CJK>
+0x6698 # <CJK>
+0x669D # <CJK>
+0x66A2 # <CJK>
+0x66A6 # <CJK>
+0x66AB # <CJK>
+0x66AE # <CJK>
+0x66B4 # <CJK>
+0x66B8 # <CJK>
+0x66B9 # <CJK>
+0x66BC # <CJK>
+0x66BE # <CJK>
+0x66C1 # <CJK>
+0x66C4 # <CJK>
+0x66C7 # <CJK>
+0x66C9 # <CJK>
+0x66D6 # <CJK>
+0x66D9 # <CJK>
+0x66DA # <CJK>
+0x66DC # <CJK>
+0x66DD # <CJK>
+0x66E0 # <CJK>
+0x66E6 # <CJK>
+0x66E9 # <CJK>
+0x66F0 # <CJK>
+0x66F2 # <CJK>
+0x66F3 # <CJK>
+0x66F4 # <CJK>
+0x66F5 # <CJK>
+0x66F7 # <CJK>
+0x66F8 # <CJK>
+0x66F9 # <CJK>
+0x66FC # <CJK>
+0x66FD # <CJK>
+0x66FE # <CJK>
+0x66FF # <CJK>
+0x6700 # <CJK>
+0x6703 # <CJK>
+0x6708 # <CJK>
+0x6709 # <CJK>
+0x670B # <CJK>
+0x670D # <CJK>
+0x670F # <CJK>
+0x6714 # <CJK>
+0x6715 # <CJK>
+0x6716 # <CJK>
+0x6717 # <CJK>
+0x671B # <CJK>
+0x671D # <CJK>
+0x671E # <CJK>
+0x671F # <CJK>
+0x6726 # <CJK>
+0x6727 # <CJK>
+0x6728 # <CJK>
+0x672A # <CJK>
+0x672B # <CJK>
+0x672C # <CJK>
+0x672D # <CJK>
+0x672E # <CJK>
+0x6731 # <CJK>
+0x6734 # <CJK>
+0x6736 # <CJK>
+0x6737 # <CJK>
+0x6738 # <CJK>
+0x673A # <CJK>
+0x673D # <CJK>
+0x673F # <CJK>
+0x6741 # <CJK>
+0x6746 # <CJK>
+0x6749 # <CJK>
+0x674E # <CJK>
+0x674F # <CJK>
+0x6750 # <CJK>
+0x6751 # <CJK>
+0x6753 # <CJK>
+0x6756 # <CJK>
+0x6759 # <CJK>
+0x675C # <CJK>
+0x675E # <CJK>
+0x675F # <CJK>
+0x6760 # <CJK>
+0x6761 # <CJK>
+0x6762 # <CJK>
+0x6763 # <CJK>
+0x6764 # <CJK>
+0x6765 # <CJK>
+0x676A # <CJK>
+0x676D # <CJK>
+0x676F # <CJK>
+0x6770 # <CJK>
+0x6771 # <CJK>
+0x6772 # <CJK>
+0x6773 # <CJK>
+0x6775 # <CJK>
+0x6777 # <CJK>
+0x677C # <CJK>
+0x677E # <CJK>
+0x677F # <CJK>
+0x6785 # <CJK>
+0x6787 # <CJK>
+0x6789 # <CJK>
+0x678B # <CJK>
+0x678C # <CJK>
+0x6790 # <CJK>
+0x6795 # <CJK>
+0x6797 # <CJK>
+0x679A # <CJK>
+0x679C # <CJK>
+0x679D # <CJK>
+0x67A0 # <CJK>
+0x67A1 # <CJK>
+0x67A2 # <CJK>
+0x67A6 # <CJK>
+0x67A9 # <CJK>
+0x67AF # <CJK>
+0x67B3 # <CJK>
+0x67B4 # <CJK>
+0x67B6 # <CJK>
+0x67B7 # <CJK>
+0x67B8 # <CJK>
+0x67B9 # <CJK>
+0x67C1 # <CJK>
+0x67C4 # <CJK>
+0x67C6 # <CJK>
+0x67CA # <CJK>
+0x67CE # <CJK>
+0x67CF # <CJK>
+0x67D0 # <CJK>
+0x67D1 # <CJK>
+0x67D3 # <CJK>
+0x67D4 # <CJK>
+0x67D8 # <CJK>
+0x67DA # <CJK>
+0x67DD # <CJK>
+0x67DE # <CJK>
+0x67E2 # <CJK>
+0x67E4 # <CJK>
+0x67E7 # <CJK>
+0x67E9 # <CJK>
+0x67EC # <CJK>
+0x67EE # <CJK>
+0x67EF # <CJK>
+0x67F1 # <CJK>
+0x67F3 # <CJK>
+0x67F4 # <CJK>
+0x67F5 # <CJK>
+0x67FB # <CJK>
+0x67FE # <CJK>
+0x67FF # <CJK>
+0x6802 # <CJK>
+0x6803 # <CJK>
+0x6804 # <CJK>
+0x6813 # <CJK>
+0x6816 # <CJK>
+0x6817 # <CJK>
+0x681E # <CJK>
+0x6821 # <CJK>
+0x6822 # <CJK>
+0x6829 # <CJK>
+0x682A # <CJK>
+0x682B # <CJK>
+0x6832 # <CJK>
+0x6834 # <CJK>
+0x6838 # <CJK>
+0x6839 # <CJK>
+0x683C # <CJK>
+0x683D # <CJK>
+0x6840 # <CJK>
+0x6841 # <CJK>
+0x6842 # <CJK>
+0x6843 # <CJK>
+0x6846 # <CJK>
+0x6848 # <CJK>
+0x684D # <CJK>
+0x684E # <CJK>
+0x6850 # <CJK>
+0x6851 # <CJK>
+0x6853 # <CJK>
+0x6854 # <CJK>
+0x6859 # <CJK>
+0x685C # <CJK>
+0x685D # <CJK>
+0x685F # <CJK>
+0x6863 # <CJK>
+0x6867 # <CJK>
+0x6874 # <CJK>
+0x6876 # <CJK>
+0x6877 # <CJK>
+0x687E # <CJK>
+0x687F # <CJK>
+0x6881 # <CJK>
+0x6883 # <CJK>
+0x6885 # <CJK>
+0x688D # <CJK>
+0x688F # <CJK>
+0x6893 # <CJK>
+0x6894 # <CJK>
+0x6897 # <CJK>
+0x689B # <CJK>
+0x689D # <CJK>
+0x689F # <CJK>
+0x68A0 # <CJK>
+0x68A2 # <CJK>
+0x68A6 # <CJK>
+0x68A7 # <CJK>
+0x68A8 # <CJK>
+0x68AD # <CJK>
+0x68AF # <CJK>
+0x68B0 # <CJK>
+0x68B1 # <CJK>
+0x68B3 # <CJK>
+0x68B5 # <CJK>
+0x68B6 # <CJK>
+0x68B9 # <CJK>
+0x68BA # <CJK>
+0x68BC # <CJK>
+0x68C4 # <CJK>
+0x68C6 # <CJK>
+0x68C9 # <CJK>
+0x68CA # <CJK>
+0x68CB # <CJK>
+0x68CD # <CJK>
+0x68D2 # <CJK>
+0x68D4 # <CJK>
+0x68D5 # <CJK>
+0x68D7 # <CJK>
+0x68D8 # <CJK>
+0x68DA # <CJK>
+0x68DF # <CJK>
+0x68E0 # <CJK>
+0x68E1 # <CJK>
+0x68E3 # <CJK>
+0x68E7 # <CJK>
+0x68EE # <CJK>
+0x68EF # <CJK>
+0x68F2 # <CJK>
+0x68F9 # <CJK>
+0x68FA # <CJK>
+0x6900 # <CJK>
+0x6901 # <CJK>
+0x6904 # <CJK>
+0x6905 # <CJK>
+0x6908 # <CJK>
+0x690B # <CJK>
+0x690C # <CJK>
+0x690D # <CJK>
+0x690E # <CJK>
+0x690F # <CJK>
+0x6912 # <CJK>
+0x6919 # <CJK>
+0x691A # <CJK>
+0x691B # <CJK>
+0x691C # <CJK>
+0x6921 # <CJK>
+0x6922 # <CJK>
+0x6923 # <CJK>
+0x6925 # <CJK>
+0x6926 # <CJK>
+0x6928 # <CJK>
+0x692A # <CJK>
+0x6930 # <CJK>
+0x6934 # <CJK>
+0x6936 # <CJK>
+0x6939 # <CJK>
+0x693D # <CJK>
+0x693F # <CJK>
+0x694A # <CJK>
+0x6953 # <CJK>
+0x6954 # <CJK>
+0x6955 # <CJK>
+0x6959 # <CJK>
+0x695A # <CJK>
+0x695C # <CJK>
+0x695D # <CJK>
+0x695E # <CJK>
+0x6960 # <CJK>
+0x6961 # <CJK>
+0x6962 # <CJK>
+0x696A # <CJK>
+0x696B # <CJK>
+0x696D # <CJK>
+0x696E # <CJK>
+0x696F # <CJK>
+0x6973 # <CJK>
+0x6974 # <CJK>
+0x6975 # <CJK>
+0x6977 # <CJK>
+0x6978 # <CJK>
+0x6979 # <CJK>
+0x697C # <CJK>
+0x697D # <CJK>
+0x697E # <CJK>
+0x6981 # <CJK>
+0x6982 # <CJK>
+0x698A # <CJK>
+0x698E # <CJK>
+0x6991 # <CJK>
+0x6994 # <CJK>
+0x6995 # <CJK>
+0x699B # <CJK>
+0x699C # <CJK>
+0x69A0 # <CJK>
+0x69A7 # <CJK>
+0x69AE # <CJK>
+0x69B1 # <CJK>
+0x69B2 # <CJK>
+0x69B4 # <CJK>
+0x69BB # <CJK>
+0x69BE # <CJK>
+0x69BF # <CJK>
+0x69C1 # <CJK>
+0x69C3 # <CJK>
+0x69C7 # <CJK>
+0x69CA # <CJK>
+0x69CB # <CJK>
+0x69CC # <CJK>
+0x69CD # <CJK>
+0x69CE # <CJK>
+0x69D0 # <CJK>
+0x69D3 # <CJK>
+0x69D8 # <CJK>
+0x69D9 # <CJK>
+0x69DD # <CJK>
+0x69DE # <CJK>
+0x69E7 # <CJK>
+0x69E8 # <CJK>
+0x69EB # <CJK>
+0x69ED # <CJK>
+0x69F2 # <CJK>
+0x69F9 # <CJK>
+0x69FB # <CJK>
+0x69FD # <CJK>
+0x69FF # <CJK>
+0x6A02 # <CJK>
+0x6A05 # <CJK>
+0x6A0A # <CJK>
+0x6A0B # <CJK>
+0x6A0C # <CJK>
+0x6A12 # <CJK>
+0x6A13 # <CJK>
+0x6A14 # <CJK>
+0x6A17 # <CJK>
+0x6A19 # <CJK>
+0x6A1B # <CJK>
+0x6A1E # <CJK>
+0x6A1F # <CJK>
+0x6A21 # <CJK>
+0x6A22 # <CJK>
+0x6A23 # <CJK>
+0x6A29 # <CJK>
+0x6A2A # <CJK>
+0x6A2B # <CJK>
+0x6A2E # <CJK>
+0x6A35 # <CJK>
+0x6A36 # <CJK>
+0x6A38 # <CJK>
+0x6A39 # <CJK>
+0x6A3A # <CJK>
+0x6A3D # <CJK>
+0x6A44 # <CJK>
+0x6A47 # <CJK>
+0x6A48 # <CJK>
+0x6A4B # <CJK>
+0x6A58 # <CJK>
+0x6A59 # <CJK>
+0x6A5F # <CJK>
+0x6A61 # <CJK>
+0x6A62 # <CJK>
+0x6A66 # <CJK>
+0x6A72 # <CJK>
+0x6A78 # <CJK>
+0x6A7F # <CJK>
+0x6A80 # <CJK>
+0x6A84 # <CJK>
+0x6A8D # <CJK>
+0x6A8E # <CJK>
+0x6A90 # <CJK>
+0x6A97 # <CJK>
+0x6A9C # <CJK>
+0x6AA0 # <CJK>
+0x6AA2 # <CJK>
+0x6AA3 # <CJK>
+0x6AAA # <CJK>
+0x6AAC # <CJK>
+0x6AAE # <CJK>
+0x6AB3 # <CJK>
+0x6AB8 # <CJK>
+0x6ABB # <CJK>
+0x6AC1 # <CJK>
+0x6AC2 # <CJK>
+0x6AC3 # <CJK>
+0x6AD1 # <CJK>
+0x6AD3 # <CJK>
+0x6ADA # <CJK>
+0x6ADB # <CJK>
+0x6ADE # <CJK>
+0x6ADF # <CJK>
+0x6AE8 # <CJK>
+0x6AEA # <CJK>
+0x6AFA # <CJK>
+0x6AFB # <CJK>
+0x6B04 # <CJK>
+0x6B05 # <CJK>
+0x6B0A # <CJK>
+0x6B12 # <CJK>
+0x6B16 # <CJK>
+0x6B1D # <CJK>
+0x6B1F # <CJK>
+0x6B20 # <CJK>
+0x6B21 # <CJK>
+0x6B23 # <CJK>
+0x6B27 # <CJK>
+0x6B32 # <CJK>
+0x6B37 # <CJK>
+0x6B38 # <CJK>
+0x6B39 # <CJK>
+0x6B3A # <CJK>
+0x6B3D # <CJK>
+0x6B3E # <CJK>
+0x6B43 # <CJK>
+0x6B47 # <CJK>
+0x6B49 # <CJK>
+0x6B4C # <CJK>
+0x6B4E # <CJK>
+0x6B50 # <CJK>
+0x6B53 # <CJK>
+0x6B54 # <CJK>
+0x6B59 # <CJK>
+0x6B5B # <CJK>
+0x6B5F # <CJK>
+0x6B61 # <CJK>
+0x6B62 # <CJK>
+0x6B63 # <CJK>
+0x6B64 # <CJK>
+0x6B66 # <CJK>
+0x6B69 # <CJK>
+0x6B6A # <CJK>
+0x6B6F # <CJK>
+0x6B73 # <CJK>
+0x6B74 # <CJK>
+0x6B78 # <CJK>
+0x6B79 # <CJK>
+0x6B7B # <CJK>
+0x6B7F # <CJK>
+0x6B80 # <CJK>
+0x6B83 # <CJK>
+0x6B84 # <CJK>
+0x6B86 # <CJK>
+0x6B89 # <CJK>
+0x6B8A # <CJK>
+0x6B8B # <CJK>
+0x6B8D # <CJK>
+0x6B95 # <CJK>
+0x6B96 # <CJK>
+0x6B98 # <CJK>
+0x6B9E # <CJK>
+0x6BA4 # <CJK>
+0x6BAA # <CJK>
+0x6BAB # <CJK>
+0x6BAF # <CJK>
+0x6BB1 # <CJK>
+0x6BB2 # <CJK>
+0x6BB3 # <CJK>
+0x6BB4 # <CJK>
+0x6BB5 # <CJK>
+0x6BB7 # <CJK>
+0x6BBA # <CJK>
+0x6BBB # <CJK>
+0x6BBC # <CJK>
+0x6BBF # <CJK>
+0x6BC0 # <CJK>
+0x6BC5 # <CJK>
+0x6BC6 # <CJK>
+0x6BCB # <CJK>
+0x6BCD # <CJK>
+0x6BCE # <CJK>
+0x6BD2 # <CJK>
+0x6BD3 # <CJK>
+0x6BD4 # <CJK>
+0x6BD8 # <CJK>
+0x6BDB # <CJK>
+0x6BDF # <CJK>
+0x6BEB # <CJK>
+0x6BEC # <CJK>
+0x6BEF # <CJK>
+0x6BF3 # <CJK>
+0x6C08 # <CJK>
+0x6C0F # <CJK>
+0x6C11 # <CJK>
+0x6C13 # <CJK>
+0x6C14 # <CJK>
+0x6C17 # <CJK>
+0x6C1B # <CJK>
+0x6C23 # <CJK>
+0x6C24 # <CJK>
+0x6C34 # <CJK>
+0x6C37 # <CJK>
+0x6C38 # <CJK>
+0x6C3E # <CJK>
+0x6C40 # <CJK>
+0x6C41 # <CJK>
+0x6C42 # <CJK>
+0x6C4E # <CJK>
+0x6C50 # <CJK>
+0x6C55 # <CJK>
+0x6C57 # <CJK>
+0x6C5A # <CJK>
+0x6C5D # <CJK>
+0x6C5E # <CJK>
+0x6C5F # <CJK>
+0x6C60 # <CJK>
+0x6C62 # <CJK>
+0x6C68 # <CJK>
+0x6C6A # <CJK>
+0x6C70 # <CJK>
+0x6C72 # <CJK>
+0x6C73 # <CJK>
+0x6C7A # <CJK>
+0x6C7D # <CJK>
+0x6C7E # <CJK>
+0x6C81 # <CJK>
+0x6C82 # <CJK>
+0x6C83 # <CJK>
+0x6C88 # <CJK>
+0x6C8C # <CJK>
+0x6C8D # <CJK>
+0x6C90 # <CJK>
+0x6C92 # <CJK>
+0x6C93 # <CJK>
+0x6C96 # <CJK>
+0x6C99 # <CJK>
+0x6C9A # <CJK>
+0x6C9B # <CJK>
+0x6CA1 # <CJK>
+0x6CA2 # <CJK>
+0x6CAB # <CJK>
+0x6CAE # <CJK>
+0x6CB1 # <CJK>
+0x6CB3 # <CJK>
+0x6CB8 # <CJK>
+0x6CB9 # <CJK>
+0x6CBA # <CJK>
+0x6CBB # <CJK>
+0x6CBC # <CJK>
+0x6CBD # <CJK>
+0x6CBE # <CJK>
+0x6CBF # <CJK>
+0x6CC1 # <CJK>
+0x6CC4 # <CJK>
+0x6CC5 # <CJK>
+0x6CC9 # <CJK>
+0x6CCA # <CJK>
+0x6CCC # <CJK>
+0x6CD3 # <CJK>
+0x6CD5 # <CJK>
+0x6CD7 # <CJK>
+0x6CD9 # <CJK>
+0x6CDB # <CJK>
+0x6CDD # <CJK>
+0x6CE1 # <CJK>
+0x6CE2 # <CJK>
+0x6CE3 # <CJK>
+0x6CE5 # <CJK>
+0x6CE8 # <CJK>
+0x6CEA # <CJK>
+0x6CEF # <CJK>
+0x6CF0 # <CJK>
+0x6CF1 # <CJK>
+0x6CF3 # <CJK>
+0x6D0B # <CJK>
+0x6D0C # <CJK>
+0x6D12 # <CJK>
+0x6D17 # <CJK>
+0x6D19 # <CJK>
+0x6D1B # <CJK>
+0x6D1E # <CJK>
+0x6D1F # <CJK>
+0x6D25 # <CJK>
+0x6D29 # <CJK>
+0x6D2A # <CJK>
+0x6D2B # <CJK>
+0x6D32 # <CJK>
+0x6D33 # <CJK>
+0x6D35 # <CJK>
+0x6D36 # <CJK>
+0x6D38 # <CJK>
+0x6D3B # <CJK>
+0x6D3D # <CJK>
+0x6D3E # <CJK>
+0x6D41 # <CJK>
+0x6D44 # <CJK>
+0x6D45 # <CJK>
+0x6D59 # <CJK>
+0x6D5A # <CJK>
+0x6D5C # <CJK>
+0x6D63 # <CJK>
+0x6D64 # <CJK>
+0x6D66 # <CJK>
+0x6D69 # <CJK>
+0x6D6A # <CJK>
+0x6D6C # <CJK>
+0x6D6E # <CJK>
+0x6D74 # <CJK>
+0x6D77 # <CJK>
+0x6D78 # <CJK>
+0x6D79 # <CJK>
+0x6D85 # <CJK>
+0x6D88 # <CJK>
+0x6D8C # <CJK>
+0x6D8E # <CJK>
+0x6D93 # <CJK>
+0x6D95 # <CJK>
+0x6D99 # <CJK>
+0x6D9B # <CJK>
+0x6D9C # <CJK>
+0x6DAF # <CJK>
+0x6DB2 # <CJK>
+0x6DB5 # <CJK>
+0x6DB8 # <CJK>
+0x6DBC # <CJK>
+0x6DC0 # <CJK>
+0x6DC5 # <CJK>
+0x6DC6 # <CJK>
+0x6DC7 # <CJK>
+0x6DCB # <CJK>
+0x6DCC # <CJK>
+0x6DD1 # <CJK>
+0x6DD2 # <CJK>
+0x6DD5 # <CJK>
+0x6DD8 # <CJK>
+0x6DD9 # <CJK>
+0x6DDE # <CJK>
+0x6DE1 # <CJK>
+0x6DE4 # <CJK>
+0x6DE6 # <CJK>
+0x6DE8 # <CJK>
+0x6DEA # <CJK>
+0x6DEB # <CJK>
+0x6DEC # <CJK>
+0x6DEE # <CJK>
+0x6DF1 # <CJK>
+0x6DF3 # <CJK>
+0x6DF5 # <CJK>
+0x6DF7 # <CJK>
+0x6DF9 # <CJK>
+0x6DFA # <CJK>
+0x6DFB # <CJK>
+0x6E05 # <CJK>
+0x6E07 # <CJK>
+0x6E08 # <CJK>
+0x6E09 # <CJK>
+0x6E0A # <CJK>
+0x6E0B # <CJK>
+0x6E13 # <CJK>
+0x6E15 # <CJK>
+0x6E19 # <CJK>
+0x6E1A # <CJK>
+0x6E1B # <CJK>
+0x6E1D # <CJK>
+0x6E1F # <CJK>
+0x6E20 # <CJK>
+0x6E21 # <CJK>
+0x6E23 # <CJK>
+0x6E24 # <CJK>
+0x6E25 # <CJK>
+0x6E26 # <CJK>
+0x6E29 # <CJK>
+0x6E2B # <CJK>
+0x6E2C # <CJK>
+0x6E2D # <CJK>
+0x6E2E # <CJK>
+0x6E2F # <CJK>
+0x6E38 # <CJK>
+0x6E3A # <CJK>
+0x6E3E # <CJK>
+0x6E43 # <CJK>
+0x6E4A # <CJK>
+0x6E4D # <CJK>
+0x6E4E # <CJK>
+0x6E56 # <CJK>
+0x6E58 # <CJK>
+0x6E5B # <CJK>
+0x6E5F # <CJK>
+0x6E67 # <CJK>
+0x6E6B # <CJK>
+0x6E6E # <CJK>
+0x6E6F # <CJK>
+0x6E72 # <CJK>
+0x6E76 # <CJK>
+0x6E7E # <CJK>
+0x6E7F # <CJK>
+0x6E80 # <CJK>
+0x6E82 # <CJK>
+0x6E8C # <CJK>
+0x6E8F # <CJK>
+0x6E90 # <CJK>
+0x6E96 # <CJK>
+0x6E98 # <CJK>
+0x6E9C # <CJK>
+0x6E9D # <CJK>
+0x6E9F # <CJK>
+0x6EA2 # <CJK>
+0x6EA5 # <CJK>
+0x6EAA # <CJK>
+0x6EAF # <CJK>
+0x6EB2 # <CJK>
+0x6EB6 # <CJK>
+0x6EB7 # <CJK>
+0x6EBA # <CJK>
+0x6EBD # <CJK>
+0x6EC2 # <CJK>
+0x6EC4 # <CJK>
+0x6EC5 # <CJK>
+0x6EC9 # <CJK>
+0x6ECB # <CJK>
+0x6ECC # <CJK>
+0x6ED1 # <CJK>
+0x6ED3 # <CJK>
+0x6ED4 # <CJK>
+0x6ED5 # <CJK>
+0x6EDD # <CJK>
+0x6EDE # <CJK>
+0x6EEC # <CJK>
+0x6EEF # <CJK>
+0x6EF2 # <CJK>
+0x6EF4 # <CJK>
+0x6EF7 # <CJK>
+0x6EF8 # <CJK>
+0x6EFE # <CJK>
+0x6EFF # <CJK>
+0x6F01 # <CJK>
+0x6F02 # <CJK>
+0x6F06 # <CJK>
+0x6F09 # <CJK>
+0x6F0F # <CJK>
+0x6F11 # <CJK>
+0x6F13 # <CJK>
+0x6F14 # <CJK>
+0x6F15 # <CJK>
+0x6F20 # <CJK>
+0x6F22 # <CJK>
+0x6F23 # <CJK>
+0x6F2B # <CJK>
+0x6F2C # <CJK>
+0x6F31 # <CJK>
+0x6F32 # <CJK>
+0x6F38 # <CJK>
+0x6F3E # <CJK>
+0x6F3F # <CJK>
+0x6F41 # <CJK>
+0x6F45 # <CJK>
+0x6F54 # <CJK>
+0x6F58 # <CJK>
+0x6F5B # <CJK>
+0x6F5C # <CJK>
+0x6F5F # <CJK>
+0x6F64 # <CJK>
+0x6F66 # <CJK>
+0x6F6D # <CJK>
+0x6F6E # <CJK>
+0x6F6F # <CJK>
+0x6F70 # <CJK>
+0x6F74 # <CJK>
+0x6F78 # <CJK>
+0x6F7A # <CJK>
+0x6F7C # <CJK>
+0x6F80 # <CJK>
+0x6F81 # <CJK>
+0x6F82 # <CJK>
+0x6F84 # <CJK>
+0x6F86 # <CJK>
+0x6F8E # <CJK>
+0x6F91 # <CJK>
+0x6F97 # <CJK>
+0x6FA1 # <CJK>
+0x6FA3 # <CJK>
+0x6FA4 # <CJK>
+0x6FAA # <CJK>
+0x6FB1 # <CJK>
+0x6FB3 # <CJK>
+0x6FB9 # <CJK>
+0x6FC0 # <CJK>
+0x6FC1 # <CJK>
+0x6FC2 # <CJK>
+0x6FC3 # <CJK>
+0x6FC6 # <CJK>
+0x6FD4 # <CJK>
+0x6FD5 # <CJK>
+0x6FD8 # <CJK>
+0x6FDB # <CJK>
+0x6FDF # <CJK>
+0x6FE0 # <CJK>
+0x6FE1 # <CJK>
+0x6FE4 # <CJK>
+0x6FEB # <CJK>
+0x6FEC # <CJK>
+0x6FEE # <CJK>
+0x6FEF # <CJK>
+0x6FF1 # <CJK>
+0x6FF3 # <CJK>
+0x6FF6 # <CJK>
+0x6FFA # <CJK>
+0x6FFE # <CJK>
+0x7001 # <CJK>
+0x7009 # <CJK>
+0x700B # <CJK>
+0x700F # <CJK>
+0x7011 # <CJK>
+0x7015 # <CJK>
+0x7018 # <CJK>
+0x701A # <CJK>
+0x701B # <CJK>
+0x701D # <CJK>
+0x701E # <CJK>
+0x701F # <CJK>
+0x7026 # <CJK>
+0x7027 # <CJK>
+0x702C # <CJK>
+0x7030 # <CJK>
+0x7032 # <CJK>
+0x703E # <CJK>
+0x704C # <CJK>
+0x7051 # <CJK>
+0x7058 # <CJK>
+0x7063 # <CJK>
+0x706B # <CJK>
+0x706F # <CJK>
+0x7070 # <CJK>
+0x7078 # <CJK>
+0x707C # <CJK>
+0x707D # <CJK>
+0x7089 # <CJK>
+0x708A # <CJK>
+0x708E # <CJK>
+0x7092 # <CJK>
+0x7099 # <CJK>
+0x70AC # <CJK>
+0x70AD # <CJK>
+0x70AE # <CJK>
+0x70AF # <CJK>
+0x70B3 # <CJK>
+0x70B8 # <CJK>
+0x70B9 # <CJK>
+0x70BA # <CJK>
+0x70C8 # <CJK>
+0x70CB # <CJK>
+0x70CF # <CJK>
+0x70D9 # <CJK>
+0x70DD # <CJK>
+0x70DF # <CJK>
+0x70F1 # <CJK>
+0x70F9 # <CJK>
+0x70FD # <CJK>
+0x7109 # <CJK>
+0x7114 # <CJK>
+0x7119 # <CJK>
+0x711A # <CJK>
+0x711C # <CJK>
+0x7121 # <CJK>
+0x7126 # <CJK>
+0x7136 # <CJK>
+0x713C # <CJK>
+0x7149 # <CJK>
+0x714C # <CJK>
+0x714E # <CJK>
+0x7155 # <CJK>
+0x7156 # <CJK>
+0x7159 # <CJK>
+0x7162 # <CJK>
+0x7164 # <CJK>
+0x7165 # <CJK>
+0x7166 # <CJK>
+0x7167 # <CJK>
+0x7169 # <CJK>
+0x716C # <CJK>
+0x716E # <CJK>
+0x717D # <CJK>
+0x7184 # <CJK>
+0x7188 # <CJK>
+0x718A # <CJK>
+0x718F # <CJK>
+0x7194 # <CJK>
+0x7195 # <CJK>
+#0x7199 # <CJK> # not in kochi fonts
+0x719F # <CJK>
+0x71A8 # <CJK>
+0x71AC # <CJK>
+0x71B1 # <CJK>
+0x71B9 # <CJK>
+0x71BE # <CJK>
+0x71C3 # <CJK>
+0x71C8 # <CJK>
+0x71C9 # <CJK>
+0x71CE # <CJK>
+0x71D0 # <CJK>
+0x71D2 # <CJK>
+0x71D4 # <CJK>
+0x71D5 # <CJK>
+0x71D7 # <CJK>
+0x71DF # <CJK>
+0x71E0 # <CJK>
+0x71E5 # <CJK>
+0x71E6 # <CJK>
+0x71E7 # <CJK>
+0x71EC # <CJK>
+0x71ED # <CJK>
+0x71EE # <CJK>
+0x71F5 # <CJK>
+0x71F9 # <CJK>
+0x71FB # <CJK>
+0x71FC # <CJK>
+0x71FF # <CJK>
+0x7206 # <CJK>
+0x720D # <CJK>
+0x7210 # <CJK>
+0x721B # <CJK>
+0x7228 # <CJK>
+0x722A # <CJK>
+0x722C # <CJK>
+0x722D # <CJK>
+0x7230 # <CJK>
+0x7232 # <CJK>
+0x7235 # <CJK>
+0x7236 # <CJK>
+0x723A # <CJK>
+0x723B # <CJK>
+0x723C # <CJK>
+0x723D # <CJK>
+0x723E # <CJK>
+0x723F # <CJK>
+0x7240 # <CJK>
+0x7246 # <CJK>
+0x7247 # <CJK>
+0x7248 # <CJK>
+0x724B # <CJK>
+0x724C # <CJK>
+0x7252 # <CJK>
+0x7258 # <CJK>
+0x7259 # <CJK>
+0x725B # <CJK>
+0x725D # <CJK>
+0x725F # <CJK>
+0x7261 # <CJK>
+0x7262 # <CJK>
+0x7267 # <CJK>
+0x7269 # <CJK>
+0x7272 # <CJK>
+0x7274 # <CJK>
+0x7279 # <CJK>
+0x727D # <CJK>
+0x727E # <CJK>
+0x7280 # <CJK>
+0x7281 # <CJK>
+0x7282 # <CJK>
+0x7287 # <CJK>
+0x7292 # <CJK>
+0x7296 # <CJK>
+0x72A0 # <CJK>
+0x72A2 # <CJK>
+0x72A7 # <CJK>
+0x72AC # <CJK>
+0x72AF # <CJK>
+0x72B2 # <CJK>
+0x72B6 # <CJK>
+0x72B9 # <CJK>
+0x72C2 # <CJK>
+0x72C3 # <CJK>
+0x72C4 # <CJK>
+0x72C6 # <CJK>
+0x72CE # <CJK>
+0x72D0 # <CJK>
+0x72D2 # <CJK>
+0x72D7 # <CJK>
+0x72D9 # <CJK>
+0x72DB # <CJK>
+0x72E0 # <CJK>
+0x72E1 # <CJK>
+0x72E2 # <CJK>
+0x72E9 # <CJK>
+0x72EC # <CJK>
+0x72ED # <CJK>
+0x72F7 # <CJK>
+0x72F8 # <CJK>
+0x72F9 # <CJK>
+0x72FC # <CJK>
+0x72FD # <CJK>
+0x730A # <CJK>
+0x7316 # <CJK>
+0x7317 # <CJK>
+0x731B # <CJK>
+0x731C # <CJK>
+0x731D # <CJK>
+0x731F # <CJK>
+0x7325 # <CJK>
+0x7329 # <CJK>
+0x732A # <CJK>
+0x732B # <CJK>
+0x732E # <CJK>
+0x732F # <CJK>
+0x7334 # <CJK>
+0x7336 # <CJK>
+0x7337 # <CJK>
+0x733E # <CJK>
+0x733F # <CJK>
+0x7344 # <CJK>
+0x7345 # <CJK>
+0x734E # <CJK>
+0x734F # <CJK>
+0x7357 # <CJK>
+0x7363 # <CJK>
+0x7368 # <CJK>
+0x736A # <CJK>
+0x7370 # <CJK>
+0x7372 # <CJK>
+0x7375 # <CJK>
+0x7378 # <CJK>
+0x737A # <CJK>
+0x737B # <CJK>
+0x7384 # <CJK>
+0x7387 # <CJK>
+0x7389 # <CJK>
+0x738B # <CJK>
+0x7396 # <CJK>
+0x73A9 # <CJK>
+0x73B2 # <CJK>
+0x73B3 # <CJK>
+0x73BB # <CJK>
+0x73C0 # <CJK>
+0x73C2 # <CJK>
+0x73C8 # <CJK>
+0x73CA # <CJK>
+0x73CD # <CJK>
+0x73CE # <CJK>
+0x73DE # <CJK>
+0x73E0 # <CJK>
+0x73E5 # <CJK>
+0x73EA # <CJK>
+0x73ED # <CJK>
+0x73EE # <CJK>
+0x73F1 # <CJK>
+0x73F8 # <CJK>
+0x73FE # <CJK>
+0x7403 # <CJK>
+0x7405 # <CJK>
+0x7406 # <CJK>
+0x7409 # <CJK>
+0x7422 # <CJK>
+0x7425 # <CJK>
+0x7432 # <CJK>
+0x7433 # <CJK>
+0x7434 # <CJK>
+0x7435 # <CJK>
+0x7436 # <CJK>
+0x743A # <CJK>
+0x743F # <CJK>
+0x7441 # <CJK>
+0x7455 # <CJK>
+0x7459 # <CJK>
+0x745A # <CJK>
+0x745B # <CJK>
+0x745C # <CJK>
+0x745E # <CJK>
+0x745F # <CJK>
+0x7460 # <CJK>
+0x7463 # <CJK>
+0x7464 # <CJK>
+0x7469 # <CJK>
+0x746A # <CJK>
+0x746F # <CJK>
+0x7470 # <CJK>
+0x7473 # <CJK>
+0x7476 # <CJK>
+0x747E # <CJK>
+0x7483 # <CJK>
+0x748B # <CJK>
+0x749E # <CJK>
+0x74A2 # <CJK>
+0x74A7 # <CJK>
+0x74B0 # <CJK>
+0x74BD # <CJK>
+0x74CA # <CJK>
+0x74CF # <CJK>
+0x74D4 # <CJK>
+0x74DC # <CJK>
+0x74E0 # <CJK>
+0x74E2 # <CJK>
+0x74E3 # <CJK>
+0x74E6 # <CJK>
+0x74E7 # <CJK>
+0x74E9 # <CJK>
+0x74EE # <CJK>
+0x74F0 # <CJK>
+0x74F1 # <CJK>
+0x74F2 # <CJK>
+0x74F6 # <CJK>
+0x74F7 # <CJK>
+0x74F8 # <CJK>
+0x7503 # <CJK>
+0x7504 # <CJK>
+0x7505 # <CJK>
+0x750C # <CJK>
+0x750D # <CJK>
+0x750E # <CJK>
+0x7511 # <CJK>
+0x7513 # <CJK>
+0x7515 # <CJK>
+0x7518 # <CJK>
+0x751A # <CJK>
+0x751C # <CJK>
+0x751E # <CJK>
+0x751F # <CJK>
+0x7523 # <CJK>
+0x7525 # <CJK>
+0x7526 # <CJK>
+0x7528 # <CJK>
+0x752B # <CJK>
+0x752C # <CJK>
+0x7530 # <CJK>
+0x7531 # <CJK>
+0x7532 # <CJK>
+0x7533 # <CJK>
+0x7537 # <CJK>
+0x7538 # <CJK>
+0x753A # <CJK>
+0x753B # <CJK>
+0x753C # <CJK>
+0x7544 # <CJK>
+0x7546 # <CJK>
+0x7549 # <CJK>
+0x754A # <CJK>
+0x754B # <CJK>
+0x754C # <CJK>
+0x754D # <CJK>
+0x754F # <CJK>
+0x7551 # <CJK>
+0x7554 # <CJK>
+0x7559 # <CJK>
+0x755A # <CJK>
+0x755B # <CJK>
+0x755C # <CJK>
+0x755D # <CJK>
+0x7560 # <CJK>
+0x7562 # <CJK>
+0x7564 # <CJK>
+0x7565 # <CJK>
+0x7566 # <CJK>
+0x7567 # <CJK>
+0x7569 # <CJK>
+0x756A # <CJK>
+0x756B # <CJK>
+0x756D # <CJK>
+0x7570 # <CJK>
+0x7573 # <CJK>
+0x7574 # <CJK>
+0x7576 # <CJK>
+0x7577 # <CJK>
+0x7578 # <CJK>
+0x757F # <CJK>
+0x7582 # <CJK>
+0x7586 # <CJK>
+0x7587 # <CJK>
+0x7589 # <CJK>
+0x758A # <CJK>
+0x758B # <CJK>
+0x758E # <CJK>
+0x758F # <CJK>
+0x7591 # <CJK>
+0x7594 # <CJK>
+0x759A # <CJK>
+0x759D # <CJK>
+0x75A3 # <CJK>
+0x75A5 # <CJK>
+0x75AB # <CJK>
+0x75B1 # <CJK>
+0x75B2 # <CJK>
+0x75B3 # <CJK>
+0x75B5 # <CJK>
+0x75B8 # <CJK>
+0x75B9 # <CJK>
+0x75BC # <CJK>
+0x75BD # <CJK>
+0x75BE # <CJK>
+0x75C2 # <CJK>
+0x75C3 # <CJK>
+0x75C5 # <CJK>
+0x75C7 # <CJK>
+0x75CA # <CJK>
+0x75CD # <CJK>
+0x75D2 # <CJK>
+0x75D4 # <CJK>
+0x75D5 # <CJK>
+0x75D8 # <CJK>
+0x75D9 # <CJK>
+0x75DB # <CJK>
+0x75DE # <CJK>
+0x75E2 # <CJK>
+0x75E3 # <CJK>
+0x75E9 # <CJK>
+0x75F0 # <CJK>
+0x75F2 # <CJK>
+0x75F3 # <CJK>
+0x75F4 # <CJK>
+0x75FA # <CJK>
+0x75FC # <CJK>
+0x75FE # <CJK>
+0x75FF # <CJK>
+0x7601 # <CJK>
+0x7609 # <CJK>
+0x760B # <CJK>
+0x760D # <CJK>
+0x761F # <CJK>
+0x7620 # <CJK>
+0x7621 # <CJK>
+0x7622 # <CJK>
+0x7624 # <CJK>
+0x7627 # <CJK>
+0x7630 # <CJK>
+0x7634 # <CJK>
+0x763B # <CJK>
+0x7642 # <CJK>
+0x7646 # <CJK>
+0x7647 # <CJK>
+0x7648 # <CJK>
+0x764C # <CJK>
+0x7652 # <CJK>
+0x7656 # <CJK>
+0x7658 # <CJK>
+0x765C # <CJK>
+0x7661 # <CJK>
+0x7662 # <CJK>
+0x7667 # <CJK>
+0x7668 # <CJK>
+0x7669 # <CJK>
+0x766A # <CJK>
+0x766C # <CJK>
+0x7670 # <CJK>
+0x7672 # <CJK>
+0x7676 # <CJK>
+0x7678 # <CJK>
+0x767A # <CJK>
+0x767B # <CJK>
+0x767C # <CJK>
+0x767D # <CJK>
+0x767E # <CJK>
+0x7680 # <CJK>
+0x7683 # <CJK>
+0x7684 # <CJK>
+0x7686 # <CJK>
+0x7687 # <CJK>
+0x7688 # <CJK>
+0x768B # <CJK>
+0x768E # <CJK>
+0x7690 # <CJK>
+0x7693 # <CJK>
+0x7696 # <CJK>
+0x7699 # <CJK>
+0x769A # <CJK>
+0x76AE # <CJK>
+0x76B0 # <CJK>
+0x76B4 # <CJK>
+0x76B7 # <CJK>
+0x76B8 # <CJK>
+0x76B9 # <CJK>
+0x76BA # <CJK>
+0x76BF # <CJK>
+0x76C2 # <CJK>
+0x76C3 # <CJK>
+0x76C6 # <CJK>
+0x76C8 # <CJK>
+0x76CA # <CJK>
+0x76CD # <CJK>
+0x76D2 # <CJK>
+0x76D6 # <CJK>
+0x76D7 # <CJK>
+0x76DB # <CJK>
+0x76DC # <CJK>
+0x76DE # <CJK>
+0x76DF # <CJK>
+0x76E1 # <CJK>
+0x76E3 # <CJK>
+0x76E4 # <CJK>
+0x76E5 # <CJK>
+0x76E7 # <CJK>
+0x76EA # <CJK>
+0x76EE # <CJK>
+0x76F2 # <CJK>
+0x76F4 # <CJK>
+0x76F8 # <CJK>
+0x76FB # <CJK>
+0x76FE # <CJK>
+0x7701 # <CJK>
+0x7704 # <CJK>
+0x7707 # <CJK>
+0x7708 # <CJK>
+0x7709 # <CJK>
+0x770B # <CJK>
+0x770C # <CJK>
+0x771B # <CJK>
+0x771E # <CJK>
+0x771F # <CJK>
+0x7720 # <CJK>
+0x7724 # <CJK>
+0x7725 # <CJK>
+0x7726 # <CJK>
+0x7729 # <CJK>
+0x7737 # <CJK>
+0x7738 # <CJK>
+0x773A # <CJK>
+0x773C # <CJK>
+0x7740 # <CJK>
+0x7747 # <CJK>
+0x775A # <CJK>
+0x775B # <CJK>
+0x7761 # <CJK>
+0x7763 # <CJK>
+0x7765 # <CJK>
+0x7766 # <CJK>
+0x7768 # <CJK>
+0x776B # <CJK>
+0x7779 # <CJK>
+0x777E # <CJK>
+0x777F # <CJK>
+0x778B # <CJK>
+0x778E # <CJK>
+0x7791 # <CJK>
+0x779E # <CJK>
+0x77A0 # <CJK>
+0x77A5 # <CJK>
+0x77AC # <CJK>
+0x77AD # <CJK>
+0x77B0 # <CJK>
+0x77B3 # <CJK>
+0x77B6 # <CJK>
+0x77B9 # <CJK>
+0x77BB # <CJK>
+0x77BC # <CJK>
+0x77BD # <CJK>
+0x77BF # <CJK>
+0x77C7 # <CJK>
+0x77CD # <CJK>
+0x77D7 # <CJK>
+0x77DA # <CJK>
+0x77DB # <CJK>
+0x77DC # <CJK>
+0x77E2 # <CJK>
+0x77E3 # <CJK>
+0x77E5 # <CJK>
+0x77E7 # <CJK>
+0x77E9 # <CJK>
+0x77ED # <CJK>
+0x77EE # <CJK>
+0x77EF # <CJK>
+0x77F3 # <CJK>
+0x77FC # <CJK>
+0x7802 # <CJK>
+0x780C # <CJK>
+0x7812 # <CJK>
+0x7814 # <CJK>
+0x7815 # <CJK>
+0x7820 # <CJK>
+0x7825 # <CJK>
+0x7826 # <CJK>
+0x7827 # <CJK>
+0x7832 # <CJK>
+0x7834 # <CJK>
+0x783A # <CJK>
+0x783F # <CJK>
+0x7845 # <CJK>
+0x785D # <CJK>
+0x786B # <CJK>
+0x786C # <CJK>
+0x786F # <CJK>
+0x7872 # <CJK>
+0x7874 # <CJK>
+0x787C # <CJK>
+0x7881 # <CJK>
+0x7886 # <CJK>
+0x7887 # <CJK>
+0x788C # <CJK>
+0x788D # <CJK>
+0x788E # <CJK>
+0x7891 # <CJK>
+0x7893 # <CJK>
+0x7895 # <CJK>
+0x7897 # <CJK>
+0x789A # <CJK>
+0x78A3 # <CJK>
+0x78A7 # <CJK>
+0x78A9 # <CJK>
+0x78AA # <CJK>
+0x78AF # <CJK>
+0x78B5 # <CJK>
+0x78BA # <CJK>
+0x78BC # <CJK>
+0x78BE # <CJK>
+0x78C1 # <CJK>
+0x78C5 # <CJK>
+0x78C6 # <CJK>
+0x78CA # <CJK>
+0x78CB # <CJK>
+0x78D0 # <CJK>
+0x78D1 # <CJK>
+0x78D4 # <CJK>
+0x78DA # <CJK>
+0x78E7 # <CJK>
+0x78E8 # <CJK>
+0x78EC # <CJK>
+0x78EF # <CJK>
+0x78F4 # <CJK>
+0x78FD # <CJK>
+0x7901 # <CJK>
+0x7907 # <CJK>
+0x790E # <CJK>
+0x7911 # <CJK>
+0x7912 # <CJK>
+0x7919 # <CJK>
+0x7926 # <CJK>
+0x792A # <CJK>
+0x792B # <CJK>
+0x792C # <CJK>
+0x793A # <CJK>
+0x793C # <CJK>
+0x793E # <CJK>
+0x7940 # <CJK>
+0x7941 # <CJK>
+0x7947 # <CJK>
+0x7948 # <CJK>
+0x7949 # <CJK>
+0x7950 # <CJK>
+0x7953 # <CJK>
+0x7955 # <CJK>
+0x7956 # <CJK>
+0x7957 # <CJK>
+0x795A # <CJK>
+0x795D # <CJK>
+0x795E # <CJK>
+0x795F # <CJK>
+0x7960 # <CJK>
+0x7962 # <CJK>
+0x7965 # <CJK>
+0x7968 # <CJK>
+0x796D # <CJK>
+0x7977 # <CJK>
+0x797A # <CJK>
+0x797F # <CJK>
+0x7980 # <CJK>
+0x7981 # <CJK>
+0x7984 # <CJK>
+0x7985 # <CJK>
+0x798A # <CJK>
+0x798D # <CJK>
+0x798E # <CJK>
+0x798F # <CJK>
+0x799D # <CJK>
+0x79A6 # <CJK>
+0x79A7 # <CJK>
+0x79AA # <CJK>
+0x79AE # <CJK>
+0x79B0 # <CJK>
+0x79B3 # <CJK>
+0x79B9 # <CJK>
+0x79BA # <CJK>
+0x79BD # <CJK>
+0x79BE # <CJK>
+0x79BF # <CJK>
+0x79C0 # <CJK>
+0x79C1 # <CJK>
+0x79C9 # <CJK>
+0x79CB # <CJK>
+0x79D1 # <CJK>
+0x79D2 # <CJK>
+0x79D5 # <CJK>
+0x79D8 # <CJK>
+0x79DF # <CJK>
+0x79E1 # <CJK>
+0x79E3 # <CJK>
+0x79E4 # <CJK>
+0x79E6 # <CJK>
+0x79E7 # <CJK>
+0x79E9 # <CJK>
+0x79EC # <CJK>
+0x79F0 # <CJK>
+0x79FB # <CJK>
+0x7A00 # <CJK>
+0x7A08 # <CJK>
+0x7A0B # <CJK>
+0x7A0D # <CJK>
+0x7A0E # <CJK>
+0x7A14 # <CJK>
+0x7A17 # <CJK>
+0x7A18 # <CJK>
+0x7A19 # <CJK>
+0x7A1A # <CJK>
+0x7A1C # <CJK>
+0x7A1F # <CJK>
+0x7A20 # <CJK>
+0x7A2E # <CJK>
+0x7A31 # <CJK>
+0x7A32 # <CJK>
+0x7A37 # <CJK>
+0x7A3B # <CJK>
+0x7A3C # <CJK>
+0x7A3D # <CJK>
+0x7A3E # <CJK>
+0x7A3F # <CJK>
+0x7A40 # <CJK>
+0x7A42 # <CJK>
+0x7A43 # <CJK>
+0x7A46 # <CJK>
+0x7A49 # <CJK>
+0x7A4D # <CJK>
+0x7A4E # <CJK>
+0x7A4F # <CJK>
+0x7A50 # <CJK>
+0x7A57 # <CJK>
+0x7A61 # <CJK>
+0x7A62 # <CJK>
+0x7A63 # <CJK>
+0x7A69 # <CJK>
+0x7A6B # <CJK>
+0x7A70 # <CJK>
+0x7A74 # <CJK>
+0x7A76 # <CJK>
+0x7A79 # <CJK>
+0x7A7A # <CJK>
+0x7A7D # <CJK>
+0x7A7F # <CJK>
+0x7A81 # <CJK>
+0x7A83 # <CJK>
+0x7A84 # <CJK>
+0x7A88 # <CJK>
+0x7A92 # <CJK>
+0x7A93 # <CJK>
+0x7A95 # <CJK>
+0x7A96 # <CJK>
+0x7A97 # <CJK>
+0x7A98 # <CJK>
+0x7A9F # <CJK>
+0x7AA9 # <CJK>
+0x7AAA # <CJK>
+0x7AAE # <CJK>
+0x7AAF # <CJK>
+0x7AB0 # <CJK>
+0x7AB6 # <CJK>
+0x7ABA # <CJK>
+0x7ABF # <CJK>
+0x7AC3 # <CJK>
+0x7AC4 # <CJK>
+0x7AC5 # <CJK>
+0x7AC7 # <CJK>
+0x7AC8 # <CJK>
+0x7ACA # <CJK>
+0x7ACB # <CJK>
+0x7ACD # <CJK>
+0x7ACF # <CJK>
+0x7AD2 # <CJK>
+0x7AD3 # <CJK>
+0x7AD5 # <CJK>
+0x7AD9 # <CJK>
+0x7ADA # <CJK>
+0x7ADC # <CJK>
+0x7ADD # <CJK>
+0x7ADF # <CJK>
+0x7AE0 # <CJK>
+0x7AE1 # <CJK>
+0x7AE2 # <CJK>
+0x7AE3 # <CJK>
+0x7AE5 # <CJK>
+0x7AE6 # <CJK>
+0x7AEA # <CJK>
+0x7AED # <CJK>
+0x7AEF # <CJK>
+0x7AF0 # <CJK>
+0x7AF6 # <CJK>
+0x7AF8 # <CJK>
+0x7AF9 # <CJK>
+0x7AFA # <CJK>
+0x7AFF # <CJK>
+0x7B02 # <CJK>
+0x7B04 # <CJK>
+0x7B06 # <CJK>
+0x7B08 # <CJK>
+0x7B0A # <CJK>
+0x7B0B # <CJK>
+0x7B0F # <CJK>
+0x7B11 # <CJK>
+0x7B18 # <CJK>
+0x7B19 # <CJK>
+0x7B1B # <CJK>
+0x7B1E # <CJK>
+0x7B20 # <CJK>
+0x7B25 # <CJK>
+0x7B26 # <CJK>
+0x7B28 # <CJK>
+0x7B2C # <CJK>
+0x7B33 # <CJK>
+0x7B35 # <CJK>
+0x7B36 # <CJK>
+0x7B39 # <CJK>
+0x7B45 # <CJK>
+0x7B46 # <CJK>
+0x7B48 # <CJK>
+0x7B49 # <CJK>
+0x7B4B # <CJK>
+0x7B4C # <CJK>
+0x7B4D # <CJK>
+0x7B4F # <CJK>
+0x7B50 # <CJK>
+0x7B51 # <CJK>
+0x7B52 # <CJK>
+0x7B54 # <CJK>
+0x7B56 # <CJK>
+0x7B5D # <CJK>
+0x7B65 # <CJK>
+0x7B67 # <CJK>
+0x7B6C # <CJK>
+0x7B6E # <CJK>
+0x7B70 # <CJK>
+0x7B71 # <CJK>
+0x7B74 # <CJK>
+0x7B75 # <CJK>
+0x7B7A # <CJK>
+0x7B86 # <CJK>
+0x7B87 # <CJK>
+0x7B8B # <CJK>
+0x7B8D # <CJK>
+0x7B8F # <CJK>
+0x7B92 # <CJK>
+0x7B94 # <CJK>
+0x7B95 # <CJK>
+0x7B97 # <CJK>
+0x7B98 # <CJK>
+0x7B99 # <CJK>
+0x7B9A # <CJK>
+0x7B9C # <CJK>
+0x7B9D # <CJK>
+0x7B9F # <CJK>
+0x7BA1 # <CJK>
+0x7BAA # <CJK>
+0x7BAD # <CJK>
+0x7BB1 # <CJK>
+0x7BB4 # <CJK>
+0x7BB8 # <CJK>
+0x7BC0 # <CJK>
+0x7BC1 # <CJK>
+0x7BC4 # <CJK>
+0x7BC6 # <CJK>
+0x7BC7 # <CJK>
+0x7BC9 # <CJK>
+0x7BCB # <CJK>
+0x7BCC # <CJK>
+0x7BCF # <CJK>
+0x7BDD # <CJK>
+0x7BE0 # <CJK>
+0x7BE4 # <CJK>
+0x7BE5 # <CJK>
+0x7BE6 # <CJK>
+0x7BE9 # <CJK>
+0x7BED # <CJK>
+0x7BF3 # <CJK>
+0x7BF6 # <CJK>
+0x7BF7 # <CJK>
+0x7C00 # <CJK>
+0x7C07 # <CJK>
+0x7C0D # <CJK>
+0x7C11 # <CJK>
+0x7C12 # <CJK>
+0x7C13 # <CJK>
+0x7C14 # <CJK>
+0x7C17 # <CJK>
+0x7C1F # <CJK>
+0x7C21 # <CJK>
+0x7C23 # <CJK>
+0x7C27 # <CJK>
+0x7C2A # <CJK>
+0x7C2B # <CJK>
+0x7C37 # <CJK>
+0x7C38 # <CJK>
+0x7C3D # <CJK>
+0x7C3E # <CJK>
+0x7C3F # <CJK>
+0x7C40 # <CJK>
+0x7C43 # <CJK>
+0x7C4C # <CJK>
+0x7C4D # <CJK>
+0x7C4F # <CJK>
+0x7C50 # <CJK>
+0x7C54 # <CJK>
+0x7C56 # <CJK>
+0x7C58 # <CJK>
+0x7C5F # <CJK>
+0x7C60 # <CJK>
+0x7C64 # <CJK>
+0x7C65 # <CJK>
+0x7C6C # <CJK>
+0x7C73 # <CJK>
+0x7C75 # <CJK>
+0x7C7E # <CJK>
+0x7C81 # <CJK>
+0x7C82 # <CJK>
+0x7C83 # <CJK>
+0x7C89 # <CJK>
+0x7C8B # <CJK>
+0x7C8D # <CJK>
+0x7C90 # <CJK>
+0x7C92 # <CJK>
+0x7C95 # <CJK>
+0x7C97 # <CJK>
+0x7C98 # <CJK>
+0x7C9B # <CJK>
+0x7C9F # <CJK>
+0x7CA1 # <CJK>
+0x7CA2 # <CJK>
+0x7CA4 # <CJK>
+0x7CA5 # <CJK>
+0x7CA7 # <CJK>
+0x7CA8 # <CJK>
+0x7CAB # <CJK>
+0x7CAD # <CJK>
+0x7CAE # <CJK>
+0x7CB1 # <CJK>
+0x7CB2 # <CJK>
+0x7CB3 # <CJK>
+0x7CB9 # <CJK>
+0x7CBD # <CJK>
+0x7CBE # <CJK>
+0x7CC0 # <CJK>
+0x7CC2 # <CJK>
+0x7CC5 # <CJK>
+0x7CCA # <CJK>
+0x7CCE # <CJK>
+0x7CD2 # <CJK>
+0x7CD6 # <CJK>
+0x7CD8 # <CJK>
+0x7CDC # <CJK>
+0x7CDE # <CJK>
+0x7CDF # <CJK>
+0x7CE0 # <CJK>
+0x7CE2 # <CJK>
+0x7CE7 # <CJK>
+0x7CEF # <CJK>
+0x7CF2 # <CJK>
+0x7CF4 # <CJK>
+0x7CF6 # <CJK>
+0x7CF8 # <CJK>
+0x7CFA # <CJK>
+0x7CFB # <CJK>
+0x7CFE # <CJK>
+0x7D00 # <CJK>
+0x7D02 # <CJK>
+0x7D04 # <CJK>
+0x7D05 # <CJK>
+0x7D06 # <CJK>
+0x7D0A # <CJK>
+0x7D0B # <CJK>
+0x7D0D # <CJK>
+0x7D10 # <CJK>
+0x7D14 # <CJK>
+0x7D15 # <CJK>
+0x7D17 # <CJK>
+0x7D18 # <CJK>
+0x7D19 # <CJK>
+0x7D1A # <CJK>
+0x7D1B # <CJK>
+0x7D1C # <CJK>
+0x7D20 # <CJK>
+0x7D21 # <CJK>
+0x7D22 # <CJK>
+0x7D2B # <CJK>
+0x7D2C # <CJK>
+0x7D2E # <CJK>
+0x7D2F # <CJK>
+0x7D30 # <CJK>
+0x7D32 # <CJK>
+0x7D33 # <CJK>
+0x7D35 # <CJK>
+0x7D39 # <CJK>
+0x7D3A # <CJK>
+0x7D3F # <CJK>
+0x7D42 # <CJK>
+0x7D43 # <CJK>
+0x7D44 # <CJK>
+0x7D45 # <CJK>
+0x7D46 # <CJK>
+0x7D4B # <CJK>
+0x7D4C # <CJK>
+0x7D4E # <CJK>
+0x7D4F # <CJK>
+0x7D50 # <CJK>
+0x7D56 # <CJK>
+0x7D5B # <CJK>
+0x7D5E # <CJK>
+0x7D61 # <CJK>
+0x7D62 # <CJK>
+0x7D63 # <CJK>
+0x7D66 # <CJK>
+0x7D68 # <CJK>
+0x7D6E # <CJK>
+0x7D71 # <CJK>
+0x7D72 # <CJK>
+0x7D73 # <CJK>
+0x7D75 # <CJK>
+0x7D76 # <CJK>
+0x7D79 # <CJK>
+0x7D7D # <CJK>
+0x7D89 # <CJK>
+0x7D8F # <CJK>
+0x7D93 # <CJK>
+0x7D99 # <CJK>
+0x7D9A # <CJK>
+0x7D9B # <CJK>
+0x7D9C # <CJK>
+0x7D9F # <CJK>
+0x7DA2 # <CJK>
+0x7DA3 # <CJK>
+0x7DAB # <CJK>
+0x7DAC # <CJK>
+0x7DAD # <CJK>
+0x7DAE # <CJK>
+0x7DAF # <CJK>
+0x7DB0 # <CJK>
+0x7DB1 # <CJK>
+0x7DB2 # <CJK>
+0x7DB4 # <CJK>
+0x7DB5 # <CJK>
+0x7DB8 # <CJK>
+0x7DBA # <CJK>
+0x7DBB # <CJK>
+0x7DBD # <CJK>
+0x7DBE # <CJK>
+0x7DBF # <CJK>
+0x7DC7 # <CJK>
+0x7DCA # <CJK>
+0x7DCB # <CJK>
+0x7DCF # <CJK>
+0x7DD1 # <CJK>
+0x7DD2 # <CJK>
+0x7DD5 # <CJK>
+0x7DD8 # <CJK>
+0x7DDA # <CJK>
+0x7DDC # <CJK>
+0x7DDD # <CJK>
+0x7DDE # <CJK>
+0x7DE0 # <CJK>
+0x7DE1 # <CJK>
+0x7DE4 # <CJK>
+0x7DE8 # <CJK>
+0x7DE9 # <CJK>
+0x7DEC # <CJK>
+0x7DEF # <CJK>
+0x7DF2 # <CJK>
+0x7DF4 # <CJK>
+0x7DFB # <CJK>
+0x7E01 # <CJK>
+0x7E04 # <CJK>
+0x7E05 # <CJK>
+0x7E09 # <CJK>
+0x7E0A # <CJK>
+0x7E0B # <CJK>
+0x7E12 # <CJK>
+0x7E1B # <CJK>
+0x7E1E # <CJK>
+0x7E1F # <CJK>
+0x7E21 # <CJK>
+0x7E22 # <CJK>
+0x7E23 # <CJK>
+0x7E26 # <CJK>
+0x7E2B # <CJK>
+0x7E2E # <CJK>
+0x7E31 # <CJK>
+0x7E32 # <CJK>
+0x7E35 # <CJK>
+0x7E37 # <CJK>
+0x7E39 # <CJK>
+0x7E3A # <CJK>
+0x7E3B # <CJK>
+0x7E3D # <CJK>
+0x7E3E # <CJK>
+0x7E41 # <CJK>
+0x7E43 # <CJK>
+0x7E46 # <CJK>
+0x7E4A # <CJK>
+0x7E4B # <CJK>
+0x7E4D # <CJK>
+0x7E54 # <CJK>
+0x7E55 # <CJK>
+0x7E56 # <CJK>
+0x7E59 # <CJK>
+0x7E5A # <CJK>
+0x7E5D # <CJK>
+0x7E5E # <CJK>
+0x7E66 # <CJK>
+0x7E67 # <CJK>
+0x7E69 # <CJK>
+0x7E6A # <CJK>
+0x7E6D # <CJK>
+0x7E70 # <CJK>
+0x7E79 # <CJK>
+0x7E7B # <CJK>
+0x7E7C # <CJK>
+0x7E7D # <CJK>
+0x7E7F # <CJK>
+0x7E82 # <CJK>
+0x7E83 # <CJK>
+0x7E88 # <CJK>
+0x7E89 # <CJK>
+0x7E8C # <CJK>
+0x7E8E # <CJK>
+0x7E8F # <CJK>
+0x7E90 # <CJK>
+0x7E92 # <CJK>
+0x7E93 # <CJK>
+0x7E94 # <CJK>
+0x7E96 # <CJK>
+0x7E9B # <CJK>
+0x7E9C # <CJK>
+0x7F36 # <CJK>
+0x7F38 # <CJK>
+0x7F3A # <CJK>
+0x7F45 # <CJK>
+0x7F4C # <CJK>
+0x7F4D # <CJK>
+0x7F4E # <CJK>
+0x7F50 # <CJK>
+0x7F51 # <CJK>
+0x7F54 # <CJK>
+0x7F55 # <CJK>
+0x7F58 # <CJK>
+0x7F5F # <CJK>
+0x7F60 # <CJK>
+0x7F67 # <CJK>
+0x7F68 # <CJK>
+0x7F69 # <CJK>
+0x7F6A # <CJK>
+0x7F6B # <CJK>
+0x7F6E # <CJK>
+0x7F70 # <CJK>
+0x7F72 # <CJK>
+0x7F75 # <CJK>
+0x7F77 # <CJK>
+0x7F78 # <CJK>
+0x7F79 # <CJK>
+0x7F82 # <CJK>
+0x7F83 # <CJK>
+0x7F85 # <CJK>
+0x7F86 # <CJK>
+0x7F87 # <CJK>
+0x7F88 # <CJK>
+0x7F8A # <CJK>
+0x7F8C # <CJK>
+0x7F8E # <CJK>
+0x7F94 # <CJK>
+0x7F9A # <CJK>
+0x7F9D # <CJK>
+0x7F9E # <CJK>
+0x7FA3 # <CJK>
+0x7FA4 # <CJK>
+0x7FA8 # <CJK>
+0x7FA9 # <CJK>
+0x7FAE # <CJK>
+0x7FAF # <CJK>
+0x7FB2 # <CJK>
+0x7FB6 # <CJK>
+0x7FB8 # <CJK>
+0x7FB9 # <CJK>
+0x7FBD # <CJK>
+0x7FC1 # <CJK>
+0x7FC5 # <CJK>
+0x7FC6 # <CJK>
+0x7FCA # <CJK>
+0x7FCC # <CJK>
+0x7FD2 # <CJK>
+0x7FD4 # <CJK>
+0x7FD5 # <CJK>
+0x7FE0 # <CJK>
+0x7FE1 # <CJK>
+0x7FE6 # <CJK>
+0x7FE9 # <CJK>
+0x7FEB # <CJK>
+0x7FF0 # <CJK>
+0x7FF3 # <CJK>
+0x7FF9 # <CJK>
+0x7FFB # <CJK>
+0x7FFC # <CJK>
+0x8000 # <CJK>
+0x8001 # <CJK>
+0x8003 # <CJK>
+0x8004 # <CJK>
+0x8005 # <CJK>
+0x8006 # <CJK>
+0x800B # <CJK>
+0x800C # <CJK>
+0x8010 # <CJK>
+0x8012 # <CJK>
+0x8015 # <CJK>
+0x8017 # <CJK>
+0x8018 # <CJK>
+0x8019 # <CJK>
+0x801C # <CJK>
+0x8021 # <CJK>
+0x8028 # <CJK>
+0x8033 # <CJK>
+0x8036 # <CJK>
+0x803B # <CJK>
+0x803D # <CJK>
+0x803F # <CJK>
+0x8046 # <CJK>
+0x804A # <CJK>
+0x8052 # <CJK>
+0x8056 # <CJK>
+0x8058 # <CJK>
+0x805A # <CJK>
+0x805E # <CJK>
+0x805F # <CJK>
+0x8061 # <CJK>
+0x8062 # <CJK>
+0x8068 # <CJK>
+0x806F # <CJK>
+0x8070 # <CJK>
+0x8072 # <CJK>
+0x8073 # <CJK>
+0x8074 # <CJK>
+0x8076 # <CJK>
+0x8077 # <CJK>
+0x8079 # <CJK>
+0x807D # <CJK>
+0x807E # <CJK>
+0x807F # <CJK>
+0x8084 # <CJK>
+0x8085 # <CJK>
+0x8086 # <CJK>
+0x8087 # <CJK>
+0x8089 # <CJK>
+0x808B # <CJK>
+0x808C # <CJK>
+0x8093 # <CJK>
+0x8096 # <CJK>
+0x8098 # <CJK>
+0x809A # <CJK>
+0x809B # <CJK>
+0x809D # <CJK>
+0x80A1 # <CJK>
+0x80A2 # <CJK>
+0x80A5 # <CJK>
+0x80A9 # <CJK>
+0x80AA # <CJK>
+0x80AC # <CJK>
+0x80AD # <CJK>
+0x80AF # <CJK>
+0x80B1 # <CJK>
+0x80B2 # <CJK>
+0x80B4 # <CJK>
+0x80BA # <CJK>
+0x80C3 # <CJK>
+0x80C4 # <CJK>
+0x80C6 # <CJK>
+0x80CC # <CJK>
+0x80CE # <CJK>
+0x80D6 # <CJK>
+0x80D9 # <CJK>
+0x80DA # <CJK>
+0x80DB # <CJK>
+0x80DD # <CJK>
+0x80DE # <CJK>
+0x80E1 # <CJK>
+0x80E4 # <CJK>
+0x80E5 # <CJK>
+0x80EF # <CJK>
+0x80F1 # <CJK>
+0x80F4 # <CJK>
+0x80F8 # <CJK>
+0x80FC # <CJK>
+0x80FD # <CJK>
+0x8102 # <CJK>
+0x8105 # <CJK>
+0x8106 # <CJK>
+0x8107 # <CJK>
+0x8108 # <CJK>
+0x8109 # <CJK>
+0x810A # <CJK>
+0x811A # <CJK>
+0x811B # <CJK>
+0x8123 # <CJK>
+0x8129 # <CJK>
+0x812F # <CJK>
+0x8131 # <CJK>
+0x8133 # <CJK>
+0x8139 # <CJK>
+0x813E # <CJK>
+0x8146 # <CJK>
+0x814B # <CJK>
+0x814E # <CJK>
+0x8150 # <CJK>
+0x8151 # <CJK>
+0x8153 # <CJK>
+0x8154 # <CJK>
+0x8155 # <CJK>
+0x815F # <CJK>
+0x8165 # <CJK>
+0x8166 # <CJK>
+0x816B # <CJK>
+0x816E # <CJK>
+0x8170 # <CJK>
+0x8171 # <CJK>
+0x8174 # <CJK>
+0x8178 # <CJK>
+0x8179 # <CJK>
+0x817A # <CJK>
+0x817F # <CJK>
+0x8180 # <CJK>
+0x8182 # <CJK>
+0x8183 # <CJK>
+0x8188 # <CJK>
+0x818A # <CJK>
+0x818F # <CJK>
+0x8193 # <CJK>
+0x8195 # <CJK>
+0x819A # <CJK>
+0x819C # <CJK>
+0x819D # <CJK>
+0x81A0 # <CJK>
+0x81A3 # <CJK>
+0x81A4 # <CJK>
+0x81A8 # <CJK>
+0x81A9 # <CJK>
+0x81B0 # <CJK>
+0x81B3 # <CJK>
+0x81B5 # <CJK>
+0x81B8 # <CJK>
+0x81BA # <CJK>
+0x81BD # <CJK>
+0x81BE # <CJK>
+0x81BF # <CJK>
+0x81C0 # <CJK>
+0x81C2 # <CJK>
+0x81C6 # <CJK>
+0x81C8 # <CJK>
+0x81C9 # <CJK>
+0x81CD # <CJK>
+0x81D1 # <CJK>
+0x81D3 # <CJK>
+0x81D8 # <CJK>
+0x81D9 # <CJK>
+0x81DA # <CJK>
+0x81DF # <CJK>
+0x81E0 # <CJK>
+0x81E3 # <CJK>
+0x81E5 # <CJK>
+0x81E7 # <CJK>
+0x81E8 # <CJK>
+0x81EA # <CJK>
+0x81ED # <CJK>
+0x81F3 # <CJK>
+0x81F4 # <CJK>
+0x81FA # <CJK>
+0x81FB # <CJK>
+0x81FC # <CJK>
+0x81FE # <CJK>
+0x8201 # <CJK>
+0x8202 # <CJK>
+0x8205 # <CJK>
+0x8207 # <CJK>
+0x8208 # <CJK>
+0x8209 # <CJK>
+0x820A # <CJK>
+0x820C # <CJK>
+0x820D # <CJK>
+0x820E # <CJK>
+0x8210 # <CJK>
+0x8212 # <CJK>
+0x8216 # <CJK>
+0x8217 # <CJK>
+0x8218 # <CJK>
+0x821B # <CJK>
+0x821C # <CJK>
+0x821E # <CJK>
+0x821F # <CJK>
+0x8229 # <CJK>
+0x822A # <CJK>
+0x822B # <CJK>
+0x822C # <CJK>
+0x822E # <CJK>
+0x8233 # <CJK>
+0x8235 # <CJK>
+0x8236 # <CJK>
+0x8237 # <CJK>
+0x8238 # <CJK>
+0x8239 # <CJK>
+0x8240 # <CJK>
+0x8247 # <CJK>
+0x8258 # <CJK>
+0x8259 # <CJK>
+0x825A # <CJK>
+0x825D # <CJK>
+0x825F # <CJK>
+0x8262 # <CJK>
+0x8264 # <CJK>
+0x8266 # <CJK>
+0x8268 # <CJK>
+0x826A # <CJK>
+0x826B # <CJK>
+0x826E # <CJK>
+0x826F # <CJK>
+0x8271 # <CJK>
+0x8272 # <CJK>
+0x8276 # <CJK>
+0x8277 # <CJK>
+0x8278 # <CJK>
+0x827E # <CJK>
+0x828B # <CJK>
+0x828D # <CJK>
+0x8292 # <CJK>
+0x8299 # <CJK>
+0x829D # <CJK>
+0x829F # <CJK>
+0x82A5 # <CJK>
+0x82A6 # <CJK>
+0x82AB # <CJK>
+0x82AC # <CJK>
+0x82AD # <CJK>
+0x82AF # <CJK>
+0x82B1 # <CJK>
+0x82B3 # <CJK>
+0x82B8 # <CJK>
+0x82B9 # <CJK>
+0x82BB # <CJK>
+0x82BD # <CJK>
+0x82C5 # <CJK>
+0x82D1 # <CJK>
+0x82D2 # <CJK>
+0x82D3 # <CJK>
+0x82D4 # <CJK>
+0x82D7 # <CJK>
+0x82D9 # <CJK>
+0x82DB # <CJK>
+0x82DC # <CJK>
+0x82DE # <CJK>
+0x82DF # <CJK>
+0x82E1 # <CJK>
+0x82E3 # <CJK>
+0x82E5 # <CJK>
+0x82E6 # <CJK>
+0x82E7 # <CJK>
+0x82EB # <CJK>
+0x82F1 # <CJK>
+0x82F3 # <CJK>
+0x82F4 # <CJK>
+0x82F9 # <CJK>
+0x82FA # <CJK>
+0x82FB # <CJK>
+0x8302 # <CJK>
+0x8303 # <CJK>
+0x8304 # <CJK>
+0x8305 # <CJK>
+0x8306 # <CJK>
+0x8309 # <CJK>
+0x830E # <CJK>
+0x8316 # <CJK>
+0x8317 # <CJK>
+0x8318 # <CJK>
+0x831C # <CJK>
+0x8323 # <CJK>
+0x8328 # <CJK>
+0x832B # <CJK>
+0x832F # <CJK>
+0x8331 # <CJK>
+0x8332 # <CJK>
+0x8334 # <CJK>
+0x8335 # <CJK>
+0x8336 # <CJK>
+0x8338 # <CJK>
+0x8339 # <CJK>
+0x8340 # <CJK>
+0x8345 # <CJK>
+0x8349 # <CJK>
+0x834A # <CJK>
+0x834F # <CJK>
+0x8350 # <CJK>
+0x8352 # <CJK>
+0x8358 # <CJK>
+0x8373 # <CJK>
+0x8375 # <CJK>
+0x8377 # <CJK>
+0x837B # <CJK>
+0x837C # <CJK>
+0x8385 # <CJK>
+0x8387 # <CJK>
+0x8389 # <CJK>
+0x838A # <CJK>
+0x838E # <CJK>
+0x8393 # <CJK>
+0x8396 # <CJK>
+0x839A # <CJK>
+0x839E # <CJK>
+0x839F # <CJK>
+0x83A0 # <CJK>
+0x83A2 # <CJK>
+0x83A8 # <CJK>
+0x83AA # <CJK>
+0x83AB # <CJK>
+0x83B1 # <CJK>
+0x83B5 # <CJK>
+0x83BD # <CJK>
+0x83C1 # <CJK>
+0x83C5 # <CJK>
+0x83CA # <CJK>
+0x83CC # <CJK>
+0x83CE # <CJK>
+0x83D3 # <CJK>
+0x83D6 # <CJK>
+0x83D8 # <CJK>
+0x83DC # <CJK>
+0x83DF # <CJK>
+0x83E0 # <CJK>
+0x83E9 # <CJK>
+0x83EB # <CJK>
+0x83EF # <CJK>
+0x83F0 # <CJK>
+0x83F1 # <CJK>
+0x83F2 # <CJK>
+0x83F4 # <CJK>
+0x83F7 # <CJK>
+0x83FB # <CJK>
+0x83FD # <CJK>
+0x8403 # <CJK>
+0x8404 # <CJK>
+0x8407 # <CJK>
+0x840B # <CJK>
+0x840C # <CJK>
+0x840D # <CJK>
+0x840E # <CJK>
+0x8413 # <CJK>
+0x8420 # <CJK>
+0x8422 # <CJK>
+0x8429 # <CJK>
+0x842A # <CJK>
+0x842C # <CJK>
+0x8431 # <CJK>
+0x8435 # <CJK>
+0x8438 # <CJK>
+0x843C # <CJK>
+0x843D # <CJK>
+0x8446 # <CJK>
+0x8449 # <CJK>
+0x844E # <CJK>
+0x8457 # <CJK>
+0x845B # <CJK>
+0x8461 # <CJK>
+0x8462 # <CJK>
+0x8463 # <CJK>
+0x8466 # <CJK>
+0x8469 # <CJK>
+0x846B # <CJK>
+0x846C # <CJK>
+0x846D # <CJK>
+0x846E # <CJK>
+0x846F # <CJK>
+0x8471 # <CJK>
+0x8475 # <CJK>
+0x8477 # <CJK>
+0x8479 # <CJK>
+0x847A # <CJK>
+0x8482 # <CJK>
+0x8484 # <CJK>
+0x848B # <CJK>
+0x8490 # <CJK>
+0x8494 # <CJK>
+0x8499 # <CJK>
+0x849C # <CJK>
+0x849F # <CJK>
+0x84A1 # <CJK>
+0x84AD # <CJK>
+0x84B2 # <CJK>
+0x84B8 # <CJK>
+0x84B9 # <CJK>
+0x84BB # <CJK>
+0x84BC # <CJK>
+0x84BF # <CJK>
+0x84C1 # <CJK>
+0x84C4 # <CJK>
+0x84C6 # <CJK>
+0x84C9 # <CJK>
+0x84CA # <CJK>
+0x84CB # <CJK>
+0x84CD # <CJK>
+0x84D0 # <CJK>
+0x84D1 # <CJK>
+0x84D6 # <CJK>
+0x84D9 # <CJK>
+0x84DA # <CJK>
+0x84EC # <CJK>
+0x84EE # <CJK>
+0x84F4 # <CJK>
+0x84FC # <CJK>
+0x84FF # <CJK>
+0x8500 # <CJK>
+0x8506 # <CJK>
+0x8511 # <CJK>
+0x8513 # <CJK>
+0x8514 # <CJK>
+0x8515 # <CJK>
+0x8517 # <CJK>
+0x8518 # <CJK>
+0x851A # <CJK>
+0x851F # <CJK>
+0x8521 # <CJK>
+0x8526 # <CJK>
+0x852C # <CJK>
+0x852D # <CJK>
+0x8535 # <CJK>
+0x853D # <CJK>
+0x8540 # <CJK>
+0x8541 # <CJK>
+0x8543 # <CJK>
+0x8548 # <CJK>
+0x8549 # <CJK>
+0x854A # <CJK>
+0x854B # <CJK>
+0x854E # <CJK>
+0x8555 # <CJK>
+0x8557 # <CJK>
+0x8558 # <CJK>
+0x855A # <CJK>
+0x8563 # <CJK>
+0x8568 # <CJK>
+0x8569 # <CJK>
+0x856A # <CJK>
+0x856D # <CJK>
+0x8577 # <CJK>
+0x857E # <CJK>
+0x8580 # <CJK>
+0x8584 # <CJK>
+0x8587 # <CJK>
+0x8588 # <CJK>
+0x858A # <CJK>
+0x8590 # <CJK>
+0x8591 # <CJK>
+0x8594 # <CJK>
+0x8597 # <CJK>
+0x8599 # <CJK>
+0x859B # <CJK>
+0x859C # <CJK>
+0x85A4 # <CJK>
+0x85A6 # <CJK>
+0x85A8 # <CJK>
+0x85A9 # <CJK>
+0x85AA # <CJK>
+0x85AB # <CJK>
+0x85AC # <CJK>
+0x85AE # <CJK>
+0x85AF # <CJK>
+0x85B9 # <CJK>
+0x85BA # <CJK>
+0x85C1 # <CJK>
+0x85C9 # <CJK>
+0x85CD # <CJK>
+0x85CF # <CJK>
+0x85D0 # <CJK>
+0x85D5 # <CJK>
+0x85DC # <CJK>
+0x85DD # <CJK>
+0x85E4 # <CJK>
+0x85E5 # <CJK>
+0x85E9 # <CJK>
+0x85EA # <CJK>
+0x85F7 # <CJK>
+0x85F9 # <CJK>
+0x85FA # <CJK>
+0x85FB # <CJK>
+0x85FE # <CJK>
+0x8602 # <CJK>
+0x8606 # <CJK>
+0x8607 # <CJK>
+0x860A # <CJK>
+0x860B # <CJK>
+0x8613 # <CJK>
+0x8616 # <CJK>
+0x8617 # <CJK>
+0x861A # <CJK>
+0x8622 # <CJK>
+0x862D # <CJK>
+0x862F # <CJK>
+0x8630 # <CJK>
+0x863F # <CJK>
+0x864D # <CJK>
+0x864E # <CJK>
+0x8650 # <CJK>
+0x8654 # <CJK>
+0x8655 # <CJK>
+0x865A # <CJK>
+0x865C # <CJK>
+0x865E # <CJK>
+0x865F # <CJK>
+0x8667 # <CJK>
+0x866B # <CJK>
+0x8671 # <CJK>
+0x8679 # <CJK>
+0x867B # <CJK>
+0x868A # <CJK>
+0x868B # <CJK>
+0x868C # <CJK>
+0x8693 # <CJK>
+0x8695 # <CJK>
+0x86A3 # <CJK>
+0x86A4 # <CJK>
+0x86A9 # <CJK>
+0x86AA # <CJK>
+0x86AB # <CJK>
+0x86AF # <CJK>
+0x86B0 # <CJK>
+0x86B6 # <CJK>
+0x86C4 # <CJK>
+0x86C6 # <CJK>
+0x86C7 # <CJK>
+0x86C9 # <CJK>
+0x86CB # <CJK>
+0x86CD # <CJK>
+0x86CE # <CJK>
+0x86D4 # <CJK>
+0x86D9 # <CJK>
+0x86DB # <CJK>
+0x86DE # <CJK>
+0x86DF # <CJK>
+0x86E4 # <CJK>
+0x86E9 # <CJK>
+0x86EC # <CJK>
+0x86ED # <CJK>
+0x86EE # <CJK>
+0x86EF # <CJK>
+0x86F8 # <CJK>
+0x86F9 # <CJK>
+0x86FB # <CJK>
+0x86FE # <CJK>
+0x8700 # <CJK>
+0x8702 # <CJK>
+0x8703 # <CJK>
+0x8706 # <CJK>
+0x8708 # <CJK>
+0x8709 # <CJK>
+0x870A # <CJK>
+0x870D # <CJK>
+0x8711 # <CJK>
+0x8712 # <CJK>
+0x8718 # <CJK>
+0x871A # <CJK>
+0x871C # <CJK>
+0x8725 # <CJK>
+0x8729 # <CJK>
+0x8734 # <CJK>
+0x8737 # <CJK>
+0x873B # <CJK>
+0x873F # <CJK>
+0x8749 # <CJK>
+0x874B # <CJK>
+0x874C # <CJK>
+0x874E # <CJK>
+0x8753 # <CJK>
+0x8755 # <CJK>
+0x8757 # <CJK>
+0x8759 # <CJK>
+0x875F # <CJK>
+0x8760 # <CJK>
+0x8763 # <CJK>
+0x8766 # <CJK>
+0x8768 # <CJK>
+0x876A # <CJK>
+0x876E # <CJK>
+0x8774 # <CJK>
+0x8776 # <CJK>
+0x8778 # <CJK>
+0x877F # <CJK>
+0x8782 # <CJK>
+0x878D # <CJK>
+0x879F # <CJK>
+0x87A2 # <CJK>
+0x87AB # <CJK>
+0x87AF # <CJK>
+0x87B3 # <CJK>
+0x87BA # <CJK>
+0x87BB # <CJK>
+0x87BD # <CJK>
+0x87C0 # <CJK>
+0x87C4 # <CJK>
+0x87C6 # <CJK>
+0x87C7 # <CJK>
+0x87CB # <CJK>
+0x87D0 # <CJK>
+0x87D2 # <CJK>
+0x87E0 # <CJK>
+0x87EF # <CJK>
+0x87F2 # <CJK>
+0x87F6 # <CJK>
+0x87F7 # <CJK>
+0x87F9 # <CJK>
+0x87FB # <CJK>
+0x87FE # <CJK>
+0x8805 # <CJK>
+0x880D # <CJK>
+0x880E # <CJK>
+0x880F # <CJK>
+0x8811 # <CJK>
+0x8815 # <CJK>
+0x8816 # <CJK>
+0x8821 # <CJK>
+0x8822 # <CJK>
+0x8823 # <CJK>
+0x8827 # <CJK>
+0x8831 # <CJK>
+0x8836 # <CJK>
+0x8839 # <CJK>
+0x883B # <CJK>
+0x8840 # <CJK>
+0x8842 # <CJK>
+0x8844 # <CJK>
+0x8846 # <CJK>
+0x884C # <CJK>
+0x884D # <CJK>
+0x8852 # <CJK>
+0x8853 # <CJK>
+0x8857 # <CJK>
+0x8859 # <CJK>
+0x885B # <CJK>
+0x885D # <CJK>
+0x885E # <CJK>
+0x8861 # <CJK>
+0x8862 # <CJK>
+0x8863 # <CJK>
+0x8868 # <CJK>
+0x886B # <CJK>
+0x8870 # <CJK>
+0x8872 # <CJK>
+0x8875 # <CJK>
+0x8877 # <CJK>
+0x887D # <CJK>
+0x887E # <CJK>
+0x887F # <CJK>
+0x8881 # <CJK>
+0x8882 # <CJK>
+0x8888 # <CJK>
+0x888B # <CJK>
+0x888D # <CJK>
+0x8892 # <CJK>
+0x8896 # <CJK>
+0x8897 # <CJK>
+0x8899 # <CJK>
+0x889E # <CJK>
+0x88A2 # <CJK>
+0x88A4 # <CJK>
+0x88AB # <CJK>
+0x88AE # <CJK>
+0x88B0 # <CJK>
+0x88B1 # <CJK>
+0x88B4 # <CJK>
+0x88B5 # <CJK>
+0x88B7 # <CJK>
+0x88BF # <CJK>
+0x88C1 # <CJK>
+0x88C2 # <CJK>
+0x88C3 # <CJK>
+0x88C4 # <CJK>
+0x88C5 # <CJK>
+0x88CF # <CJK>
+0x88D4 # <CJK>
+0x88D5 # <CJK>
+0x88D8 # <CJK>
+0x88D9 # <CJK>
+0x88DC # <CJK>
+0x88DD # <CJK>
+0x88DF # <CJK>
+0x88E1 # <CJK>
+0x88E8 # <CJK>
+0x88F2 # <CJK>
+0x88F3 # <CJK>
+0x88F4 # <CJK>
+0x88F8 # <CJK>
+0x88F9 # <CJK>
+0x88FC # <CJK>
+0x88FD # <CJK>
+0x88FE # <CJK>
+0x8902 # <CJK>
+0x8904 # <CJK>
+0x8907 # <CJK>
+0x890A # <CJK>
+0x890C # <CJK>
+0x8910 # <CJK>
+0x8912 # <CJK>
+0x8913 # <CJK>
+0x891D # <CJK>
+0x891E # <CJK>
+0x8925 # <CJK>
+0x892A # <CJK>
+0x892B # <CJK>
+0x8936 # <CJK>
+0x8938 # <CJK>
+0x893B # <CJK>
+0x8941 # <CJK>
+0x8943 # <CJK>
+0x8944 # <CJK>
+0x894C # <CJK>
+0x894D # <CJK>
+0x8956 # <CJK>
+0x895E # <CJK>
+0x895F # <CJK>
+0x8960 # <CJK>
+0x8964 # <CJK>
+0x8966 # <CJK>
+0x896A # <CJK>
+0x896D # <CJK>
+0x896F # <CJK>
+0x8972 # <CJK>
+0x8974 # <CJK>
+0x8977 # <CJK>
+0x897E # <CJK>
+0x897F # <CJK>
+0x8981 # <CJK>
+0x8983 # <CJK>
+0x8986 # <CJK>
+0x8987 # <CJK>
+0x8988 # <CJK>
+0x898A # <CJK>
+0x898B # <CJK>
+0x898F # <CJK>
+0x8993 # <CJK>
+0x8996 # <CJK>
+0x8997 # <CJK>
+0x8998 # <CJK>
+0x899A # <CJK>
+0x89A1 # <CJK>
+0x89A6 # <CJK>
+0x89A7 # <CJK>
+0x89A9 # <CJK>
+0x89AA # <CJK>
+0x89AC # <CJK>
+0x89AF # <CJK>
+0x89B2 # <CJK>
+0x89B3 # <CJK>
+0x89BA # <CJK>
+0x89BD # <CJK>
+0x89BF # <CJK>
+0x89C0 # <CJK>
+0x89D2 # <CJK>
+0x89DA # <CJK>
+0x89DC # <CJK>
+0x89DD # <CJK>
+0x89E3 # <CJK>
+0x89E6 # <CJK>
+0x89E7 # <CJK>
+0x89F4 # <CJK>
+0x89F8 # <CJK>
+0x8A00 # <CJK>
+0x8A02 # <CJK>
+0x8A03 # <CJK>
+0x8A08 # <CJK>
+0x8A0A # <CJK>
+0x8A0C # <CJK>
+0x8A0E # <CJK>
+0x8A10 # <CJK>
+0x8A13 # <CJK>
+0x8A16 # <CJK>
+0x8A17 # <CJK>
+0x8A18 # <CJK>
+0x8A1B # <CJK>
+0x8A1D # <CJK>
+0x8A1F # <CJK>
+0x8A23 # <CJK>
+0x8A25 # <CJK>
+0x8A2A # <CJK>
+0x8A2D # <CJK>
+0x8A31 # <CJK>
+0x8A33 # <CJK>
+0x8A34 # <CJK>
+0x8A36 # <CJK>
+0x8A3A # <CJK>
+0x8A3B # <CJK>
+0x8A3C # <CJK>
+0x8A41 # <CJK>
+0x8A46 # <CJK>
+0x8A48 # <CJK>
+0x8A50 # <CJK>
+0x8A51 # <CJK>
+0x8A52 # <CJK>
+0x8A54 # <CJK>
+0x8A55 # <CJK>
+0x8A5B # <CJK>
+0x8A5E # <CJK>
+0x8A60 # <CJK>
+0x8A62 # <CJK>
+0x8A63 # <CJK>
+0x8A66 # <CJK>
+0x8A69 # <CJK>
+0x8A6B # <CJK>
+0x8A6C # <CJK>
+0x8A6D # <CJK>
+0x8A6E # <CJK>
+0x8A70 # <CJK>
+0x8A71 # <CJK>
+0x8A72 # <CJK>
+0x8A73 # <CJK>
+0x8A7C # <CJK>
+0x8A82 # <CJK>
+0x8A84 # <CJK>
+0x8A85 # <CJK>
+0x8A87 # <CJK>
+0x8A89 # <CJK>
+0x8A8C # <CJK>
+0x8A8D # <CJK>
+0x8A91 # <CJK>
+0x8A93 # <CJK>
+0x8A95 # <CJK>
+0x8A98 # <CJK>
+0x8A9A # <CJK>
+0x8A9E # <CJK>
+0x8AA0 # <CJK>
+0x8AA1 # <CJK>
+0x8AA3 # <CJK>
+0x8AA4 # <CJK>
+0x8AA5 # <CJK>
+0x8AA6 # <CJK>
+0x8AA8 # <CJK>
+0x8AAC # <CJK>
+0x8AAD # <CJK>
+0x8AB0 # <CJK>
+0x8AB2 # <CJK>
+0x8AB9 # <CJK>
+0x8ABC # <CJK>
+0x8ABF # <CJK>
+0x8AC2 # <CJK>
+0x8AC4 # <CJK>
+0x8AC7 # <CJK>
+0x8ACB # <CJK>
+0x8ACC # <CJK>
+0x8ACD # <CJK>
+0x8ACF # <CJK>
+0x8AD2 # <CJK>
+0x8AD6 # <CJK>
+0x8ADA # <CJK>
+0x8ADB # <CJK>
+0x8ADC # <CJK>
+0x8ADE # <CJK>
+0x8AE0 # <CJK>
+0x8AE1 # <CJK>
+0x8AE2 # <CJK>
+0x8AE4 # <CJK>
+0x8AE6 # <CJK>
+0x8AE7 # <CJK>
+0x8AEB # <CJK>
+0x8AED # <CJK>
+0x8AEE # <CJK>
+0x8AF1 # <CJK>
+0x8AF3 # <CJK>
+0x8AF7 # <CJK>
+0x8AF8 # <CJK>
+0x8AFA # <CJK>
+0x8AFE # <CJK>
+0x8B00 # <CJK>
+0x8B01 # <CJK>
+0x8B02 # <CJK>
+0x8B04 # <CJK>
+0x8B07 # <CJK>
+0x8B0C # <CJK>
+0x8B0E # <CJK>
+0x8B10 # <CJK>
+0x8B14 # <CJK>
+0x8B16 # <CJK>
+0x8B17 # <CJK>
+0x8B19 # <CJK>
+0x8B1A # <CJK>
+0x8B1B # <CJK>
+0x8B1D # <CJK>
+0x8B20 # <CJK>
+0x8B21 # <CJK>
+0x8B26 # <CJK>
+0x8B28 # <CJK>
+0x8B2B # <CJK>
+0x8B2C # <CJK>
+0x8B33 # <CJK>
+0x8B39 # <CJK>
+0x8B3E # <CJK>
+0x8B41 # <CJK>
+0x8B49 # <CJK>
+0x8B4C # <CJK>
+0x8B4E # <CJK>
+0x8B4F # <CJK>
+0x8B56 # <CJK>
+0x8B58 # <CJK>
+0x8B5A # <CJK>
+0x8B5B # <CJK>
+0x8B5C # <CJK>
+0x8B5F # <CJK>
+0x8B66 # <CJK>
+0x8B6B # <CJK>
+0x8B6C # <CJK>
+0x8B6F # <CJK>
+0x8B70 # <CJK>
+0x8B71 # <CJK>
+0x8B72 # <CJK>
+0x8B74 # <CJK>
+0x8B77 # <CJK>
+0x8B7D # <CJK>
+0x8B80 # <CJK>
+0x8B83 # <CJK>
+0x8B8A # <CJK>
+0x8B8C # <CJK>
+0x8B8E # <CJK>
+0x8B90 # <CJK>
+0x8B92 # <CJK>
+0x8B93 # <CJK>
+0x8B96 # <CJK>
+0x8B99 # <CJK>
+0x8B9A # <CJK>
+0x8C37 # <CJK>
+0x8C3A # <CJK>
+0x8C3F # <CJK>
+0x8C41 # <CJK>
+0x8C46 # <CJK>
+0x8C48 # <CJK>
+0x8C4A # <CJK>
+0x8C4C # <CJK>
+0x8C4E # <CJK>
+0x8C50 # <CJK>
+0x8C55 # <CJK>
+0x8C5A # <CJK>
+0x8C61 # <CJK>
+0x8C62 # <CJK>
+0x8C6A # <CJK>
+0x8C6B # <CJK>
+0x8C6C # <CJK>
+0x8C78 # <CJK>
+0x8C79 # <CJK>
+0x8C7A # <CJK>
+0x8C7C # <CJK>
+0x8C82 # <CJK>
+0x8C85 # <CJK>
+0x8C89 # <CJK>
+0x8C8A # <CJK>
+0x8C8C # <CJK>
+0x8C8D # <CJK>
+0x8C8E # <CJK>
+0x8C94 # <CJK>
+0x8C98 # <CJK>
+0x8C9D # <CJK>
+0x8C9E # <CJK>
+0x8CA0 # <CJK>
+0x8CA1 # <CJK>
+0x8CA2 # <CJK>
+0x8CA7 # <CJK>
+0x8CA8 # <CJK>
+0x8CA9 # <CJK>
+0x8CAA # <CJK>
+0x8CAB # <CJK>
+0x8CAC # <CJK>
+0x8CAD # <CJK>
+0x8CAE # <CJK>
+0x8CAF # <CJK>
+0x8CB0 # <CJK>
+0x8CB2 # <CJK>
+0x8CB3 # <CJK>
+0x8CB4 # <CJK>
+0x8CB6 # <CJK>
+0x8CB7 # <CJK>
+0x8CB8 # <CJK>
+0x8CBB # <CJK>
+0x8CBC # <CJK>
+0x8CBD # <CJK>
+0x8CBF # <CJK>
+0x8CC0 # <CJK>
+0x8CC1 # <CJK>
+0x8CC2 # <CJK>
+0x8CC3 # <CJK>
+0x8CC4 # <CJK>
+0x8CC7 # <CJK>
+0x8CC8 # <CJK>
+0x8CCA # <CJK>
+0x8CCD # <CJK>
+0x8CCE # <CJK>
+0x8CD1 # <CJK>
+0x8CD3 # <CJK>
+0x8CDA # <CJK>
+0x8CDB # <CJK>
+0x8CDC # <CJK>
+0x8CDE # <CJK>
+0x8CE0 # <CJK>
+0x8CE2 # <CJK>
+0x8CE3 # <CJK>
+0x8CE4 # <CJK>
+0x8CE6 # <CJK>
+0x8CEA # <CJK>
+0x8CED # <CJK>
+0x8CFA # <CJK>
+0x8CFB # <CJK>
+0x8CFC # <CJK>
+0x8CFD # <CJK>
+0x8D04 # <CJK>
+0x8D05 # <CJK>
+0x8D07 # <CJK>
+0x8D08 # <CJK>
+0x8D0A # <CJK>
+0x8D0B # <CJK>
+0x8D0D # <CJK>
+0x8D0F # <CJK>
+0x8D10 # <CJK>
+0x8D13 # <CJK>
+0x8D14 # <CJK>
+0x8D16 # <CJK>
+0x8D64 # <CJK>
+0x8D66 # <CJK>
+0x8D67 # <CJK>
+0x8D6B # <CJK>
+0x8D6D # <CJK>
+0x8D70 # <CJK>
+0x8D71 # <CJK>
+0x8D73 # <CJK>
+0x8D74 # <CJK>
+0x8D77 # <CJK>
+0x8D81 # <CJK>
+0x8D85 # <CJK>
+0x8D8A # <CJK>
+0x8D99 # <CJK>
+0x8DA3 # <CJK>
+0x8DA8 # <CJK>
+0x8DB3 # <CJK>
+0x8DBA # <CJK>
+0x8DBE # <CJK>
+0x8DC2 # <CJK>
+0x8DCB # <CJK>
+0x8DCC # <CJK>
+0x8DCF # <CJK>
+0x8DD6 # <CJK>
+0x8DDA # <CJK>
+0x8DDB # <CJK>
+0x8DDD # <CJK>
+0x8DDF # <CJK>
+0x8DE1 # <CJK>
+0x8DE3 # <CJK>
+0x8DE8 # <CJK>
+0x8DEA # <CJK>
+0x8DEB # <CJK>
+0x8DEF # <CJK>
+0x8DF3 # <CJK>
+0x8DF5 # <CJK>
+0x8DFC # <CJK>
+0x8DFF # <CJK>
+0x8E08 # <CJK>
+0x8E09 # <CJK>
+0x8E0A # <CJK>
+0x8E0F # <CJK>
+0x8E10 # <CJK>
+0x8E1D # <CJK>
+0x8E1E # <CJK>
+0x8E1F # <CJK>
+0x8E2A # <CJK>
+0x8E30 # <CJK>
+0x8E34 # <CJK>
+0x8E35 # <CJK>
+0x8E42 # <CJK>
+0x8E44 # <CJK>
+0x8E47 # <CJK>
+0x8E48 # <CJK>
+0x8E49 # <CJK>
+0x8E4A # <CJK>
+0x8E4C # <CJK>
+0x8E50 # <CJK>
+0x8E55 # <CJK>
+0x8E59 # <CJK>
+0x8E5F # <CJK>
+0x8E60 # <CJK>
+0x8E63 # <CJK>
+0x8E64 # <CJK>
+0x8E72 # <CJK>
+0x8E74 # <CJK>
+0x8E76 # <CJK>
+0x8E7C # <CJK>
+0x8E81 # <CJK>
+0x8E84 # <CJK>
+0x8E85 # <CJK>
+0x8E87 # <CJK>
+0x8E8A # <CJK>
+0x8E8B # <CJK>
+0x8E8D # <CJK>
+0x8E91 # <CJK>
+0x8E93 # <CJK>
+0x8E94 # <CJK>
+0x8E99 # <CJK>
+0x8EA1 # <CJK>
+0x8EAA # <CJK>
+0x8EAB # <CJK>
+0x8EAC # <CJK>
+0x8EAF # <CJK>
+0x8EB0 # <CJK>
+0x8EB1 # <CJK>
+0x8EBE # <CJK>
+0x8EC5 # <CJK>
+0x8EC6 # <CJK>
+0x8EC8 # <CJK>
+0x8ECA # <CJK>
+0x8ECB # <CJK>
+0x8ECC # <CJK>
+0x8ECD # <CJK>
+0x8ED2 # <CJK>
+0x8EDB # <CJK>
+0x8EDF # <CJK>
+0x8EE2 # <CJK>
+0x8EE3 # <CJK>
+0x8EEB # <CJK>
+0x8EF8 # <CJK>
+0x8EFB # <CJK>
+0x8EFC # <CJK>
+0x8EFD # <CJK>
+0x8EFE # <CJK>
+0x8F03 # <CJK>
+0x8F05 # <CJK>
+0x8F09 # <CJK>
+0x8F0A # <CJK>
+0x8F0C # <CJK>
+0x8F12 # <CJK>
+0x8F13 # <CJK>
+0x8F14 # <CJK>
+0x8F15 # <CJK>
+0x8F19 # <CJK>
+0x8F1B # <CJK>
+0x8F1C # <CJK>
+0x8F1D # <CJK>
+0x8F1F # <CJK>
+0x8F26 # <CJK>
+0x8F29 # <CJK>
+0x8F2A # <CJK>
+0x8F2F # <CJK>
+0x8F33 # <CJK>
+0x8F38 # <CJK>
+0x8F39 # <CJK>
+0x8F3B # <CJK>
+0x8F3E # <CJK>
+0x8F3F # <CJK>
+0x8F42 # <CJK>
+0x8F44 # <CJK>
+0x8F45 # <CJK>
+0x8F46 # <CJK>
+0x8F49 # <CJK>
+0x8F4C # <CJK>
+0x8F4D # <CJK>
+0x8F4E # <CJK>
+0x8F57 # <CJK>
+0x8F5C # <CJK>
+0x8F5F # <CJK>
+0x8F61 # <CJK>
+0x8F62 # <CJK>
+0x8F63 # <CJK>
+0x8F64 # <CJK>
+0x8F9B # <CJK>
+0x8F9C # <CJK>
+0x8F9E # <CJK>
+0x8F9F # <CJK>
+0x8FA3 # <CJK>
+0x8FA7 # <CJK>
+0x8FA8 # <CJK>
+0x8FAD # <CJK>
+0x8FAE # <CJK>
+0x8FAF # <CJK>
+0x8FB0 # <CJK>
+0x8FB1 # <CJK>
+0x8FB2 # <CJK>
+0x8FB7 # <CJK>
+0x8FBA # <CJK>
+0x8FBB # <CJK>
+0x8FBC # <CJK>
+0x8FBF # <CJK>
+0x8FC2 # <CJK>
+0x8FC4 # <CJK>
+0x8FC5 # <CJK>
+0x8FCE # <CJK>
+0x8FD1 # <CJK>
+0x8FD4 # <CJK>
+0x8FDA # <CJK>
+0x8FE2 # <CJK>
+0x8FE5 # <CJK>
+0x8FE6 # <CJK>
+0x8FE9 # <CJK>
+0x8FEA # <CJK>
+0x8FEB # <CJK>
+0x8FED # <CJK>
+0x8FEF # <CJK>
+0x8FF0 # <CJK>
+0x8FF4 # <CJK>
+0x8FF7 # <CJK>
+0x8FF8 # <CJK>
+0x8FF9 # <CJK>
+0x8FFA # <CJK>
+0x8FFD # <CJK>
+0x9000 # <CJK>
+0x9001 # <CJK>
+0x9003 # <CJK>
+0x9005 # <CJK>
+0x9006 # <CJK>
+0x900B # <CJK>
+0x900D # <CJK>
+0x900E # <CJK>
+0x900F # <CJK>
+0x9010 # <CJK>
+0x9011 # <CJK>
+0x9013 # <CJK>
+0x9014 # <CJK>
+0x9015 # <CJK>
+0x9016 # <CJK>
+0x9017 # <CJK>
+0x9019 # <CJK>
+0x901A # <CJK>
+0x901D # <CJK>
+0x901E # <CJK>
+0x901F # <CJK>
+0x9020 # <CJK>
+0x9021 # <CJK>
+0x9022 # <CJK>
+0x9023 # <CJK>
+0x9027 # <CJK>
+0x902E # <CJK>
+0x9031 # <CJK>
+0x9032 # <CJK>
+0x9035 # <CJK>
+0x9036 # <CJK>
+0x9038 # <CJK>
+0x9039 # <CJK>
+0x903C # <CJK>
+0x903E # <CJK>
+0x9041 # <CJK>
+0x9042 # <CJK>
+0x9045 # <CJK>
+0x9047 # <CJK>
+0x9049 # <CJK>
+0x904A # <CJK>
+0x904B # <CJK>
+0x904D # <CJK>
+0x904E # <CJK>
+0x904F # <CJK>
+0x9050 # <CJK>
+0x9051 # <CJK>
+0x9052 # <CJK>
+0x9053 # <CJK>
+0x9054 # <CJK>
+0x9055 # <CJK>
+0x9056 # <CJK>
+0x9058 # <CJK>
+0x9059 # <CJK>
+0x905C # <CJK>
+0x905E # <CJK>
+0x9060 # <CJK>
+0x9061 # <CJK>
+0x9063 # <CJK>
+0x9065 # <CJK>
+0x9068 # <CJK>
+0x9069 # <CJK>
+0x906D # <CJK>
+0x906E # <CJK>
+0x906F # <CJK>
+0x9072 # <CJK>
+0x9075 # <CJK>
+0x9076 # <CJK>
+0x9077 # <CJK>
+0x9078 # <CJK>
+0x907A # <CJK>
+0x907C # <CJK>
+0x907D # <CJK>
+0x907F # <CJK>
+0x9080 # <CJK>
+0x9081 # <CJK>
+0x9082 # <CJK>
+0x9083 # <CJK>
+0x9084 # <CJK>
+0x9087 # <CJK>
+0x9089 # <CJK>
+0x908A # <CJK>
+0x908F # <CJK>
+0x9091 # <CJK>
+0x90A3 # <CJK>
+0x90A6 # <CJK>
+0x90A8 # <CJK>
+0x90AA # <CJK>
+0x90AF # <CJK>
+0x90B1 # <CJK>
+0x90B5 # <CJK>
+0x90B8 # <CJK>
+0x90C1 # <CJK>
+0x90CA # <CJK>
+0x90CE # <CJK>
+0x90DB # <CJK>
+0x90E1 # <CJK>
+0x90E2 # <CJK>
+0x90E4 # <CJK>
+0x90E8 # <CJK>
+0x90ED # <CJK>
+0x90F5 # <CJK>
+0x90F7 # <CJK>
+0x90FD # <CJK>
+0x9102 # <CJK>
+0x9112 # <CJK>
+0x9119 # <CJK>
+0x912D # <CJK>
+0x9130 # <CJK>
+0x9132 # <CJK>
+0x9149 # <CJK>
+0x914A # <CJK>
+0x914B # <CJK>
+0x914C # <CJK>
+0x914D # <CJK>
+0x914E # <CJK>
+0x9152 # <CJK>
+0x9154 # <CJK>
+0x9156 # <CJK>
+0x9158 # <CJK>
+0x9162 # <CJK>
+0x9163 # <CJK>
+0x9165 # <CJK>
+0x9169 # <CJK>
+0x916A # <CJK>
+0x916C # <CJK>
+0x9172 # <CJK>
+0x9173 # <CJK>
+0x9175 # <CJK>
+0x9177 # <CJK>
+0x9178 # <CJK>
+0x9182 # <CJK>
+0x9187 # <CJK>
+0x9189 # <CJK>
+0x918B # <CJK>
+0x918D # <CJK>
+0x9190 # <CJK>
+0x9192 # <CJK>
+0x9197 # <CJK>
+0x919C # <CJK>
+0x91A2 # <CJK>
+0x91A4 # <CJK>
+0x91AA # <CJK>
+0x91AB # <CJK>
+0x91AF # <CJK>
+0x91B4 # <CJK>
+0x91B5 # <CJK>
+0x91B8 # <CJK>
+0x91BA # <CJK>
+0x91C0 # <CJK>
+0x91C1 # <CJK>
+0x91C6 # <CJK>
+0x91C7 # <CJK>
+0x91C8 # <CJK>
+0x91C9 # <CJK>
+0x91CB # <CJK>
+0x91CC # <CJK>
+0x91CD # <CJK>
+0x91CE # <CJK>
+0x91CF # <CJK>
+0x91D0 # <CJK>
+0x91D1 # <CJK>
+0x91D6 # <CJK>
+0x91D8 # <CJK>
+0x91DB # <CJK>
+0x91DC # <CJK>
+0x91DD # <CJK>
+0x91DF # <CJK>
+0x91E1 # <CJK>
+0x91E3 # <CJK>
+0x91E6 # <CJK>
+0x91E7 # <CJK>
+0x91F5 # <CJK>
+0x91F6 # <CJK>
+0x91FC # <CJK>
+0x91FF # <CJK>
+0x920D # <CJK>
+0x920E # <CJK>
+0x9211 # <CJK>
+0x9214 # <CJK>
+0x9215 # <CJK>
+0x921E # <CJK>
+0x9229 # <CJK>
+0x922C # <CJK>
+0x9234 # <CJK>
+0x9237 # <CJK>
+0x923F # <CJK>
+0x9244 # <CJK>
+0x9245 # <CJK>
+0x9248 # <CJK>
+0x9249 # <CJK>
+0x924B # <CJK>
+0x9250 # <CJK>
+0x9257 # <CJK>
+0x925A # <CJK>
+0x925B # <CJK>
+0x925E # <CJK>
+0x9262 # <CJK>
+0x9264 # <CJK>
+0x9266 # <CJK>
+0x9271 # <CJK>
+0x927E # <CJK>
+0x9280 # <CJK>
+0x9283 # <CJK>
+0x9285 # <CJK>
+0x9291 # <CJK>
+0x9293 # <CJK>
+0x9295 # <CJK>
+0x9296 # <CJK>
+0x9298 # <CJK>
+0x929A # <CJK>
+0x929B # <CJK>
+0x929C # <CJK>
+0x92AD # <CJK>
+0x92B7 # <CJK>
+0x92B9 # <CJK>
+0x92CF # <CJK>
+0x92D2 # <CJK>
+0x92E4 # <CJK>
+0x92E9 # <CJK>
+0x92EA # <CJK>
+0x92ED # <CJK>
+0x92F2 # <CJK>
+0x92F3 # <CJK>
+0x92F8 # <CJK>
+0x92FA # <CJK>
+0x92FC # <CJK>
+0x9306 # <CJK>
+0x930F # <CJK>
+0x9310 # <CJK>
+0x9318 # <CJK>
+0x9319 # <CJK>
+0x931A # <CJK>
+0x9320 # <CJK>
+0x9322 # <CJK>
+0x9323 # <CJK>
+0x9326 # <CJK>
+0x9328 # <CJK>
+0x932B # <CJK>
+0x932C # <CJK>
+0x932E # <CJK>
+0x932F # <CJK>
+0x9332 # <CJK>
+0x9335 # <CJK>
+0x933A # <CJK>
+0x933B # <CJK>
+0x9344 # <CJK>
+0x934B # <CJK>
+0x934D # <CJK>
+0x9354 # <CJK>
+0x9356 # <CJK>
+0x935B # <CJK>
+0x935C # <CJK>
+0x9360 # <CJK>
+0x936C # <CJK>
+0x936E # <CJK>
+0x9375 # <CJK>
+0x937C # <CJK>
+0x937E # <CJK>
+0x938C # <CJK>
+0x9394 # <CJK>
+0x9396 # <CJK>
+0x9397 # <CJK>
+0x939A # <CJK>
+0x93A7 # <CJK>
+0x93AC # <CJK>
+0x93AD # <CJK>
+0x93AE # <CJK>
+0x93B0 # <CJK>
+0x93B9 # <CJK>
+0x93C3 # <CJK>
+0x93C8 # <CJK>
+0x93D0 # <CJK>
+0x93D1 # <CJK>
+0x93D6 # <CJK>
+0x93D7 # <CJK>
+0x93D8 # <CJK>
+0x93DD # <CJK>
+0x93E1 # <CJK>
+0x93E4 # <CJK>
+0x93E5 # <CJK>
+0x93E8 # <CJK>
+0x9403 # <CJK>
+0x9407 # <CJK>
+0x9410 # <CJK>
+0x9413 # <CJK>
+0x9414 # <CJK>
+0x9418 # <CJK>
+0x9419 # <CJK>
+0x941A # <CJK>
+0x9421 # <CJK>
+0x942B # <CJK>
+0x9435 # <CJK>
+0x9436 # <CJK>
+0x9438 # <CJK>
+0x943A # <CJK>
+0x9441 # <CJK>
+0x9444 # <CJK>
+0x9451 # <CJK>
+0x9452 # <CJK>
+0x9453 # <CJK>
+0x945A # <CJK>
+0x945B # <CJK>
+0x945E # <CJK>
+0x9460 # <CJK>
+0x9462 # <CJK>
+0x946A # <CJK>
+0x9470 # <CJK>
+0x9475 # <CJK>
+0x9477 # <CJK>
+0x947C # <CJK>
+0x947D # <CJK>
+0x947E # <CJK>
+0x947F # <CJK>
+0x9481 # <CJK>
+0x9577 # <CJK>
+0x9580 # <CJK>
+0x9582 # <CJK>
+0x9583 # <CJK>
+0x9587 # <CJK>
+0x9589 # <CJK>
+0x958A # <CJK>
+0x958B # <CJK>
+0x958F # <CJK>
+0x9591 # <CJK>
+0x9593 # <CJK>
+0x9594 # <CJK>
+0x9596 # <CJK>
+0x9598 # <CJK>
+0x9599 # <CJK>
+0x95A0 # <CJK>
+0x95A2 # <CJK>
+0x95A3 # <CJK>
+0x95A4 # <CJK>
+0x95A5 # <CJK>
+0x95A7 # <CJK>
+0x95A8 # <CJK>
+0x95AD # <CJK>
+0x95B2 # <CJK>
+0x95B9 # <CJK>
+0x95BB # <CJK>
+0x95BC # <CJK>
+0x95BE # <CJK>
+0x95C3 # <CJK>
+0x95C7 # <CJK>
+0x95CA # <CJK>
+0x95CC # <CJK>
+0x95CD # <CJK>
+0x95D4 # <CJK>
+0x95D5 # <CJK>
+0x95D6 # <CJK>
+0x95D8 # <CJK>
+0x95DC # <CJK>
+0x95E1 # <CJK>
+0x95E2 # <CJK>
+0x95E5 # <CJK>
+0x961C # <CJK>
+0x9621 # <CJK>
+0x9628 # <CJK>
+0x962A # <CJK>
+0x962E # <CJK>
+0x962F # <CJK>
+0x9632 # <CJK>
+0x963B # <CJK>
+0x963F # <CJK>
+0x9640 # <CJK>
+0x9642 # <CJK>
+0x9644 # <CJK>
+0x964B # <CJK>
+0x964C # <CJK>
+0x964D # <CJK>
+0x964F # <CJK>
+0x9650 # <CJK>
+0x965B # <CJK>
+0x965C # <CJK>
+0x965D # <CJK>
+0x965E # <CJK>
+0x965F # <CJK>
+0x9662 # <CJK>
+0x9663 # <CJK>
+0x9664 # <CJK>
+0x9665 # <CJK>
+0x9666 # <CJK>
+0x966A # <CJK>
+0x966C # <CJK>
+0x9670 # <CJK>
+0x9672 # <CJK>
+0x9673 # <CJK>
+0x9675 # <CJK>
+0x9676 # <CJK>
+0x9677 # <CJK>
+0x9678 # <CJK>
+0x967A # <CJK>
+0x967D # <CJK>
+0x9685 # <CJK>
+0x9686 # <CJK>
+0x9688 # <CJK>
+0x968A # <CJK>
+0x968B # <CJK>
+0x968D # <CJK>
+0x968E # <CJK>
+0x968F # <CJK>
+0x9694 # <CJK>
+0x9695 # <CJK>
+0x9697 # <CJK>
+0x9698 # <CJK>
+0x9699 # <CJK>
+0x969B # <CJK>
+0x969C # <CJK>
+0x96A0 # <CJK>
+0x96A3 # <CJK>
+0x96A7 # <CJK>
+0x96A8 # <CJK>
+0x96AA # <CJK>
+0x96B0 # <CJK>
+0x96B1 # <CJK>
+0x96B2 # <CJK>
+0x96B4 # <CJK>
+0x96B6 # <CJK>
+0x96B7 # <CJK>
+0x96B8 # <CJK>
+0x96B9 # <CJK>
+0x96BB # <CJK>
+0x96BC # <CJK>
+0x96C0 # <CJK>
+0x96C1 # <CJK>
+0x96C4 # <CJK>
+0x96C5 # <CJK>
+0x96C6 # <CJK>
+0x96C7 # <CJK>
+0x96C9 # <CJK>
+0x96CB # <CJK>
+0x96CC # <CJK>
+0x96CD # <CJK>
+0x96CE # <CJK>
+0x96D1 # <CJK>
+0x96D5 # <CJK>
+0x96D6 # <CJK>
+0x96D9 # <CJK>
+0x96DB # <CJK>
+0x96DC # <CJK>
+0x96E2 # <CJK>
+0x96E3 # <CJK>
+0x96E8 # <CJK>
+0x96EA # <CJK>
+0x96EB # <CJK>
+0x96F0 # <CJK>
+0x96F2 # <CJK>
+0x96F6 # <CJK>
+0x96F7 # <CJK>
+0x96F9 # <CJK>
+0x96FB # <CJK>
+0x9700 # <CJK>
+0x9704 # <CJK>
+0x9706 # <CJK>
+0x9707 # <CJK>
+0x9708 # <CJK>
+0x970A # <CJK>
+0x970D # <CJK>
+0x970E # <CJK>
+0x970F # <CJK>
+0x9711 # <CJK>
+0x9713 # <CJK>
+0x9716 # <CJK>
+0x9719 # <CJK>
+0x971C # <CJK>
+0x971E # <CJK>
+0x9724 # <CJK>
+0x9727 # <CJK>
+0x972A # <CJK>
+0x9730 # <CJK>
+0x9732 # <CJK>
+0x9738 # <CJK>
+0x9739 # <CJK>
+0x973D # <CJK>
+0x973E # <CJK>
+0x9742 # <CJK>
+0x9744 # <CJK>
+0x9746 # <CJK>
+0x9748 # <CJK>
+0x9749 # <CJK>
+0x9752 # <CJK>
+0x9756 # <CJK>
+0x9759 # <CJK>
+0x975C # <CJK>
+0x975E # <CJK>
+0x9760 # <CJK>
+0x9761 # <CJK>
+0x9762 # <CJK>
+0x9764 # <CJK>
+0x9766 # <CJK>
+0x9768 # <CJK>
+0x9769 # <CJK>
+0x976B # <CJK>
+0x976D # <CJK>
+0x9771 # <CJK>
+0x9774 # <CJK>
+0x9779 # <CJK>
+0x977A # <CJK>
+0x977C # <CJK>
+0x9781 # <CJK>
+0x9784 # <CJK>
+0x9785 # <CJK>
+0x9786 # <CJK>
+0x978B # <CJK>
+0x978D # <CJK>
+0x978F # <CJK>
+0x9790 # <CJK>
+0x9798 # <CJK>
+0x979C # <CJK>
+0x97A0 # <CJK>
+0x97A3 # <CJK>
+0x97A6 # <CJK>
+0x97A8 # <CJK>
+0x97AB # <CJK>
+0x97AD # <CJK>
+0x97B3 # <CJK>
+0x97B4 # <CJK>
+0x97C3 # <CJK>
+0x97C6 # <CJK>
+0x97C8 # <CJK>
+0x97CB # <CJK>
+0x97D3 # <CJK>
+0x97DC # <CJK>
+0x97ED # <CJK>
+0x97EE # <CJK>
+0x97F2 # <CJK>
+0x97F3 # <CJK>
+0x97F5 # <CJK>
+0x97F6 # <CJK>
+0x97FB # <CJK>
+0x97FF # <CJK>
+0x9801 # <CJK>
+0x9802 # <CJK>
+0x9803 # <CJK>
+0x9805 # <CJK>
+0x9806 # <CJK>
+0x9808 # <CJK>
+0x980C # <CJK>
+0x980F # <CJK>
+0x9810 # <CJK>
+0x9811 # <CJK>
+0x9812 # <CJK>
+0x9813 # <CJK>
+0x9817 # <CJK>
+0x9818 # <CJK>
+0x981A # <CJK>
+0x9821 # <CJK>
+0x9824 # <CJK>
+0x982C # <CJK>
+0x982D # <CJK>
+0x9834 # <CJK>
+0x9837 # <CJK>
+0x9838 # <CJK>
+0x983B # <CJK>
+0x983C # <CJK>
+0x983D # <CJK>
+0x9846 # <CJK>
+0x984B # <CJK>
+0x984C # <CJK>
+0x984D # <CJK>
+0x984E # <CJK>
+0x984F # <CJK>
+0x9854 # <CJK>
+0x9855 # <CJK>
+0x9858 # <CJK>
+0x985B # <CJK>
+0x985E # <CJK>
+0x9867 # <CJK>
+0x986B # <CJK>
+0x986F # <CJK>
+0x9870 # <CJK>
+0x9871 # <CJK>
+0x9873 # <CJK>
+0x9874 # <CJK>
+0x98A8 # <CJK>
+0x98AA # <CJK>
+0x98AF # <CJK>
+0x98B1 # <CJK>
+0x98B6 # <CJK>
+0x98C3 # <CJK>
+0x98C4 # <CJK>
+0x98C6 # <CJK>
+0x98DB # <CJK>
+0x98DC # <CJK>
+0x98DF # <CJK>
+0x98E2 # <CJK>
+0x98E9 # <CJK>
+0x98EB # <CJK>
+0x98ED # <CJK>
+0x98EE # <CJK>
+0x98EF # <CJK>
+0x98F2 # <CJK>
+0x98F4 # <CJK>
+0x98FC # <CJK>
+0x98FD # <CJK>
+0x98FE # <CJK>
+0x9903 # <CJK>
+0x9905 # <CJK>
+0x9909 # <CJK>
+0x990A # <CJK>
+0x990C # <CJK>
+0x9910 # <CJK>
+0x9912 # <CJK>
+0x9913 # <CJK>
+0x9914 # <CJK>
+0x9918 # <CJK>
+0x991D # <CJK>
+0x991E # <CJK>
+0x9920 # <CJK>
+0x9921 # <CJK>
+0x9924 # <CJK>
+0x9928 # <CJK>
+0x992C # <CJK>
+0x992E # <CJK>
+0x993D # <CJK>
+0x993E # <CJK>
+0x9942 # <CJK>
+0x9945 # <CJK>
+0x9949 # <CJK>
+0x994B # <CJK>
+0x994C # <CJK>
+0x9950 # <CJK>
+0x9951 # <CJK>
+0x9952 # <CJK>
+0x9955 # <CJK>
+0x9957 # <CJK>
+0x9996 # <CJK>
+0x9997 # <CJK>
+0x9998 # <CJK>
+0x9999 # <CJK>
+0x99A5 # <CJK>
+0x99A8 # <CJK>
+0x99AC # <CJK>
+0x99AD # <CJK>
+0x99AE # <CJK>
+0x99B3 # <CJK>
+0x99B4 # <CJK>
+0x99BC # <CJK>
+0x99C1 # <CJK>
+0x99C4 # <CJK>
+0x99C5 # <CJK>
+0x99C6 # <CJK>
+0x99C8 # <CJK>
+0x99D0 # <CJK>
+0x99D1 # <CJK>
+0x99D2 # <CJK>
+0x99D5 # <CJK>
+0x99D8 # <CJK>
+0x99DB # <CJK>
+0x99DD # <CJK>
+0x99DF # <CJK>
+0x99E2 # <CJK>
+0x99ED # <CJK>
+0x99EE # <CJK>
+0x99F1 # <CJK>
+0x99F2 # <CJK>
+0x99F8 # <CJK>
+0x99FB # <CJK>
+0x99FF # <CJK>
+0x9A01 # <CJK>
+0x9A05 # <CJK>
+0x9A0E # <CJK>
+0x9A0F # <CJK>
+0x9A12 # <CJK>
+0x9A13 # <CJK>
+0x9A19 # <CJK>
+0x9A28 # <CJK>
+0x9A2B # <CJK>
+0x9A30 # <CJK>
+0x9A37 # <CJK>
+0x9A3E # <CJK>
+0x9A40 # <CJK>
+0x9A42 # <CJK>
+0x9A43 # <CJK>
+0x9A45 # <CJK>
+0x9A4D # <CJK>
+0x9A55 # <CJK>
+0x9A57 # <CJK>
+0x9A5A # <CJK>
+0x9A5B # <CJK>
+0x9A5F # <CJK>
+0x9A62 # <CJK>
+0x9A64 # <CJK>
+0x9A65 # <CJK>
+0x9A69 # <CJK>
+0x9A6A # <CJK>
+0x9A6B # <CJK>
+0x9AA8 # <CJK>
+0x9AAD # <CJK>
+0x9AB0 # <CJK>
+0x9AB8 # <CJK>
+0x9ABC # <CJK>
+0x9AC0 # <CJK>
+0x9AC4 # <CJK>
+0x9ACF # <CJK>
+0x9AD1 # <CJK>
+0x9AD3 # <CJK>
+0x9AD4 # <CJK>
+0x9AD8 # <CJK>
+0x9ADE # <CJK>
+0x9ADF # <CJK>
+0x9AE2 # <CJK>
+0x9AE3 # <CJK>
+0x9AE6 # <CJK>
+0x9AEA # <CJK>
+0x9AEB # <CJK>
+0x9AED # <CJK>
+0x9AEE # <CJK>
+0x9AEF # <CJK>
+0x9AF1 # <CJK>
+0x9AF4 # <CJK>
+0x9AF7 # <CJK>
+0x9AFB # <CJK>
+0x9B06 # <CJK>
+0x9B18 # <CJK>
+0x9B1A # <CJK>
+0x9B1F # <CJK>
+0x9B22 # <CJK>
+0x9B23 # <CJK>
+0x9B25 # <CJK>
+0x9B27 # <CJK>
+0x9B28 # <CJK>
+0x9B29 # <CJK>
+0x9B2A # <CJK>
+0x9B2E # <CJK>
+0x9B2F # <CJK>
+0x9B31 # <CJK>
+0x9B32 # <CJK>
+0x9B3B # <CJK>
+0x9B3C # <CJK>
+0x9B41 # <CJK>
+0x9B42 # <CJK>
+0x9B43 # <CJK>
+0x9B44 # <CJK>
+0x9B45 # <CJK>
+0x9B4D # <CJK>
+0x9B4E # <CJK>
+0x9B4F # <CJK>
+0x9B51 # <CJK>
+0x9B54 # <CJK>
+0x9B58 # <CJK>
+0x9B5A # <CJK>
+0x9B6F # <CJK>
+0x9B74 # <CJK>
+0x9B83 # <CJK>
+0x9B8E # <CJK>
+0x9B91 # <CJK>
+0x9B92 # <CJK>
+0x9B93 # <CJK>
+0x9B96 # <CJK>
+0x9B97 # <CJK>
+0x9B9F # <CJK>
+0x9BA0 # <CJK>
+0x9BA8 # <CJK>
+0x9BAA # <CJK>
+0x9BAB # <CJK>
+0x9BAD # <CJK>
+0x9BAE # <CJK>
+0x9BB4 # <CJK>
+0x9BB9 # <CJK>
+0x9BC0 # <CJK>
+0x9BC6 # <CJK>
+0x9BC9 # <CJK>
+0x9BCA # <CJK>
+0x9BCF # <CJK>
+0x9BD1 # <CJK>
+0x9BD2 # <CJK>
+0x9BD4 # <CJK>
+0x9BD6 # <CJK>
+0x9BDB # <CJK>
+0x9BE1 # <CJK>
+0x9BE2 # <CJK>
+0x9BE3 # <CJK>
+0x9BE4 # <CJK>
+0x9BE8 # <CJK>
+0x9BF0 # <CJK>
+0x9BF1 # <CJK>
+0x9BF2 # <CJK>
+0x9BF5 # <CJK>
+0x9C04 # <CJK>
+0x9C06 # <CJK>
+0x9C08 # <CJK>
+0x9C09 # <CJK>
+0x9C0A # <CJK>
+0x9C0C # <CJK>
+0x9C0D # <CJK>
+0x9C10 # <CJK>
+0x9C12 # <CJK>
+0x9C13 # <CJK>
+0x9C14 # <CJK>
+0x9C15 # <CJK>
+0x9C1B # <CJK>
+0x9C21 # <CJK>
+0x9C24 # <CJK>
+0x9C25 # <CJK>
+0x9C2D # <CJK>
+0x9C2E # <CJK>
+0x9C2F # <CJK>
+0x9C30 # <CJK>
+0x9C32 # <CJK>
+0x9C39 # <CJK>
+0x9C3A # <CJK>
+0x9C3B # <CJK>
+0x9C3E # <CJK>
+0x9C46 # <CJK>
+0x9C47 # <CJK>
+0x9C48 # <CJK>
+0x9C52 # <CJK>
+0x9C57 # <CJK>
+0x9C5A # <CJK>
+0x9C60 # <CJK>
+0x9C67 # <CJK>
+0x9C76 # <CJK>
+0x9C78 # <CJK>
+0x9CE5 # <CJK>
+0x9CE7 # <CJK>
+0x9CE9 # <CJK>
+0x9CEB # <CJK>
+0x9CEC # <CJK>
+0x9CF0 # <CJK>
+0x9CF3 # <CJK>
+0x9CF4 # <CJK>
+0x9CF6 # <CJK>
+0x9D03 # <CJK>
+0x9D06 # <CJK>
+0x9D07 # <CJK>
+0x9D08 # <CJK>
+0x9D09 # <CJK>
+0x9D0E # <CJK>
+0x9D12 # <CJK>
+0x9D15 # <CJK>
+0x9D1B # <CJK>
+0x9D1F # <CJK>
+0x9D23 # <CJK>
+0x9D26 # <CJK>
+0x9D28 # <CJK>
+0x9D2A # <CJK>
+0x9D2B # <CJK>
+0x9D2C # <CJK>
+0x9D3B # <CJK>
+0x9D3E # <CJK>
+0x9D3F # <CJK>
+0x9D41 # <CJK>
+0x9D44 # <CJK>
+0x9D46 # <CJK>
+0x9D48 # <CJK>
+0x9D50 # <CJK>
+0x9D51 # <CJK>
+0x9D59 # <CJK>
+0x9D5C # <CJK>
+0x9D5D # <CJK>
+0x9D5E # <CJK>
+0x9D60 # <CJK>
+0x9D61 # <CJK>
+0x9D64 # <CJK>
+0x9D6C # <CJK>
+0x9D6F # <CJK>
+0x9D72 # <CJK>
+0x9D7A # <CJK>
+0x9D87 # <CJK>
+0x9D89 # <CJK>
+0x9D8F # <CJK>
+0x9D9A # <CJK>
+0x9DA4 # <CJK>
+0x9DA9 # <CJK>
+0x9DAB # <CJK>
+0x9DAF # <CJK>
+0x9DB2 # <CJK>
+0x9DB4 # <CJK>
+0x9DB8 # <CJK>
+0x9DBA # <CJK>
+0x9DBB # <CJK>
+0x9DC1 # <CJK>
+0x9DC2 # <CJK>
+0x9DC4 # <CJK>
+0x9DC6 # <CJK>
+0x9DCF # <CJK>
+0x9DD3 # <CJK>
+0x9DD9 # <CJK>
+0x9DE6 # <CJK>
+0x9DED # <CJK>
+0x9DEF # <CJK>
+0x9DF2 # <CJK>
+0x9DF8 # <CJK>
+0x9DF9 # <CJK>
+0x9DFA # <CJK>
+0x9DFD # <CJK>
+0x9E1A # <CJK>
+0x9E1B # <CJK>
+0x9E1E # <CJK>
+0x9E75 # <CJK>
+0x9E78 # <CJK>
+0x9E79 # <CJK>
+0x9E7D # <CJK>
+0x9E7F # <CJK>
+0x9E81 # <CJK>
+0x9E88 # <CJK>
+0x9E8B # <CJK>
+0x9E8C # <CJK>
+0x9E91 # <CJK>
+0x9E92 # <CJK>
+0x9E93 # <CJK>
+0x9E95 # <CJK>
+0x9E97 # <CJK>
+0x9E9D # <CJK>
+0x9E9F # <CJK>
+0x9EA5 # <CJK>
+0x9EA6 # <CJK>
+0x9EA9 # <CJK>
+0x9EAA # <CJK>
+0x9EAD # <CJK>
+0x9EB8 # <CJK>
+0x9EB9 # <CJK>
+0x9EBA # <CJK>
+0x9EBB # <CJK>
+0x9EBC # <CJK>
+0x9EBE # <CJK>
+0x9EBF # <CJK>
+0x9EC4 # <CJK>
+0x9ECC # <CJK>
+0x9ECD # <CJK>
+0x9ECE # <CJK>
+0x9ECF # <CJK>
+0x9ED0 # <CJK>
+0x9ED2 # <CJK>
+0x9ED4 # <CJK>
+0x9ED8 # <CJK>
+0x9ED9 # <CJK>
+0x9EDB # <CJK>
+0x9EDC # <CJK>
+0x9EDD # <CJK>
+0x9EDE # <CJK>
+0x9EE0 # <CJK>
+0x9EE5 # <CJK>
+0x9EE8 # <CJK>
+0x9EEF # <CJK>
+0x9EF4 # <CJK>
+0x9EF6 # <CJK>
+0x9EF7 # <CJK>
+0x9EF9 # <CJK>
+0x9EFB # <CJK>
+0x9EFC # <CJK>
+0x9EFD # <CJK>
+0x9F07 # <CJK>
+0x9F08 # <CJK>
+0x9F0E # <CJK>
+0x9F13 # <CJK>
+0x9F15 # <CJK>
+0x9F20 # <CJK>
+0x9F21 # <CJK>
+0x9F2C # <CJK>
+0x9F3B # <CJK>
+0x9F3E # <CJK>
+0x9F4A # <CJK>
+0x9F4B # <CJK>
+0x9F4E # <CJK>
+0x9F4F # <CJK>
+0x9F52 # <CJK>
+0x9F54 # <CJK>
+0x9F5F # <CJK>
+0x9F60 # <CJK>
+0x9F61 # <CJK>
+0x9F62 # <CJK>
+0x9F63 # <CJK>
+0x9F66 # <CJK>
+0x9F67 # <CJK>
+0x9F6A # <CJK>
+0x9F6C # <CJK>
+0x9F72 # <CJK>
+0x9F76 # <CJK>
+0x9F77 # <CJK>
+0x9F8D # <CJK>
+0x9F95 # <CJK>
+0x9F9C # <CJK>
+0x9F9D # <CJK>
+0x9FA0 # <CJK>
+#0xFFE5 # FULLWIDTH YEN SIGN
diff --git a/chromium/third_party/fontconfig/src/fc-lang/jv.orth b/chromium/third_party/fontconfig/src/fc-lang/jv.orth
new file mode 100644
index 00000000000..0a8610bcd2b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/jv.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/jv.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Javanese (jv)
+#
+# Sources:
+# http://www.omniglot.com/writing/javanese.htm
+# http://en.wikipedia.org/wiki/Javanese_language
+#
+# The historical Javanese script is not the main script anymore. Latin has
+# replaced it.
+#
+0041-005A
+0061-007A
+00C8-00C9
+00E8-00E9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ka.orth b/chromium/third_party/fontconfig/src/fc-lang/ka.orth
new file mode 100644
index 00000000000..f135f3bc592
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ka.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/ka.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Georgian (KA)
+# 0589 # Armenian full stop (vertsaket)
+#10a0-10c5 # capital letters, not used in normal writing
+10d0-10f0
+#10f1-10f6 # Archaic letters not included in modern fonts
+#10f7-10f8 # additional letters for Mingrelian and Svan
+#10fb # Ancient Georgian paragraph separator
+#2018 # single quote
+#201a # single quote
+#201c # double quote
+#201e # double quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kaa.orth b/chromium/third_party/fontconfig/src/fc-lang/kaa.orth
new file mode 100644
index 00000000000..b5ee6315cf2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kaa.orth
@@ -0,0 +1,110 @@
+#
+# fontconfig/fc-lang/kaa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kara-Kalpak (Karakalpak) (KAA)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+0492
+0493
+049a
+049b
+04a2
+04a3
+04ae
+04af
+04b2
+04b3
+04d8
+04d9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kab.orth b/chromium/third_party/fontconfig/src/fc-lang/kab.orth
new file mode 100644
index 00000000000..8513fd79b3a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kab.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/kab.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kabyle (kab)
+#
+# Sources:
+# http://www.omniglot.com/writing/kabyle.php
+# http://www.geonames.de/alphkl.html
+#
+0041-005A
+0061-007A
+010C-010D
+0190
+0194
+01E6-01E7
+025B
+0263
+1E0C-1E0D
+1E24-1E25
+1E62-1E63
+1E6C-1E6D
+1E92-1E93
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ki.orth b/chromium/third_party/fontconfig/src/fc-lang/ki.orth
new file mode 100644
index 00000000000..6de49253c2b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ki.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/ki.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kikuyu (KI)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+0128 # LATIN CAPITAL LETTER I WITH TILDE
+0129 # LATIN SMALL LETTER I WITH TILDE
+0168 # LATIN CAPITAL LETTER U WITH TILDE
+0169 # LATIN SMALL LETTER U WITH TILDE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kj.orth b/chromium/third_party/fontconfig/src/fc-lang/kj.orth
new file mode 100644
index 00000000000..79edc316e49
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kj.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/kj.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kuanyama/Kwanyama (kj)
+#
+# Sources:
+# * http://www.omniglot.com/writing/oshiwambo.php
+# * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Oshiwambo
+# * http://wingolog.org/pub/hai-ti/hai-ti.pdf
+#
+# C, Q, and X are not used.
+#
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kk.orth b/chromium/third_party/fontconfig/src/fc-lang/kk.orth
new file mode 100644
index 00000000000..8fbe803ad6c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kk.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/kk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kazakh (KK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#0401
+#0406
+0410-044f
+#0451
+0456
+0492-0493
+049a-049b
+04a2-04a3
+#04ae-04af
+#04b0-04b1
+04ba-04bb
+04d8-04d9
+04e8-04e9
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kl.orth b/chromium/third_party/fontconfig/src/fc-lang/kl.orth
new file mode 100644
index 00000000000..a32d926ce62
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kl.orth
@@ -0,0 +1,63 @@
+#
+# fontconfig/fc-lang/kl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Greenlandic (KL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+00c1
+00c2
+00c3
+00c5
+00c6
+#00c9
+00ca
+00cd
+00ce
+00d4
+00d8
+00da
+00db
+00e1
+00e2
+00e3
+00e5
+00e6
+#00e9
+00ea
+00ed
+00ee
+00f4
+00f8
+00fa
+00fb
+0128-0129
+0138
+0168-0169
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/km.orth b/chromium/third_party/fontconfig/src/fc-lang/km.orth
new file mode 100644
index 00000000000..2bad0cfaed1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/km.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/km.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Central Khmer (km)
+#
+# Taken from the Unicode coverage of Khmer script and Unicode character
+# notes
+#
+1780-179C
+# 179D-179E # Pali/Sanskrit transliteration only
+179F-17A2
+# 17A3-17A4 # Deprecated/Discouraged
+17A5-17A7
+# 17A8 # Discouraged
+17A9-17B3
+# 17B4-17B5 # Discouraged
+17B6-17C5
+
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kn.orth b/chromium/third_party/fontconfig/src/fc-lang/kn.orth
new file mode 100644
index 00000000000..781d775d752
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kn.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/kn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kannada (kn)
+#
+# Taken from the Unicode coverage of this language
+#
+0c82-0c83
+0c85-0c8c
+0c8e-0c90
+0c92-0ca8
+0caa-0cb3
+0cb5-0cb9
+0cbe-0cc4
+0cc6-0cc8
+0cca-0ccd
+0cd5-0cd6
+0cde
+0ce0-0ce1
+#0ce6-0cef # Digits
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ko.orth b/chromium/third_party/fontconfig/src/fc-lang/ko.orth
new file mode 100644
index 00000000000..39114a5af1f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ko.orth
@@ -0,0 +1,2538 @@
+#
+# fontconfig/fc-lang/ko.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Korean (KO)
+#
+# Coverage from KS X 1001
+#
+# Does not include any Han characters as many Korean fonts
+# don't cover them, and modern Korean usage is moving away from them
+#
+# Tor Andersson <tor.andersson@gmail.com>
+#
+#0x3000 # IDEOGRAPHIC SPACE
+#0x3001 # IDEOGRAPHIC COMMA
+#0x3002 # IDEOGRAPHIC FULL STOP
+#0x327F # KOREAN STANDARD SYMBOL
+#0xFFE6 # FULLWIDTH WON SIGN
+0x3131 # HANGUL LETTER KIYEOK
+0x3132 # HANGUL LETTER SSANGKIYEOK
+0x3133 # HANGUL LETTER KIYEOK-SIOS
+0x3134 # HANGUL LETTER NIEUN
+0x3135 # HANGUL LETTER NIEUN-CIEUC
+0x3136 # HANGUL LETTER NIEUN-HIEUH
+0x3137 # HANGUL LETTER TIKEUT
+0x3138 # HANGUL LETTER SSANGTIKEUT
+0x3139 # HANGUL LETTER RIEUL
+0x313A # HANGUL LETTER RIEUL-KIYEOK
+0x313B # HANGUL LETTER RIEUL-MIEUM
+0x313C # HANGUL LETTER RIEUL-PIEUP
+0x313D # HANGUL LETTER RIEUL-SIOS
+0x313E # HANGUL LETTER RIEUL-THIEUTH
+0x313F # HANGUL LETTER RIEUL-PHIEUPH
+0x3140 # HANGUL LETTER RIEUL-HIEUH
+0x3141 # HANGUL LETTER MIEUM
+0x3142 # HANGUL LETTER PIEUP
+0x3143 # HANGUL LETTER SSANGPIEUP
+0x3144 # HANGUL LETTER PIEUP-SIOS
+0x3145 # HANGUL LETTER SIOS
+0x3146 # HANGUL LETTER SSANGSIOS
+0x3147 # HANGUL LETTER IEUNG
+0x3148 # HANGUL LETTER CIEUC
+0x3149 # HANGUL LETTER SSANGCIEUC
+0x314A # HANGUL LETTER CHIEUCH
+0x314B # HANGUL LETTER KHIEUKH
+0x314C # HANGUL LETTER THIEUTH
+0x314D # HANGUL LETTER PHIEUPH
+0x314E # HANGUL LETTER HIEUH
+0x314F # HANGUL LETTER A
+0x3150 # HANGUL LETTER AE
+0x3151 # HANGUL LETTER YA
+0x3152 # HANGUL LETTER YAE
+0x3153 # HANGUL LETTER EO
+0x3154 # HANGUL LETTER E
+0x3155 # HANGUL LETTER YEO
+0x3156 # HANGUL LETTER YE
+0x3157 # HANGUL LETTER O
+0x3158 # HANGUL LETTER WA
+0x3159 # HANGUL LETTER WAE
+0x315A # HANGUL LETTER OE
+0x315B # HANGUL LETTER YO
+0x315C # HANGUL LETTER U
+0x315D # HANGUL LETTER WEO
+0x315E # HANGUL LETTER WE
+0x315F # HANGUL LETTER WI
+0x3160 # HANGUL LETTER YU
+0x3161 # HANGUL LETTER EU
+0x3162 # HANGUL LETTER YI
+0x3163 # HANGUL LETTER I
+0x3164 # HANGUL FILLER
+0x3165 # HANGUL LETTER SSANGNIEUN
+0x3166 # HANGUL LETTER NIEUN-TIKEUT
+0x3167 # HANGUL LETTER NIEUN-SIOS
+0x3168 # HANGUL LETTER NIEUN-PANSIOS
+0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS
+0x316A # HANGUL LETTER RIEUL-TIKEUT
+0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS
+0x316C # HANGUL LETTER RIEUL-PANSIOS
+0x316D # HANGUL LETTER RIEUL-YEORINHIEUH
+0x316E # HANGUL LETTER MIEUM-PIEUP
+0x316F # HANGUL LETTER MIEUM-SIOS
+0x3170 # HANGUL LETTER MIEUM-PANSIOS
+0x3171 # HANGUL LETTER KAPYEOUNMIEUM
+0x3172 # HANGUL LETTER PIEUP-KIYEOK
+0x3173 # HANGUL LETTER PIEUP-TIKEUT
+0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK
+0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT
+0x3176 # HANGUL LETTER PIEUP-CIEUC
+0x3177 # HANGUL LETTER PIEUP-THIEUTH
+0x3178 # HANGUL LETTER KAPYEOUNPIEUP
+0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP
+0x317A # HANGUL LETTER SIOS-KIYEOK
+0x317B # HANGUL LETTER SIOS-NIEUN
+0x317C # HANGUL LETTER SIOS-TIKEUT
+0x317D # HANGUL LETTER SIOS-PIEUP
+0x317E # HANGUL LETTER SIOS-CIEUC
+0x317F # HANGUL LETTER PANSIOS
+0x3180 # HANGUL LETTER SSANGIEUNG
+0x3181 # HANGUL LETTER YESIEUNG
+0x3182 # HANGUL LETTER YESIEUNG-SIOS
+0x3183 # HANGUL LETTER YESIEUNG-PANSIOS
+0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH
+0x3185 # HANGUL LETTER SSANGHIEUH
+0x3186 # HANGUL LETTER YEORINHIEUH
+0x3187 # HANGUL LETTER YO-YA
+0x3188 # HANGUL LETTER YO-YAE
+0x3189 # HANGUL LETTER YO-I
+0x318A # HANGUL LETTER YU-YEO
+0x318B # HANGUL LETTER YU-YE
+0x318C # HANGUL LETTER YU-I
+0x318D # HANGUL LETTER ARAEA
+0x318E # HANGUL LETTER ARAEAE
+#0x3260 # CIRCLED HANGUL KIYEOK
+#0x3261 # CIRCLED HANGUL NIEUN
+#0x3262 # CIRCLED HANGUL TIKEUT
+#0x3263 # CIRCLED HANGUL RIEUL
+#0x3264 # CIRCLED HANGUL MIEUM
+#0x3265 # CIRCLED HANGUL PIEUP
+#0x3266 # CIRCLED HANGUL SIOS
+#0x3267 # CIRCLED HANGUL IEUNG
+#0x3268 # CIRCLED HANGUL CIEUC
+#0x3269 # CIRCLED HANGUL CHIEUCH
+#0x326A # CIRCLED HANGUL KHIEUKH
+#0x326B # CIRCLED HANGUL THIEUTH
+#0x326C # CIRCLED HANGUL PHIEUPH
+#0x326D # CIRCLED HANGUL HIEUH
+#0x326E # CIRCLED HANGUL KIYEOK A
+#0x326F # CIRCLED HANGUL NIEUN A
+#0x3270 # CIRCLED HANGUL TIKEUT A
+#0x3271 # CIRCLED HANGUL RIEUL A
+#0x3272 # CIRCLED HANGUL MIEUM A
+#0x3273 # CIRCLED HANGUL PIEUP A
+#0x3274 # CIRCLED HANGUL SIOS A
+#0x3275 # CIRCLED HANGUL IEUNG A
+#0x3276 # CIRCLED HANGUL CIEUC A
+#0x3277 # CIRCLED HANGUL CHIEUCH A
+#0x3278 # CIRCLED HANGUL KHIEUKH A
+#0x3279 # CIRCLED HANGUL THIEUTH A
+#0x327A # CIRCLED HANGUL PHIEUPH A
+#0x327B # CIRCLED HANGUL HIEUH A
+#0x3200 # PARENTHESIZED HANGUL KIYEOK
+#0x3201 # PARENTHESIZED HANGUL NIEUN
+#0x3202 # PARENTHESIZED HANGUL TIKEUT
+#0x3203 # PARENTHESIZED HANGUL RIEUL
+#0x3204 # PARENTHESIZED HANGUL MIEUM
+#0x3205 # PARENTHESIZED HANGUL PIEUP
+#0x3206 # PARENTHESIZED HANGUL SIOS
+#0x3207 # PARENTHESIZED HANGUL IEUNG
+#0x3208 # PARENTHESIZED HANGUL CIEUC
+#0x3209 # PARENTHESIZED HANGUL CHIEUCH
+#0x320A # PARENTHESIZED HANGUL KHIEUKH
+#0x320B # PARENTHESIZED HANGUL THIEUTH
+#0x320C # PARENTHESIZED HANGUL PHIEUPH
+#0x320D # PARENTHESIZED HANGUL HIEUH
+#0x320E # PARENTHESIZED HANGUL KIYEOK A
+#0x320F # PARENTHESIZED HANGUL NIEUN A
+#0x3210 # PARENTHESIZED HANGUL TIKEUT A
+#0x3211 # PARENTHESIZED HANGUL RIEUL A
+#0x3212 # PARENTHESIZED HANGUL MIEUM A
+#0x3213 # PARENTHESIZED HANGUL PIEUP A
+#0x3214 # PARENTHESIZED HANGUL SIOS A
+#0x3215 # PARENTHESIZED HANGUL IEUNG A
+#0x3216 # PARENTHESIZED HANGUL CIEUC A
+#0x3217 # PARENTHESIZED HANGUL CHIEUCH A
+#0x3218 # PARENTHESIZED HANGUL KHIEUKH A
+#0x3219 # PARENTHESIZED HANGUL THIEUTH A
+#0x321A # PARENTHESIZED HANGUL PHIEUPH A
+#0x321B # PARENTHESIZED HANGUL HIEUH A
+#0x321C # PARENTHESIZED HANGUL CIEUC U
+0xAC00 # HANGUL SYLLABLE KIYEOK-A
+0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK
+0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN
+0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT
+0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL
+0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK
+0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM
+0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM
+0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP
+0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS
+0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS
+0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS
+0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG
+0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC
+0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH
+0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH
+0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH
+0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH
+0xAC1C # HANGUL SYLLABLE KIYEOK-AE
+0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK
+0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN
+0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL
+0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM
+0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP
+0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS
+0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS
+0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG
+0xAC38 # HANGUL SYLLABLE KIYEOK-YA
+0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK
+0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN
+0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL
+0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS
+0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG
+0xAC54 # HANGUL SYLLABLE KIYEOK-YAE
+0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN
+0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL
+0xAC70 # HANGUL SYLLABLE KIYEOK-EO
+0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK
+0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN
+0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT
+0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL
+0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM
+0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM
+0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP
+0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS
+0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS
+0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG
+0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC
+0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH
+0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH
+0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH
+0xAC8C # HANGUL SYLLABLE KIYEOK-E
+0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN
+0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL
+0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM
+0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP
+0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS
+0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS
+0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG
+0xACA8 # HANGUL SYLLABLE KIYEOK-YEO
+0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK
+0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK
+0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN
+0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT
+0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL
+0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM
+0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP
+0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS
+0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS
+0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG
+0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH
+0xACC4 # HANGUL SYLLABLE KIYEOK-YE
+0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN
+0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL
+0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP
+0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS
+0xACE0 # HANGUL SYLLABLE KIYEOK-O
+0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK
+0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN
+0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT
+0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL
+0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM
+0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS
+0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH
+0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM
+0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP
+0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS
+0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG
+0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC
+0xACFC # HANGUL SYLLABLE KIYEOK-WA
+0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK
+0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN
+0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL
+0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM
+0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM
+0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP
+0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS
+0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG
+0xAD18 # HANGUL SYLLABLE KIYEOK-WAE
+0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN
+0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL
+0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP
+0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS
+0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG
+0xAD34 # HANGUL SYLLABLE KIYEOK-OE
+0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK
+0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN
+0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL
+0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM
+0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP
+0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS
+0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG
+0xAD50 # HANGUL SYLLABLE KIYEOK-YO
+0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN
+0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL
+0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP
+0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS
+0xAD6C # HANGUL SYLLABLE KIYEOK-U
+0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK
+0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN
+0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT
+0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL
+0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK
+0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM
+0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH
+0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM
+0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP
+0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS
+0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG
+0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC
+0xAD88 # HANGUL SYLLABLE KIYEOK-WEO
+0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK
+0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN
+0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL
+0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS
+0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG
+0xADA4 # HANGUL SYLLABLE KIYEOK-WE
+0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS
+0xADC0 # HANGUL SYLLABLE KIYEOK-WI
+0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK
+0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN
+0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL
+0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM
+0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP
+0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS
+0xADDC # HANGUL SYLLABLE KIYEOK-YU
+0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN
+0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL
+0xADF8 # HANGUL SYLLABLE KIYEOK-EU
+0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK
+0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN
+0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT
+0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL
+0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK
+0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM
+0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP
+0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS
+0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG
+0xAE14 # HANGUL SYLLABLE KIYEOK-YI
+0xAE30 # HANGUL SYLLABLE KIYEOK-I
+0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK
+0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN
+0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT
+0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL
+0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM
+0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM
+0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP
+0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS
+0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG
+0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC
+0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH
+0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A
+0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK
+0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK
+0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN
+0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL
+0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM
+0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM
+0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP
+0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS
+0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS
+0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG
+0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH
+0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE
+0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK
+0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN
+0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL
+0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM
+0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP
+0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS
+0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS
+0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG
+0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA
+0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK
+0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL
+0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO
+0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK
+0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK
+0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN
+0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL
+0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM
+0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP
+0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS
+0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS
+0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG
+0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E
+0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK
+0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN
+0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM
+0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS
+0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG
+0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO
+0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN
+0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL
+0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS
+0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS
+0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH
+0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE
+0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O
+0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK
+0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN
+0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH
+0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL
+0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM
+0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP
+0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS
+0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG
+0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC
+0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH
+0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA
+0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK
+0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL
+0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS
+0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG
+0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE
+0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK
+0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG
+0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE
+0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN
+0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL
+0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM
+0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP
+0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG
+0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO
+0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U
+0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK
+0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN
+0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL
+0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH
+0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM
+0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP
+0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS
+0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG
+0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC
+0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO
+0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL
+0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS
+0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG
+0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE
+0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK
+0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN
+0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL
+0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM
+0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP
+0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS
+0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI
+0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN
+0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL
+0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM
+0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP
+0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU
+0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU
+0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK
+0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN
+0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH
+0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL
+0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM
+0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH
+0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM
+0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP
+0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS
+0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG
+0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH
+0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I
+0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK
+0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN
+0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL
+0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM
+0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP
+0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS
+0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG
+0xB098 # HANGUL SYLLABLE NIEUN-A
+0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK
+0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK
+0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN
+0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT
+0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL
+0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK
+0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM
+0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM
+0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP
+0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS
+0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS
+0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG
+0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC
+0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH
+0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH
+0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH
+0xB0B4 # HANGUL SYLLABLE NIEUN-AE
+0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK
+0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN
+0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL
+0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM
+0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP
+0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS
+0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS
+0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG
+0xB0D0 # HANGUL SYLLABLE NIEUN-YA
+0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK
+0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN
+0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL
+0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM
+0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG
+0xB108 # HANGUL SYLLABLE NIEUN-EO
+0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK
+0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS
+0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN
+0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL
+0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM
+0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP
+0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM
+0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP
+0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS
+0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS
+0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG
+0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH
+0xB124 # HANGUL SYLLABLE NIEUN-E
+0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK
+0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN
+0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL
+0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM
+0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP
+0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS
+0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS
+0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG
+0xB140 # HANGUL SYLLABLE NIEUN-YEO
+0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK
+0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN
+0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL
+0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM
+0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP
+0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS
+0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG
+0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH
+0xB15C # HANGUL SYLLABLE NIEUN-YE
+0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN
+0xB178 # HANGUL SYLLABLE NIEUN-O
+0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK
+0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN
+0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL
+0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM
+0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM
+0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP
+0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS
+0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG
+0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH
+0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH
+0xB194 # HANGUL SYLLABLE NIEUN-WA
+0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN
+0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL
+0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS
+0xB1CC # HANGUL SYLLABLE NIEUN-OE
+0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN
+0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL
+0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM
+0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP
+0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS
+0xB1E8 # HANGUL SYLLABLE NIEUN-YO
+0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK
+0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN
+0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL
+0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP
+0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS
+0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG
+0xB204 # HANGUL SYLLABLE NIEUN-U
+0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK
+0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN
+0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT
+0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL
+0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM
+0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP
+0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS
+0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG
+0xB220 # HANGUL SYLLABLE NIEUN-WEO
+0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS
+0xB23C # HANGUL SYLLABLE NIEUN-WE
+0xB258 # HANGUL SYLLABLE NIEUN-WI
+0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN
+0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL
+0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM
+0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP
+0xB274 # HANGUL SYLLABLE NIEUN-YU
+0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK
+0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL
+0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM
+0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP
+0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG
+0xB290 # HANGUL SYLLABLE NIEUN-EU
+0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK
+0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN
+0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL
+0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK
+0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM
+0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM
+0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP
+0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS
+0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG
+0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC
+0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH
+0xB2AC # HANGUL SYLLABLE NIEUN-YI
+0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN
+0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL
+0xB2C8 # HANGUL SYLLABLE NIEUN-I
+0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK
+0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN
+0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL
+0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95>
+0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM
+0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP
+0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS
+0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG
+0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH
+0xB2E4 # HANGUL SYLLABLE TIKEUT-A
+0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK
+0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK
+0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN
+0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT
+0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL
+0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK
+0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM
+0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP
+0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH
+0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM
+0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP
+0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS
+0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS
+0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG
+0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC
+0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH
+0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH
+0xB300 # HANGUL SYLLABLE TIKEUT-AE
+0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK
+0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN
+0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL
+0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM
+0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP
+0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS
+0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS
+0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG
+0xB31C # HANGUL SYLLABLE TIKEUT-YA
+0xB354 # HANGUL SYLLABLE TIKEUT-EO
+0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK
+0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK
+0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN
+0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT
+0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL
+0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM
+0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP
+0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM
+0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP
+0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS
+0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG
+0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH
+0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH
+0xB370 # HANGUL SYLLABLE TIKEUT-E
+0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK
+0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN
+0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL
+0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM
+0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP
+0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS
+0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS
+0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG
+0xB38C # HANGUL SYLLABLE TIKEUT-YEO
+0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN
+0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL
+0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS
+0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG
+0xB3A8 # HANGUL SYLLABLE TIKEUT-YE
+0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN
+0xB3C4 # HANGUL SYLLABLE TIKEUT-O
+0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK
+0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN
+0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT
+0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL
+0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM
+0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS
+0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM
+0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP
+0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS
+0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG
+0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH
+0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH
+0xB3E0 # HANGUL SYLLABLE TIKEUT-WA
+0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN
+0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL
+0xB3FC # HANGUL SYLLABLE TIKEUT-WAE
+0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS
+0xB418 # HANGUL SYLLABLE TIKEUT-OE
+0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN
+0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL
+0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM
+0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP
+0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS
+0xB434 # HANGUL SYLLABLE TIKEUT-YO
+0xB450 # HANGUL SYLLABLE TIKEUT-U
+0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK
+0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN
+0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL
+0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM
+0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP
+0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS
+0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG
+0xB46C # HANGUL SYLLABLE TIKEUT-WEO
+0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS
+0xB488 # HANGUL SYLLABLE TIKEUT-WE
+0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG
+0xB4A4 # HANGUL SYLLABLE TIKEUT-WI
+0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN
+0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL
+0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP
+0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS
+0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG
+0xB4C0 # HANGUL SYLLABLE TIKEUT-YU
+0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN
+0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL
+0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM
+0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG
+0xB4DC # HANGUL SYLLABLE TIKEUT-EU
+0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK
+0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN
+0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT
+0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL
+0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM
+0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM
+0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP
+0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS
+0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG
+0xB4F8 # HANGUL SYLLABLE TIKEUT-YI
+0xB514 # HANGUL SYLLABLE TIKEUT-I
+0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK
+0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN
+0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT
+0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL
+0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM
+0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP
+0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS
+0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS
+0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG
+0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC
+0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A
+0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK
+0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN
+0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL
+0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM
+0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP
+0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS
+0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS
+0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG
+0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH
+0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE
+0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK
+0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN
+0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL
+0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM
+0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP
+0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS
+0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS
+0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG
+0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO
+0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK
+0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN
+0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL
+0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM
+0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP
+0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM
+0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP
+0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS
+0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS
+0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG
+0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH
+0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E
+0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK
+0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN
+0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL
+0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM
+0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP
+0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS
+0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS
+0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG
+0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO
+0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS
+0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O
+0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK
+0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN
+0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL
+0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG
+0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA
+0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL
+0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE
+0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE
+0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN
+0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U
+0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK
+0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN
+0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL
+0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH
+0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM
+0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG
+0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE
+0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI
+0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN
+0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL
+0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM
+0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP
+0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG
+0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU
+0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK
+0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN
+0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT
+0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL
+0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM
+0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP
+0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS
+0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI
+0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN
+0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL
+0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM
+0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP
+0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I
+0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN
+0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL
+0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM
+0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP
+0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS
+0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG
+0xB77C # HANGUL SYLLABLE RIEUL-A
+0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK
+0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN
+0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL
+0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM
+0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP
+0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS
+0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS
+0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG
+0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC
+0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH
+0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH
+0xB798 # HANGUL SYLLABLE RIEUL-AE
+0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK
+0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN
+0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL
+0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM
+0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP
+0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS
+0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS
+0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG
+0xB7B4 # HANGUL SYLLABLE RIEUL-YA
+0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK
+0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN
+0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS
+0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG
+0xB7EC # HANGUL SYLLABLE RIEUL-EO
+0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK
+0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN
+0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL
+0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM
+0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP
+0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS
+0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS
+0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG
+0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH
+0xB808 # HANGUL SYLLABLE RIEUL-E
+0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK
+0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN
+0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL
+0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM
+0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP
+0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS
+0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG
+0xB824 # HANGUL SYLLABLE RIEUL-YEO
+0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK
+0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN
+0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL
+0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM
+0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP
+0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS
+0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS
+0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG
+0xB840 # HANGUL SYLLABLE RIEUL-YE
+0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN
+0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP
+0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS
+0xB85C # HANGUL SYLLABLE RIEUL-O
+0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK
+0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN
+0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL
+0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM
+0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP
+0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS
+0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG
+0xB878 # HANGUL SYLLABLE RIEUL-WA
+0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN
+0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG
+0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS
+0xB8B0 # HANGUL SYLLABLE RIEUL-OE
+0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN
+0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL
+0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM
+0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP
+0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS
+0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG
+0xB8CC # HANGUL SYLLABLE RIEUL-YO
+0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN
+0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL
+0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP
+0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS
+0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG
+0xB8E8 # HANGUL SYLLABLE RIEUL-U
+0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK
+0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN
+0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL
+0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM
+0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP
+0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS
+0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG
+0xB904 # HANGUL SYLLABLE RIEUL-WEO
+0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS
+0xB920 # HANGUL SYLLABLE RIEUL-WE
+0xB93C # HANGUL SYLLABLE RIEUL-WI
+0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK
+0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN
+0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL
+0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM
+0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS
+0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG
+0xB958 # HANGUL SYLLABLE RIEUL-YU
+0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK
+0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN
+0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL
+0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM
+0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP
+0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS
+0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG
+0xB974 # HANGUL SYLLABLE RIEUL-EU
+0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK
+0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN
+0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL
+0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM
+0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP
+0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS
+0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG
+0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC
+0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH
+0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH
+0xB9AC # HANGUL SYLLABLE RIEUL-I
+0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK
+0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN
+0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL
+0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM
+0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP
+0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS
+0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG
+0xB9C8 # HANGUL SYLLABLE MIEUM-A
+0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK
+0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN
+0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH
+0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT
+0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL
+0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK
+0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM
+0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM
+0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP
+0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS
+0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG
+0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC
+0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH
+0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH
+0xB9E4 # HANGUL SYLLABLE MIEUM-AE
+0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK
+0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN
+0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL
+0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM
+0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP
+0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS
+0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS
+0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG
+0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC
+0xBA00 # HANGUL SYLLABLE MIEUM-YA
+0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK
+0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL
+0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG
+0xBA38 # HANGUL SYLLABLE MIEUM-EO
+0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK
+0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN
+0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL
+0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM
+0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM
+0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP
+0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS
+0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG
+0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC
+0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH
+0xBA54 # HANGUL SYLLABLE MIEUM-E
+0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK
+0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN
+0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL
+0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM
+0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP
+0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS
+0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS
+0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG
+0xBA70 # HANGUL SYLLABLE MIEUM-YEO
+0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK
+0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN
+0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL
+0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS
+0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS
+0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG
+0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH
+0xBA8C # HANGUL SYLLABLE MIEUM-YE
+0xBAA8 # HANGUL SYLLABLE MIEUM-O
+0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK
+0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS
+0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN
+0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL
+0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM
+0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM
+0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP
+0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS
+0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG
+0xBAC4 # HANGUL SYLLABLE MIEUM-WA
+0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN
+0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS
+0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG
+0xBAFC # HANGUL SYLLABLE MIEUM-OE
+0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN
+0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL
+0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP
+0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS
+0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG
+0xBB18 # HANGUL SYLLABLE MIEUM-YO
+0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN
+0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL
+0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP
+0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS
+0xBB34 # HANGUL SYLLABLE MIEUM-U
+0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK
+0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK
+0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN
+0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT
+0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL
+0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK
+0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM
+0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM
+0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP
+0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS
+0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG
+0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH
+0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH
+0xBB50 # HANGUL SYLLABLE MIEUM-WEO
+0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN
+0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL
+0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP
+0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS
+0xBB6C # HANGUL SYLLABLE MIEUM-WE
+0xBB88 # HANGUL SYLLABLE MIEUM-WI
+0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN
+0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL
+0xBBA4 # HANGUL SYLLABLE MIEUM-YU
+0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN
+0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL
+0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM
+0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS
+0xBBC0 # HANGUL SYLLABLE MIEUM-EU
+0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN
+0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL
+0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM
+0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS
+0xBBF8 # HANGUL SYLLABLE MIEUM-I
+0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK
+0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN
+0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT
+0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL
+0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM
+0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM
+0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP
+0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS
+0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS
+0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG
+0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH
+0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH
+0xBC14 # HANGUL SYLLABLE PIEUP-A
+0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK
+0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK
+0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS
+0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN
+0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT
+0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL
+0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK
+0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM
+0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP
+0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM
+0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP
+0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS
+0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG
+0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH
+0xBC30 # HANGUL SYLLABLE PIEUP-AE
+0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK
+0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN
+0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL
+0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM
+0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP
+0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS
+0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS
+0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG
+0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH
+0xBC4C # HANGUL SYLLABLE PIEUP-YA
+0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK
+0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN
+0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP
+0xBC84 # HANGUL SYLLABLE PIEUP-EO
+0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK
+0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN
+0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT
+0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL
+0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM
+0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM
+0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP
+0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS
+0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG
+0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC
+0xBCA0 # HANGUL SYLLABLE PIEUP-E
+0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK
+0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN
+0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT
+0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL
+0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM
+0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP
+0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS
+0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS
+0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG
+0xBCBC # HANGUL SYLLABLE PIEUP-YEO
+0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK
+0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN
+0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL
+0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP
+0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS
+0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS
+0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG
+0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH
+0xBCD8 # HANGUL SYLLABLE PIEUP-YE
+0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN
+0xBCF4 # HANGUL SYLLABLE PIEUP-O
+0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK
+0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK
+0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN
+0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL
+0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM
+0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP
+0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS
+0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG
+0xBD10 # HANGUL SYLLABLE PIEUP-WA
+0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN
+0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS
+0xBD2C # HANGUL SYLLABLE PIEUP-WAE
+0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS
+0xBD48 # HANGUL SYLLABLE PIEUP-OE
+0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK
+0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN
+0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL
+0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM
+0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP
+0xBD64 # HANGUL SYLLABLE PIEUP-YO
+0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN
+0xBD80 # HANGUL SYLLABLE PIEUP-U
+0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK
+0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN
+0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT
+0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL
+0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK
+0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM
+0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM
+0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP
+0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS
+0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG
+0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH
+0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH
+0xBD9C # HANGUL SYLLABLE PIEUP-WEO
+0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL
+0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS
+0xBDB8 # HANGUL SYLLABLE PIEUP-WE
+0xBDD4 # HANGUL SYLLABLE PIEUP-WI
+0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK
+0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN
+0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL
+0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG
+0xBDF0 # HANGUL SYLLABLE PIEUP-YU
+0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN
+0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL
+0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM
+0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS
+0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG
+0xBE0C # HANGUL SYLLABLE PIEUP-EU
+0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK
+0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN
+0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL
+0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM
+0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP
+0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS
+0xBE44 # HANGUL SYLLABLE PIEUP-I
+0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK
+0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN
+0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL
+0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM
+0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM
+0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP
+0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS
+0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG
+0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC
+0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH
+0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A
+0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK
+0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN
+0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL
+0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM
+0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM
+0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP
+0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS
+0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS
+0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG
+0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH
+0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE
+0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK
+0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN
+0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL
+0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM
+0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP
+0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS
+0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS
+0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG
+0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA
+0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK
+0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM
+0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO
+0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK
+0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN
+0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT
+0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL
+0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM
+0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS
+0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS
+0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG
+0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E
+0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG
+0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO
+0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK
+0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM
+0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP
+0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS
+0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS
+0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG
+0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O
+0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK
+0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN
+0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL
+0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM
+0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP
+0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG
+0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE
+0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO
+0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG
+0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U
+0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK
+0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN
+0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL
+0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM
+0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS
+0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG
+0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU
+0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG
+0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU
+0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN
+0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL
+0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM
+0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP
+0xC090 # HANGUL SYLLABLE SSANGPIEUP-I
+0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK
+0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN
+0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL
+0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM
+0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP
+0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS
+0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG
+0xC0AC # HANGUL SYLLABLE SIOS-A
+0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK
+0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS
+0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN
+0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT
+0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL
+0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK
+0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM
+0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM
+0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP
+0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS
+0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS
+0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG
+0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH
+0xC0C8 # HANGUL SYLLABLE SIOS-AE
+0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK
+0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN
+0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL
+0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM
+0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP
+0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS
+0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS
+0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG
+0xC0E4 # HANGUL SYLLABLE SIOS-YA
+0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK
+0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN
+0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL
+0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM
+0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP
+0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS
+0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG
+0xC100 # HANGUL SYLLABLE SIOS-YAE
+0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN
+0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL
+0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM
+0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG
+0xC11C # HANGUL SYLLABLE SIOS-EO
+0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK
+0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK
+0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS
+0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN
+0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT
+0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL
+0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM
+0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP
+0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM
+0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP
+0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS
+0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS
+0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG
+0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH
+0xC138 # HANGUL SYLLABLE SIOS-E
+0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK
+0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN
+0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL
+0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM
+0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP
+0xC14B # HANGUL SYLLABLE SIOS-E-SIOS
+0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS
+0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG
+0xC154 # HANGUL SYLLABLE SIOS-YEO
+0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK
+0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN
+0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL
+0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM
+0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP
+0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS
+0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS
+0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG
+0xC170 # HANGUL SYLLABLE SIOS-YE
+0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN
+0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL
+0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG
+0xC18C # HANGUL SYLLABLE SIOS-O
+0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK
+0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK
+0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN
+0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL
+0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM
+0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM
+0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP
+0xC19F # HANGUL SYLLABLE SIOS-O-SIOS
+0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG
+0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH
+0xC1A8 # HANGUL SYLLABLE SIOS-WA
+0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK
+0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN
+0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL
+0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG
+0xC1C4 # HANGUL SYLLABLE SIOS-WAE
+0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN
+0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL
+0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM
+0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS
+0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS
+0xC1E0 # HANGUL SYLLABLE SIOS-OE
+0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN
+0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL
+0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM
+0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP
+0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS
+0xC1FC # HANGUL SYLLABLE SIOS-YO
+0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK
+0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN
+0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL
+0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM
+0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP
+0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS
+0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG
+0xC218 # HANGUL SYLLABLE SIOS-U
+0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK
+0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN
+0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT
+0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL
+0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM
+0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP
+0xC22B # HANGUL SYLLABLE SIOS-U-SIOS
+0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG
+0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH
+0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH
+0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH
+0xC234 # HANGUL SYLLABLE SIOS-WEO
+0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS
+0xC250 # HANGUL SYLLABLE SIOS-WE
+0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK
+0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN
+0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL
+0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM
+0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG
+0xC26C # HANGUL SYLLABLE SIOS-WI
+0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK
+0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN
+0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL
+0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM
+0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP
+0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS
+0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG
+0xC288 # HANGUL SYLLABLE SIOS-YU
+0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK
+0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL
+0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM
+0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS
+0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG
+0xC2A4 # HANGUL SYLLABLE SIOS-EU
+0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK
+0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN
+0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL
+0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK
+0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM
+0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP
+0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS
+0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG
+0xC2DC # HANGUL SYLLABLE SIOS-I
+0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK
+0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN
+0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT
+0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL
+0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH
+0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM
+0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP
+0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS
+0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG
+0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH
+0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A
+0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK
+0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS
+0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN
+0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL
+0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM
+0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP
+0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS
+0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG
+0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH
+0xC314 # HANGUL SYLLABLE SSANGSIOS-AE
+0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK
+0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN
+0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL
+0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM
+0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP
+0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS
+0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG
+0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG
+0xC368 # HANGUL SYLLABLE SSANGSIOS-EO
+0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK
+0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN
+0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL
+0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM
+0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM
+0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP
+0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS
+0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG
+0xC384 # HANGUL SYLLABLE SSANGSIOS-E
+0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN
+0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL
+# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf)
+0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O
+0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK
+0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN
+0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT
+0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL
+0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM
+0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM
+0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP
+0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG
+0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA
+0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK
+0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN
+0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS
+0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE
+0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS
+0xC42C # HANGUL SYLLABLE SSANGSIOS-OE
+0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN
+0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL
+0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM
+0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP
+0xC448 # HANGUL SYLLABLE SSANGSIOS-YO
+0xC464 # HANGUL SYLLABLE SSANGSIOS-U
+0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK
+0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN
+0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL
+0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM
+0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP
+0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG
+0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO
+0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS
+0xC49C # HANGUL SYLLABLE SSANGSIOS-WE
+0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI
+0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN
+0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG
+0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU
+0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK
+0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN
+0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL
+0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM
+0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH
+0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM
+0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP
+0xC50C # HANGUL SYLLABLE SSANGSIOS-YI
+0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN
+0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL
+0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM
+0xC528 # HANGUL SYLLABLE SSANGSIOS-I
+0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK
+0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN
+0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL
+0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM
+0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP
+0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS
+0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG
+0xC544 # HANGUL SYLLABLE IEUNG-A
+0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK
+0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN
+0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC
+0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH
+0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL
+0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK
+0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM
+0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH
+0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM
+0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP
+0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS
+0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS
+0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG
+0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH
+0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH
+0xC560 # HANGUL SYLLABLE IEUNG-AE
+0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK
+0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN
+0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL
+0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM
+0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP
+0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS
+0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS
+0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG
+0xC57C # HANGUL SYLLABLE IEUNG-YA
+0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK
+0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN
+0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL
+0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP
+0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM
+0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP
+0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS
+0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG
+0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH
+0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH
+0xC598 # HANGUL SYLLABLE IEUNG-YAE
+0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN
+0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL
+0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP
+0xC5B4 # HANGUL SYLLABLE IEUNG-EO
+0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK
+0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN
+0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC
+0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT
+0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL
+0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK
+0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM
+0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM
+0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP
+0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS
+0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS
+0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS
+0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG
+0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC
+0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH
+0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH
+0xC5D0 # HANGUL SYLLABLE IEUNG-E
+0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK
+0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN
+0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL
+0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM
+0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP
+0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS
+0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG
+0xC5EC # HANGUL SYLLABLE IEUNG-YEO
+0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK
+0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK
+0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN
+0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL
+0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM
+0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP
+0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM
+0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP
+0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS
+0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS
+0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS
+0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG
+0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH
+0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH
+0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH
+0xC608 # HANGUL SYLLABLE IEUNG-YE
+0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN
+0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL
+0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM
+0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP
+0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS
+0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS
+0xC624 # HANGUL SYLLABLE IEUNG-O
+0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK
+0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN
+0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL
+0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK
+0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM
+0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS
+0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH
+0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM
+0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP
+0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS
+0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG
+0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH
+0xC640 # HANGUL SYLLABLE IEUNG-WA
+0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK
+0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN
+0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL
+0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM
+0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP
+0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS
+0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS
+0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG
+0xC65C # HANGUL SYLLABLE IEUNG-WAE
+0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK
+0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN
+0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM
+0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS
+0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG
+0xC678 # HANGUL SYLLABLE IEUNG-OE
+0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK
+0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN
+0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL
+0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM
+0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP
+0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS
+0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG
+0xC694 # HANGUL SYLLABLE IEUNG-YO
+0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK
+0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN
+0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL
+0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM
+0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP
+0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS
+0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG
+0xC6B0 # HANGUL SYLLABLE IEUNG-U
+0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK
+0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN
+0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL
+0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK
+0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM
+0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM
+0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP
+0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS
+0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG
+0xC6CC # HANGUL SYLLABLE IEUNG-WEO
+0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK
+0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN
+0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL
+0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM
+0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP
+0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS
+0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG
+0xC6E8 # HANGUL SYLLABLE IEUNG-WE
+0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK
+0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN
+0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL
+0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM
+0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP
+0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG
+0xC704 # HANGUL SYLLABLE IEUNG-WI
+0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK
+0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN
+0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL
+0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM
+0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP
+0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS
+0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG
+0xC720 # HANGUL SYLLABLE IEUNG-YU
+0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK
+0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN
+0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL
+0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM
+0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP
+0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS
+0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG
+0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH
+0xC73C # HANGUL SYLLABLE IEUNG-EU
+0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK
+0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN
+0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL
+0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH
+0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM
+0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP
+0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS
+0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG
+0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC
+0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH
+0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH
+0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH
+0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH
+0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH
+0xC758 # HANGUL SYLLABLE IEUNG-YI
+0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN
+0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL
+0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM
+0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS
+0xC774 # HANGUL SYLLABLE IEUNG-I
+0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK
+0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN
+0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL
+0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK
+0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM
+0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH
+0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM
+0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP
+0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS
+0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS
+0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG
+0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC
+0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH
+0xC790 # HANGUL SYLLABLE CIEUC-A
+0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK
+0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN
+0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH
+0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT
+0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL
+0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM
+0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM
+0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP
+0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS
+0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS
+0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG
+0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC
+0xC7AC # HANGUL SYLLABLE CIEUC-AE
+0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK
+0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN
+0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL
+0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM
+0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP
+0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS
+0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS
+0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG
+0xC7C8 # HANGUL SYLLABLE CIEUC-YA
+0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK
+0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN
+0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH
+0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL
+0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM
+0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG
+0xC7E4 # HANGUL SYLLABLE CIEUC-YAE
+0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN
+0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL
+0xC800 # HANGUL SYLLABLE CIEUC-EO
+0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK
+0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN
+0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL
+0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM
+0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM
+0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP
+0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS
+0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG
+0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC
+0xC81C # HANGUL SYLLABLE CIEUC-E
+0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK
+0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN
+0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL
+0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM
+0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP
+0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS
+0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG
+0xC838 # HANGUL SYLLABLE CIEUC-YEO
+0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN
+0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL
+0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM
+0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP
+0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS
+0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG
+0xC854 # HANGUL SYLLABLE CIEUC-YE
+0xC870 # HANGUL SYLLABLE CIEUC-O
+0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK
+0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN
+0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL
+0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM
+0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM
+0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP
+0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS
+0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG
+0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC
+0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH
+0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH
+0xC88C # HANGUL SYLLABLE CIEUC-WA
+0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK
+0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL
+0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP
+0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS
+0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG
+0xC8A8 # HANGUL SYLLABLE CIEUC-WAE
+0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS
+0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG
+0xC8C4 # HANGUL SYLLABLE CIEUC-OE
+0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN
+0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL
+0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM
+0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP
+0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS
+0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG
+0xC8E0 # HANGUL SYLLABLE CIEUC-YO
+0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK
+0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN
+0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG
+0xC8FC # HANGUL SYLLABLE CIEUC-U
+0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK
+0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN
+0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL
+0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK
+0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM
+0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM
+0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP
+0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS
+0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG
+0xC918 # HANGUL SYLLABLE CIEUC-WEO
+0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS
+0xC934 # HANGUL SYLLABLE CIEUC-WE
+0xC950 # HANGUL SYLLABLE CIEUC-WI
+0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK
+0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN
+0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL
+0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM
+0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP
+0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS
+0xC96C # HANGUL SYLLABLE CIEUC-YU
+0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN
+0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL
+0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM
+0xC988 # HANGUL SYLLABLE CIEUC-EU
+0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK
+0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN
+0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL
+0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM
+0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP
+0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS
+0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG
+0xC9C0 # HANGUL SYLLABLE CIEUC-I
+0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK
+0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN
+0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT
+0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL
+0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM
+0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM
+0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP
+0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS
+0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG
+0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC
+0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH
+0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH
+0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A
+0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK
+0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN
+0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH
+0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL
+0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP
+0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM
+0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP
+0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS
+0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS
+0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG
+0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE
+0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK
+0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN
+0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL
+0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM
+0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP
+0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS
+0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS
+0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG
+0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA
+0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN
+0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG
+0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO
+0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK
+0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN
+0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL
+0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM
+0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP
+0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS
+0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS
+0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG
+0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E
+0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG
+0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO
+0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS
+0xCABC # HANGUL SYLLABLE SSANGCIEUC-O
+0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK
+0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN
+0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL
+0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM
+0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP
+0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS
+0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG
+0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH
+0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA
+0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK
+0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL
+0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS
+0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE
+0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS
+0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE
+0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN
+0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL
+0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM
+0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP
+0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG
+0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U
+0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK
+0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN
+0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL
+0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM
+0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP
+0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG
+0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO
+0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS
+0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG
+0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI
+0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU
+0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU
+0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM
+0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS
+0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG
+0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I
+0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK
+0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN
+0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL
+0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM
+0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP
+0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG
+0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC
+0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH
+0xCC28 # HANGUL SYLLABLE CHIEUCH-A
+0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK
+0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN
+0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH
+0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL
+0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM
+0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP
+0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS
+0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS
+0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG
+0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC
+0xCC44 # HANGUL SYLLABLE CHIEUCH-AE
+0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK
+0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN
+0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL
+0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM
+0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP
+0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS
+0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS
+0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG
+0xCC60 # HANGUL SYLLABLE CHIEUCH-YA
+0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN
+0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH
+0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL
+0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM
+0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG
+0xCC98 # HANGUL SYLLABLE CHIEUCH-EO
+0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK
+0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN
+0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL
+0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM
+0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP
+0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS
+0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS
+0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG
+0xCCB4 # HANGUL SYLLABLE CHIEUCH-E
+0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK
+0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN
+0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL
+0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM
+0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP
+0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS
+0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG
+0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO
+0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN
+0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS
+0xCCEC # HANGUL SYLLABLE CHIEUCH-YE
+0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN
+0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG
+0xCD08 # HANGUL SYLLABLE CHIEUCH-O
+0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK
+0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN
+0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL
+0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM
+0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP
+0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS
+0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG
+0xCD24 # HANGUL SYLLABLE CHIEUCH-WA
+0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN
+0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL
+0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG
+0xCD5C # HANGUL SYLLABLE CHIEUCH-OE
+0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN
+0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL
+0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM
+0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP
+0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS
+0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG
+0xCD78 # HANGUL SYLLABLE CHIEUCH-YO
+0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM
+0xCD94 # HANGUL SYLLABLE CHIEUCH-U
+0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK
+0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN
+0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL
+0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM
+0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP
+0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS
+0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG
+0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO
+0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS
+0xCDCC # HANGUL SYLLABLE CHIEUCH-WE
+0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN
+0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI
+0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN
+0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL
+0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM
+0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP
+0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS
+0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG
+0xCE04 # HANGUL SYLLABLE CHIEUCH-YU
+0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN
+0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL
+0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM
+0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG
+0xCE20 # HANGUL SYLLABLE CHIEUCH-EU
+0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK
+0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN
+0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL
+0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM
+0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP
+0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS
+0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG
+0xCE58 # HANGUL SYLLABLE CHIEUCH-I
+0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK
+0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN
+0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT
+0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL
+0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK
+0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM
+0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP
+0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS
+0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG
+0xCE74 # HANGUL SYLLABLE KHIEUKH-A
+0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK
+0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN
+0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL
+0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM
+0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP
+0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS
+0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG
+0xCE90 # HANGUL SYLLABLE KHIEUKH-AE
+0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK
+0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN
+0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL
+0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM
+0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP
+0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS
+0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS
+0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG
+0xCEAC # HANGUL SYLLABLE KHIEUKH-YA
+0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK
+0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG
+0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO
+0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK
+0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN
+0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT
+0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL
+0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM
+0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP
+0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS
+0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS
+0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG
+0xCF00 # HANGUL SYLLABLE KHIEUKH-E
+0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK
+0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN
+0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL
+0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM
+0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP
+0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS
+0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG
+0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO
+0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN
+0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL
+0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM
+0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP
+0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS
+0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS
+0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG
+0xCF38 # HANGUL SYLLABLE KHIEUKH-YE
+0xCF54 # HANGUL SYLLABLE KHIEUKH-O
+0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK
+0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN
+0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL
+0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM
+0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP
+0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS
+0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG
+0xCF70 # HANGUL SYLLABLE KHIEUKH-WA
+0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK
+0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN
+0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL
+0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM
+0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG
+0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE
+0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG
+0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE
+0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL
+0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO
+0xCFE0 # HANGUL SYLLABLE KHIEUKH-U
+0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK
+0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN
+0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL
+0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM
+0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP
+0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS
+0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG
+0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO
+0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN
+0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL
+0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG
+0xD018 # HANGUL SYLLABLE KHIEUKH-WE
+0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG
+0xD034 # HANGUL SYLLABLE KHIEUKH-WI
+0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK
+0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN
+0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL
+0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM
+0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP
+0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS
+0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG
+0xD050 # HANGUL SYLLABLE KHIEUKH-YU
+0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN
+0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL
+0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM
+0xD06C # HANGUL SYLLABLE KHIEUKH-EU
+0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK
+0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN
+0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL
+0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM
+0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP
+0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG
+0xD0A4 # HANGUL SYLLABLE KHIEUKH-I
+0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK
+0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN
+0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL
+0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM
+0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP
+0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS
+0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG
+0xD0C0 # HANGUL SYLLABLE THIEUTH-A
+0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK
+0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN
+0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL
+0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK
+0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM
+0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP
+0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS
+0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS
+0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG
+0xD0DC # HANGUL SYLLABLE THIEUTH-AE
+0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK
+0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN
+0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL
+0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM
+0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP
+0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS
+0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS
+0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG
+0xD0F8 # HANGUL SYLLABLE THIEUTH-YA
+0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG
+0xD130 # HANGUL SYLLABLE THIEUTH-EO
+0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK
+0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN
+0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL
+0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM
+0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM
+0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP
+0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS
+0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS
+0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG
+0xD14C # HANGUL SYLLABLE THIEUTH-E
+0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK
+0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN
+0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL
+0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM
+0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP
+0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS
+0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG
+0xD168 # HANGUL SYLLABLE THIEUTH-YEO
+0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN
+0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS
+0xD184 # HANGUL SYLLABLE THIEUTH-YE
+0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN
+0xD1A0 # HANGUL SYLLABLE THIEUTH-O
+0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK
+0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN
+0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL
+0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM
+0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP
+0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS
+0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG
+0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH
+0xD1BC # HANGUL SYLLABLE THIEUTH-WA
+0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN
+0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE
+0xD1F4 # HANGUL SYLLABLE THIEUTH-OE
+0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN
+0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS
+0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG
+0xD210 # HANGUL SYLLABLE THIEUTH-YO
+0xD22C # HANGUL SYLLABLE THIEUTH-U
+0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK
+0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN
+0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL
+0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM
+0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP
+0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS
+0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG
+0xD248 # HANGUL SYLLABLE THIEUTH-WEO
+0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS
+0xD264 # HANGUL SYLLABLE THIEUTH-WE
+0xD280 # HANGUL SYLLABLE THIEUTH-WI
+0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK
+0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN
+0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL
+0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM
+0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP
+0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG
+0xD29C # HANGUL SYLLABLE THIEUTH-YU
+0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN
+0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL
+0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM
+0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG
+0xD2B8 # HANGUL SYLLABLE THIEUTH-EU
+0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK
+0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN
+0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT
+0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL
+0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM
+0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM
+0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP
+0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS
+0xD2D4 # HANGUL SYLLABLE THIEUTH-YI
+0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN
+0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL
+0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM
+0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP
+0xD2F0 # HANGUL SYLLABLE THIEUTH-I
+0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK
+0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN
+0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL
+0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM
+0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP
+0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS
+0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG
+0xD30C # HANGUL SYLLABLE PHIEUPH-A
+0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK
+0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK
+0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN
+0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL
+0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM
+0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM
+0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP
+0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS
+0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS
+0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG
+0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH
+0xD328 # HANGUL SYLLABLE PHIEUPH-AE
+0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK
+0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN
+0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL
+0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM
+0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP
+0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS
+0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS
+0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG
+0xD344 # HANGUL SYLLABLE PHIEUPH-YA
+0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK
+0xD37C # HANGUL SYLLABLE PHIEUPH-EO
+0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK
+0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN
+0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL
+0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM
+0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP
+0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS
+0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS
+0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG
+0xD398 # HANGUL SYLLABLE PHIEUPH-E
+0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK
+0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN
+0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL
+0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM
+0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP
+0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS
+0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG
+0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO
+0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN
+0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL
+0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM
+0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP
+0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS
+0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG
+0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE
+0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL
+0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP
+0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS
+0xD3EC # HANGUL SYLLABLE PHIEUPH-O
+0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK
+0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN
+0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL
+0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM
+0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP
+0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS
+0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG
+0xD408 # HANGUL SYLLABLE PHIEUPH-WA
+0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG
+0xD440 # HANGUL SYLLABLE PHIEUPH-OE
+0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN
+0xD45C # HANGUL SYLLABLE PHIEUPH-YO
+0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN
+0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL
+0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP
+0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS
+0xD478 # HANGUL SYLLABLE PHIEUPH-U
+0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK
+0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN
+0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT
+0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL
+0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM
+0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM
+0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP
+0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS
+0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG
+0xD494 # HANGUL SYLLABLE PHIEUPH-WEO
+0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG
+0xD4CC # HANGUL SYLLABLE PHIEUPH-WI
+0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN
+0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL
+0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM
+0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS
+0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU
+0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN
+0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL
+0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM
+0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS
+0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG
+0xD504 # HANGUL SYLLABLE PHIEUPH-EU
+0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN
+0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL
+0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM
+0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP
+0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS
+0xD53C # HANGUL SYLLABLE PHIEUPH-I
+0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK
+0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN
+0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL
+0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM
+0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP
+0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS
+0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG
+0xD558 # HANGUL SYLLABLE HIEUH-A
+0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK
+0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN
+0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL
+0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH
+0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM
+0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP
+0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS
+0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG
+0xD574 # HANGUL SYLLABLE HIEUH-AE
+0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK
+0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN
+0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL
+0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM
+0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP
+0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS
+0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS
+0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG
+0xD590 # HANGUL SYLLABLE HIEUH-YA
+0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG
+0xD5C8 # HANGUL SYLLABLE HIEUH-EO
+0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK
+0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN
+0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL
+0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM
+0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM
+0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP
+0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS
+0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG
+0xD5E4 # HANGUL SYLLABLE HIEUH-E
+0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK
+0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN
+0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL
+0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM
+0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP
+0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS
+0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG
+0xD600 # HANGUL SYLLABLE HIEUH-YEO
+0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK
+0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN
+0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL
+0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM
+0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP
+0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS
+0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS
+0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG
+0xD61C # HANGUL SYLLABLE HIEUH-YE
+0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN
+0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL
+0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP
+0xD638 # HANGUL SYLLABLE HIEUH-O
+0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK
+0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN
+0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL
+0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH
+0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM
+0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP
+0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS
+0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG
+0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH
+0xD654 # HANGUL SYLLABLE HIEUH-WA
+0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK
+0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN
+0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL
+0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS
+0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG
+0xD670 # HANGUL SYLLABLE HIEUH-WAE
+0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK
+0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN
+0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS
+0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG
+0xD68C # HANGUL SYLLABLE HIEUH-OE
+0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK
+0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN
+0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL
+0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP
+0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS
+0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG
+0xD6A8 # HANGUL SYLLABLE HIEUH-YO
+0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN
+0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL
+0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP
+0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS
+0xD6C4 # HANGUL SYLLABLE HIEUH-U
+0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK
+0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN
+0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL
+0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH
+0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM
+0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS
+0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG
+0xD6E0 # HANGUL SYLLABLE HIEUH-WEO
+0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN
+0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL
+0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM
+0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG
+0xD6FC # HANGUL SYLLABLE HIEUH-WE
+0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK
+0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN
+0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL
+0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG
+0xD718 # HANGUL SYLLABLE HIEUH-WI
+0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK
+0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN
+0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL
+0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM
+0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP
+0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS
+0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG
+0xD734 # HANGUL SYLLABLE HIEUH-YU
+0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK
+0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN
+0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL
+0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM
+0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS
+0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG
+0xD750 # HANGUL SYLLABLE HIEUH-EU
+0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK
+0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN
+0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH
+0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT
+0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL
+0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK
+0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM
+0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP
+0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS
+0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG
+0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH
+0xD76C # HANGUL SYLLABLE HIEUH-YI
+0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN
+0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL
+0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM
+0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP
+0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG
+0xD788 # HANGUL SYLLABLE HIEUH-I
+0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK
+0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN
+0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL
+0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM
+0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP
+0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS
+0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kok.orth b/chromium/third_party/fontconfig/src/fc-lang/kok.orth
new file mode 100644
index 00000000000..f7661e92340
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kok.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/kok.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kokani (Devanagari script) (KOK)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kr.orth b/chromium/third_party/fontconfig/src/fc-lang/kr.orth
new file mode 100644
index 00000000000..301da7f6473
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kr.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/kr.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kanuri (kr)
+#
+# Sources:
+# * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Kanuri
+# * http://www.sciences.univ-nantes.fr/info/perso/permanents/enguehard/recherche/Afrique/alphabet_kanuri.htm
+# * http://sumale.vjf.cnrs.fr/phono/AfficheTableauOrtho2N.php?choixLangue=kanuri
+# * http://www.rosettaproject.org/archive/kby/ortho-1
+# * http://std.dkuug.dk/jtc1/sc2/wg2/docs/n2906.pdf
+#
+# This is for Kanuri as written in the Latin script. An Arabic script
+# orthography is also used (called Ajami), but I could not find much
+# information about it.
+#
+# Q, V, and X are not used.
+#
+0041-005A
+0061-007A
+018E
+01DD
+024C-024D
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ks.orth b/chromium/third_party/fontconfig/src/fc-lang/ks.orth
new file mode 100644
index 00000000000..6697e152170
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ks.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/ks.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kashmiri (ks)
+#
+include ur.orth
+0620
+0657
+065f
+0672
+0673
+06c4
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ku_am.orth b/chromium/third_party/fontconfig/src/fc-lang/ku_am.orth
new file mode 100644
index 00000000000..c9f482100ea
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ku_am.orth
@@ -0,0 +1,91 @@
+#
+# fontconfig/fc-lang/ku_am.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kurdish in Armenia (ku-AM)
+#
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0427
+0428
+0429
+042a
+042d
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0447
+0448
+0449
+044a
+044d
+04ba
+04bb
+04d8
+04d9
+04e6
+04e7
+051a-051d
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ku_iq.orth b/chromium/third_party/fontconfig/src/fc-lang/ku_iq.orth
new file mode 100644
index 00000000000..d2a0655059c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ku_iq.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/ku_iq.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER 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 Iraq (ku-IQ)
+#
+# Assuming Iraqi Kurdish uses the same orthography as Iranian Kurdish
+include ku_ir.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ku_ir.orth b/chromium/third_party/fontconfig/src/fc-lang/ku_ir.orth
new file mode 100644
index 00000000000..233b4aab6e3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ku_ir.orth
@@ -0,0 +1,49 @@
+#
+# fontconfig/fc-lang/ku_ir.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kurdish in Iran (KU-IR)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain some of the Kurdish
+# letters, we are going with the general forms instead of the Presentation
+# forms, unlike Arabic, Persian, or Urdu.
+#
+0626-0628
+062a
+062c-062f
+0631-0634
+0639-063a
+0641-0642
+0644-0648
+067e
+0686
+0692
+0698
+06a4
+06a9
+06af
+06b5
+06c6
+06cc
+06ce
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ku_tr.orth b/chromium/third_party/fontconfig/src/fc-lang/ku_tr.orth
new file mode 100644
index 00000000000..1c0b3349224
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ku_tr.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/ku_tr.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER 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 Turkey (ku-TR)
+#
+# This is based on the commonly used "Hawar" alphabet
+#
+# Sources:
+# * http://www.omniglot.com/writing/kurdish.htm
+# * http://www.kurdishacademy.org/?q=node/145
+#
+0041-005A
+0061-007A
+00C7
+00CA
+00CE
+00DB
+00E7
+00EA
+00EE
+00FB
+015E-015F
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kum.orth b/chromium/third_party/fontconfig/src/fc-lang/kum.orth
new file mode 100644
index 00000000000..20f0b51b6b9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kum.orth
@@ -0,0 +1,96 @@
+#
+# fontconfig/fc-lang/kum.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kumyk (KUM)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kv.orth b/chromium/third_party/fontconfig/src/fc-lang/kv.orth
new file mode 100644
index 00000000000..5dbb28bb656
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kv.orth
@@ -0,0 +1,101 @@
+#
+# fontconfig/fc-lang/kv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Komi (Komi-Permyak/Komi-Siryan) (KV)
+#
+# I've taken Komi-Permyak as it contains two extra codepoints
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+0456
+04e6
+04e7
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kw.orth b/chromium/third_party/fontconfig/src/fc-lang/kw.orth
new file mode 100644
index 00000000000..3933a68011f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kw.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/kw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Cornish (KW)
+#
+# Orthography from http://www.evertype.com/alphabets/cornish.pdf
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+0232-0233
diff --git a/chromium/third_party/fontconfig/src/fc-lang/kwm.orth b/chromium/third_party/fontconfig/src/fc-lang/kwm.orth
new file mode 100644
index 00000000000..34cd4058499
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/kwm.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/kwm.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kwambi (kwm)
+#
+# Considered a sister language/dialect to Kuanyama (kj) and Ndonga (ng).
+# We'll include Kuanyama.
+#
+include kj.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ky.orth b/chromium/third_party/fontconfig/src/fc-lang/ky.orth
new file mode 100644
index 00000000000..bf7dbe0d2c7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ky.orth
@@ -0,0 +1,102 @@
+#
+# fontconfig/fc-lang/ky.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Kirgiz (KY)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
+#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
+04a2
+04a3
+04ae
+04af
diff --git a/chromium/third_party/fontconfig/src/fc-lang/la.orth b/chromium/third_party/fontconfig/src/fc-lang/la.orth
new file mode 100644
index 00000000000..359b36be7e7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/la.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/la.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Latin (LA)
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012d
+014c-014f
+016a-016d
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lah.orth b/chromium/third_party/fontconfig/src/fc-lang/lah.orth
new file mode 100644
index 00000000000..c0321b67c0f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lah.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/lah.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lahnda (lah)
+#
+# This is basically Western Panjabi/Punjabi, or Panjabi for Pakistan. It is
+# written in the Arabic script, also known as Shahmukhi. According to
+# ISO 639-3, the 'pa/pan' language code does not include Pakistani Panjabi,
+# but 'lah' does:
+# http://www.sil.org/iso639-3/documentation.asp?id=lah
+# http://www.sil.org/iso639-3/documentation.asp?id=pan
+#
+# The letter list appears to be identical to Urdu. More research may be
+# needed for rare letters.
+include ur.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lb.orth b/chromium/third_party/fontconfig/src/fc-lang/lb.orth
new file mode 100644
index 00000000000..51cbcc5d59a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lb.orth
@@ -0,0 +1,62 @@
+#
+# fontconfig/fc-lang/lb.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Luxembourgish (Letzeburgesch) (LB)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#
+# Required characters
+#
+00c4
+00e4
+00c9
+00e9
+00cb
+00eb
+00d6
+00f6
+00dc
+00fc
+#
+# Important characters
+#
+00c2
+00e2
+00c8
+00e8
+00ca
+00ea
+00ce
+00ee
+#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS)
+#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS)
+#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS)
+#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS)
+00d4
+00f4
+00db
+00fb
+00df
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lez.orth b/chromium/third_party/fontconfig/src/fc-lang/lez.orth
new file mode 100644
index 00000000000..541d2faa6f3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lez.orth
@@ -0,0 +1,97 @@
+#
+# fontconfig/fc-lang/lez.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Lezghian (Lezgian) (LEZ)
+#
+0401
+0406
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lg.orth b/chromium/third_party/fontconfig/src/fc-lang/lg.orth
new file mode 100644
index 00000000000..423cfe39673
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lg.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/lg.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ganda (lg)
+#
+# Sources:
+# * http://www.buganda.com/luganda.htm
+# * http://www.omniglot.com/writing/ganda.php
+# * http://sumale.vjf.cnrs.fr/phono/AfficheTableauOrtho2N.php?choixLangue=luganda
+#
+0041-005A
+0061-007A
+014A-014B
diff --git a/chromium/third_party/fontconfig/src/fc-lang/li.orth b/chromium/third_party/fontconfig/src/fc-lang/li.orth
new file mode 100644
index 00000000000..1b305386aa3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/li.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/li.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Limburgan/Limburger/Limburgish (li)
+#
+# Sources:
+# * http://www.limburgsedialecten.nl/pdf/Spellingbook-def.pdf
+# * http://li.wikipedia.org/wiki/Wikipedia:Sjpellingssjpiekpagina
+#
+# There's also an apostrophe-like character that needs more research. U+02BB?
+#
+0041-005A
+0061-007A
+00C4
+00C8
+00CB
+00D3
+00D6
+00E4
+00E8
+00EB
+00F3
+00F6
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ln.orth b/chromium/third_party/fontconfig/src/fc-lang/ln.orth
new file mode 100644
index 00000000000..659e2be20df
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ln.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/ln.orth
+#
+# Copyright © 2006 Danis Jacquerye
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lingala (LN)
+0041-005a # r used in borrowed words, x and q unused.
+0061-007a
+00c1-00c2 # tonal orthography
+00c9-00ca
+00cd-00ce
+00d3-00d4
+00da-00db
+00e1-00e2
+00e9-00ea
+00ed-00ee
+00f3-00f4
+00fa-00fb
+011a-011b
+0186
+0190
+0254
+025b
+0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b
+030c
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lo.orth b/chromium/third_party/fontconfig/src/fc-lang/lo.orth
new file mode 100644
index 00000000000..42cfaeb3bb1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lo.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/lo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lao (lo)
+#
+# Taken from the Unicode coverage of this language
+#
+0e81-0e82
+0e84
+0e87-0e88
+0e8a
+0e8d
+0e94-0e97
+0e99-0e9f
+0ea1-0ea3
+0ea5
+0ea7
+0eaa-0eab
+0ead-0eb9
+0ebb-0ebd
+0ec0-0ec4
+0ec6
+0ec8-0ecd
+#0ed0-0ed9 # Digits
+0edc-0edd
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lt.orth b/chromium/third_party/fontconfig/src/fc-lang/lt.orth
new file mode 100644
index 00000000000..582300a552d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lt.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/lt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lithuanian (LT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0104-0105
+010c-010d
+#0106-0109
+0116-0117
+0118-0119
+012e-012f
+0160-0161
+016a-016b
+0172-0173
+017d-017e
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/lv.orth b/chromium/third_party/fontconfig/src/fc-lang/lv.orth
new file mode 100644
index 00000000000..e83cbd7d1c1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/lv.orth
@@ -0,0 +1,44 @@
+#
+# fontconfig/fc-lang/lv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Latvian (LV)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+010c-010d
+0112-0113
+0122-0123
+012a-012b
+0136-0137
+013b-013c
+0145-0146
+014c-014d
+0156-0157
+0160-0161
+016a-016b
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mai.orth b/chromium/third_party/fontconfig/src/fc-lang/mai.orth
new file mode 100644
index 00000000000..943e748013f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mai.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/mai.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maithili (Devanagari script) (MAI)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mg.orth b/chromium/third_party/fontconfig/src/fc-lang/mg.orth
new file mode 100644
index 00000000000..99778b84e8a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mg.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/mg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Malagasy (MG)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS
+#e011 # LATIN SMALL LETTER N WITH DIAERESIS
+00d4
+00f4
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mh.orth b/chromium/third_party/fontconfig/src/fc-lang/mh.orth
new file mode 100644
index 00000000000..1ebf23b3451
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mh.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/mh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Marshallese (MH)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100
+0101
+013b
+013c
+#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS)
+#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS)
+#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS)
+#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS)
+0145
+0146
+014c
+014d
+#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS)
+#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS)
+016a
+016b
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mi.orth b/chromium/third_party/fontconfig/src/fc-lang/mi.orth
new file mode 100644
index 00000000000..a506c2b18cc
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mi.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/mi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maori (MI)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0100-0101
+0112-0113
+012a-012b
+014c-014d
+016a-016b
+1e34-1e35 # Ngai Tahu specific
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mk.orth b/chromium/third_party/fontconfig/src/fc-lang/mk.orth
new file mode 100644
index 00000000000..908e5922cf8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mk.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/mk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Macedonian (MK)
+0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0403
+0405
+0408-040a
+040c
+040d # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040f
+0410-0418
+041a-0428
+0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
+0453
+0455
+0458-045a
+045c
+045d # CYRILLIC SMALL LETTER I WITH GRAVE
+045f
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ml.orth b/chromium/third_party/fontconfig/src/fc-lang/ml.orth
new file mode 100644
index 00000000000..2d62d65ea97
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ml.orth
@@ -0,0 +1,38 @@
+#
+# fontconfig/fc-lang/ml.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Malayalam (ml)
+#
+# Taken from the Unicode coverage of this language
+#
+0d02-0d03
+0d05-0d0c
+0d0e-0d10
+0d12-0d28
+0d2a-0d39
+0d3e-0d43
+0d46-0d48
+0d4a-0d4d
+0d57
+0d60-0d61
+#0d66-0d6f # Digits
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mn_cn.orth b/chromium/third_party/fontconfig/src/fc-lang/mn_cn.orth
new file mode 100644
index 00000000000..5c4a8af23c4
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mn_cn.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/mn_cn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Mongolian in China (mn-CN)
+#
+# Taken from the Unicode coverage of this language
+#
+# Basic letters
+1820-1842
+# Todo letters
+1843-185c
+# Sibe letters
+185d-1872
+# Manchu letters
+1873-1877
+# Extensions for Sanskrit and Tibetan
+1880-18a9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mn_mn.orth b/chromium/third_party/fontconfig/src/fc-lang/mn_mn.orth
new file mode 100644
index 00000000000..af5d60213a0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mn_mn.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/mn_mn.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER 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 Mongolia (mn-MN)
+#
+# Sources:
+# http://www.omniglot.com/writing/mongolian.htm
+# http://www.viahistoria.com/SilverHorde/main.html?research/MongolScripts.html
+# http://unicode.org/cldr/data/common/main/mn.xml
+#
+0401
+0410-044F
+0451
+04AE-04AF
+04E8-04E9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mni.orth b/chromium/third_party/fontconfig/src/fc-lang/mni.orth
new file mode 100644
index 00000000000..4388269ca59
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mni.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/mni.orth
+#
+# Copyright © 2012 Pravin Satpute <psatpute@redhat.com>
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maniputi (mni)
+#
+# Source: Script grammer: http://tdil-dc.in/tdildcMain/articles/283709Script_Grammar_for_Manipuri.pdf 6th page
+# Characters are encirled in Unicode chart http://pravins.fedorapeople.org/Manipuri-characters.pdf
+# documents
+include bn.orth
+0964
+- 09c4
+09bd
+09ce
+09e6-09ef
+09f1
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mo.orth b/chromium/third_party/fontconfig/src/fc-lang/mo.orth
new file mode 100644
index 00000000000..5b22c61f41b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mo.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/mo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Moldavian (MO)
+0041-005a
+0061-007a
+00c2
+00ce
+00e2
+00ee
+0102-0103
+0218-021b # Comma below forms (preferred over cedilla)
+0401
+0410-044f
+0451
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mr.orth b/chromium/third_party/fontconfig/src/fc-lang/mr.orth
new file mode 100644
index 00000000000..26399093f5c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mr.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/mr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Marathi (Devanagari script) (MR)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ms.orth b/chromium/third_party/fontconfig/src/fc-lang/ms.orth
new file mode 100644
index 00000000000..e6b03bd121d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ms.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/ms.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Malay (ms)
+#
+# Sources:
+# http://www.omniglot.com/writing/malay.htm
+# * CLDR exemplar set for Malay:
+# http://unicode.org/cldr/data/common/main/ms.xml
+#
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/mt.orth b/chromium/third_party/fontconfig/src/fc-lang/mt.orth
new file mode 100644
index 00000000000..0172ad5e2be
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/mt.orth
@@ -0,0 +1,67 @@
+#
+# fontconfig/fc-lang/mt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Maltese (MT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+#00c1
+#00c2
+00c8
+#00c9
+#00ca
+00cc
+#00cd
+00ce
+00d2
+#00d3
+#00d4
+00d9
+#00da
+#00db
+00e0
+#00e1
+#00e2
+00e8
+#00e9
+#00ea
+00ec
+#00ed
+00ee
+00f2
+#00f3
+#00f4
+00f9
+#00fa
+#00fb
+010a-010b
+0120-0121
+0126-0127
+017b-017c
+#02bc
+#
diff --git a/chromium/third_party/fontconfig/src/fc-lang/my.orth b/chromium/third_party/fontconfig/src/fc-lang/my.orth
new file mode 100644
index 00000000000..3e3ecf890b1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/my.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/my.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Burmese (Myanmar) (MY)
+#
+# Orthography from Unicode range (U+1000-U+1059)
+#
+# Consonants
+1000-1020
+# Independent vowels
+1021
+1023-1027
+1029-102a
+# Dependent vowel signs
+102c-1032
+# Pali and Sanskrit extensions
+#1050-1059
diff --git a/chromium/third_party/fontconfig/src/fc-lang/na.orth b/chromium/third_party/fontconfig/src/fc-lang/na.orth
new file mode 100644
index 00000000000..9a829138aa7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/na.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/na.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Nauru (na)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Nauruan_language
+# * http://www.geonames.de/alphmq.html
+#
+# V and X are not used.
+#
+0041-005A
+0061-007A
+00C3
+00D1
+00D5
+00E3
+00F1
+00F5
+0168-0169
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nb.orth b/chromium/third_party/fontconfig/src/fc-lang/nb.orth
new file mode 100644
index 00000000000..1cac7f58484
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nb.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/nb.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian Bokmål (nb)
+include no.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nds.orth b/chromium/third_party/fontconfig/src/fc-lang/nds.orth
new file mode 100644
index 00000000000..8a6546aa0cf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nds.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/nds.orth
+#
+# Copyright © 2004 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Low Saxon (NDS)
+#
+# Sources:
+# Kenneth Rohde Christiansen <kenneth@gnu.org>
+# ANS -
+# Algemeyne Neddersassische Schryvwys' (DE)
+# Algemeyne Nedersaksische Schryvwyse (NL)
+#
+0041-005a # LATIN CAPITAL LETTER A through Z
+0061-007a # LATIN SMALL LETTER A through Z
+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DF # LATIN SMALL LETTER SHARP S (German)
+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+00FC # LATIN SMALL LETTER U WITH DIAERESIS
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ne.orth b/chromium/third_party/fontconfig/src/fc-lang/ne.orth
new file mode 100644
index 00000000000..ca1f2851fc1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ne.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/ne.orth
+#
+# Copyright © 2002 Keith Packard
+# Copyright © 2012 Parag Nemade, Pravin Satpute <psatpute@redhat.com>
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER 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 (ne)
+#
+# Source: http://www.panl10n.net/english/Outputs%20Phase%202/CCs/Nepal/MPP/Papers/2007/0702/mpp_reports_pdf/report_character_encoding_constraints_nepali.pdf
+#
+0901-0903 # Various Signs
+0905-090b # Independent vowels
+090f-0910 # Independent vowels
+0913-0914 # Independent vowels
+0915-0928 # Consonants
+092a-0930 # Consonants
+0932 # Consonants
+0935-0939 # Consonants
+093e-0943 # Various and Dependent vowel signs
+0947-0948 # Dependent vowel signs
+094b-094d # Dependent vowel signs and virama
+0950 # Sign and vedic tone marks
+0964-0965 # Punctuations
+0966-096F # Digits
+0970 # Abbrevation sign
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ng.orth b/chromium/third_party/fontconfig/src/fc-lang/ng.orth
new file mode 100644
index 00000000000..9c62bc65ccf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ng.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/ng.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ndonga (ng)
+#
+# Considered a sister language/dialect to Kuanyama (kj) and Kwambi (kwm).
+# We'll include Kuanyama.
+#
+include kj.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nl.orth b/chromium/third_party/fontconfig/src/fc-lang/nl.orth
new file mode 100644
index 00000000000..ea896fb5173
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nl.orth
@@ -0,0 +1,63 @@
+#
+# fontconfig/fc-lang/nl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dutch (NL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00c2
+00c4
+00c8
+00c9
+00ca
+00cb
+00cd
+00cf
+00d3
+00d4
+00d6
+00da
+00db
+00dc
+00e1
+00e2
+00e4
+00e8
+00e9
+00ea
+00eb
+00ed
+00ef
+00f3
+00f4
+00f6
+00fa
+00fb
+00fc
+#0132-0133 # IJ and ij ligatures
+
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nn.orth b/chromium/third_party/fontconfig/src/fc-lang/nn.orth
new file mode 100644
index 00000000000..3e9224d50a6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nn.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/nn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian Nynorsk (NN)
+0041-005a
+0061-007a
+#00ab # double angle quotes
+#00bb # double angle quotes
+00c0
+00c4-00c6
+00c9-00ca
+00d2-00d4
+00d6
+00d8
+00dc
+00e0
+00e4-00e6
+00e9-00ea
+00f2-00f4
+00f6
+00f8
+00fc
+#2039-203a # single quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/no.orth b/chromium/third_party/fontconfig/src/fc-lang/no.orth
new file mode 100644
index 00000000000..67e0ae9ac53
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/no.orth
@@ -0,0 +1,68 @@
+#
+# fontconfig/fc-lang/no.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Norwegian (Bokmål) (NO)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00ab
+#00bb
+00c0
+#00c1
+#00c2
+#00c4
+00c5
+00c6
+#00c7
+#00c8
+00c9
+00ca
+#00cb
+00d2
+00d3
+00d4
+#00d6
+00d8
+#00dc
+00e0
+#00e1
+#00e2
+#00e4
+00e5
+00e6
+#00e7
+#00e8
+00e9
+00ea
+#00eb
+00f2
+00f3
+00f4
+#00f6
+00f8
+#00fc
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nqo.orth b/chromium/third_party/fontconfig/src/fc-lang/nqo.orth
new file mode 100644
index 00000000000..544fbf6400b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nqo.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/nqo.orth
+#
+# Copyright © 2011 Akira TAGOH
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# N'Ko (nqo)
+#
+# See:
+# http://www.unicode.org/charts/PDF/U07C0.pdf
+# http://en.wikipedia.org/wiki/N'Ko_alphabet
+#
+07c0-07fa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nr.orth b/chromium/third_party/fontconfig/src/fc-lang/nr.orth
new file mode 100644
index 00000000000..0532cc1127a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nr.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/nr.orth
+#
+# Copyright © 2007 Dwayne Bailey and Translate.org.za
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Dwayne Bailey and Translate.org.za makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# DWAYNE BAILEY AND TRANSLATE.ORG.ZA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ndebele, South (NR)
+#
+# Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Ndebele.xml
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/nso.orth b/chromium/third_party/fontconfig/src/fc-lang/nso.orth
new file mode 100644
index 00000000000..046fc8a1ec9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nso.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/nso.orth
+#
+# Copyright © 2007 Dwayne Bailey and Translate.org.za
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Dwayne Bailey and Translate.org.za makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# DWAYNE BAILEY AND TRANSLATE.ORG.ZA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Northern Sotho (NSO)
+#
+# Orthography from 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/chromium/third_party/fontconfig/src/fc-lang/nv.orth b/chromium/third_party/fontconfig/src/fc-lang/nv.orth
new file mode 100644
index 00000000000..a64224ba9fc
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/nv.orth
@@ -0,0 +1,48 @@
+#
+# fontconfig/fc-lang/nv.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Navajo/Navaho (nv)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Navajo_language
+# * http://www.omniglot.com/writing/navajo.htm
+#
+# F, P, Q, R, U, and V are not used. A vertical glottal stop may be used.
+#
+0041-005A
+0061-007A
+00C1
+00C9
+00CD
+00D3
+00E1
+00E9
+00ED
+00F3
+0104-0105
+0118-0119
+012E-012F
+0141-0142
+01EA-01EB
+02BC # modifier letter apostrophe
+0301 # combining acute accent, to be used with ogonek-ed forms of vowels
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ny.orth b/chromium/third_party/fontconfig/src/fc-lang/ny.orth
new file mode 100644
index 00000000000..6ffacd95633
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ny.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/ny.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chichewa (NY)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0174-0175
diff --git a/chromium/third_party/fontconfig/src/fc-lang/oc.orth b/chromium/third_party/fontconfig/src/fc-lang/oc.orth
new file mode 100644
index 00000000000..07822e7584d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/oc.orth
@@ -0,0 +1,53 @@
+#
+# fontconfig/fc-lang/oc.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Occitan (OC)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c7
+00c8
+00c9
+#00cb
+00cd
+#00cf
+00d2
+00d3
+00da
+00e0
+00e1
+00e7
+00e8
+00e9
+#00eb
+00ed
+#00ef
+00f2
+00f3
+00fa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/om.orth b/chromium/third_party/fontconfig/src/fc-lang/om.orth
new file mode 100644
index 00000000000..21422bf5564
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/om.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/om.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Oromo or Galla (OM)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Oromo doesn't use v or z
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/or.orth b/chromium/third_party/fontconfig/src/fc-lang/or.orth
new file mode 100644
index 00000000000..eeb1dbe842f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/or.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/or.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Oriya (or)
+#
+# Taken from the Unicode coverage of this language
+#
+0b01-0b03
+0b05-0b0c
+0b0f-0b10
+0b13-0b28
+0b2a-0b30
+0b32-0b33
+0b36-0b39
+0b3c-0b43
+0b47-0b48
+0b4b-0b4d
+0b56-0b57
+0b5c-0b5d
+0b5f-0b61
+#0b66-0b6f # Digits
+#0b70 # Symbol
diff --git a/chromium/third_party/fontconfig/src/fc-lang/os.orth b/chromium/third_party/fontconfig/src/fc-lang/os.orth
new file mode 100644
index 00000000000..e689d908f66
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/os.orth
@@ -0,0 +1,96 @@
+#
+# fontconfig/fc-lang/os.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Ossetic (OS)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ota.orth b/chromium/third_party/fontconfig/src/fc-lang/ota.orth
new file mode 100644
index 00000000000..77d75e59068
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ota.orth
@@ -0,0 +1,41 @@
+#
+# fontconfig/fc-lang/ota.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ottoman Turkish (ota)
+#
+# Sources:
+# * Daniels and Bright, “The World’s Writing Systemsâ€, pp. 756–759.
+# * Library of Congress ALA-LC Romanization Tables:
+# http://www.loc.gov/catdir/cpso/romanization/ottoman.pdf
+#
+# General forms, since presentation forms for one letter is not in Unicode.
+#
+0621-0622
+0626-063A
+0641-0648
+067E
+0686
+0698
+06AD
+06AF
+06CC
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pa.orth b/chromium/third_party/fontconfig/src/fc-lang/pa.orth
new file mode 100644
index 00000000000..12588509cb0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pa.orth
@@ -0,0 +1,53 @@
+#
+# fontconfig/fc-lang/pa.orth
+#
+# Copyright © 2004 Red Hat, Inc.
+# 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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Panjabi/Punjabi (pa)
+#
+# According to ISO 639-3, 'pa/pan' only applies to Panjabi as used in India:
+# http://www.sil.org/iso639-3/documentation.asp?id=pan
+#
+# For Panjabi as used in Pakistan, use 'lah' or 'pa-PK':
+# http://www.sil.org/iso639-3/documentation.asp?id=lah
+#
+# From Unicode coverage for Gurmukhi, with modifications based on
+# the 'Lohit Punjabi' font
+#
+# 0A01-0A03 # Various signs
+0A05-0A0A # Independent vowels
+0A0F-0A10
+0A13-0A14
+0A15-0A28 # Consonants
+0A2A-0A30
+0A32-0A33
+0A35-0A36
+0A38-0A39
+0A3C # Nukta
+0A3E-0A42 # Dependent vowel signs
+0A47-0A48
+0A4B-0A4C
+0A4D # Virama
+0A59-0A5C # Additional consonants
+# 0A5E # GURMUKHI LETTER FA
+# 0A66-0A6F # Digits
+0A70-0A74 # Gurmukhi-specific additions
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pa_pk.orth b/chromium/third_party/fontconfig/src/fc-lang/pa_pk.orth
new file mode 100644
index 00000000000..fba09e3d643
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pa_pk.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/pa_pk.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Panjabi/Punjabi in Pakistan (pa-PK)
+#
+# This file is kept for compatiblity for glibc: According to ISO 639-3, the
+# proper code for Pakistani Panjabi is 'lah'. See the file 'lah.orth' for
+# more information.
+include lah.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pap_an.orth b/chromium/third_party/fontconfig/src/fc-lang/pap_an.orth
new file mode 100644
index 00000000000..fa4b8a9ae1e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pap_an.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/pap_an.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Papiamento in Netherlands Antilles (pap-AN)
+#
+# This is based on Curaçao orthography, also called "Papiamentu".
+#
+# Sources:
+# * http://papiamentu.pbwiki.com/Pronunciation
+# * http://en.wikipedia.org/wiki/Papiamento
+# * http://papiamentu.donamaro.nl/
+#
+0041-005A
+0061-007A
+00C1
+00C8-00C9
+00CD
+00D1-00D3
+00D9-00DA
+00DC
+00E1
+00E8-00E9
+00ED
+00F1-00F3
+00F9-00FA
+00FC
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pap_aw.orth b/chromium/third_party/fontconfig/src/fc-lang/pap_aw.orth
new file mode 100644
index 00000000000..b3af6949d74
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pap_aw.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/pap_aw.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Papiamento in Aruba (pap-AW)
+#
+# Sources: studying online newspapers, random wikipedia pages
+#
+0041-005A
+0061-007A
+00D1
+00F1
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pes.orth b/chromium/third_party/fontconfig/src/fc-lang/pes.orth
new file mode 100644
index 00000000000..0c160f9b45f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pes.orth
@@ -0,0 +1,26 @@
+#
+# fontconfig/fc-lang/pes.orth
+#
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Western Farsi (pes)
+#
+include fa.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pl.orth b/chromium/third_party/fontconfig/src/fc-lang/pl.orth
new file mode 100644
index 00000000000..4b069dfbb52
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pl.orth
@@ -0,0 +1,41 @@
+#
+# fontconfig/fc-lang/pl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Polish (PL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00d3
+00f3
+0104-0105
+0106-0107
+0118-0119
+0141-0142
+0143-0144
+015a-015b
+0179-017a
+017b-017c
diff --git a/chromium/third_party/fontconfig/src/fc-lang/prs.orth b/chromium/third_party/fontconfig/src/fc-lang/prs.orth
new file mode 100644
index 00000000000..b6a2ef5bf45
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/prs.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/prs.orth
+#
+# Copyright © 2009 Roozbeh Pournader
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Dari/Eastern Farsi (prs)
+#
+# We assume that Afghan Persian uses the same orthography as Iranian
+# Persian, although the actual orthography is probably less strict than that
+# of the Iranian Academy of Persian Language and Literature.
+include fa.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ps_af.orth b/chromium/third_party/fontconfig/src/fc-lang/ps_af.orth
new file mode 100644
index 00000000000..47c19dda94b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ps_af.orth
@@ -0,0 +1,52 @@
+#
+# fontconfig/fc-lang/ps_af.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Pashto in Afghanistan (PS-AF)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain any of the
+# Pashto-specific letters (that is Pashto letters not in Persian), we are
+# going with the general forms instead of the Presentation forms, unlike
+# Arabic, Persian, or Urdu.
+#
+0621-0624
+0626-063a
+0641-0642
+0644-0648
+064a
+067c
+067e
+0681
+0685-0686
+0689
+0693
+0696
+0698
+069a
+06a9
+06ab
+06bc
+06cc
+06cd
+06d0
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ps_pk.orth b/chromium/third_party/fontconfig/src/fc-lang/ps_pk.orth
new file mode 100644
index 00000000000..659f4fb0e75
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ps_pk.orth
@@ -0,0 +1,52 @@
+#
+# fontconfig/fc-lang/ps_pk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Pashto in Pakistan (PS-PK)
+#
+# Data from Roozbeh Pournader <roozbeh@sharif.edu>
+#
+# Since the Unicode Presentation Forms don't contain any of the
+# Pashto-specific letters (that is Pashto letters not in Persian), we are
+# going with the general forms instead of the Presentation forms, unlike
+# Arabic, Persian, or Urdu.
+#
+0621-0624
+0626-063a
+0641-0642
+0644-0648
+064a
+067c
+067e
+0681
+0685-0686
+0689
+0693
+0696
+0698
+069a
+06a9
+06ab
+06bc
+06cd
+06d0
+06d2
diff --git a/chromium/third_party/fontconfig/src/fc-lang/pt.orth b/chromium/third_party/fontconfig/src/fc-lang/pt.orth
new file mode 100644
index 00000000000..07aa83d76ee
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/pt.orth
@@ -0,0 +1,64 @@
+#
+# fontconfig/fc-lang/pt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Portuguese (PT)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#00bb
+00c0
+00c1
+00c2
+00c3
+00c7
+00c8
+00c9
+00ca
+00cd
+00d2
+00d3
+00d4
+00d5
+00da
+00dc
+00e0
+00e1
+00e2
+00e3
+00e7
+00e8
+00e9
+00ea
+00ed
+00f2
+00f3
+00f4
+00f5
+00fa
+00fc
+##203a # angle quote
+#
diff --git a/chromium/third_party/fontconfig/src/fc-lang/qu.orth b/chromium/third_party/fontconfig/src/fc-lang/qu.orth
new file mode 100644
index 00000000000..118b6503724
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/qu.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/qu.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Quechua (qu)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Quechua_alphabet
+# * http://www.omniglot.com/writing/quechua.htm
+#
+# Some basic Latin letters are not used, based on dialect
+#
+0041-005A
+0061-007A
+00D1
+00F1
+02C8
diff --git a/chromium/third_party/fontconfig/src/fc-lang/quz.orth b/chromium/third_party/fontconfig/src/fc-lang/quz.orth
new file mode 100644
index 00000000000..a991712a96d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/quz.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/quz.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Cusco Quechua (quz)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Quechua_alphabet
+# * http://www.omniglot.com/writing/quechua.htm
+#
+# Some basic Latin letters are not used, based on dialect
+#
+0041-005A
+0061-007A
+00D1
+00F1
+02C8
diff --git a/chromium/third_party/fontconfig/src/fc-lang/rm.orth b/chromium/third_party/fontconfig/src/fc-lang/rm.orth
new file mode 100644
index 00000000000..9a54d879ee0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/rm.orth
@@ -0,0 +1,45 @@
+#
+# fontconfig/fc-lang/rm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Rhaeto-Romance (Romansch) (RM)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c8
+00c9
+00cc
+00ce
+00d2
+00d9
+00e0
+00e8
+00e9
+00ec
+00ee
+00f2
+00f9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/rn.orth b/chromium/third_party/fontconfig/src/fc-lang/rn.orth
new file mode 100644
index 00000000000..3caf84b39cf
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/rn.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/rn.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Rundi (rn)
+#
+# Sources:
+# http://www.omniglot.com/writing/kirundi.php
+#
+# Q and X are not used. An apostrophe-like letter also exists.
+#
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ro.orth b/chromium/third_party/fontconfig/src/fc-lang/ro.orth
new file mode 100644
index 00000000000..0433de95180
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ro.orth
@@ -0,0 +1,38 @@
+#
+# fontconfig/fc-lang/ro.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Romanian (RO)
+#
+# Sources:
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00ce
+00e2
+00ee
+0102-0103
+0218-021b # comma-below forms (preferred over cedilla)
+#2019-201a # single quotes
+#201d-201e # double quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ru.orth b/chromium/third_party/fontconfig/src/fc-lang/ru.orth
new file mode 100644
index 00000000000..d4391f33a8a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ru.orth
@@ -0,0 +1,38 @@
+#
+# fontconfig/fc-lang/ru.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Russian (RU)
+#00ab
+#00bb
+0401
+#0406 # eliminated in 1918 in favor of 418
+0410-044f
+0451
+#0456 # eliminated in 1918 in favor of 438
+#0462 # CYRILLIC CAPITAL LETTER YAT
+#0463 # CYRILLIC SMALL LETTER YAT
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+#0474 # CYRILLIC CAPITAL LETTER IZHITSA
+#0475 # CYRILLIC SMALL LETTER IZHITSA
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/rw.orth b/chromium/third_party/fontconfig/src/fc-lang/rw.orth
new file mode 100644
index 00000000000..954c3335f1c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/rw.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/rw.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Kinyarwanda (rw)
+#
+# Sources:
+# http://www.omniglot.com/writing/kinyarwanda.htm
+#
+# Q and X are not used
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sa.orth b/chromium/third_party/fontconfig/src/fc-lang/sa.orth
new file mode 100644
index 00000000000..9b8e399daeb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sa.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/sa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sanskrit (Devanagari script) (SA)
+include hi.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sah.orth b/chromium/third_party/fontconfig/src/fc-lang/sah.orth
new file mode 100644
index 00000000000..f22317d4d5d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sah.orth
@@ -0,0 +1,108 @@
+#
+# fontconfig/fc-lang/sah.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Yakut (SAH)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+0494
+0495
+04a4
+04a5
+04ae
+04af
+04ba
+04bb
+04d8
+04d9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sat.orth b/chromium/third_party/fontconfig/src/fc-lang/sat.orth
new file mode 100644
index 00000000000..d5d91d006db
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sat.orth
@@ -0,0 +1,44 @@
+# fontconfig/fc-lang/sat.orth
+#
+# Copyright © 2012 Parag Nemade
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Keith Packard makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Santali (Devanagari script) (sat)
+#
+# Source: Enhanced inscript: http://pune.cdac.in/html/gist/down/inscript_d.asp
+# Or
+# Source: http://malayalam.kerala.gov.in/images/8/80/Qwerty_enhancedinscriptkeyboardlayout.pdf Page No. 86
+#
+0901-0903 # Various Signs
+0905-090a # Independent vowels
+090f-0910 # Independent vowels
+0913-0914 # Independent vowels
+0915-0928 # Consonants
+092a-0930 # Consonants
+0932-0932 # Consonants
+0935 # Consonants
+0938-0939 # Consonants
+093c-0942 # Various and Dependent vowel signs
+0947-0948 # Dependent vowel signs
+094b-094d # Dependent vowel signs and virama
+0950 # Sign
+0964-0965 # Punctuations
+0966-096F # Digits
+0970 # Abbrevation sign
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sc.orth b/chromium/third_party/fontconfig/src/fc-lang/sc.orth
new file mode 100644
index 00000000000..c30ec1df2c5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sc.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/sc.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sardinian (sc)
+#
+# Sources:
+# * http://www.omniglot.com/writing/sardinian.htm
+# * http://www.limbasarda.it/lingui/ling_alfa.html
+#
+# K, W, X, and Y are not used.
+0041-005A
+0061-007A
+00C0
+00C8
+00CC
+00D2
+00D9
+00E0
+00E8
+00EC
+00F2
+00F9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sco.orth b/chromium/third_party/fontconfig/src/fc-lang/sco.orth
new file mode 100644
index 00000000000..11022e16443
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sco.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/sco.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Scots (CU)
+#
+# Orthography from http://www.evertype.com/alphabets/scots.pdf
+#
+0041-005a
+0061-007a
+01b7
+021c-021d
+0292
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sd.orth b/chromium/third_party/fontconfig/src/fc-lang/sd.orth
new file mode 100644
index 00000000000..3fab4216ef7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sd.orth
@@ -0,0 +1,58 @@
+#
+# fontconfig/fc-lang/sd.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sindhi (sd)
+#
+# Sindhi is mostly written in the Arabic script in both Pakistan and India.
+#
+# Sources:
+# * http://www.user.uni-hannover.de/nhtcapri/sindhi-alphabet.html
+# * http://www.omniglot.com/writing/sindhi.htm
+# * http://tdil.mit.gov.in/sindhidesignguideoct02.pdf
+#
+# Some of the Sindhi letters are not available as presentation forms in
+# Unicode, so we go with general-purpose Arabic letters.
+#
+0621-0622
+0624
+0626-0628
+062A-063A
+0641-0642
+0644-0648
+064A
+067A-067B
+067D-0680
+0683-0684
+0686-0687
+068A
+068C-068D
+068F
+0699
+06A6
+06A9-06AA
+06AF
+06B1
+06B3
+06BB
+06BE
+#06FD-06FD # signs are usually not included in orthographies
diff --git a/chromium/third_party/fontconfig/src/fc-lang/se.orth b/chromium/third_party/fontconfig/src/fc-lang/se.orth
new file mode 100644
index 00000000000..6ed02f888a6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/se.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/se.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# North Sámi (SE)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+010c-010d
+0110-0111
+014a-014b
+0160-0161
+0166-0167
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sel.orth b/chromium/third_party/fontconfig/src/fc-lang/sel.orth
new file mode 100644
index 00000000000..ba8fe598149
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sel.orth
@@ -0,0 +1,96 @@
+#
+# fontconfig/fc-lang/sel.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Selkup (Ostyak-Samoyed) (SEL)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sg.orth b/chromium/third_party/fontconfig/src/fc-lang/sg.orth
new file mode 100644
index 00000000000..aa9c0d17901
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sg.orth
@@ -0,0 +1,47 @@
+#
+# fontconfig/fc-lang/sg.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sango (sg)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Sango_language
+# * http://www.omniglot.com/writing/sango.php
+#
+# C, Q, and X are not used.
+#
+0041-005A
+0061-007A
+00C2
+00C4
+00CA-00CB
+00CE-00CF
+00D4
+00D6
+00DB-00DC
+00E2
+00E4
+00EA-00EB
+00EE-00EF
+00F4
+00F6
+00FB-00FC
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sh.orth b/chromium/third_party/fontconfig/src/fc-lang/sh.orth
new file mode 100644
index 00000000000..80dae3ebd70
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sh.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/sh.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Serbo-Croatian (sh)
+#
+# This tag is deprecated since 2000 in ISO 639-1 and BCP 47. It is kept here
+# for backward compatibility. Since ISO 639-3 defines this as a
+# macrolanguage consisting of Bosnian, Croatian, and Serbian, we union
+# those three.
+include ba.orth
+include hr.orth
+include sr.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/shs.orth b/chromium/third_party/fontconfig/src/fc-lang/shs.orth
new file mode 100644
index 00000000000..ca509b3577c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/shs.orth
@@ -0,0 +1,48 @@
+#
+# fontconfig/fc-lang/shs.orth
+#
+# Copyright © 2008 Neskie Manuel
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Neskie Manuel not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Neskie Manuel makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# NESKIE MANUEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL NESKIE MANUEL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Secwepemctsin (shs)
+#
+# Orthography from A Shuswap Course and
+# http://www.languagegeek.com/salishan/secwepemctsin.html
+
+0037
+0041
+0043
+0045
+0047-0049
+004B-0055
+0057-0059
+0061
+0063
+0065
+0067-0069
+006B-0075
+0077-0079
+00C1
+00C9
+00CD
+00E1
+00E9
+00ED
+0313
diff --git a/chromium/third_party/fontconfig/src/fc-lang/si.orth b/chromium/third_party/fontconfig/src/fc-lang/si.orth
new file mode 100644
index 00000000000..8f8f15d336b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/si.orth
@@ -0,0 +1,75 @@
+#
+# fontconfig/fc-lang/si.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sinhala/Sinhalese (si)
+#
+# The document SINHALA CHARACTER CODE FOR INFORMATION INTERCHANGE, PART 2:
+# REQUIREMENTS AND METHODS OF TEST (SLS 1134:PART2:2007 UDC 003.035:003.336)
+# describes three (3) levels of compliance for Unicode Sinhala fonts. The
+# first level describes the minimum requirements for SLS certification. The
+# third level includes the first and second level requirements and additional
+# requirements.
+#
+# To get a copy of this document contact the Sri Lanka Standards Institution
+# (http://www.slsi.lk/).
+#
+# The Unicode document: http://unicode.org/charts/PDF/U0D80.PDF
+# describes the base for level 3 compliance.
+#
+# Level 1 compliance can be described as level 3 with the exclusion of:
+# U+0D8F ILUYANNA (Independent Vowel)
+# U+0D90 ILUUYANNA (Independent Vowel)
+# U+0DDF GAYANUKITTA (Dependent Vowel)
+# U+0DF3 DIGA GAYANUKITTA (Dependent Vowel)
+# U+0DF4 KUNDDALIYA (Punctuation)
+#
+# Sinhala and SLS1134 experts can be contacted at:
+# sinhala-technical at lists.sourceforge.net
+# ltrl at ucsc.cmb.ac.lk
+#
+# Semi Consonants
+0d82-0d83
+# Independent Vowels
+0d85-0d8d
+# 0d8e IRUUYANNA (Level 1, but not in modern use)
+# 0d8f ILUYANNA (Level 3)
+# 0d90 ILUUYANNA (Level 3)
+0d91-0d96
+# Consonants
+0d9a-0da5
+#0da6 SANYAKA JAYANNA (Level 1, but not in modern use)
+0da7-0db1
+0db3-0dbb
+0dbd
+0dc0-0dc6
+# Dependent Vowels
+0dca
+0dcf-0dd4
+0dd6
+0dd8-0dde
+# 0ddf GAYANUKITTA (Level 3)
+0df2
+# 0df3 DIGA GAYANUKITTA (Level 3)
+# Punctuation
+# 0df4 KUNDDALIYA (Level 3)
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sid.orth b/chromium/third_party/fontconfig/src/fc-lang/sid.orth
new file mode 100644
index 00000000000..179080b82f9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sid.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/sid.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sidamo (sid)
+#
+# Copying Tigrinya of Ethiopia, as does glibc
+include ti_et.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sk.orth b/chromium/third_party/fontconfig/src/fc-lang/sk.orth
new file mode 100644
index 00000000000..c2a36f0d34e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sk.orth
@@ -0,0 +1,63 @@
+#
+# fontconfig/fc-lang/sk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Slovak (SK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00c4
+00c9
+00cd
+00d3
+00d4
+#00d6 # evertype.com
+00da
+#00dc # evertype.com
+00dd
+00e1
+00e4
+00e9
+00ed
+00f3
+00f4
+#00f6 # evertype.com
+00fa
+#00fc # evertype.com
+00fd
+010c-010d
+010e-010f
+0139-013a
+013d-013e
+0147-0148
+#0150-0151 # evertype.com
+0154-0155
+0160-0161
+0164-0165
+#0170-0171 # evertype.com
+017d-017e
+#
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sl.orth b/chromium/third_party/fontconfig/src/fc-lang/sl.orth
new file mode 100644
index 00000000000..ea28aa37631
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sl.orth
@@ -0,0 +1,88 @@
+#
+# fontconfig/fc-lang/sl.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Slovenian (SL)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+#
+# Included in eki.ee
+#
+#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+#00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+#00E4 LATIN SMALL LETTER A WITH DIAERESIS
+#00F6 LATIN SMALL LETTER O WITH DIAERESIS
+#00FC LATIN SMALL LETTER U WITH DIAERESIS
+0106 LATIN CAPITAL LETTER C WITH ACUTE
+0107 LATIN SMALL LETTER C WITH ACUTE
+010C LATIN CAPITAL LETTER C WITH CARON
+010D LATIN SMALL LETTER C WITH CARON
+0110 LATIN CAPITAL LETTER D WITH STROKE
+0111 LATIN SMALL LETTER D WITH STROKE
+0160 LATIN CAPITAL LETTER S WITH CARON
+0161 LATIN SMALL LETTER S WITH CARON
+017D LATIN CAPITAL LETTER Z WITH CARON
+017E LATIN SMALL LETTER Z WITH CARON
+#
+# According to evertype.com:
+#
+# In slovenian, these letters are often used to transliterate
+# Serbian and Macedonian letters
+#
+#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+#01C6 LATIN SMALL LETTER DZ WITH CARON
+#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
+#01C9 LATIN SMALL LETTER LJ
+#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
+#01CC LATIN SMALL LETTER NJ
+#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+#01F3 LATIN SMALL LETTER DZ
+#01F4 LATIN CAPITAL LETTER G WITH ACUTE
+#01F5 LATIN SMALL LETTER G WITH ACUTE
+#1E30 LATIN CAPITAL LETTER K WITH ACUTE
+#1E31 LATIN SMALL LETTER K WITH ACUTE
+#
+# These are the transliteration target letters which are
+# not used in Slovenian at all
+#
+#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+#0403 CYRILLIC CAPITAL LETTER GJE
+#0405 CYRILLIC CAPITAL LETTER DZE
+#0409 CYRILLIC CAPITAL LETTER LJE
+#040A CYRILLIC CAPITAL LETTER NJE
+#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+#040C CYRILLIC CAPITAL LETTER KJE
+#040F CYRILLIC CAPITAL LETTER DZHE
+#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
+#0453 CYRILLIC SMALL LETTER GJE
+#0455 CYRILLIC SMALL LETTER DZE
+#0459 CYRILLIC SMALL LETTER LJE
+#045A CYRILLIC SMALL LETTER NJE
+#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+#045C CYRILLIC SMALL LETTER KJE
+#045F CYRILLIC SMALL LETTER DZHE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sm.orth b/chromium/third_party/fontconfig/src/fc-lang/sm.orth
new file mode 100644
index 00000000000..e8dc63ab370
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sm.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/sm.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Samoan (AF)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+02bb
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sma.orth b/chromium/third_party/fontconfig/src/fc-lang/sma.orth
new file mode 100644
index 00000000000..4292ec7c502
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sma.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/sma.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# South Sámi (SMA)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c4
+00e4
+00c5
+00e5
+00d6
+00f6
+00cf
+00ef
diff --git a/chromium/third_party/fontconfig/src/fc-lang/smj.orth b/chromium/third_party/fontconfig/src/fc-lang/smj.orth
new file mode 100644
index 00000000000..3d466fdda7e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/smj.orth
@@ -0,0 +1,37 @@
+#
+# fontconfig/fc-lang/smj.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Lule Sámi (SMJ)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00c4
+00e4
+00c5
+00e5
+00d1
+00f1
diff --git a/chromium/third_party/fontconfig/src/fc-lang/smn.orth b/chromium/third_party/fontconfig/src/fc-lang/smn.orth
new file mode 100644
index 00000000000..54ac9cef70a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/smn.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/smn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Inari Sámi (SMN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c1
+00e1
+00c2
+00e2
+00c4
+00e4
+010c-010d
+0110-0111
+014a-014b
+0160-0161
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sms.orth b/chromium/third_party/fontconfig/src/fc-lang/sms.orth
new file mode 100644
index 00000000000..b9391ae4207
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sms.orth
@@ -0,0 +1,48 @@
+#
+# fontconfig/fc-lang/sms.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Skolt Sámi (SMJ)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c2
+00e2
+00c4
+00e4
+00c5
+00e5
+010c-010d
+0110-0111
+01b7
+0292
+01ee-01ef
+01e6-01e7
+01e4-01e5
+01e8-01e9
+014a-014b
+00d5
+00f5
+0160-0161
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sn.orth b/chromium/third_party/fontconfig/src/fc-lang/sn.orth
new file mode 100644
index 00000000000..52839ee7b3b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sn.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/sn.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Shona (sn)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Shona_language
+# * http://www.dokpro.uio.no/allex/gsd/fm/7-Mabhii.htm
+# * http://www.omniglot.com/writing/shona.php
+#
+# Q and X are not used. An apostrophe-like modifier exists,
+# that is used after N. More research is needed.
+#
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/so.orth b/chromium/third_party/fontconfig/src/fc-lang/so.orth
new file mode 100644
index 00000000000..0867a4595f8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/so.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/so.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Somali (SO)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Somali doesn't use p, v or z
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sq.orth b/chromium/third_party/fontconfig/src/fc-lang/sq.orth
new file mode 100644
index 00000000000..21c885acf0c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sq.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/sq.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Albanian (SQ)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c7
+00cb
+00e7
+00eb
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sr.orth b/chromium/third_party/fontconfig/src/fc-lang/sr.orth
new file mode 100644
index 00000000000..0350a687c79
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sr.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/sr.orth
+#
+# Copyright © 2008 Danilo Šegan
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Serbian (SR)
+#
+0402
+0408-040b
+040f
+0410-0418
+041a-0428
+0430-0438
+043a-0448
+0452
+0458-045b
+045f
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ss.orth b/chromium/third_party/fontconfig/src/fc-lang/ss.orth
new file mode 100644
index 00000000000..98d79e59710
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ss.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/ss.orth
+#
+# Copyright © 2007 Dwayne Bailey and Translate.org.za
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Dwayne Bailey and Translate.org.za makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# DWAYNE BAILEY AND TRANSLATE.ORG.ZA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Swati (SS)
+#
+# Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Swati.xml
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/st.orth b/chromium/third_party/fontconfig/src/fc-lang/st.orth
new file mode 100644
index 00000000000..7db6bff43d0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/st.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/st.orth
+#
+# Copyright © 2007 Dwayne Bailey and Translate.org.za
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Dwayne Bailey or Translate.org.za not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Dwayne Bailey and Translate.org.za makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# DWAYNE BAILEY AND TRANSLATE.ORG.ZA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL DWAYNE BAILEY OR TRANSLATE.ORG.ZA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sotho, Southern (ST)
+#
+# Orthography taken from http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Sesotho.xml
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/su.orth b/chromium/third_party/fontconfig/src/fc-lang/su.orth
new file mode 100644
index 00000000000..5646fe28164
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/su.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/su.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sundanese (su)
+#
+# Sources:
+# * http://en.wikipedia.org/wiki/Sundanese_language
+# * http://www.omniglot.com/writing/sundanese.php
+#
+0041-005A
+0061-007A
+00C9
+00E9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sv.orth b/chromium/third_party/fontconfig/src/fc-lang/sv.orth
new file mode 100644
index 00000000000..4f40fff3352
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sv.orth
@@ -0,0 +1,100 @@
+#
+# fontconfig/fc-lang/sv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Swedish (SV)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+# evertype.com includes a large number of additional precomposed letters
+# not marked by eki.ee; I've left those commented out here
+#
+0041-005a
+0061-007a
+#00bb
+00c0
+00c1
+#00c2
+#00c3
+00c4
+00c5
+#00c6
+#00c7
+#00c8
+00c9
+#00ca
+00cb
+#00cc
+#00cd
+#00ce
+#00cf
+#00d0
+#00d1
+#00d2
+#00d3
+#00d4
+00d6
+#00d7
+#00d8
+#00d9
+#00da
+#00db
+00dc
+#00dd
+00e0
+00e1
+#00e2
+#00e3
+00e4
+00e5
+#00e6
+#00e7
+#00e8
+00e9
+#00ea
+00eb
+#00ec
+#00ed
+#00ee
+#00ef
+#00f0
+#00f1
+#00f2
+#00f3
+#00f4
+00f6
+#00f8
+#00f9
+#00fa
+#00fb
+00fc
+#00fd
+#0106-0107 # C, c with acute
+#010c-010d # C, c with caron
+#0141-0144 # L, l with stroke N, n with acute
+#0158-015b # R, r with caron S, s with acute
+#0160-0161 # S, s with caron
+#2019 # single quote
+#201d # double quote
+#203a # angle quote
diff --git a/chromium/third_party/fontconfig/src/fc-lang/sw.orth b/chromium/third_party/fontconfig/src/fc-lang/sw.orth
new file mode 100644
index 00000000000..f4bff3d19af
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/sw.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/sw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Swahili (SW)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a # Swahili doesn't use f, q or x and uses r only for loan words
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/syr.orth b/chromium/third_party/fontconfig/src/fc-lang/syr.orth
new file mode 100644
index 00000000000..97d6edc4849
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/syr.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/syr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Syriac (SYR)
+#
+# Coverage given by Emil Soleyman-Zomalan <emil@nishra.com>
+#
+0710-072c # Syriac letters
+0730-073f # Syriac points (vowels)
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ta.orth b/chromium/third_party/fontconfig/src/fc-lang/ta.orth
new file mode 100644
index 00000000000..52a6f1d583f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ta.orth
@@ -0,0 +1,46 @@
+#
+# fontconfig/fc-lang/ta.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tamil (TA)
+#
+# Taken from the Unicode coverage of this language
+#
+# updates from Jungshik Shin <jshin@mailaps.org>
+#
+#0b82 # not present in many Tamil fonts
+0b83
+0b85-0b8a
+0b8e-0b90
+0b92-0b95
+0b99-0b9a
+0b9c
+0b9e-0b9f
+0ba3-0ba4
+0ba8-0baa
+0bae-0bb5
+0bb7-0bb9
+0bbe-0bc2
+0bc6-0bc8
+0bca-0bcd
+0bd7
+#0be7-0bf2 # Tamil digits and numbers
diff --git a/chromium/third_party/fontconfig/src/fc-lang/te.orth b/chromium/third_party/fontconfig/src/fc-lang/te.orth
new file mode 100644
index 00000000000..141c932edbb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/te.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/te.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Telugu (te)
+#
+# Taken from the Unicode coverage of this language
+#
+0c01-0c03
+0c05-0c0c
+0c0e-0c10
+0c12-0c28
+0c2a-0c33
+0c35-0c39
+0c3e-0c44
+0c46-0c48
+0c4a-0c4d
+0c55-0c56
+0c60-0c61
+#0c66-0c6f # Digits
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tg.orth b/chromium/third_party/fontconfig/src/fc-lang/tg.orth
new file mode 100644
index 00000000000..fc99ab1da07
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tg.orth
@@ -0,0 +1,108 @@
+#
+# fontconfig/fc-lang/tg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tajik (TG)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+0492
+0493
+049a
+049b
+04b2
+04b3
+04b6
+04b7
+04e2
+04e3
+04ee
+04ef
diff --git a/chromium/third_party/fontconfig/src/fc-lang/th.orth b/chromium/third_party/fontconfig/src/fc-lang/th.orth
new file mode 100644
index 00000000000..03c3c32ea92
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/th.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/th.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Thai (th)
+#
+0e01-0e3a
+0e3f-0e4e
+#0e4f # Punctuation
+#0e50-0e59 # Digits
+#0e5a-0e5b # Punctuation
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ti_er.orth b/chromium/third_party/fontconfig/src/fc-lang/ti_er.orth
new file mode 100644
index 00000000000..91b37acc59b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ti_er.orth
@@ -0,0 +1,56 @@
+#
+# fontconfig/fc-lang/ti_er.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Eritrean Tigrinya (TI-ER) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-121f # me-mWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1250-1256 # Qe-Qo
+1258 # QWe
+125a-125d # QWi-QW
+1260-126e # be-vo
+1270-127f # te-cWa
+1290-12a7 # ne-o
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # Ke-Ko
+12c0 # KWe
+12c2-12c5 # KWi-KW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12ee # ze-yo
+12f0-12f7 # de-dWa
+1300-130e # je-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-133f # Te-SWa
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ti_et.orth b/chromium/third_party/fontconfig/src/fc-lang/ti_et.orth
new file mode 100644
index 00000000000..b80be99157e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ti_et.orth
@@ -0,0 +1,33 @@
+#
+# fontconfig/fc-lang/ti_et.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ethiopian Tigrinya (TI-ET) Ethiopic Convention
+#
+# The same as Ethiopic
+#
+include ti_er.orth
+1220-1226 # `se-`so
+1280-1286 # `he-`ho
+1288 # hWe
+128a-128d # hWi-hW
+1340-1346 # `Se-`So
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tig.orth b/chromium/third_party/fontconfig/src/fc-lang/tig.orth
new file mode 100644
index 00000000000..d731ebc2b94
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tig.orth
@@ -0,0 +1,52 @@
+#
+# fontconfig/fc-lang/tig.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tigre (TIG) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206 # he-ho
+1208-1216 # le-Ho, skip HWa
+1218-121f # me-mWa
+1228-1230 # re-sWa
+1238-1246 # re-qo
+1248 # qWe
+124a-124d # qWi-qW
+1260-126e # be-vo
+1270-127f # te-cWa
+1290-1297 # ne-nWa
+12a0-12a6 # a-o
+12a8-12ae # ke-ko
+12b0 # kWe
+12b2-12b5 # kWi-kW
+12c8-12ce # we-wo
+12d0-12d6 # `e-`o
+12d8-12df # ze-zWa
+12e8-12ee # ye-yo
+12f0-12f7 # de-dWa
+1300-130e # je-go
+1310 # gWe
+1312-1315 # gWi-gW
+1320-133f # Te-SWa
+1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tk.orth b/chromium/third_party/fontconfig/src/fc-lang/tk.orth
new file mode 100644
index 00000000000..7a8a985a4e3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tk.orth
@@ -0,0 +1,44 @@
+#
+# fontconfig/fc-lang/tk.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Turkmen (tk)
+#
+# Sources:
+# http://www.omniglot.com/writing/turkmen.htm
+# http://www.itscj.ipsj.or.jp/ISO-IR/230.pdf
+# http://www.eki.ee/wgrs/rom2_tk.htm
+#
+# C, Q, V, and X are not used
+0041-005A
+0061-007A
+00C4
+00C7
+00D6
+00DC-00DD
+00E4
+00E7
+00F6
+00FC-00FD
+0147-0148
+015E-015F
+017D-017E
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tl.orth b/chromium/third_party/fontconfig/src/fc-lang/tl.orth
new file mode 100644
index 00000000000..6ab5c2dac73
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tl.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/tl.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tagalog (tl)
+#
+# Since Filipino is standardized Tagalog, we just include that
+include fil.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tn.orth b/chromium/third_party/fontconfig/src/fc-lang/tn.orth
new file mode 100644
index 00000000000..2a1510a8228
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tn.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/tn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tswana (TN)
+#
+# Orthography from http://www.eki.ee/letter
+# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml
+#
+0041-005a
+0061-007a
+00ca
+00ea
+00d4
+00f4
+0160-0161
diff --git a/chromium/third_party/fontconfig/src/fc-lang/to.orth b/chromium/third_party/fontconfig/src/fc-lang/to.orth
new file mode 100644
index 00000000000..2a5f7367040
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/to.orth
@@ -0,0 +1,30 @@
+#
+# fontconfig/fc-lang/to.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tonga (TO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+02bb
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tr.orth b/chromium/third_party/fontconfig/src/fc-lang/tr.orth
new file mode 100644
index 00000000000..11031bb4ebc
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tr.orth
@@ -0,0 +1,49 @@
+#
+# fontconfig/fc-lang/tr.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Turkish (TR)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E7 LATIN SMALL LETTER C WITH CEDILLA
+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+011E LATIN CAPITAL LETTER G WITH BREVE
+011F LATIN SMALL LETTER G WITH BREVE
+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131 LATIN SMALL LETTER DOTLESS I
+015E LATIN CAPITAL LETTER S WITH CEDILLA *
+015F LATIN SMALL LETTER S WITH CEDILLA *
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ts.orth b/chromium/third_party/fontconfig/src/fc-lang/ts.orth
new file mode 100644
index 00000000000..ade4e3bbf4f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ts.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/ts.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tsonga (TS)
+#
+# Orthography taken from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tt.orth b/chromium/third_party/fontconfig/src/fc-lang/tt.orth
new file mode 100644
index 00000000000..0292d1ff03a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tt.orth
@@ -0,0 +1,108 @@
+#
+# fontconfig/fc-lang/tt.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tatar (TT)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+0496
+0497
+04a2
+04a3
+04ae
+04af
+04ba
+04bb
+04d8
+04d9
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tw.orth b/chromium/third_party/fontconfig/src/fc-lang/tw.orth
new file mode 100644
index 00000000000..4cee88b631a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tw.orth
@@ -0,0 +1,50 @@
+#
+# fontconfig/fc-lang/tw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Twi (tw)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
+00C3 # LATIN CAPITAL LETTER A WITH TILDE
+00E3 # LATIN SMALL LETTER A WITH TILDE
+00D1 # LATIN CAPITAL LETTER N WITH TILDE
+00D5 # LATIN CAPITAL LETTER O WITH TILDE
+00F1 # LATIN SMALL LETTER N WITH TILDE
+00F5 # LATIN SMALL LETTER O WITH TILDE
+0128 # LATIN CAPITAL LETTER I WITH TILDE
+0129 # LATIN SMALL LETTER I WITH TILDE
+0168 # LATIN CAPITAL LETTER U WITH TILDE
+0169 # LATIN SMALL LETTER U WITH TILDE
+0186 # LATIN CAPITAL LETTER OPEN O
+0254 # LATIN SMALL LETTER OPEN O
+0190 # LATIN CAPITAL LETTER OPEN E
+025B # LATIN SMALL LETTER OPEN E
+0303 # COMBINING TILDE
+0306 # COMBINING BREVE (Vrachy)
+0329 # COMBINING VERTICAL LINE BELOW
+1EBC # LATIN CAPITAL LETTER E WITH TILDE
+1EBD # LATIN SMALL LETTER E WITH TILDE
+1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
+1EF9 # LATIN SMALL LETTER Y WITH TILDE
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ty.orth b/chromium/third_party/fontconfig/src/fc-lang/ty.orth
new file mode 100644
index 00000000000..fe4f2456876
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ty.orth
@@ -0,0 +1,41 @@
+#
+# fontconfig/fc-lang/ty.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tahitian (ty)
+#
+# Sources:
+# * http://www.omniglot.com/writing/tahitian.htm
+# * http://en.wikipedia.org/wiki/Tahitian_language
+#
+# B, C, D, G, J, K, L, Q, S, W, X, Y and Z are not used.
+#
+0041-005A
+0061-007A
+00CF # used in one word only?
+00EF # used in one word only?
+0100-0101
+0112-0113
+012A-012B
+014C-014D
+016A-016B
+02BC # or possibly 02BB
diff --git a/chromium/third_party/fontconfig/src/fc-lang/tyv.orth b/chromium/third_party/fontconfig/src/fc-lang/tyv.orth
new file mode 100644
index 00000000000..9498541f9c9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/tyv.orth
@@ -0,0 +1,102 @@
+#
+# fontconfig/fc-lang/tyv.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
+# Sprachmaterialien)
+#
+# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
+#
+# Tuvinian (TYV)
+#
+0401
+0410
+0411
+0412
+0413
+0414
+0415
+0416
+0417
+0418
+0419
+041a
+041b
+041c
+041d
+041e
+041f
+0420
+0421
+0422
+0423
+0424
+0425
+0426
+0427
+0428
+0429
+042a
+042b
+042c
+042d
+042e
+042f
+0430
+0431
+0432
+0433
+0434
+0435
+0436
+0437
+0438
+0439
+043a
+043b
+043c
+043d
+043e
+043f
+0440
+0441
+0442
+0443
+0444
+0445
+0446
+0447
+0448
+0449
+044a
+044b
+044c
+044d
+044e
+044f
+0451
+#0472 # CYRILLIC CAPITAL LETTER FITA
+#0473 # CYRILLIC SMALL LETTER FITA
+04a2
+04a3
+04ae
+04af
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ug.orth b/chromium/third_party/fontconfig/src/fc-lang/ug.orth
new file mode 100644
index 00000000000..1a6f28d99d1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ug.orth
@@ -0,0 +1,50 @@
+#
+# fontconfig/fc-lang/ug.orth
+#
+# Copyright © 2010
+# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/)
+# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug)
+# Kenjisoft (http://kenjisoft.homelinux.com/)
+# Bilik (http://www.bilik.cn/)
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Uyghur (UG)
+#
+# Uyghur is written in a modified Persian-Arabic script. For detailed
+# information, refer to http://en.wikipedia.org/wiki/Uyghur_language
+#
+0626-0628
+062A
+062C
+062E-062F
+0631-0634
+063A
+0641-0646
+0648-064A
+067E
+0686
+0698
+06AD
+06AF
+06BE
+06C6-06C8
+06CB
+06D0
+06D5
diff --git a/chromium/third_party/fontconfig/src/fc-lang/uk.orth b/chromium/third_party/fontconfig/src/fc-lang/uk.orth
new file mode 100644
index 00000000000..d1dc05b46b4
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/uk.orth
@@ -0,0 +1,43 @@
+#
+# fontconfig/fc-lang/uk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ukrainian (UK)
+#
+# Sources:
+# www.evertype.com
+# www.eki.ee/letter
+#
+#00ab
+#00bb
+#0401 # evertype.com
+0404
+0406
+0407
+0410-044f
+#0451 # evertype.com
+0454
+0456
+0457
+0490
+0491
+#2039-203a # angle quotes
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ur.orth b/chromium/third_party/fontconfig/src/fc-lang/ur.orth
new file mode 100644
index 00000000000..5b39a50cb20
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ur.orth
@@ -0,0 +1,68 @@
+#
+# 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-0628
+063a
+0641-0642
+0644-0646
+0648
+0679
+067e
+0686
+0688
+0691
+0698
+06a9
+06af
+06ba
+06be
+06c3
+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/chromium/third_party/fontconfig/src/fc-lang/uz.orth b/chromium/third_party/fontconfig/src/fc-lang/uz.orth
new file mode 100644
index 00000000000..a85670a4fcd
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/uz.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/uz.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Uzbek (uz)
+#
+# Sources:
+# * http://ru.wikipedia.org/wiki/УзбекÑкаÑ_пиÑьменноÑÑ‚ÑŒ
+# * http://unicode.org/cldr/data/common/main/uz_Latn.xml
+# * http://www.oxuscom.com/New_Uzbek_Latin_Alphabet.pdf
+#
+0041-005A
+0061-007A
+# There are one to three modifier letters too, that are important for the
+# orthography. But it's impossible to locate them in Unicode with the
+# information available online. Possible candidates:
+# U+02BB, U+02BC, U+02BF, U+02C8.
diff --git a/chromium/third_party/fontconfig/src/fc-lang/ve.orth b/chromium/third_party/fontconfig/src/fc-lang/ve.orth
new file mode 100644
index 00000000000..173cbf5a615
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/ve.orth
@@ -0,0 +1,34 @@
+#
+# fontconfig/fc-lang/ve.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Venda (ve)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+1e12-1e13
+1e3c-1e3d
+1e44-1e45
+1e4a-1e4b
+1e70-1e71
diff --git a/chromium/third_party/fontconfig/src/fc-lang/vi.orth b/chromium/third_party/fontconfig/src/fc-lang/vi.orth
new file mode 100644
index 00000000000..96c51a95d8f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/vi.orth
@@ -0,0 +1,58 @@
+#
+# fontconfig/fc-lang/vi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Vietnamese (VI)
+#
+# Information extracted from email sent by Markus Kuhn about the
+# standard Vietnamese character set (TCVN 6909:2001)
+#
+0041-005a
+0061-007a
+00c0-00c3
+00c8-00ca
+00cc-00cd
+00d2-00d5
+00d9-00da
+00dd
+00e0-00e3
+00e8-00ea
+00ec-00ed
+00f2-00f5
+00f9-00fa
+00fd
+0102-0103
+0110-0111
+0128-0129
+0168-0169
+01a0-01a1
+01af-01b0
+# diacritical marks
+0300-0303
+0306
+0309
+031b
+0323
+# more precomposed latin
+1ea0-1ef9
+# double quote marks
+#201c-201d
diff --git a/chromium/third_party/fontconfig/src/fc-lang/vo.orth b/chromium/third_party/fontconfig/src/fc-lang/vo.orth
new file mode 100644
index 00000000000..52dcb1899a6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/vo.orth
@@ -0,0 +1,36 @@
+#
+# fontconfig/fc-lang/vo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Volapük (VO)
+0041-0050
+0052-0056
+0058-005a
+0061-0070
+0072-0076
+0078-007a
+00c4
+00d6
+00dc
+00e4
+00f6
+00fc
diff --git a/chromium/third_party/fontconfig/src/fc-lang/vot.orth b/chromium/third_party/fontconfig/src/fc-lang/vot.orth
new file mode 100644
index 00000000000..b31b22fb158
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/vot.orth
@@ -0,0 +1,40 @@
+#
+# fontconfig/fc-lang/vot.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Orthography from http://www.everytype.com/alphabets/votic.pdf
+#
+# Votic (VOT)
+#
+# Sources:
+# www.evertype.com
+#
+0041-005a
+0061-007a
+00c4
+00d6
+00dc
+00e4
+00f6
+00fc
+0160-0161
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/wa.orth b/chromium/third_party/fontconfig/src/fc-lang/wa.orth
new file mode 100644
index 00000000000..25e6ff54e3d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/wa.orth
@@ -0,0 +1,47 @@
+#
+# fontconfig/fc-lang/wa.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Walloon (WA)
+#
+# Data from private communication with Pablo Saratxaga <pablo@mandrakesoft.com>
+#
+0041-005a
+0061-007a
+00c2 # A circumflex
+00c5 # A ring
+00c7 # C cedilla
+00c8 # E grave
+00c9 # E acute
+00ca # E circumflex
+00ce # I circumflex
+00d4 # O circumflex
+00db # U circumflex
+00e2 # a circumflex
+00e5 # a ring
+00e7 # c cedilla
+00e8 # e grave
+00e9 # e acute
+00ea # e circumflex
+00ee # i circumflex
+00f4 # o circumflex
+00fb # u circumflex
diff --git a/chromium/third_party/fontconfig/src/fc-lang/wal.orth b/chromium/third_party/fontconfig/src/fc-lang/wal.orth
new file mode 100644
index 00000000000..450e21a946a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/wal.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/wal.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Wolaitta/Wolaytta (wal)
+#
+# Copying Tigrinya of Ethiopia, as does glibc
+include ti_et.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/wen.orth b/chromium/third_party/fontconfig/src/fc-lang/wen.orth
new file mode 100644
index 00000000000..d53dd12a4b6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/wen.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/wen.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Sorbian languages (lower and upper) (WEN)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+0106-0107
+010c-010d
+011a-011b
+0141-0142
+0143-0144
+00d3
+00f3
+0154-0155
+0158-0159
+015a-015b
+0160-0161
+0179-017a
+017d-017e
diff --git a/chromium/third_party/fontconfig/src/fc-lang/wo.orth b/chromium/third_party/fontconfig/src/fc-lang/wo.orth
new file mode 100644
index 00000000000..8e94e218e33
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/wo.orth
@@ -0,0 +1,42 @@
+#
+# fontconfig/fc-lang/wo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Wolof (WO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00e0
+00c3
+00e3
+00c9
+00e9
+00cb
+00eb
+00d1
+00f1
+014a-014b
+00d3
+00f3
diff --git a/chromium/third_party/fontconfig/src/fc-lang/xh.orth b/chromium/third_party/fontconfig/src/fc-lang/xh.orth
new file mode 100644
index 00000000000..c6dddac4eea
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/xh.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/xh.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Xhosa (XH)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-lang/yap.orth b/chromium/third_party/fontconfig/src/fc-lang/yap.orth
new file mode 100644
index 00000000000..5aedf0ef9c8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/yap.orth
@@ -0,0 +1,35 @@
+#
+# fontconfig/fc-lang/yap.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yapese (YAP)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c4
+00e4
+00cb
+00eb
+00d6
+00f6
diff --git a/chromium/third_party/fontconfig/src/fc-lang/yi.orth b/chromium/third_party/fontconfig/src/fc-lang/yi.orth
new file mode 100644
index 00000000000..51d6ca329fa
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/yi.orth
@@ -0,0 +1,25 @@
+#
+# fontconfig/fc-lang/yi.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yiddish (YI)
+include he.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/yo.orth b/chromium/third_party/fontconfig/src/fc-lang/yo.orth
new file mode 100644
index 00000000000..77c5eca254e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/yo.orth
@@ -0,0 +1,86 @@
+#
+# fontconfig/fc-lang/yo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Yoruba (YO)
+#
+# Orthography from http://www.eki.ee/letter
+#
+0041-005a
+0061-007a
+00c0
+00c1
+00c2
+00c3
+00c8
+00c9
+00ca
+00cc
+00cd
+00ce
+00d2
+00d3
+00d4
+00d5
+00d9
+00da
+00db
+00e0
+00e1
+00e2
+00e3
+00e8
+00e9
+00ea
+00ec
+00ed
+00ee
+00f2
+00f3
+00f4
+00f5
+00f9
+00fa
+00fb
+011a-011b
+0128-0129
+0143-0144
+0168-0169
+01cd-01ce
+01cf-01d0
+01d1-01d2
+01d3-01d4
+01f8-01f9 # LATIN LETTER N WITH GRAVE
+0300
+0301
+0302
+0303
+030c
+1e3e-1e3f
+1e62-1e63
+1eb8-1eb9
+1ebc-1ebd
+1ecc-1ecd
+# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code)
+# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code)
+# LATIN SMALL LETTER M WITH MACRON (no UCS code)
+# LATIN SMALL LETTER N WITH MACRON (no UCS code)
diff --git a/chromium/third_party/fontconfig/src/fc-lang/za.orth b/chromium/third_party/fontconfig/src/fc-lang/za.orth
new file mode 100644
index 00000000000..22deabe4af2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/za.orth
@@ -0,0 +1,39 @@
+#
+# fontconfig/fc-lang/za.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 author(s) make(s) no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Zhuang/Chuang (za)
+#
+# Sources:
+# * http://www.omniglot.com/writing/zhuang.htm
+# * http://www006.upp.so-net.ne.jp/FFS/zhuangyu_ch01.htm
+# * http://en.wikipedia.org/wiki/Zhuang_language
+#
+# There is an older orthography with several uncommon letters that was
+# reformed in 1986. In the 1986 orthography, just basic Latin letters are
+# used.
+#
+# Some letters are not used. Apostrophe is used, but usage is comparable to
+# usage in English.
+#
+0041-005A
+0061-007A
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zh_cn.orth b/chromium/third_party/fontconfig/src/fc-lang/zh_cn.orth
new file mode 100644
index 00000000000..135c0ea9316
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zh_cn.orth
@@ -0,0 +1,6792 @@
+#
+# fontconfig/fc-lang/zh_cn.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese (simplified) (ZH-CN)
+#
+# Coverage computed from GB2312
+#
+0x02C7 # CARON (Mandarin Chinese third tone)
+0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+0x4E00 # <CJK>
+0x4E01 # <CJK>
+0x4E03 # <CJK>
+0x4E07 # <CJK>
+0x4E08 # <CJK>
+0x4E09 # <CJK>
+0x4E0A # <CJK>
+0x4E0B # <CJK>
+0x4E0C # <CJK>
+0x4E0D # <CJK>
+0x4E0E # <CJK>
+0x4E10 # <CJK>
+0x4E11 # <CJK>
+0x4E13 # <CJK>
+0x4E14 # <CJK>
+0x4E15 # <CJK>
+0x4E16 # <CJK>
+0x4E18 # <CJK>
+0x4E19 # <CJK>
+0x4E1A # <CJK>
+0x4E1B # <CJK>
+0x4E1C # <CJK>
+0x4E1D # <CJK>
+0x4E1E # <CJK>
+0x4E22 # <CJK>
+0x4E24 # <CJK>
+0x4E25 # <CJK>
+0x4E27 # <CJK>
+0x4E28 # <CJK>
+0x4E2A # <CJK>
+0x4E2B # <CJK>
+0x4E2C # <CJK>
+0x4E2D # <CJK>
+0x4E30 # <CJK>
+0x4E32 # <CJK>
+0x4E34 # <CJK>
+0x4E36 # <CJK>
+0x4E38 # <CJK>
+0x4E39 # <CJK>
+0x4E3A # <CJK>
+0x4E3B # <CJK>
+0x4E3D # <CJK>
+0x4E3E # <CJK>
+0x4E3F # <CJK>
+0x4E43 # <CJK>
+0x4E45 # <CJK>
+0x4E47 # <CJK>
+0x4E48 # <CJK>
+0x4E49 # <CJK>
+0x4E4B # <CJK>
+0x4E4C # <CJK>
+0x4E4D # <CJK>
+0x4E4E # <CJK>
+0x4E4F # <CJK>
+0x4E50 # <CJK>
+0x4E52 # <CJK>
+0x4E53 # <CJK>
+0x4E54 # <CJK>
+0x4E56 # <CJK>
+0x4E58 # <CJK>
+0x4E59 # <CJK>
+0x4E5C # <CJK>
+0x4E5D # <CJK>
+0x4E5E # <CJK>
+0x4E5F # <CJK>
+0x4E60 # <CJK>
+0x4E61 # <CJK>
+0x4E66 # <CJK>
+0x4E69 # <CJK>
+0x4E70 # <CJK>
+0x4E71 # <CJK>
+0x4E73 # <CJK>
+0x4E7E # <CJK>
+0x4E86 # <CJK>
+0x4E88 # <CJK>
+0x4E89 # <CJK>
+0x4E8B # <CJK>
+0x4E8C # <CJK>
+0x4E8D # <CJK>
+0x4E8E # <CJK>
+0x4E8F # <CJK>
+0x4E91 # <CJK>
+0x4E92 # <CJK>
+0x4E93 # <CJK>
+0x4E94 # <CJK>
+0x4E95 # <CJK>
+0x4E98 # <CJK>
+0x4E9A # <CJK>
+0x4E9B # <CJK>
+0x4E9F # <CJK>
+0x4EA0 # <CJK>
+0x4EA1 # <CJK>
+0x4EA2 # <CJK>
+0x4EA4 # <CJK>
+0x4EA5 # <CJK>
+0x4EA6 # <CJK>
+0x4EA7 # <CJK>
+0x4EA8 # <CJK>
+0x4EA9 # <CJK>
+0x4EAB # <CJK>
+0x4EAC # <CJK>
+0x4EAD # <CJK>
+0x4EAE # <CJK>
+0x4EB2 # <CJK>
+0x4EB3 # <CJK>
+0x4EB5 # <CJK>
+0x4EBA # <CJK>
+0x4EBB # <CJK>
+0x4EBF # <CJK>
+0x4EC0 # <CJK>
+0x4EC1 # <CJK>
+0x4EC2 # <CJK>
+0x4EC3 # <CJK>
+0x4EC4 # <CJK>
+0x4EC5 # <CJK>
+0x4EC6 # <CJK>
+0x4EC7 # <CJK>
+0x4EC9 # <CJK>
+0x4ECA # <CJK>
+0x4ECB # <CJK>
+0x4ECD # <CJK>
+0x4ECE # <CJK>
+0x4ED1 # <CJK>
+0x4ED3 # <CJK>
+0x4ED4 # <CJK>
+0x4ED5 # <CJK>
+0x4ED6 # <CJK>
+0x4ED7 # <CJK>
+0x4ED8 # <CJK>
+0x4ED9 # <CJK>
+0x4EDD # <CJK>
+0x4EDE # <CJK>
+0x4EDF # <CJK>
+0x4EE1 # <CJK>
+0x4EE3 # <CJK>
+0x4EE4 # <CJK>
+0x4EE5 # <CJK>
+0x4EE8 # <CJK>
+0x4EEA # <CJK>
+0x4EEB # <CJK>
+0x4EEC # <CJK>
+0x4EF0 # <CJK>
+0x4EF2 # <CJK>
+0x4EF3 # <CJK>
+0x4EF5 # <CJK>
+0x4EF6 # <CJK>
+0x4EF7 # <CJK>
+0x4EFB # <CJK>
+0x4EFD # <CJK>
+0x4EFF # <CJK>
+0x4F01 # <CJK>
+0x4F09 # <CJK>
+0x4F0A # <CJK>
+0x4F0D # <CJK>
+0x4F0E # <CJK>
+0x4F0F # <CJK>
+0x4F10 # <CJK>
+0x4F11 # <CJK>
+0x4F17 # <CJK>
+0x4F18 # <CJK>
+0x4F19 # <CJK>
+0x4F1A # <CJK>
+0x4F1B # <CJK>
+0x4F1E # <CJK>
+0x4F1F # <CJK>
+0x4F20 # <CJK>
+0x4F22 # <CJK>
+0x4F24 # <CJK>
+0x4F25 # <CJK>
+0x4F26 # <CJK>
+0x4F27 # <CJK>
+0x4F2A # <CJK>
+0x4F2B # <CJK>
+0x4F2F # <CJK>
+0x4F30 # <CJK>
+0x4F32 # <CJK>
+0x4F34 # <CJK>
+0x4F36 # <CJK>
+0x4F38 # <CJK>
+0x4F3A # <CJK>
+0x4F3C # <CJK>
+0x4F3D # <CJK>
+0x4F43 # <CJK>
+0x4F46 # <CJK>
+0x4F4D # <CJK>
+0x4F4E # <CJK>
+0x4F4F # <CJK>
+0x4F50 # <CJK>
+0x4F51 # <CJK>
+0x4F53 # <CJK>
+0x4F55 # <CJK>
+0x4F57 # <CJK>
+0x4F58 # <CJK>
+0x4F59 # <CJK>
+0x4F5A # <CJK>
+0x4F5B # <CJK>
+0x4F5C # <CJK>
+0x4F5D # <CJK>
+0x4F5E # <CJK>
+0x4F5F # <CJK>
+0x4F60 # <CJK>
+0x4F63 # <CJK>
+0x4F64 # <CJK>
+0x4F65 # <CJK>
+0x4F67 # <CJK>
+0x4F69 # <CJK>
+0x4F6C # <CJK>
+0x4F6F # <CJK>
+0x4F70 # <CJK>
+0x4F73 # <CJK>
+0x4F74 # <CJK>
+0x4F76 # <CJK>
+0x4F7B # <CJK>
+0x4F7C # <CJK>
+0x4F7E # <CJK>
+0x4F7F # <CJK>
+0x4F83 # <CJK>
+0x4F84 # <CJK>
+0x4F88 # <CJK>
+0x4F89 # <CJK>
+0x4F8B # <CJK>
+0x4F8D # <CJK>
+0x4F8F # <CJK>
+0x4F91 # <CJK>
+0x4F94 # <CJK>
+0x4F97 # <CJK>
+0x4F9B # <CJK>
+0x4F9D # <CJK>
+0x4FA0 # <CJK>
+0x4FA3 # <CJK>
+0x4FA5 # <CJK>
+0x4FA6 # <CJK>
+0x4FA7 # <CJK>
+0x4FA8 # <CJK>
+0x4FA9 # <CJK>
+0x4FAA # <CJK>
+0x4FAC # <CJK>
+0x4FAE # <CJK>
+0x4FAF # <CJK>
+0x4FB5 # <CJK>
+0x4FBF # <CJK>
+0x4FC3 # <CJK>
+0x4FC4 # <CJK>
+0x4FC5 # <CJK>
+0x4FCA # <CJK>
+0x4FCE # <CJK>
+0x4FCF # <CJK>
+0x4FD0 # <CJK>
+0x4FD1 # <CJK>
+0x4FD7 # <CJK>
+0x4FD8 # <CJK>
+0x4FDA # <CJK>
+0x4FDC # <CJK>
+0x4FDD # <CJK>
+0x4FDE # <CJK>
+0x4FDF # <CJK>
+0x4FE1 # <CJK>
+0x4FE3 # <CJK>
+0x4FE6 # <CJK>
+0x4FE8 # <CJK>
+0x4FE9 # <CJK>
+0x4FEA # <CJK>
+0x4FED # <CJK>
+0x4FEE # <CJK>
+0x4FEF # <CJK>
+0x4FF1 # <CJK>
+0x4FF3 # <CJK>
+0x4FF8 # <CJK>
+0x4FFA # <CJK>
+0x4FFE # <CJK>
+0x500C # <CJK>
+0x500D # <CJK>
+0x500F # <CJK>
+0x5012 # <CJK>
+0x5014 # <CJK>
+0x5018 # <CJK>
+0x5019 # <CJK>
+0x501A # <CJK>
+0x501C # <CJK>
+0x501F # <CJK>
+0x5021 # <CJK>
+0x5025 # <CJK>
+0x5026 # <CJK>
+0x5028 # <CJK>
+0x5029 # <CJK>
+0x502A # <CJK>
+0x502C # <CJK>
+0x502D # <CJK>
+0x502E # <CJK>
+0x503A # <CJK>
+0x503C # <CJK>
+0x503E # <CJK>
+0x5043 # <CJK>
+0x5047 # <CJK>
+0x5048 # <CJK>
+0x504C # <CJK>
+0x504E # <CJK>
+0x504F # <CJK>
+0x5055 # <CJK>
+0x505A # <CJK>
+0x505C # <CJK>
+0x5065 # <CJK>
+0x506C # <CJK>
+0x5076 # <CJK>
+0x5077 # <CJK>
+0x507B # <CJK>
+0x507E # <CJK>
+0x507F # <CJK>
+0x5080 # <CJK>
+0x5085 # <CJK>
+0x5088 # <CJK>
+0x508D # <CJK>
+0x50A3 # <CJK>
+0x50A5 # <CJK>
+0x50A7 # <CJK>
+0x50A8 # <CJK>
+0x50A9 # <CJK>
+0x50AC # <CJK>
+0x50B2 # <CJK>
+0x50BA # <CJK>
+0x50BB # <CJK>
+0x50CF # <CJK>
+0x50D6 # <CJK>
+0x50DA # <CJK>
+0x50E6 # <CJK>
+0x50E7 # <CJK>
+0x50EC # <CJK>
+0x50ED # <CJK>
+0x50EE # <CJK>
+0x50F3 # <CJK>
+0x50F5 # <CJK>
+0x50FB # <CJK>
+0x5106 # <CJK>
+0x5107 # <CJK>
+0x510B # <CJK>
+0x5112 # <CJK>
+0x5121 # <CJK>
+0x513F # <CJK>
+0x5140 # <CJK>
+0x5141 # <CJK>
+0x5143 # <CJK>
+0x5144 # <CJK>
+0x5145 # <CJK>
+0x5146 # <CJK>
+0x5148 # <CJK>
+0x5149 # <CJK>
+0x514B # <CJK>
+0x514D # <CJK>
+0x5151 # <CJK>
+0x5154 # <CJK>
+0x5155 # <CJK>
+0x5156 # <CJK>
+0x515A # <CJK>
+0x515C # <CJK>
+0x5162 # <CJK>
+0x5165 # <CJK>
+0x5168 # <CJK>
+0x516B # <CJK>
+0x516C # <CJK>
+0x516D # <CJK>
+0x516E # <CJK>
+0x5170 # <CJK>
+0x5171 # <CJK>
+0x5173 # <CJK>
+0x5174 # <CJK>
+0x5175 # <CJK>
+0x5176 # <CJK>
+0x5177 # <CJK>
+0x5178 # <CJK>
+0x5179 # <CJK>
+0x517B # <CJK>
+0x517C # <CJK>
+0x517D # <CJK>
+0x5180 # <CJK>
+0x5181 # <CJK>
+0x5182 # <CJK>
+0x5185 # <CJK>
+0x5188 # <CJK>
+0x5189 # <CJK>
+0x518C # <CJK>
+0x518D # <CJK>
+0x5192 # <CJK>
+0x5195 # <CJK>
+0x5196 # <CJK>
+0x5197 # <CJK>
+0x5199 # <CJK>
+0x519B # <CJK>
+0x519C # <CJK>
+0x51A0 # <CJK>
+0x51A2 # <CJK>
+0x51A4 # <CJK>
+0x51A5 # <CJK>
+0x51AB # <CJK>
+0x51AC # <CJK>
+0x51AF # <CJK>
+0x51B0 # <CJK>
+0x51B1 # <CJK>
+0x51B2 # <CJK>
+0x51B3 # <CJK>
+0x51B5 # <CJK>
+0x51B6 # <CJK>
+0x51B7 # <CJK>
+0x51BB # <CJK>
+0x51BC # <CJK>
+0x51BD # <CJK>
+0x51C0 # <CJK>
+0x51C4 # <CJK>
+0x51C6 # <CJK>
+0x51C7 # <CJK>
+0x51C9 # <CJK>
+0x51CB # <CJK>
+0x51CC # <CJK>
+0x51CF # <CJK>
+0x51D1 # <CJK>
+0x51DB # <CJK>
+0x51DD # <CJK>
+0x51E0 # <CJK>
+0x51E1 # <CJK>
+0x51E4 # <CJK>
+0x51EB # <CJK>
+0x51ED # <CJK>
+0x51EF # <CJK>
+0x51F0 # <CJK>
+0x51F3 # <CJK>
+0x51F5 # <CJK>
+0x51F6 # <CJK>
+0x51F8 # <CJK>
+0x51F9 # <CJK>
+0x51FA # <CJK>
+0x51FB # <CJK>
+0x51FC # <CJK>
+0x51FD # <CJK>
+0x51FF # <CJK>
+0x5200 # <CJK>
+0x5201 # <CJK>
+0x5202 # <CJK>
+0x5203 # <CJK>
+0x5206 # <CJK>
+0x5207 # <CJK>
+0x5208 # <CJK>
+0x520A # <CJK>
+0x520D # <CJK>
+0x520E # <CJK>
+0x5211 # <CJK>
+0x5212 # <CJK>
+0x5216 # <CJK>
+0x5217 # <CJK>
+0x5218 # <CJK>
+0x5219 # <CJK>
+0x521A # <CJK>
+0x521B # <CJK>
+0x521D # <CJK>
+0x5220 # <CJK>
+0x5224 # <CJK>
+0x5228 # <CJK>
+0x5229 # <CJK>
+0x522B # <CJK>
+0x522D # <CJK>
+0x522E # <CJK>
+0x5230 # <CJK>
+0x5233 # <CJK>
+0x5236 # <CJK>
+0x5237 # <CJK>
+0x5238 # <CJK>
+0x5239 # <CJK>
+0x523A # <CJK>
+0x523B # <CJK>
+0x523D # <CJK>
+0x523F # <CJK>
+0x5240 # <CJK>
+0x5241 # <CJK>
+0x5242 # <CJK>
+0x5243 # <CJK>
+0x524A # <CJK>
+0x524C # <CJK>
+0x524D # <CJK>
+0x5250 # <CJK>
+0x5251 # <CJK>
+0x5254 # <CJK>
+0x5256 # <CJK>
+0x525C # <CJK>
+0x525E # <CJK>
+0x5261 # <CJK>
+0x5265 # <CJK>
+0x5267 # <CJK>
+0x5269 # <CJK>
+0x526A # <CJK>
+0x526F # <CJK>
+0x5272 # <CJK>
+0x527D # <CJK>
+0x527F # <CJK>
+0x5281 # <CJK>
+0x5282 # <CJK>
+0x5288 # <CJK>
+0x5290 # <CJK>
+0x5293 # <CJK>
+0x529B # <CJK>
+0x529D # <CJK>
+0x529E # <CJK>
+0x529F # <CJK>
+0x52A0 # <CJK>
+0x52A1 # <CJK>
+0x52A2 # <CJK>
+0x52A3 # <CJK>
+0x52A8 # <CJK>
+0x52A9 # <CJK>
+0x52AA # <CJK>
+0x52AB # <CJK>
+0x52AC # <CJK>
+0x52AD # <CJK>
+0x52B1 # <CJK>
+0x52B2 # <CJK>
+0x52B3 # <CJK>
+0x52BE # <CJK>
+0x52BF # <CJK>
+0x52C3 # <CJK>
+0x52C7 # <CJK>
+0x52C9 # <CJK>
+0x52CB # <CJK>
+0x52D0 # <CJK>
+0x52D2 # <CJK>
+0x52D6 # <CJK>
+0x52D8 # <CJK>
+0x52DF # <CJK>
+0x52E4 # <CJK>
+0x52F0 # <CJK>
+0x52F9 # <CJK>
+0x52FA # <CJK>
+0x52FE # <CJK>
+0x52FF # <CJK>
+0x5300 # <CJK>
+0x5305 # <CJK>
+0x5306 # <CJK>
+0x5308 # <CJK>
+0x530D # <CJK>
+0x530F # <CJK>
+0x5310 # <CJK>
+0x5315 # <CJK>
+0x5316 # <CJK>
+0x5317 # <CJK>
+0x5319 # <CJK>
+0x531A # <CJK>
+0x531D # <CJK>
+0x5320 # <CJK>
+0x5321 # <CJK>
+0x5323 # <CJK>
+0x5326 # <CJK>
+0x532A # <CJK>
+0x532E # <CJK>
+0x5339 # <CJK>
+0x533A # <CJK>
+0x533B # <CJK>
+0x533E # <CJK>
+0x533F # <CJK>
+0x5341 # <CJK>
+0x5343 # <CJK>
+0x5345 # <CJK>
+0x5347 # <CJK>
+0x5348 # <CJK>
+0x5349 # <CJK>
+0x534A # <CJK>
+0x534E # <CJK>
+0x534F # <CJK>
+0x5351 # <CJK>
+0x5352 # <CJK>
+0x5353 # <CJK>
+0x5355 # <CJK>
+0x5356 # <CJK>
+0x5357 # <CJK>
+0x535A # <CJK>
+0x535C # <CJK>
+0x535E # <CJK>
+0x535F # <CJK>
+0x5360 # <CJK>
+0x5361 # <CJK>
+0x5362 # <CJK>
+0x5363 # <CJK>
+0x5364 # <CJK>
+0x5366 # <CJK>
+0x5367 # <CJK>
+0x5369 # <CJK>
+0x536B # <CJK>
+0x536E # <CJK>
+0x536F # <CJK>
+0x5370 # <CJK>
+0x5371 # <CJK>
+0x5373 # <CJK>
+0x5374 # <CJK>
+0x5375 # <CJK>
+0x5377 # <CJK>
+0x5378 # <CJK>
+0x537A # <CJK>
+0x537F # <CJK>
+0x5382 # <CJK>
+0x5384 # <CJK>
+0x5385 # <CJK>
+0x5386 # <CJK>
+0x5389 # <CJK>
+0x538B # <CJK>
+0x538C # <CJK>
+0x538D # <CJK>
+0x5395 # <CJK>
+0x5398 # <CJK>
+0x539A # <CJK>
+0x539D # <CJK>
+0x539F # <CJK>
+0x53A2 # <CJK>
+0x53A3 # <CJK>
+0x53A5 # <CJK>
+0x53A6 # <CJK>
+0x53A8 # <CJK>
+0x53A9 # <CJK>
+0x53AE # <CJK>
+0x53B6 # <CJK>
+0x53BB # <CJK>
+0x53BF # <CJK>
+0x53C1 # <CJK>
+0x53C2 # <CJK>
+0x53C8 # <CJK>
+0x53C9 # <CJK>
+0x53CA # <CJK>
+0x53CB # <CJK>
+0x53CC # <CJK>
+0x53CD # <CJK>
+0x53D1 # <CJK>
+0x53D4 # <CJK>
+0x53D6 # <CJK>
+0x53D7 # <CJK>
+0x53D8 # <CJK>
+0x53D9 # <CJK>
+0x53DB # <CJK>
+0x53DF # <CJK>
+0x53E0 # <CJK>
+0x53E3 # <CJK>
+0x53E4 # <CJK>
+0x53E5 # <CJK>
+0x53E6 # <CJK>
+0x53E8 # <CJK>
+0x53E9 # <CJK>
+0x53EA # <CJK>
+0x53EB # <CJK>
+0x53EC # <CJK>
+0x53ED # <CJK>
+0x53EE # <CJK>
+0x53EF # <CJK>
+0x53F0 # <CJK>
+0x53F1 # <CJK>
+0x53F2 # <CJK>
+0x53F3 # <CJK>
+0x53F5 # <CJK>
+0x53F6 # <CJK>
+0x53F7 # <CJK>
+0x53F8 # <CJK>
+0x53F9 # <CJK>
+0x53FB # <CJK>
+0x53FC # <CJK>
+0x53FD # <CJK>
+0x5401 # <CJK>
+0x5403 # <CJK>
+0x5404 # <CJK>
+0x5406 # <CJK>
+0x5408 # <CJK>
+0x5409 # <CJK>
+0x540A # <CJK>
+0x540C # <CJK>
+0x540D # <CJK>
+0x540E # <CJK>
+0x540F # <CJK>
+0x5410 # <CJK>
+0x5411 # <CJK>
+0x5412 # <CJK>
+0x5413 # <CJK>
+0x5415 # <CJK>
+0x5416 # <CJK>
+0x5417 # <CJK>
+0x541B # <CJK>
+0x541D # <CJK>
+0x541E # <CJK>
+0x541F # <CJK>
+0x5420 # <CJK>
+0x5421 # <CJK>
+0x5423 # <CJK>
+0x5426 # <CJK>
+0x5427 # <CJK>
+0x5428 # <CJK>
+0x5429 # <CJK>
+0x542B # <CJK>
+0x542C # <CJK>
+0x542D # <CJK>
+0x542E # <CJK>
+0x542F # <CJK>
+0x5431 # <CJK>
+0x5432 # <CJK>
+0x5434 # <CJK>
+0x5435 # <CJK>
+0x5438 # <CJK>
+0x5439 # <CJK>
+0x543B # <CJK>
+0x543C # <CJK>
+0x543E # <CJK>
+0x5440 # <CJK>
+0x5443 # <CJK>
+0x5446 # <CJK>
+0x5448 # <CJK>
+0x544A # <CJK>
+0x544B # <CJK>
+0x5450 # <CJK>
+0x5452 # <CJK>
+0x5453 # <CJK>
+0x5454 # <CJK>
+0x5455 # <CJK>
+0x5456 # <CJK>
+0x5457 # <CJK>
+0x5458 # <CJK>
+0x5459 # <CJK>
+0x545B # <CJK>
+0x545C # <CJK>
+0x5462 # <CJK>
+0x5464 # <CJK>
+0x5466 # <CJK>
+0x5468 # <CJK>
+0x5471 # <CJK>
+0x5472 # <CJK>
+0x5473 # <CJK>
+0x5475 # <CJK>
+0x5476 # <CJK>
+0x5477 # <CJK>
+0x5478 # <CJK>
+0x547B # <CJK>
+0x547C # <CJK>
+0x547D # <CJK>
+0x5480 # <CJK>
+0x5482 # <CJK>
+0x5484 # <CJK>
+0x5486 # <CJK>
+0x548B # <CJK>
+0x548C # <CJK>
+0x548E # <CJK>
+0x548F # <CJK>
+0x5490 # <CJK>
+0x5492 # <CJK>
+0x5494 # <CJK>
+0x5495 # <CJK>
+0x5496 # <CJK>
+0x5499 # <CJK>
+0x549A # <CJK>
+0x549B # <CJK>
+0x549D # <CJK>
+0x54A3 # <CJK>
+0x54A4 # <CJK>
+0x54A6 # <CJK>
+0x54A7 # <CJK>
+0x54A8 # <CJK>
+0x54A9 # <CJK>
+0x54AA # <CJK>
+0x54AB # <CJK>
+0x54AC # <CJK>
+0x54AD # <CJK>
+0x54AF # <CJK>
+0x54B1 # <CJK>
+0x54B3 # <CJK>
+0x54B4 # <CJK>
+0x54B8 # <CJK>
+0x54BB # <CJK>
+0x54BD # <CJK>
+0x54BF # <CJK>
+0x54C0 # <CJK>
+0x54C1 # <CJK>
+0x54C2 # <CJK>
+0x54C4 # <CJK>
+0x54C6 # <CJK>
+0x54C7 # <CJK>
+0x54C8 # <CJK>
+0x54C9 # <CJK>
+0x54CC # <CJK>
+0x54CD # <CJK>
+0x54CE # <CJK>
+0x54CF # <CJK>
+0x54D0 # <CJK>
+0x54D1 # <CJK>
+0x54D2 # <CJK>
+0x54D3 # <CJK>
+0x54D4 # <CJK>
+0x54D5 # <CJK>
+0x54D7 # <CJK>
+0x54D9 # <CJK>
+0x54DA # <CJK>
+0x54DC # <CJK>
+0x54DD # <CJK>
+0x54DE # <CJK>
+0x54DF # <CJK>
+0x54E5 # <CJK>
+0x54E6 # <CJK>
+0x54E7 # <CJK>
+0x54E8 # <CJK>
+0x54E9 # <CJK>
+0x54EA # <CJK>
+0x54ED # <CJK>
+0x54EE # <CJK>
+0x54F2 # <CJK>
+0x54F3 # <CJK>
+0x54FA # <CJK>
+0x54FC # <CJK>
+0x54FD # <CJK>
+0x54FF # <CJK>
+0x5501 # <CJK>
+0x5506 # <CJK>
+0x5507 # <CJK>
+0x5509 # <CJK>
+0x550F # <CJK>
+0x5510 # <CJK>
+0x5511 # <CJK>
+0x5514 # <CJK>
+0x551B # <CJK>
+0x5520 # <CJK>
+0x5522 # <CJK>
+0x5523 # <CJK>
+0x5524 # <CJK>
+0x5527 # <CJK>
+0x552A # <CJK>
+0x552C # <CJK>
+0x552E # <CJK>
+0x552F # <CJK>
+0x5530 # <CJK>
+0x5531 # <CJK>
+0x5533 # <CJK>
+0x5537 # <CJK>
+0x553C # <CJK>
+0x553E # <CJK>
+0x553F # <CJK>
+0x5541 # <CJK>
+0x5543 # <CJK>
+0x5544 # <CJK>
+0x5546 # <CJK>
+0x5549 # <CJK>
+0x554A # <CJK>
+0x5550 # <CJK>
+0x5555 # <CJK>
+0x5556 # <CJK>
+0x555C # <CJK>
+0x5561 # <CJK>
+0x5564 # <CJK>
+0x5565 # <CJK>
+0x5566 # <CJK>
+0x5567 # <CJK>
+0x556A # <CJK>
+0x556C # <CJK>
+0x556D # <CJK>
+0x556E # <CJK>
+0x5575 # <CJK>
+0x5576 # <CJK>
+0x5577 # <CJK>
+0x5578 # <CJK>
+0x557B # <CJK>
+0x557C # <CJK>
+0x557E # <CJK>
+0x5580 # <CJK>
+0x5581 # <CJK>
+0x5582 # <CJK>
+0x5583 # <CJK>
+0x5584 # <CJK>
+0x5587 # <CJK>
+0x5588 # <CJK>
+0x5589 # <CJK>
+0x558A # <CJK>
+0x558B # <CJK>
+0x558F # <CJK>
+0x5591 # <CJK>
+0x5594 # <CJK>
+0x5598 # <CJK>
+0x5599 # <CJK>
+0x559C # <CJK>
+0x559D # <CJK>
+0x559F # <CJK>
+0x55A7 # <CJK>
+0x55B1 # <CJK>
+0x55B3 # <CJK>
+0x55B5 # <CJK>
+0x55B7 # <CJK>
+0x55B9 # <CJK>
+0x55BB # <CJK>
+0x55BD # <CJK>
+0x55BE # <CJK>
+0x55C4 # <CJK>
+0x55C5 # <CJK>
+0x55C9 # <CJK>
+0x55CC # <CJK>
+0x55CD # <CJK>
+0x55D1 # <CJK>
+0x55D2 # <CJK>
+0x55D3 # <CJK>
+0x55D4 # <CJK>
+0x55D6 # <CJK>
+0x55DC # <CJK>
+0x55DD # <CJK>
+0x55DF # <CJK>
+0x55E1 # <CJK>
+0x55E3 # <CJK>
+0x55E4 # <CJK>
+0x55E5 # <CJK>
+0x55E6 # <CJK>
+0x55E8 # <CJK>
+0x55EA # <CJK>
+0x55EB # <CJK>
+0x55EC # <CJK>
+0x55EF # <CJK>
+0x55F2 # <CJK>
+0x55F3 # <CJK>
+0x55F5 # <CJK>
+0x55F7 # <CJK>
+0x55FD # <CJK>
+0x55FE # <CJK>
+0x5600 # <CJK>
+0x5601 # <CJK>
+0x5608 # <CJK>
+0x5609 # <CJK>
+0x560C # <CJK>
+0x560E # <CJK>
+0x560F # <CJK>
+0x5618 # <CJK>
+0x561B # <CJK>
+0x561E # <CJK>
+0x561F # <CJK>
+0x5623 # <CJK>
+0x5624 # <CJK>
+0x5627 # <CJK>
+0x562C # <CJK>
+0x562D # <CJK>
+0x5631 # <CJK>
+0x5632 # <CJK>
+0x5634 # <CJK>
+0x5636 # <CJK>
+0x5639 # <CJK>
+0x563B # <CJK>
+0x563F # <CJK>
+0x564C # <CJK>
+0x564D # <CJK>
+0x564E # <CJK>
+0x5654 # <CJK>
+0x5657 # <CJK>
+0x5658 # <CJK>
+0x5659 # <CJK>
+0x565C # <CJK>
+0x5662 # <CJK>
+0x5664 # <CJK>
+0x5668 # <CJK>
+0x5669 # <CJK>
+0x566A # <CJK>
+0x566B # <CJK>
+0x566C # <CJK>
+0x5671 # <CJK>
+0x5676 # <CJK>
+0x567B # <CJK>
+0x567C # <CJK>
+0x5685 # <CJK>
+0x5686 # <CJK>
+0x568E # <CJK>
+0x568F # <CJK>
+0x5693 # <CJK>
+0x56A3 # <CJK>
+0x56AF # <CJK>
+0x56B7 # <CJK>
+0x56BC # <CJK>
+0x56CA # <CJK>
+0x56D4 # <CJK>
+0x56D7 # <CJK>
+0x56DA # <CJK>
+0x56DB # <CJK>
+0x56DD # <CJK>
+0x56DE # <CJK>
+0x56DF # <CJK>
+0x56E0 # <CJK>
+0x56E1 # <CJK>
+0x56E2 # <CJK>
+0x56E4 # <CJK>
+0x56EB # <CJK>
+0x56ED # <CJK>
+0x56F0 # <CJK>
+0x56F1 # <CJK>
+0x56F4 # <CJK>
+0x56F5 # <CJK>
+0x56F9 # <CJK>
+0x56FA # <CJK>
+0x56FD # <CJK>
+0x56FE # <CJK>
+0x56FF # <CJK>
+0x5703 # <CJK>
+0x5704 # <CJK>
+0x5706 # <CJK>
+0x5708 # <CJK>
+0x5709 # <CJK>
+0x570A # <CJK>
+0x571C # <CJK>
+0x571F # <CJK>
+0x5723 # <CJK>
+0x5728 # <CJK>
+0x5729 # <CJK>
+0x572A # <CJK>
+0x572C # <CJK>
+0x572D # <CJK>
+0x572E # <CJK>
+0x572F # <CJK>
+0x5730 # <CJK>
+0x5733 # <CJK>
+0x5739 # <CJK>
+0x573A # <CJK>
+0x573B # <CJK>
+0x573E # <CJK>
+0x5740 # <CJK>
+0x5742 # <CJK>
+0x5747 # <CJK>
+0x574A # <CJK>
+0x574C # <CJK>
+0x574D # <CJK>
+0x574E # <CJK>
+0x574F # <CJK>
+0x5750 # <CJK>
+0x5751 # <CJK>
+0x5757 # <CJK>
+0x575A # <CJK>
+0x575B # <CJK>
+0x575C # <CJK>
+0x575D # <CJK>
+0x575E # <CJK>
+0x575F # <CJK>
+0x5760 # <CJK>
+0x5761 # <CJK>
+0x5764 # <CJK>
+0x5766 # <CJK>
+0x5768 # <CJK>
+0x5769 # <CJK>
+0x576A # <CJK>
+0x576B # <CJK>
+0x576D # <CJK>
+0x576F # <CJK>
+0x5773 # <CJK>
+0x5776 # <CJK>
+0x5777 # <CJK>
+0x577B # <CJK>
+0x577C # <CJK>
+0x5782 # <CJK>
+0x5783 # <CJK>
+0x5784 # <CJK>
+0x5785 # <CJK>
+0x5786 # <CJK>
+0x578B # <CJK>
+0x578C # <CJK>
+0x5792 # <CJK>
+0x5793 # <CJK>
+0x579B # <CJK>
+0x57A0 # <CJK>
+0x57A1 # <CJK>
+0x57A2 # <CJK>
+0x57A3 # <CJK>
+0x57A4 # <CJK>
+0x57A6 # <CJK>
+0x57A7 # <CJK>
+0x57A9 # <CJK>
+0x57AB # <CJK>
+0x57AD # <CJK>
+0x57AE # <CJK>
+0x57B2 # <CJK>
+0x57B4 # <CJK>
+0x57B8 # <CJK>
+0x57C2 # <CJK>
+0x57C3 # <CJK>
+0x57CB # <CJK>
+0x57CE # <CJK>
+0x57CF # <CJK>
+0x57D2 # <CJK>
+0x57D4 # <CJK>
+0x57D5 # <CJK>
+0x57D8 # <CJK>
+0x57D9 # <CJK>
+0x57DA # <CJK>
+0x57DD # <CJK>
+0x57DF # <CJK>
+0x57E0 # <CJK>
+0x57E4 # <CJK>
+0x57ED # <CJK>
+0x57EF # <CJK>
+0x57F4 # <CJK>
+0x57F8 # <CJK>
+0x57F9 # <CJK>
+0x57FA # <CJK>
+0x57FD # <CJK>
+0x5800 # <CJK>
+0x5802 # <CJK>
+0x5806 # <CJK>
+0x5807 # <CJK>
+0x580B # <CJK>
+0x580D # <CJK>
+0x5811 # <CJK>
+0x5815 # <CJK>
+0x5819 # <CJK>
+0x581E # <CJK>
+0x5820 # <CJK>
+0x5821 # <CJK>
+0x5824 # <CJK>
+0x582A # <CJK>
+0x5830 # <CJK>
+0x5835 # <CJK>
+0x5844 # <CJK>
+0x584C # <CJK>
+0x584D # <CJK>
+0x5851 # <CJK>
+0x5854 # <CJK>
+0x5858 # <CJK>
+0x585E # <CJK>
+0x5865 # <CJK>
+0x586B # <CJK>
+0x586C # <CJK>
+0x587E # <CJK>
+0x5880 # <CJK>
+0x5881 # <CJK>
+0x5883 # <CJK>
+0x5885 # <CJK>
+0x5889 # <CJK>
+0x5892 # <CJK>
+0x5893 # <CJK>
+0x5899 # <CJK>
+0x589A # <CJK>
+0x589E # <CJK>
+0x589F # <CJK>
+0x58A8 # <CJK>
+0x58A9 # <CJK>
+0x58BC # <CJK>
+0x58C1 # <CJK>
+0x58C5 # <CJK>
+0x58D1 # <CJK>
+0x58D5 # <CJK>
+0x58E4 # <CJK>
+0x58EB # <CJK>
+0x58EC # <CJK>
+0x58EE # <CJK>
+0x58F0 # <CJK>
+0x58F3 # <CJK>
+0x58F6 # <CJK>
+0x58F9 # <CJK>
+0x5902 # <CJK>
+0x5904 # <CJK>
+0x5907 # <CJK>
+0x590D # <CJK>
+0x590F # <CJK>
+0x5914 # <CJK>
+0x5915 # <CJK>
+0x5916 # <CJK>
+0x5919 # <CJK>
+0x591A # <CJK>
+0x591C # <CJK>
+0x591F # <CJK>
+0x5924 # <CJK>
+0x5925 # <CJK>
+0x5927 # <CJK>
+0x5929 # <CJK>
+0x592A # <CJK>
+0x592B # <CJK>
+0x592D # <CJK>
+0x592E # <CJK>
+0x592F # <CJK>
+0x5931 # <CJK>
+0x5934 # <CJK>
+0x5937 # <CJK>
+0x5938 # <CJK>
+0x5939 # <CJK>
+0x593A # <CJK>
+0x593C # <CJK>
+0x5941 # <CJK>
+0x5942 # <CJK>
+0x5944 # <CJK>
+0x5947 # <CJK>
+0x5948 # <CJK>
+0x5949 # <CJK>
+0x594B # <CJK>
+0x594E # <CJK>
+0x594F # <CJK>
+0x5951 # <CJK>
+0x5954 # <CJK>
+0x5955 # <CJK>
+0x5956 # <CJK>
+0x5957 # <CJK>
+0x5958 # <CJK>
+0x595A # <CJK>
+0x5960 # <CJK>
+0x5962 # <CJK>
+0x5965 # <CJK>
+0x5973 # <CJK>
+0x5974 # <CJK>
+0x5976 # <CJK>
+0x5978 # <CJK>
+0x5979 # <CJK>
+0x597D # <CJK>
+0x5981 # <CJK>
+0x5982 # <CJK>
+0x5983 # <CJK>
+0x5984 # <CJK>
+0x5986 # <CJK>
+0x5987 # <CJK>
+0x5988 # <CJK>
+0x598A # <CJK>
+0x598D # <CJK>
+0x5992 # <CJK>
+0x5993 # <CJK>
+0x5996 # <CJK>
+0x5997 # <CJK>
+0x5999 # <CJK>
+0x599E # <CJK>
+0x59A3 # <CJK>
+0x59A4 # <CJK>
+0x59A5 # <CJK>
+0x59A8 # <CJK>
+0x59A9 # <CJK>
+0x59AA # <CJK>
+0x59AB # <CJK>
+0x59AE # <CJK>
+0x59AF # <CJK>
+0x59B2 # <CJK>
+0x59B9 # <CJK>
+0x59BB # <CJK>
+0x59BE # <CJK>
+0x59C6 # <CJK>
+0x59CA # <CJK>
+0x59CB # <CJK>
+0x59D0 # <CJK>
+0x59D1 # <CJK>
+0x59D2 # <CJK>
+0x59D3 # <CJK>
+0x59D4 # <CJK>
+0x59D7 # <CJK>
+0x59D8 # <CJK>
+0x59DA # <CJK>
+0x59DC # <CJK>
+0x59DD # <CJK>
+0x59E3 # <CJK>
+0x59E5 # <CJK>
+0x59E8 # <CJK>
+0x59EC # <CJK>
+0x59F9 # <CJK>
+0x59FB # <CJK>
+0x59FF # <CJK>
+0x5A01 # <CJK>
+0x5A03 # <CJK>
+0x5A04 # <CJK>
+0x5A05 # <CJK>
+0x5A06 # <CJK>
+0x5A07 # <CJK>
+0x5A08 # <CJK>
+0x5A09 # <CJK>
+0x5A0C # <CJK>
+0x5A11 # <CJK>
+0x5A13 # <CJK>
+0x5A18 # <CJK>
+0x5A1C # <CJK>
+0x5A1F # <CJK>
+0x5A20 # <CJK>
+0x5A23 # <CJK>
+0x5A25 # <CJK>
+0x5A29 # <CJK>
+0x5A31 # <CJK>
+0x5A32 # <CJK>
+0x5A34 # <CJK>
+0x5A36 # <CJK>
+0x5A3C # <CJK>
+0x5A40 # <CJK>
+0x5A46 # <CJK>
+0x5A49 # <CJK>
+0x5A4A # <CJK>
+0x5A55 # <CJK>
+0x5A5A # <CJK>
+0x5A62 # <CJK>
+0x5A67 # <CJK>
+0x5A6A # <CJK>
+0x5A74 # <CJK>
+0x5A75 # <CJK>
+0x5A76 # <CJK>
+0x5A77 # <CJK>
+0x5A7A # <CJK>
+0x5A7F # <CJK>
+0x5A92 # <CJK>
+0x5A9A # <CJK>
+0x5A9B # <CJK>
+0x5AAA # <CJK>
+0x5AB2 # <CJK>
+0x5AB3 # <CJK>
+0x5AB5 # <CJK>
+0x5AB8 # <CJK>
+0x5ABE # <CJK>
+0x5AC1 # <CJK>
+0x5AC2 # <CJK>
+0x5AC9 # <CJK>
+0x5ACC # <CJK>
+0x5AD2 # <CJK>
+0x5AD4 # <CJK>
+0x5AD6 # <CJK>
+0x5AD8 # <CJK>
+0x5ADC # <CJK>
+0x5AE0 # <CJK>
+0x5AE1 # <CJK>
+0x5AE3 # <CJK>
+0x5AE6 # <CJK>
+0x5AE9 # <CJK>
+0x5AEB # <CJK>
+0x5AF1 # <CJK>
+0x5B09 # <CJK>
+0x5B16 # <CJK>
+0x5B17 # <CJK>
+0x5B32 # <CJK>
+0x5B34 # <CJK>
+0x5B37 # <CJK>
+0x5B40 # <CJK>
+0x5B50 # <CJK>
+0x5B51 # <CJK>
+0x5B53 # <CJK>
+0x5B54 # <CJK>
+0x5B55 # <CJK>
+0x5B57 # <CJK>
+0x5B58 # <CJK>
+0x5B59 # <CJK>
+0x5B5A # <CJK>
+0x5B5B # <CJK>
+0x5B5C # <CJK>
+0x5B5D # <CJK>
+0x5B5F # <CJK>
+0x5B62 # <CJK>
+0x5B63 # <CJK>
+0x5B64 # <CJK>
+0x5B65 # <CJK>
+0x5B66 # <CJK>
+0x5B69 # <CJK>
+0x5B6A # <CJK>
+0x5B6C # <CJK>
+0x5B70 # <CJK>
+0x5B71 # <CJK>
+0x5B73 # <CJK>
+0x5B75 # <CJK>
+0x5B7A # <CJK>
+0x5B7D # <CJK>
+0x5B80 # <CJK>
+0x5B81 # <CJK>
+0x5B83 # <CJK>
+0x5B84 # <CJK>
+0x5B85 # <CJK>
+0x5B87 # <CJK>
+0x5B88 # <CJK>
+0x5B89 # <CJK>
+0x5B8B # <CJK>
+0x5B8C # <CJK>
+0x5B8F # <CJK>
+0x5B93 # <CJK>
+0x5B95 # <CJK>
+0x5B97 # <CJK>
+0x5B98 # <CJK>
+0x5B99 # <CJK>
+0x5B9A # <CJK>
+0x5B9B # <CJK>
+0x5B9C # <CJK>
+0x5B9D # <CJK>
+0x5B9E # <CJK>
+0x5BA0 # <CJK>
+0x5BA1 # <CJK>
+0x5BA2 # <CJK>
+0x5BA3 # <CJK>
+0x5BA4 # <CJK>
+0x5BA5 # <CJK>
+0x5BA6 # <CJK>
+0x5BAA # <CJK>
+0x5BAB # <CJK>
+0x5BB0 # <CJK>
+0x5BB3 # <CJK>
+0x5BB4 # <CJK>
+0x5BB5 # <CJK>
+0x5BB6 # <CJK>
+0x5BB8 # <CJK>
+0x5BB9 # <CJK>
+0x5BBD # <CJK>
+0x5BBE # <CJK>
+0x5BBF # <CJK>
+0x5BC2 # <CJK>
+0x5BC4 # <CJK>
+0x5BC5 # <CJK>
+0x5BC6 # <CJK>
+0x5BC7 # <CJK>
+0x5BCC # <CJK>
+0x5BD0 # <CJK>
+0x5BD2 # <CJK>
+0x5BD3 # <CJK>
+0x5BDD # <CJK>
+0x5BDE # <CJK>
+0x5BDF # <CJK>
+0x5BE1 # <CJK>
+0x5BE4 # <CJK>
+0x5BE5 # <CJK>
+0x5BE8 # <CJK>
+0x5BEE # <CJK>
+0x5BF0 # <CJK>
+0x5BF8 # <CJK>
+0x5BF9 # <CJK>
+0x5BFA # <CJK>
+0x5BFB # <CJK>
+0x5BFC # <CJK>
+0x5BFF # <CJK>
+0x5C01 # <CJK>
+0x5C04 # <CJK>
+0x5C06 # <CJK>
+0x5C09 # <CJK>
+0x5C0A # <CJK>
+0x5C0F # <CJK>
+0x5C11 # <CJK>
+0x5C14 # <CJK>
+0x5C15 # <CJK>
+0x5C16 # <CJK>
+0x5C18 # <CJK>
+0x5C1A # <CJK>
+0x5C1C # <CJK>
+0x5C1D # <CJK>
+0x5C22 # <CJK>
+0x5C24 # <CJK>
+0x5C25 # <CJK>
+0x5C27 # <CJK>
+0x5C2C # <CJK>
+0x5C31 # <CJK>
+0x5C34 # <CJK>
+0x5C38 # <CJK>
+0x5C39 # <CJK>
+0x5C3A # <CJK>
+0x5C3B # <CJK>
+0x5C3C # <CJK>
+0x5C3D # <CJK>
+0x5C3E # <CJK>
+0x5C3F # <CJK>
+0x5C40 # <CJK>
+0x5C41 # <CJK>
+0x5C42 # <CJK>
+0x5C45 # <CJK>
+0x5C48 # <CJK>
+0x5C49 # <CJK>
+0x5C4A # <CJK>
+0x5C4B # <CJK>
+0x5C4E # <CJK>
+0x5C4F # <CJK>
+0x5C50 # <CJK>
+0x5C51 # <CJK>
+0x5C55 # <CJK>
+0x5C59 # <CJK>
+0x5C5E # <CJK>
+0x5C60 # <CJK>
+0x5C61 # <CJK>
+0x5C63 # <CJK>
+0x5C65 # <CJK>
+0x5C66 # <CJK>
+0x5C6E # <CJK>
+0x5C6F # <CJK>
+0x5C71 # <CJK>
+0x5C79 # <CJK>
+0x5C7A # <CJK>
+0x5C7F # <CJK>
+0x5C81 # <CJK>
+0x5C82 # <CJK>
+0x5C88 # <CJK>
+0x5C8C # <CJK>
+0x5C8D # <CJK>
+0x5C90 # <CJK>
+0x5C91 # <CJK>
+0x5C94 # <CJK>
+0x5C96 # <CJK>
+0x5C97 # <CJK>
+0x5C98 # <CJK>
+0x5C99 # <CJK>
+0x5C9A # <CJK>
+0x5C9B # <CJK>
+0x5C9C # <CJK>
+0x5CA2 # <CJK>
+0x5CA3 # <CJK>
+0x5CA9 # <CJK>
+0x5CAB # <CJK>
+0x5CAC # <CJK>
+0x5CAD # <CJK>
+0x5CB1 # <CJK>
+0x5CB3 # <CJK>
+0x5CB5 # <CJK>
+0x5CB7 # <CJK>
+0x5CB8 # <CJK>
+0x5CBD # <CJK>
+0x5CBF # <CJK>
+0x5CC1 # <CJK>
+0x5CC4 # <CJK>
+0x5CCB # <CJK>
+0x5CD2 # <CJK>
+0x5CD9 # <CJK>
+0x5CE1 # <CJK>
+0x5CE4 # <CJK>
+0x5CE5 # <CJK>
+0x5CE6 # <CJK>
+0x5CE8 # <CJK>
+0x5CEA # <CJK>
+0x5CED # <CJK>
+0x5CF0 # <CJK>
+0x5CFB # <CJK>
+0x5D02 # <CJK>
+0x5D03 # <CJK>
+0x5D06 # <CJK>
+0x5D07 # <CJK>
+0x5D0E # <CJK>
+0x5D14 # <CJK>
+0x5D16 # <CJK>
+0x5D1B # <CJK>
+0x5D1E # <CJK>
+0x5D24 # <CJK>
+0x5D26 # <CJK>
+0x5D27 # <CJK>
+0x5D29 # <CJK>
+0x5D2D # <CJK>
+0x5D2E # <CJK>
+0x5D34 # <CJK>
+0x5D3D # <CJK>
+0x5D3E # <CJK>
+0x5D47 # <CJK>
+0x5D4A # <CJK>
+0x5D4B # <CJK>
+0x5D4C # <CJK>
+0x5D58 # <CJK>
+0x5D5B # <CJK>
+0x5D5D # <CJK>
+0x5D69 # <CJK>
+0x5D6B # <CJK>
+0x5D6C # <CJK>
+0x5D6F # <CJK>
+0x5D74 # <CJK>
+0x5D82 # <CJK>
+0x5D99 # <CJK>
+0x5D9D # <CJK>
+0x5DB7 # <CJK>
+0x5DC5 # <CJK>
+0x5DCD # <CJK>
+0x5DDB # <CJK>
+0x5DDD # <CJK>
+0x5DDE # <CJK>
+0x5DE1 # <CJK>
+0x5DE2 # <CJK>
+0x5DE5 # <CJK>
+0x5DE6 # <CJK>
+0x5DE7 # <CJK>
+0x5DE8 # <CJK>
+0x5DE9 # <CJK>
+0x5DEB # <CJK>
+0x5DEE # <CJK>
+0x5DEF # <CJK>
+0x5DF1 # <CJK>
+0x5DF2 # <CJK>
+0x5DF3 # <CJK>
+0x5DF4 # <CJK>
+0x5DF7 # <CJK>
+0x5DFD # <CJK>
+0x5DFE # <CJK>
+0x5E01 # <CJK>
+0x5E02 # <CJK>
+0x5E03 # <CJK>
+0x5E05 # <CJK>
+0x5E06 # <CJK>
+0x5E08 # <CJK>
+0x5E0C # <CJK>
+0x5E0F # <CJK>
+0x5E10 # <CJK>
+0x5E11 # <CJK>
+0x5E14 # <CJK>
+0x5E15 # <CJK>
+0x5E16 # <CJK>
+0x5E18 # <CJK>
+0x5E19 # <CJK>
+0x5E1A # <CJK>
+0x5E1B # <CJK>
+0x5E1C # <CJK>
+0x5E1D # <CJK>
+0x5E26 # <CJK>
+0x5E27 # <CJK>
+0x5E2D # <CJK>
+0x5E2E # <CJK>
+0x5E31 # <CJK>
+0x5E37 # <CJK>
+0x5E38 # <CJK>
+0x5E3B # <CJK>
+0x5E3C # <CJK>
+0x5E3D # <CJK>
+0x5E42 # <CJK>
+0x5E44 # <CJK>
+0x5E45 # <CJK>
+0x5E4C # <CJK>
+0x5E54 # <CJK>
+0x5E55 # <CJK>
+0x5E5B # <CJK>
+0x5E5E # <CJK>
+0x5E61 # <CJK>
+0x5E62 # <CJK>
+0x5E72 # <CJK>
+0x5E73 # <CJK>
+0x5E74 # <CJK>
+0x5E76 # <CJK>
+0x5E78 # <CJK>
+0x5E7A # <CJK>
+0x5E7B # <CJK>
+0x5E7C # <CJK>
+0x5E7D # <CJK>
+0x5E7F # <CJK>
+0x5E80 # <CJK>
+0x5E84 # <CJK>
+0x5E86 # <CJK>
+0x5E87 # <CJK>
+0x5E8A # <CJK>
+0x5E8B # <CJK>
+0x5E8F # <CJK>
+0x5E90 # <CJK>
+0x5E91 # <CJK>
+0x5E93 # <CJK>
+0x5E94 # <CJK>
+0x5E95 # <CJK>
+0x5E96 # <CJK>
+0x5E97 # <CJK>
+0x5E99 # <CJK>
+0x5E9A # <CJK>
+0x5E9C # <CJK>
+0x5E9E # <CJK>
+0x5E9F # <CJK>
+0x5EA0 # <CJK>
+0x5EA5 # <CJK>
+0x5EA6 # <CJK>
+0x5EA7 # <CJK>
+0x5EAD # <CJK>
+0x5EB3 # <CJK>
+0x5EB5 # <CJK>
+0x5EB6 # <CJK>
+0x5EB7 # <CJK>
+0x5EB8 # <CJK>
+0x5EB9 # <CJK>
+0x5EBE # <CJK>
+0x5EC9 # <CJK>
+0x5ECA # <CJK>
+0x5ED1 # <CJK>
+0x5ED2 # <CJK>
+0x5ED3 # <CJK>
+0x5ED6 # <CJK>
+0x5EDB # <CJK>
+0x5EE8 # <CJK>
+0x5EEA # <CJK>
+0x5EF4 # <CJK>
+0x5EF6 # <CJK>
+0x5EF7 # <CJK>
+0x5EFA # <CJK>
+0x5EFE # <CJK>
+0x5EFF # <CJK>
+0x5F00 # <CJK>
+0x5F01 # <CJK>
+0x5F02 # <CJK>
+0x5F03 # <CJK>
+0x5F04 # <CJK>
+0x5F08 # <CJK>
+0x5F0A # <CJK>
+0x5F0B # <CJK>
+0x5F0F # <CJK>
+0x5F11 # <CJK>
+0x5F13 # <CJK>
+0x5F15 # <CJK>
+0x5F17 # <CJK>
+0x5F18 # <CJK>
+0x5F1B # <CJK>
+0x5F1F # <CJK>
+0x5F20 # <CJK>
+0x5F25 # <CJK>
+0x5F26 # <CJK>
+0x5F27 # <CJK>
+0x5F29 # <CJK>
+0x5F2A # <CJK>
+0x5F2D # <CJK>
+0x5F2F # <CJK>
+0x5F31 # <CJK>
+0x5F39 # <CJK>
+0x5F3A # <CJK>
+0x5F3C # <CJK>
+0x5F40 # <CJK>
+0x5F50 # <CJK>
+0x5F52 # <CJK>
+0x5F53 # <CJK>
+0x5F55 # <CJK>
+0x5F56 # <CJK>
+0x5F57 # <CJK>
+0x5F58 # <CJK>
+0x5F5D # <CJK>
+0x5F61 # <CJK>
+0x5F62 # <CJK>
+0x5F64 # <CJK>
+0x5F66 # <CJK>
+0x5F69 # <CJK>
+0x5F6A # <CJK>
+0x5F6C # <CJK>
+0x5F6D # <CJK>
+0x5F70 # <CJK>
+0x5F71 # <CJK>
+0x5F73 # <CJK>
+0x5F77 # <CJK>
+0x5F79 # <CJK>
+0x5F7B # <CJK>
+0x5F7C # <CJK>
+0x5F80 # <CJK>
+0x5F81 # <CJK>
+0x5F82 # <CJK>
+0x5F84 # <CJK>
+0x5F85 # <CJK>
+0x5F87 # <CJK>
+0x5F88 # <CJK>
+0x5F89 # <CJK>
+0x5F8A # <CJK>
+0x5F8B # <CJK>
+0x5F8C # <CJK>
+0x5F90 # <CJK>
+0x5F92 # <CJK>
+0x5F95 # <CJK>
+0x5F97 # <CJK>
+0x5F98 # <CJK>
+0x5F99 # <CJK>
+0x5F9C # <CJK>
+0x5FA1 # <CJK>
+0x5FA8 # <CJK>
+0x5FAA # <CJK>
+0x5FAD # <CJK>
+0x5FAE # <CJK>
+0x5FB5 # <CJK>
+0x5FB7 # <CJK>
+0x5FBC # <CJK>
+0x5FBD # <CJK>
+0x5FC3 # <CJK>
+0x5FC4 # <CJK>
+0x5FC5 # <CJK>
+0x5FC6 # <CJK>
+0x5FC9 # <CJK>
+0x5FCC # <CJK>
+0x5FCD # <CJK>
+0x5FCF # <CJK>
+0x5FD0 # <CJK>
+0x5FD1 # <CJK>
+0x5FD2 # <CJK>
+0x5FD6 # <CJK>
+0x5FD7 # <CJK>
+0x5FD8 # <CJK>
+0x5FD9 # <CJK>
+0x5FDD # <CJK>
+0x5FE0 # <CJK>
+0x5FE1 # <CJK>
+0x5FE4 # <CJK>
+0x5FE7 # <CJK>
+0x5FEA # <CJK>
+0x5FEB # <CJK>
+0x5FED # <CJK>
+0x5FEE # <CJK>
+0x5FF1 # <CJK>
+0x5FF5 # <CJK>
+0x5FF8 # <CJK>
+0x5FFB # <CJK>
+0x5FFD # <CJK>
+0x5FFE # <CJK>
+0x5FFF # <CJK>
+0x6000 # <CJK>
+0x6001 # <CJK>
+0x6002 # <CJK>
+0x6003 # <CJK>
+0x6004 # <CJK>
+0x6005 # <CJK>
+0x6006 # <CJK>
+0x600A # <CJK>
+0x600D # <CJK>
+0x600E # <CJK>
+0x600F # <CJK>
+0x6012 # <CJK>
+0x6014 # <CJK>
+0x6015 # <CJK>
+0x6016 # <CJK>
+0x6019 # <CJK>
+0x601B # <CJK>
+0x601C # <CJK>
+0x601D # <CJK>
+0x6020 # <CJK>
+0x6021 # <CJK>
+0x6025 # <CJK>
+0x6026 # <CJK>
+0x6027 # <CJK>
+0x6028 # <CJK>
+0x6029 # <CJK>
+0x602A # <CJK>
+0x602B # <CJK>
+0x602F # <CJK>
+0x6035 # <CJK>
+0x603B # <CJK>
+0x603C # <CJK>
+0x603F # <CJK>
+0x6041 # <CJK>
+0x6042 # <CJK>
+0x6043 # <CJK>
+0x604B # <CJK>
+0x604D # <CJK>
+0x6050 # <CJK>
+0x6052 # <CJK>
+0x6055 # <CJK>
+0x6059 # <CJK>
+0x605A # <CJK>
+0x605D # <CJK>
+0x6062 # <CJK>
+0x6063 # <CJK>
+0x6064 # <CJK>
+0x6067 # <CJK>
+0x6068 # <CJK>
+0x6069 # <CJK>
+0x606A # <CJK>
+0x606B # <CJK>
+0x606C # <CJK>
+0x606D # <CJK>
+0x606F # <CJK>
+0x6070 # <CJK>
+0x6073 # <CJK>
+0x6076 # <CJK>
+0x6078 # <CJK>
+0x6079 # <CJK>
+0x607A # <CJK>
+0x607B # <CJK>
+0x607C # <CJK>
+0x607D # <CJK>
+0x607F # <CJK>
+0x6083 # <CJK>
+0x6084 # <CJK>
+0x6089 # <CJK>
+0x608C # <CJK>
+0x608D # <CJK>
+0x6092 # <CJK>
+0x6094 # <CJK>
+0x6096 # <CJK>
+0x609A # <CJK>
+0x609B # <CJK>
+0x609D # <CJK>
+0x609F # <CJK>
+0x60A0 # <CJK>
+0x60A3 # <CJK>
+0x60A6 # <CJK>
+0x60A8 # <CJK>
+0x60AB # <CJK>
+0x60AC # <CJK>
+0x60AD # <CJK>
+0x60AF # <CJK>
+0x60B1 # <CJK>
+0x60B2 # <CJK>
+0x60B4 # <CJK>
+0x60B8 # <CJK>
+0x60BB # <CJK>
+0x60BC # <CJK>
+0x60C5 # <CJK>
+0x60C6 # <CJK>
+0x60CA # <CJK>
+0x60CB # <CJK>
+0x60D1 # <CJK>
+0x60D5 # <CJK>
+0x60D8 # <CJK>
+0x60DA # <CJK>
+0x60DC # <CJK>
+0x60DD # <CJK>
+0x60DF # <CJK>
+0x60E0 # <CJK>
+0x60E6 # <CJK>
+0x60E7 # <CJK>
+0x60E8 # <CJK>
+0x60E9 # <CJK>
+0x60EB # <CJK>
+0x60EC # <CJK>
+0x60ED # <CJK>
+0x60EE # <CJK>
+0x60EF # <CJK>
+0x60F0 # <CJK>
+0x60F3 # <CJK>
+0x60F4 # <CJK>
+0x60F6 # <CJK>
+0x60F9 # <CJK>
+0x60FA # <CJK>
+0x6100 # <CJK>
+0x6101 # <CJK>
+0x6106 # <CJK>
+0x6108 # <CJK>
+0x6109 # <CJK>
+0x610D # <CJK>
+0x610E # <CJK>
+0x610F # <CJK>
+0x6115 # <CJK>
+0x611A # <CJK>
+0x611F # <CJK>
+0x6120 # <CJK>
+0x6123 # <CJK>
+0x6124 # <CJK>
+0x6126 # <CJK>
+0x6127 # <CJK>
+0x612B # <CJK>
+0x613F # <CJK>
+0x6148 # <CJK>
+0x614A # <CJK>
+0x614C # <CJK>
+0x614E # <CJK>
+0x6151 # <CJK>
+0x6155 # <CJK>
+0x615D # <CJK>
+0x6162 # <CJK>
+0x6167 # <CJK>
+0x6168 # <CJK>
+0x6170 # <CJK>
+0x6175 # <CJK>
+0x6177 # <CJK>
+0x618B # <CJK>
+0x618E # <CJK>
+0x6194 # <CJK>
+0x619D # <CJK>
+0x61A7 # <CJK>
+0x61A8 # <CJK>
+0x61A9 # <CJK>
+0x61AC # <CJK>
+0x61B7 # <CJK>
+0x61BE # <CJK>
+0x61C2 # <CJK>
+0x61C8 # <CJK>
+0x61CA # <CJK>
+0x61CB # <CJK>
+0x61D1 # <CJK>
+0x61D2 # <CJK>
+0x61D4 # <CJK>
+0x61E6 # <CJK>
+0x61F5 # <CJK>
+0x61FF # <CJK>
+0x6206 # <CJK>
+0x6208 # <CJK>
+0x620A # <CJK>
+0x620B # <CJK>
+0x620C # <CJK>
+0x620D # <CJK>
+0x620E # <CJK>
+0x620F # <CJK>
+0x6210 # <CJK>
+0x6211 # <CJK>
+0x6212 # <CJK>
+0x6215 # <CJK>
+0x6216 # <CJK>
+0x6217 # <CJK>
+0x6218 # <CJK>
+0x621A # <CJK>
+0x621B # <CJK>
+0x621F # <CJK>
+0x6221 # <CJK>
+0x6222 # <CJK>
+0x6224 # <CJK>
+0x6225 # <CJK>
+0x622A # <CJK>
+0x622C # <CJK>
+0x622E # <CJK>
+0x6233 # <CJK>
+0x6234 # <CJK>
+0x6237 # <CJK>
+0x623D # <CJK>
+0x623E # <CJK>
+0x623F # <CJK>
+0x6240 # <CJK>
+0x6241 # <CJK>
+0x6243 # <CJK>
+0x6247 # <CJK>
+0x6248 # <CJK>
+0x6249 # <CJK>
+0x624B # <CJK>
+0x624C # <CJK>
+0x624D # <CJK>
+0x624E # <CJK>
+0x6251 # <CJK>
+0x6252 # <CJK>
+0x6253 # <CJK>
+0x6254 # <CJK>
+0x6258 # <CJK>
+0x625B # <CJK>
+0x6263 # <CJK>
+0x6266 # <CJK>
+0x6267 # <CJK>
+0x6269 # <CJK>
+0x626A # <CJK>
+0x626B # <CJK>
+0x626C # <CJK>
+0x626D # <CJK>
+0x626E # <CJK>
+0x626F # <CJK>
+0x6270 # <CJK>
+0x6273 # <CJK>
+0x6276 # <CJK>
+0x6279 # <CJK>
+0x627C # <CJK>
+0x627E # <CJK>
+0x627F # <CJK>
+0x6280 # <CJK>
+0x6284 # <CJK>
+0x6289 # <CJK>
+0x628A # <CJK>
+0x6291 # <CJK>
+0x6292 # <CJK>
+0x6293 # <CJK>
+0x6295 # <CJK>
+0x6296 # <CJK>
+0x6297 # <CJK>
+0x6298 # <CJK>
+0x629A # <CJK>
+0x629B # <CJK>
+0x629F # <CJK>
+0x62A0 # <CJK>
+0x62A1 # <CJK>
+0x62A2 # <CJK>
+0x62A4 # <CJK>
+0x62A5 # <CJK>
+0x62A8 # <CJK>
+0x62AB # <CJK>
+0x62AC # <CJK>
+0x62B1 # <CJK>
+0x62B5 # <CJK>
+0x62B9 # <CJK>
+0x62BB # <CJK>
+0x62BC # <CJK>
+0x62BD # <CJK>
+0x62BF # <CJK>
+0x62C2 # <CJK>
+0x62C4 # <CJK>
+0x62C5 # <CJK>
+0x62C6 # <CJK>
+0x62C7 # <CJK>
+0x62C8 # <CJK>
+0x62C9 # <CJK>
+0x62CA # <CJK>
+0x62CC # <CJK>
+0x62CD # <CJK>
+0x62CE # <CJK>
+0x62D0 # <CJK>
+0x62D2 # <CJK>
+0x62D3 # <CJK>
+0x62D4 # <CJK>
+0x62D6 # <CJK>
+0x62D7 # <CJK>
+0x62D8 # <CJK>
+0x62D9 # <CJK>
+0x62DA # <CJK>
+0x62DB # <CJK>
+0x62DC # <CJK>
+0x62DF # <CJK>
+0x62E2 # <CJK>
+0x62E3 # <CJK>
+0x62E5 # <CJK>
+0x62E6 # <CJK>
+0x62E7 # <CJK>
+0x62E8 # <CJK>
+0x62E9 # <CJK>
+0x62EC # <CJK>
+0x62ED # <CJK>
+0x62EE # <CJK>
+0x62EF # <CJK>
+0x62F1 # <CJK>
+0x62F3 # <CJK>
+0x62F4 # <CJK>
+0x62F6 # <CJK>
+0x62F7 # <CJK>
+0x62FC # <CJK>
+0x62FD # <CJK>
+0x62FE # <CJK>
+0x62FF # <CJK>
+0x6301 # <CJK>
+0x6302 # <CJK>
+0x6307 # <CJK>
+0x6308 # <CJK>
+0x6309 # <CJK>
+0x630E # <CJK>
+0x6311 # <CJK>
+0x6316 # <CJK>
+0x631A # <CJK>
+0x631B # <CJK>
+0x631D # <CJK>
+0x631E # <CJK>
+0x631F # <CJK>
+0x6320 # <CJK>
+0x6321 # <CJK>
+0x6322 # <CJK>
+0x6323 # <CJK>
+0x6324 # <CJK>
+0x6325 # <CJK>
+0x6328 # <CJK>
+0x632A # <CJK>
+0x632B # <CJK>
+0x632F # <CJK>
+0x6332 # <CJK>
+0x6339 # <CJK>
+0x633A # <CJK>
+0x633D # <CJK>
+0x6342 # <CJK>
+0x6343 # <CJK>
+0x6345 # <CJK>
+0x6346 # <CJK>
+0x6349 # <CJK>
+0x634B # <CJK>
+0x634C # <CJK>
+0x634D # <CJK>
+0x634E # <CJK>
+0x634F # <CJK>
+0x6350 # <CJK>
+0x6355 # <CJK>
+0x635E # <CJK>
+0x635F # <CJK>
+0x6361 # <CJK>
+0x6362 # <CJK>
+0x6363 # <CJK>
+0x6367 # <CJK>
+0x6369 # <CJK>
+0x636D # <CJK>
+0x636E # <CJK>
+0x6371 # <CJK>
+0x6376 # <CJK>
+0x6377 # <CJK>
+0x637A # <CJK>
+0x637B # <CJK>
+0x6380 # <CJK>
+0x6382 # <CJK>
+0x6387 # <CJK>
+0x6388 # <CJK>
+0x6389 # <CJK>
+0x638A # <CJK>
+0x638C # <CJK>
+0x638E # <CJK>
+0x638F # <CJK>
+0x6390 # <CJK>
+0x6392 # <CJK>
+0x6396 # <CJK>
+0x6398 # <CJK>
+0x63A0 # <CJK>
+0x63A2 # <CJK>
+0x63A3 # <CJK>
+0x63A5 # <CJK>
+0x63A7 # <CJK>
+0x63A8 # <CJK>
+0x63A9 # <CJK>
+0x63AA # <CJK>
+0x63AC # <CJK>
+0x63AD # <CJK>
+0x63AE # <CJK>
+0x63B0 # <CJK>
+0x63B3 # <CJK>
+0x63B4 # <CJK>
+0x63B7 # <CJK>
+0x63B8 # <CJK>
+0x63BA # <CJK>
+0x63BC # <CJK>
+0x63BE # <CJK>
+0x63C4 # <CJK>
+0x63C6 # <CJK>
+0x63C9 # <CJK>
+0x63CD # <CJK>
+0x63CE # <CJK>
+0x63CF # <CJK>
+0x63D0 # <CJK>
+0x63D2 # <CJK>
+0x63D6 # <CJK>
+0x63DE # <CJK>
+0x63E0 # <CJK>
+0x63E1 # <CJK>
+0x63E3 # <CJK>
+0x63E9 # <CJK>
+0x63EA # <CJK>
+0x63ED # <CJK>
+0x63F2 # <CJK>
+0x63F4 # <CJK>
+0x63F6 # <CJK>
+0x63F8 # <CJK>
+0x63FD # <CJK>
+0x63FF # <CJK>
+0x6400 # <CJK>
+0x6401 # <CJK>
+0x6402 # <CJK>
+0x6405 # <CJK>
+0x640B # <CJK>
+0x640C # <CJK>
+0x640F # <CJK>
+0x6410 # <CJK>
+0x6413 # <CJK>
+0x6414 # <CJK>
+0x641B # <CJK>
+0x641C # <CJK>
+0x641E # <CJK>
+0x6420 # <CJK>
+0x6421 # <CJK>
+0x6426 # <CJK>
+0x642A # <CJK>
+0x642C # <CJK>
+0x642D # <CJK>
+0x6434 # <CJK>
+0x643A # <CJK>
+0x643D # <CJK>
+0x643F # <CJK>
+0x6441 # <CJK>
+0x6444 # <CJK>
+0x6445 # <CJK>
+0x6446 # <CJK>
+0x6447 # <CJK>
+0x6448 # <CJK>
+0x644A # <CJK>
+0x6452 # <CJK>
+0x6454 # <CJK>
+0x6458 # <CJK>
+0x645E # <CJK>
+0x6467 # <CJK>
+0x6469 # <CJK>
+0x646D # <CJK>
+0x6478 # <CJK>
+0x6479 # <CJK>
+0x647A # <CJK>
+0x6482 # <CJK>
+0x6484 # <CJK>
+0x6485 # <CJK>
+0x6487 # <CJK>
+0x6491 # <CJK>
+0x6492 # <CJK>
+0x6495 # <CJK>
+0x6496 # <CJK>
+0x6499 # <CJK>
+0x649E # <CJK>
+0x64A4 # <CJK>
+0x64A9 # <CJK>
+0x64AC # <CJK>
+0x64AD # <CJK>
+0x64AE # <CJK>
+0x64B0 # <CJK>
+0x64B5 # <CJK>
+0x64B7 # <CJK>
+0x64B8 # <CJK>
+0x64BA # <CJK>
+0x64BC # <CJK>
+0x64C0 # <CJK>
+0x64C2 # <CJK>
+0x64C5 # <CJK>
+0x64CD # <CJK>
+0x64CE # <CJK>
+0x64D0 # <CJK>
+0x64D2 # <CJK>
+0x64D7 # <CJK>
+0x64D8 # <CJK>
+0x64DE # <CJK>
+0x64E2 # <CJK>
+0x64E4 # <CJK>
+0x64E6 # <CJK>
+0x6500 # <CJK>
+0x6509 # <CJK>
+0x6512 # <CJK>
+0x6518 # <CJK>
+0x6525 # <CJK>
+0x652B # <CJK>
+0x652E # <CJK>
+0x652F # <CJK>
+0x6534 # <CJK>
+0x6535 # <CJK>
+0x6536 # <CJK>
+0x6538 # <CJK>
+0x6539 # <CJK>
+0x653B # <CJK>
+0x653E # <CJK>
+0x653F # <CJK>
+0x6545 # <CJK>
+0x6548 # <CJK>
+0x6549 # <CJK>
+0x654C # <CJK>
+0x654F # <CJK>
+0x6551 # <CJK>
+0x6555 # <CJK>
+0x6556 # <CJK>
+0x6559 # <CJK>
+0x655B # <CJK>
+0x655D # <CJK>
+0x655E # <CJK>
+0x6562 # <CJK>
+0x6563 # <CJK>
+0x6566 # <CJK>
+0x656B # <CJK>
+0x656C # <CJK>
+0x6570 # <CJK>
+0x6572 # <CJK>
+0x6574 # <CJK>
+0x6577 # <CJK>
+0x6587 # <CJK>
+0x658B # <CJK>
+0x658C # <CJK>
+0x6590 # <CJK>
+0x6591 # <CJK>
+0x6593 # <CJK>
+0x6597 # <CJK>
+0x6599 # <CJK>
+0x659B # <CJK>
+0x659C # <CJK>
+0x659F # <CJK>
+0x65A1 # <CJK>
+0x65A4 # <CJK>
+0x65A5 # <CJK>
+0x65A7 # <CJK>
+0x65A9 # <CJK>
+0x65AB # <CJK>
+0x65AD # <CJK>
+0x65AF # <CJK>
+0x65B0 # <CJK>
+0x65B9 # <CJK>
+0x65BC # <CJK>
+0x65BD # <CJK>
+0x65C1 # <CJK>
+0x65C3 # <CJK>
+0x65C4 # <CJK>
+0x65C5 # <CJK>
+0x65C6 # <CJK>
+0x65CB # <CJK>
+0x65CC # <CJK>
+0x65CE # <CJK>
+0x65CF # <CJK>
+0x65D2 # <CJK>
+0x65D6 # <CJK>
+0x65D7 # <CJK>
+0x65E0 # <CJK>
+0x65E2 # <CJK>
+0x65E5 # <CJK>
+0x65E6 # <CJK>
+0x65E7 # <CJK>
+0x65E8 # <CJK>
+0x65E9 # <CJK>
+0x65EC # <CJK>
+0x65ED # <CJK>
+0x65EE # <CJK>
+0x65EF # <CJK>
+0x65F0 # <CJK>
+0x65F1 # <CJK>
+0x65F6 # <CJK>
+0x65F7 # <CJK>
+0x65FA # <CJK>
+0x6600 # <CJK>
+0x6602 # <CJK>
+0x6603 # <CJK>
+0x6606 # <CJK>
+0x660A # <CJK>
+0x660C # <CJK>
+0x660E # <CJK>
+0x660F # <CJK>
+0x6613 # <CJK>
+0x6614 # <CJK>
+0x6615 # <CJK>
+0x6619 # <CJK>
+0x661D # <CJK>
+0x661F # <CJK>
+0x6620 # <CJK>
+0x6625 # <CJK>
+0x6627 # <CJK>
+0x6628 # <CJK>
+0x662D # <CJK>
+0x662F # <CJK>
+0x6631 # <CJK>
+0x6634 # <CJK>
+0x6635 # <CJK>
+0x6636 # <CJK>
+0x663C # <CJK>
+0x663E # <CJK>
+0x6641 # <CJK>
+0x6643 # <CJK>
+0x664B # <CJK>
+0x664C # <CJK>
+0x664F # <CJK>
+0x6652 # <CJK>
+0x6653 # <CJK>
+0x6654 # <CJK>
+0x6655 # <CJK>
+0x6656 # <CJK>
+0x6657 # <CJK>
+0x665A # <CJK>
+0x665F # <CJK>
+0x6661 # <CJK>
+0x6664 # <CJK>
+0x6666 # <CJK>
+0x6668 # <CJK>
+0x666E # <CJK>
+0x666F # <CJK>
+0x6670 # <CJK>
+0x6674 # <CJK>
+0x6676 # <CJK>
+0x6677 # <CJK>
+0x667A # <CJK>
+0x667E # <CJK>
+0x6682 # <CJK>
+0x6684 # <CJK>
+0x6687 # <CJK>
+0x668C # <CJK>
+0x6691 # <CJK>
+0x6696 # <CJK>
+0x6697 # <CJK>
+0x669D # <CJK>
+0x66A7 # <CJK>
+0x66A8 # <CJK>
+0x66AE # <CJK>
+0x66B4 # <CJK>
+0x66B9 # <CJK>
+0x66BE # <CJK>
+0x66D9 # <CJK>
+0x66DB # <CJK>
+0x66DC # <CJK>
+0x66DD # <CJK>
+0x66E6 # <CJK>
+0x66E9 # <CJK>
+0x66F0 # <CJK>
+0x66F2 # <CJK>
+0x66F3 # <CJK>
+0x66F4 # <CJK>
+0x66F7 # <CJK>
+0x66F9 # <CJK>
+0x66FC # <CJK>
+0x66FE # <CJK>
+0x66FF # <CJK>
+0x6700 # <CJK>
+0x6708 # <CJK>
+0x6709 # <CJK>
+0x670A # <CJK>
+0x670B # <CJK>
+0x670D # <CJK>
+0x6710 # <CJK>
+0x6714 # <CJK>
+0x6715 # <CJK>
+0x6717 # <CJK>
+0x671B # <CJK>
+0x671D # <CJK>
+0x671F # <CJK>
+0x6726 # <CJK>
+0x6728 # <CJK>
+0x672A # <CJK>
+0x672B # <CJK>
+0x672C # <CJK>
+0x672D # <CJK>
+0x672F # <CJK>
+0x6731 # <CJK>
+0x6734 # <CJK>
+0x6735 # <CJK>
+0x673A # <CJK>
+0x673D # <CJK>
+0x6740 # <CJK>
+0x6742 # <CJK>
+0x6743 # <CJK>
+0x6746 # <CJK>
+0x6748 # <CJK>
+0x6749 # <CJK>
+0x674C # <CJK>
+0x674E # <CJK>
+0x674F # <CJK>
+0x6750 # <CJK>
+0x6751 # <CJK>
+0x6753 # <CJK>
+0x6756 # <CJK>
+0x675C # <CJK>
+0x675E # <CJK>
+0x675F # <CJK>
+0x6760 # <CJK>
+0x6761 # <CJK>
+0x6765 # <CJK>
+0x6768 # <CJK>
+0x6769 # <CJK>
+0x676A # <CJK>
+0x676D # <CJK>
+0x676F # <CJK>
+0x6770 # <CJK>
+0x6772 # <CJK>
+0x6773 # <CJK>
+0x6775 # <CJK>
+0x6777 # <CJK>
+0x677C # <CJK>
+0x677E # <CJK>
+0x677F # <CJK>
+0x6781 # <CJK>
+0x6784 # <CJK>
+0x6787 # <CJK>
+0x6789 # <CJK>
+0x678B # <CJK>
+0x6790 # <CJK>
+0x6795 # <CJK>
+0x6797 # <CJK>
+0x6798 # <CJK>
+0x679A # <CJK>
+0x679C # <CJK>
+0x679D # <CJK>
+0x679E # <CJK>
+0x67A2 # <CJK>
+0x67A3 # <CJK>
+0x67A5 # <CJK>
+0x67A7 # <CJK>
+0x67A8 # <CJK>
+0x67AA # <CJK>
+0x67AB # <CJK>
+0x67AD # <CJK>
+0x67AF # <CJK>
+0x67B0 # <CJK>
+0x67B3 # <CJK>
+0x67B5 # <CJK>
+0x67B6 # <CJK>
+0x67B7 # <CJK>
+0x67B8 # <CJK>
+0x67C1 # <CJK>
+0x67C3 # <CJK>
+0x67C4 # <CJK>
+0x67CF # <CJK>
+0x67D0 # <CJK>
+0x67D1 # <CJK>
+0x67D2 # <CJK>
+0x67D3 # <CJK>
+0x67D4 # <CJK>
+0x67D8 # <CJK>
+0x67D9 # <CJK>
+0x67DA # <CJK>
+0x67DC # <CJK>
+0x67DD # <CJK>
+0x67DE # <CJK>
+0x67E0 # <CJK>
+0x67E2 # <CJK>
+0x67E5 # <CJK>
+0x67E9 # <CJK>
+0x67EC # <CJK>
+0x67EF # <CJK>
+0x67F0 # <CJK>
+0x67F1 # <CJK>
+0x67F3 # <CJK>
+0x67F4 # <CJK>
+0x67FD # <CJK>
+0x67FF # <CJK>
+0x6800 # <CJK>
+0x6805 # <CJK>
+0x6807 # <CJK>
+0x6808 # <CJK>
+0x6809 # <CJK>
+0x680A # <CJK>
+0x680B # <CJK>
+0x680C # <CJK>
+0x680E # <CJK>
+0x680F # <CJK>
+0x6811 # <CJK>
+0x6813 # <CJK>
+0x6816 # <CJK>
+0x6817 # <CJK>
+0x681D # <CJK>
+0x6821 # <CJK>
+0x6829 # <CJK>
+0x682A # <CJK>
+0x6832 # <CJK>
+0x6833 # <CJK>
+0x6837 # <CJK>
+0x6838 # <CJK>
+0x6839 # <CJK>
+0x683C # <CJK>
+0x683D # <CJK>
+0x683E # <CJK>
+0x6840 # <CJK>
+0x6841 # <CJK>
+0x6842 # <CJK>
+0x6843 # <CJK>
+0x6844 # <CJK>
+0x6845 # <CJK>
+0x6846 # <CJK>
+0x6848 # <CJK>
+0x6849 # <CJK>
+0x684A # <CJK>
+0x684C # <CJK>
+0x684E # <CJK>
+0x6850 # <CJK>
+0x6851 # <CJK>
+0x6853 # <CJK>
+0x6854 # <CJK>
+0x6855 # <CJK>
+0x6860 # <CJK>
+0x6861 # <CJK>
+0x6862 # <CJK>
+0x6863 # <CJK>
+0x6864 # <CJK>
+0x6865 # <CJK>
+0x6866 # <CJK>
+0x6867 # <CJK>
+0x6868 # <CJK>
+0x6869 # <CJK>
+0x686B # <CJK>
+0x6874 # <CJK>
+0x6876 # <CJK>
+0x6877 # <CJK>
+0x6881 # <CJK>
+0x6883 # <CJK>
+0x6885 # <CJK>
+0x6886 # <CJK>
+0x688F # <CJK>
+0x6893 # <CJK>
+0x6897 # <CJK>
+0x68A2 # <CJK>
+0x68A6 # <CJK>
+0x68A7 # <CJK>
+0x68A8 # <CJK>
+0x68AD # <CJK>
+0x68AF # <CJK>
+0x68B0 # <CJK>
+0x68B3 # <CJK>
+0x68B5 # <CJK>
+0x68C0 # <CJK>
+0x68C2 # <CJK>
+0x68C9 # <CJK>
+0x68CB # <CJK>
+0x68CD # <CJK>
+0x68D2 # <CJK>
+0x68D5 # <CJK>
+0x68D8 # <CJK>
+0x68DA # <CJK>
+0x68E0 # <CJK>
+0x68E3 # <CJK>
+0x68EE # <CJK>
+0x68F0 # <CJK>
+0x68F1 # <CJK>
+0x68F5 # <CJK>
+0x68F9 # <CJK>
+0x68FA # <CJK>
+0x68FC # <CJK>
+0x6901 # <CJK>
+0x6905 # <CJK>
+0x690B # <CJK>
+0x690D # <CJK>
+0x690E # <CJK>
+0x6910 # <CJK>
+0x6912 # <CJK>
+0x691F # <CJK>
+0x6920 # <CJK>
+0x6924 # <CJK>
+0x692D # <CJK>
+0x6930 # <CJK>
+0x6934 # <CJK>
+0x6939 # <CJK>
+0x693D # <CJK>
+0x693F # <CJK>
+0x6942 # <CJK>
+0x6954 # <CJK>
+0x6957 # <CJK>
+0x695A # <CJK>
+0x695D # <CJK>
+0x695E # <CJK>
+0x6960 # <CJK>
+0x6963 # <CJK>
+0x6966 # <CJK>
+0x696B # <CJK>
+0x696E # <CJK>
+0x6971 # <CJK>
+0x6977 # <CJK>
+0x6978 # <CJK>
+0x6979 # <CJK>
+0x697C # <CJK>
+0x6980 # <CJK>
+0x6982 # <CJK>
+0x6984 # <CJK>
+0x6986 # <CJK>
+0x6987 # <CJK>
+0x6988 # <CJK>
+0x6989 # <CJK>
+0x698D # <CJK>
+0x6994 # <CJK>
+0x6995 # <CJK>
+0x6998 # <CJK>
+0x699B # <CJK>
+0x699C # <CJK>
+0x69A7 # <CJK>
+0x69A8 # <CJK>
+0x69AB # <CJK>
+0x69AD # <CJK>
+0x69B1 # <CJK>
+0x69B4 # <CJK>
+0x69B7 # <CJK>
+0x69BB # <CJK>
+0x69C1 # <CJK>
+0x69CA # <CJK>
+0x69CC # <CJK>
+0x69CE # <CJK>
+0x69D0 # <CJK>
+0x69D4 # <CJK>
+0x69DB # <CJK>
+0x69DF # <CJK>
+0x69E0 # <CJK>
+0x69ED # <CJK>
+0x69F2 # <CJK>
+0x69FD # <CJK>
+0x69FF # <CJK>
+0x6A0A # <CJK>
+0x6A17 # <CJK>
+0x6A18 # <CJK>
+0x6A1F # <CJK>
+0x6A21 # <CJK>
+0x6A28 # <CJK>
+0x6A2A # <CJK>
+0x6A2F # <CJK>
+0x6A31 # <CJK>
+0x6A35 # <CJK>
+0x6A3D # <CJK>
+0x6A3E # <CJK>
+0x6A44 # <CJK>
+0x6A47 # <CJK>
+0x6A50 # <CJK>
+0x6A58 # <CJK>
+0x6A59 # <CJK>
+0x6A5B # <CJK>
+0x6A61 # <CJK>
+0x6A65 # <CJK>
+0x6A71 # <CJK>
+0x6A79 # <CJK>
+0x6A7C # <CJK>
+0x6A80 # <CJK>
+0x6A84 # <CJK>
+0x6A8E # <CJK>
+0x6A90 # <CJK>
+0x6A91 # <CJK>
+0x6A97 # <CJK>
+0x6AA0 # <CJK>
+0x6AA9 # <CJK>
+0x6AAB # <CJK>
+0x6AAC # <CJK>
+0x6B20 # <CJK>
+0x6B21 # <CJK>
+0x6B22 # <CJK>
+0x6B23 # <CJK>
+0x6B24 # <CJK>
+0x6B27 # <CJK>
+0x6B32 # <CJK>
+0x6B37 # <CJK>
+0x6B39 # <CJK>
+0x6B3A # <CJK>
+0x6B3E # <CJK>
+0x6B43 # <CJK>
+0x6B46 # <CJK>
+0x6B47 # <CJK>
+0x6B49 # <CJK>
+0x6B4C # <CJK>
+0x6B59 # <CJK>
+0x6B62 # <CJK>
+0x6B63 # <CJK>
+0x6B64 # <CJK>
+0x6B65 # <CJK>
+0x6B66 # <CJK>
+0x6B67 # <CJK>
+0x6B6A # <CJK>
+0x6B79 # <CJK>
+0x6B7B # <CJK>
+0x6B7C # <CJK>
+0x6B81 # <CJK>
+0x6B82 # <CJK>
+0x6B83 # <CJK>
+0x6B84 # <CJK>
+0x6B86 # <CJK>
+0x6B87 # <CJK>
+0x6B89 # <CJK>
+0x6B8A # <CJK>
+0x6B8B # <CJK>
+0x6B8D # <CJK>
+0x6B92 # <CJK>
+0x6B93 # <CJK>
+0x6B96 # <CJK>
+0x6B9A # <CJK>
+0x6B9B # <CJK>
+0x6BA1 # <CJK>
+0x6BAA # <CJK>
+0x6BB3 # <CJK>
+0x6BB4 # <CJK>
+0x6BB5 # <CJK>
+0x6BB7 # <CJK>
+0x6BBF # <CJK>
+0x6BC1 # <CJK>
+0x6BC2 # <CJK>
+0x6BC5 # <CJK>
+0x6BCB # <CJK>
+0x6BCD # <CJK>
+0x6BCF # <CJK>
+0x6BD2 # <CJK>
+0x6BD3 # <CJK>
+0x6BD4 # <CJK>
+0x6BD5 # <CJK>
+0x6BD6 # <CJK>
+0x6BD7 # <CJK>
+0x6BD9 # <CJK>
+0x6BDB # <CJK>
+0x6BE1 # <CJK>
+0x6BEA # <CJK>
+0x6BEB # <CJK>
+0x6BEF # <CJK>
+0x6BF3 # <CJK>
+0x6BF5 # <CJK>
+0x6BF9 # <CJK>
+0x6BFD # <CJK>
+0x6C05 # <CJK>
+0x6C06 # <CJK>
+0x6C07 # <CJK>
+0x6C0D # <CJK>
+0x6C0F # <CJK>
+0x6C10 # <CJK>
+0x6C11 # <CJK>
+0x6C13 # <CJK>
+0x6C14 # <CJK>
+0x6C15 # <CJK>
+0x6C16 # <CJK>
+0x6C18 # <CJK>
+0x6C19 # <CJK>
+0x6C1A # <CJK>
+0x6C1B # <CJK>
+0x6C1F # <CJK>
+0x6C21 # <CJK>
+0x6C22 # <CJK>
+0x6C24 # <CJK>
+0x6C26 # <CJK>
+0x6C27 # <CJK>
+0x6C28 # <CJK>
+0x6C29 # <CJK>
+0x6C2A # <CJK>
+0x6C2E # <CJK>
+0x6C2F # <CJK>
+0x6C30 # <CJK>
+0x6C32 # <CJK>
+0x6C34 # <CJK>
+0x6C35 # <CJK>
+0x6C38 # <CJK>
+0x6C3D # <CJK>
+0x6C40 # <CJK>
+0x6C41 # <CJK>
+0x6C42 # <CJK>
+0x6C46 # <CJK>
+0x6C47 # <CJK>
+0x6C49 # <CJK>
+0x6C4A # <CJK>
+0x6C50 # <CJK>
+0x6C54 # <CJK>
+0x6C55 # <CJK>
+0x6C57 # <CJK>
+0x6C5B # <CJK>
+0x6C5C # <CJK>
+0x6C5D # <CJK>
+0x6C5E # <CJK>
+0x6C5F # <CJK>
+0x6C60 # <CJK>
+0x6C61 # <CJK>
+0x6C64 # <CJK>
+0x6C68 # <CJK>
+0x6C69 # <CJK>
+0x6C6A # <CJK>
+0x6C70 # <CJK>
+0x6C72 # <CJK>
+0x6C74 # <CJK>
+0x6C76 # <CJK>
+0x6C79 # <CJK>
+0x6C7D # <CJK>
+0x6C7E # <CJK>
+0x6C81 # <CJK>
+0x6C82 # <CJK>
+0x6C83 # <CJK>
+0x6C85 # <CJK>
+0x6C86 # <CJK>
+0x6C88 # <CJK>
+0x6C89 # <CJK>
+0x6C8C # <CJK>
+0x6C8F # <CJK>
+0x6C90 # <CJK>
+0x6C93 # <CJK>
+0x6C94 # <CJK>
+0x6C99 # <CJK>
+0x6C9B # <CJK>
+0x6C9F # <CJK>
+0x6CA1 # <CJK>
+0x6CA3 # <CJK>
+0x6CA4 # <CJK>
+0x6CA5 # <CJK>
+0x6CA6 # <CJK>
+0x6CA7 # <CJK>
+0x6CA9 # <CJK>
+0x6CAA # <CJK>
+0x6CAB # <CJK>
+0x6CAD # <CJK>
+0x6CAE # <CJK>
+0x6CB1 # <CJK>
+0x6CB2 # <CJK>
+0x6CB3 # <CJK>
+0x6CB8 # <CJK>
+0x6CB9 # <CJK>
+0x6CBB # <CJK>
+0x6CBC # <CJK>
+0x6CBD # <CJK>
+0x6CBE # <CJK>
+0x6CBF # <CJK>
+0x6CC4 # <CJK>
+0x6CC5 # <CJK>
+0x6CC9 # <CJK>
+0x6CCA # <CJK>
+0x6CCC # <CJK>
+0x6CD0 # <CJK>
+0x6CD3 # <CJK>
+0x6CD4 # <CJK>
+0x6CD5 # <CJK>
+0x6CD6 # <CJK>
+0x6CD7 # <CJK>
+0x6CDB # <CJK>
+0x6CDE # <CJK>
+0x6CE0 # <CJK>
+0x6CE1 # <CJK>
+0x6CE2 # <CJK>
+0x6CE3 # <CJK>
+0x6CE5 # <CJK>
+0x6CE8 # <CJK>
+0x6CEA # <CJK>
+0x6CEB # <CJK>
+0x6CEE # <CJK>
+0x6CEF # <CJK>
+0x6CF0 # <CJK>
+0x6CF1 # <CJK>
+0x6CF3 # <CJK>
+0x6CF5 # <CJK>
+0x6CF6 # <CJK>
+0x6CF7 # <CJK>
+0x6CF8 # <CJK>
+0x6CFA # <CJK>
+0x6CFB # <CJK>
+0x6CFC # <CJK>
+0x6CFD # <CJK>
+0x6CFE # <CJK>
+0x6D01 # <CJK>
+0x6D04 # <CJK>
+0x6D07 # <CJK>
+0x6D0B # <CJK>
+0x6D0C # <CJK>
+0x6D0E # <CJK>
+0x6D12 # <CJK>
+0x6D17 # <CJK>
+0x6D19 # <CJK>
+0x6D1A # <CJK>
+0x6D1B # <CJK>
+0x6D1E # <CJK>
+0x6D25 # <CJK>
+0x6D27 # <CJK>
+0x6D2A # <CJK>
+0x6D2B # <CJK>
+0x6D2E # <CJK>
+0x6D31 # <CJK>
+0x6D32 # <CJK>
+0x6D33 # <CJK>
+0x6D35 # <CJK>
+0x6D39 # <CJK>
+0x6D3B # <CJK>
+0x6D3C # <CJK>
+0x6D3D # <CJK>
+0x6D3E # <CJK>
+0x6D41 # <CJK>
+0x6D43 # <CJK>
+0x6D45 # <CJK>
+0x6D46 # <CJK>
+0x6D47 # <CJK>
+0x6D48 # <CJK>
+0x6D4A # <CJK>
+0x6D4B # <CJK>
+0x6D4D # <CJK>
+0x6D4E # <CJK>
+0x6D4F # <CJK>
+0x6D51 # <CJK>
+0x6D52 # <CJK>
+0x6D53 # <CJK>
+0x6D54 # <CJK>
+0x6D59 # <CJK>
+0x6D5A # <CJK>
+0x6D5C # <CJK>
+0x6D5E # <CJK>
+0x6D60 # <CJK>
+0x6D63 # <CJK>
+0x6D66 # <CJK>
+0x6D69 # <CJK>
+0x6D6A # <CJK>
+0x6D6E # <CJK>
+0x6D6F # <CJK>
+0x6D74 # <CJK>
+0x6D77 # <CJK>
+0x6D78 # <CJK>
+0x6D7C # <CJK>
+0x6D82 # <CJK>
+0x6D85 # <CJK>
+0x6D88 # <CJK>
+0x6D89 # <CJK>
+0x6D8C # <CJK>
+0x6D8E # <CJK>
+0x6D91 # <CJK>
+0x6D93 # <CJK>
+0x6D94 # <CJK>
+0x6D95 # <CJK>
+0x6D9B # <CJK>
+0x6D9D # <CJK>
+0x6D9E # <CJK>
+0x6D9F # <CJK>
+0x6DA0 # <CJK>
+0x6DA1 # <CJK>
+0x6DA3 # <CJK>
+0x6DA4 # <CJK>
+0x6DA6 # <CJK>
+0x6DA7 # <CJK>
+0x6DA8 # <CJK>
+0x6DA9 # <CJK>
+0x6DAA # <CJK>
+0x6DAB # <CJK>
+0x6DAE # <CJK>
+0x6DAF # <CJK>
+0x6DB2 # <CJK>
+0x6DB5 # <CJK>
+0x6DB8 # <CJK>
+0x6DBF # <CJK>
+0x6DC0 # <CJK>
+0x6DC4 # <CJK>
+0x6DC5 # <CJK>
+0x6DC6 # <CJK>
+0x6DC7 # <CJK>
+0x6DCB # <CJK>
+0x6DCC # <CJK>
+0x6DD1 # <CJK>
+0x6DD6 # <CJK>
+0x6DD8 # <CJK>
+0x6DD9 # <CJK>
+0x6DDD # <CJK>
+0x6DDE # <CJK>
+0x6DE0 # <CJK>
+0x6DE1 # <CJK>
+0x6DE4 # <CJK>
+0x6DE6 # <CJK>
+0x6DEB # <CJK>
+0x6DEC # <CJK>
+0x6DEE # <CJK>
+0x6DF1 # <CJK>
+0x6DF3 # <CJK>
+0x6DF7 # <CJK>
+0x6DF9 # <CJK>
+0x6DFB # <CJK>
+0x6DFC # <CJK>
+0x6E05 # <CJK>
+0x6E0A # <CJK>
+0x6E0C # <CJK>
+0x6E0D # <CJK>
+0x6E0E # <CJK>
+0x6E10 # <CJK>
+0x6E11 # <CJK>
+0x6E14 # <CJK>
+0x6E16 # <CJK>
+0x6E17 # <CJK>
+0x6E1A # <CJK>
+0x6E1D # <CJK>
+0x6E20 # <CJK>
+0x6E21 # <CJK>
+0x6E23 # <CJK>
+0x6E24 # <CJK>
+0x6E25 # <CJK>
+0x6E29 # <CJK>
+0x6E2B # <CJK>
+0x6E2D # <CJK>
+0x6E2F # <CJK>
+0x6E32 # <CJK>
+0x6E34 # <CJK>
+0x6E38 # <CJK>
+0x6E3A # <CJK>
+0x6E43 # <CJK>
+0x6E44 # <CJK>
+0x6E4D # <CJK>
+0x6E4E # <CJK>
+0x6E53 # <CJK>
+0x6E54 # <CJK>
+0x6E56 # <CJK>
+0x6E58 # <CJK>
+0x6E5B # <CJK>
+0x6E5F # <CJK>
+0x6E6B # <CJK>
+0x6E6E # <CJK>
+0x6E7E # <CJK>
+0x6E7F # <CJK>
+0x6E83 # <CJK>
+0x6E85 # <CJK>
+0x6E86 # <CJK>
+0x6E89 # <CJK>
+0x6E8F # <CJK>
+0x6E90 # <CJK>
+0x6E98 # <CJK>
+0x6E9C # <CJK>
+0x6E9F # <CJK>
+0x6EA2 # <CJK>
+0x6EA5 # <CJK>
+0x6EA7 # <CJK>
+0x6EAA # <CJK>
+0x6EAF # <CJK>
+0x6EB1 # <CJK>
+0x6EB2 # <CJK>
+0x6EB4 # <CJK>
+0x6EB6 # <CJK>
+0x6EB7 # <CJK>
+0x6EBA # <CJK>
+0x6EBB # <CJK>
+0x6EBD # <CJK>
+0x6EC1 # <CJK>
+0x6EC2 # <CJK>
+0x6EC7 # <CJK>
+0x6ECB # <CJK>
+0x6ECF # <CJK>
+0x6ED1 # <CJK>
+0x6ED3 # <CJK>
+0x6ED4 # <CJK>
+0x6ED5 # <CJK>
+0x6ED7 # <CJK>
+0x6EDA # <CJK>
+0x6EDE # <CJK>
+0x6EDF # <CJK>
+0x6EE0 # <CJK>
+0x6EE1 # <CJK>
+0x6EE2 # <CJK>
+0x6EE4 # <CJK>
+0x6EE5 # <CJK>
+0x6EE6 # <CJK>
+0x6EE8 # <CJK>
+0x6EE9 # <CJK>
+0x6EF4 # <CJK>
+0x6EF9 # <CJK>
+0x6F02 # <CJK>
+0x6F06 # <CJK>
+0x6F09 # <CJK>
+0x6F0F # <CJK>
+0x6F13 # <CJK>
+0x6F14 # <CJK>
+0x6F15 # <CJK>
+0x6F20 # <CJK>
+0x6F24 # <CJK>
+0x6F29 # <CJK>
+0x6F2A # <CJK>
+0x6F2B # <CJK>
+0x6F2D # <CJK>
+0x6F2F # <CJK>
+0x6F31 # <CJK>
+0x6F33 # <CJK>
+0x6F36 # <CJK>
+0x6F3E # <CJK>
+0x6F46 # <CJK>
+0x6F47 # <CJK>
+0x6F4B # <CJK>
+0x6F4D # <CJK>
+0x6F58 # <CJK>
+0x6F5C # <CJK>
+0x6F5E # <CJK>
+0x6F62 # <CJK>
+0x6F66 # <CJK>
+0x6F6D # <CJK>
+0x6F6E # <CJK>
+0x6F72 # <CJK>
+0x6F74 # <CJK>
+0x6F78 # <CJK>
+0x6F7A # <CJK>
+0x6F7C # <CJK>
+0x6F84 # <CJK>
+0x6F88 # <CJK>
+0x6F89 # <CJK>
+0x6F8C # <CJK>
+0x6F8D # <CJK>
+0x6F8E # <CJK>
+0x6F9C # <CJK>
+0x6FA1 # <CJK>
+0x6FA7 # <CJK>
+0x6FB3 # <CJK>
+0x6FB6 # <CJK>
+0x6FB9 # <CJK>
+0x6FC0 # <CJK>
+0x6FC2 # <CJK>
+0x6FC9 # <CJK>
+0x6FD1 # <CJK>
+0x6FD2 # <CJK>
+0x6FDE # <CJK>
+0x6FE0 # <CJK>
+0x6FE1 # <CJK>
+0x6FEE # <CJK>
+0x6FEF # <CJK>
+0x7011 # <CJK>
+0x701A # <CJK>
+0x701B # <CJK>
+0x7023 # <CJK>
+0x7035 # <CJK>
+0x7039 # <CJK>
+0x704C # <CJK>
+0x704F # <CJK>
+0x705E # <CJK>
+0x706B # <CJK>
+0x706C # <CJK>
+0x706D # <CJK>
+0x706F # <CJK>
+0x7070 # <CJK>
+0x7075 # <CJK>
+0x7076 # <CJK>
+0x7078 # <CJK>
+0x707C # <CJK>
+0x707E # <CJK>
+0x707F # <CJK>
+0x7080 # <CJK>
+0x7085 # <CJK>
+0x7089 # <CJK>
+0x708A # <CJK>
+0x708E # <CJK>
+0x7092 # <CJK>
+0x7094 # <CJK>
+0x7095 # <CJK>
+0x7096 # <CJK>
+0x7099 # <CJK>
+0x709C # <CJK>
+0x709D # <CJK>
+0x70AB # <CJK>
+0x70AC # <CJK>
+0x70AD # <CJK>
+0x70AE # <CJK>
+0x70AF # <CJK>
+0x70B1 # <CJK>
+0x70B3 # <CJK>
+0x70B7 # <CJK>
+0x70B8 # <CJK>
+0x70B9 # <CJK>
+0x70BB # <CJK>
+0x70BC # <CJK>
+0x70BD # <CJK>
+0x70C0 # <CJK>
+0x70C1 # <CJK>
+0x70C2 # <CJK>
+0x70C3 # <CJK>
+0x70C8 # <CJK>
+0x70CA # <CJK>
+0x70D8 # <CJK>
+0x70D9 # <CJK>
+0x70DB # <CJK>
+0x70DF # <CJK>
+0x70E4 # <CJK>
+0x70E6 # <CJK>
+0x70E7 # <CJK>
+0x70E8 # <CJK>
+0x70E9 # <CJK>
+0x70EB # <CJK>
+0x70EC # <CJK>
+0x70ED # <CJK>
+0x70EF # <CJK>
+0x70F7 # <CJK>
+0x70F9 # <CJK>
+0x70FD # <CJK>
+0x7109 # <CJK>
+0x710A # <CJK>
+0x7110 # <CJK>
+0x7113 # <CJK>
+0x7115 # <CJK>
+0x7116 # <CJK>
+0x7118 # <CJK>
+0x7119 # <CJK>
+0x711A # <CJK>
+0x7126 # <CJK>
+0x712F # <CJK>
+0x7130 # <CJK>
+0x7131 # <CJK>
+0x7136 # <CJK>
+0x7145 # <CJK>
+0x714A # <CJK>
+0x714C # <CJK>
+0x714E # <CJK>
+0x715C # <CJK>
+0x715E # <CJK>
+0x7164 # <CJK>
+0x7166 # <CJK>
+0x7167 # <CJK>
+0x7168 # <CJK>
+0x716E # <CJK>
+0x7172 # <CJK>
+0x7173 # <CJK>
+0x7178 # <CJK>
+0x717A # <CJK>
+0x717D # <CJK>
+0x7184 # <CJK>
+0x718A # <CJK>
+0x718F # <CJK>
+0x7194 # <CJK>
+0x7198 # <CJK>
+0x7199 # <CJK>
+0x719F # <CJK>
+0x71A0 # <CJK>
+0x71A8 # <CJK>
+0x71AC # <CJK>
+0x71B3 # <CJK>
+0x71B5 # <CJK>
+0x71B9 # <CJK>
+0x71C3 # <CJK>
+0x71CE # <CJK>
+0x71D4 # <CJK>
+0x71D5 # <CJK>
+0x71E0 # <CJK>
+0x71E5 # <CJK>
+0x71E7 # <CJK>
+0x71EE # <CJK>
+0x71F9 # <CJK>
+0x7206 # <CJK>
+0x721D # <CJK>
+0x7228 # <CJK>
+0x722A # <CJK>
+0x722C # <CJK>
+0x7230 # <CJK>
+0x7231 # <CJK>
+0x7235 # <CJK>
+0x7236 # <CJK>
+0x7237 # <CJK>
+0x7238 # <CJK>
+0x7239 # <CJK>
+0x723B # <CJK>
+0x723D # <CJK>
+0x723F # <CJK>
+0x7247 # <CJK>
+0x7248 # <CJK>
+0x724C # <CJK>
+0x724D # <CJK>
+0x7252 # <CJK>
+0x7256 # <CJK>
+0x7259 # <CJK>
+0x725B # <CJK>
+0x725D # <CJK>
+0x725F # <CJK>
+0x7261 # <CJK>
+0x7262 # <CJK>
+0x7266 # <CJK>
+0x7267 # <CJK>
+0x7269 # <CJK>
+0x726E # <CJK>
+0x726F # <CJK>
+0x7272 # <CJK>
+0x7275 # <CJK>
+0x7279 # <CJK>
+0x727A # <CJK>
+0x727E # <CJK>
+0x727F # <CJK>
+0x7280 # <CJK>
+0x7281 # <CJK>
+0x7284 # <CJK>
+0x728A # <CJK>
+0x728B # <CJK>
+0x728D # <CJK>
+0x728F # <CJK>
+0x7292 # <CJK>
+0x729F # <CJK>
+0x72AC # <CJK>
+0x72AD # <CJK>
+0x72AF # <CJK>
+0x72B0 # <CJK>
+0x72B4 # <CJK>
+0x72B6 # <CJK>
+0x72B7 # <CJK>
+0x72B8 # <CJK>
+0x72B9 # <CJK>
+0x72C1 # <CJK>
+0x72C2 # <CJK>
+0x72C3 # <CJK>
+0x72C4 # <CJK>
+0x72C8 # <CJK>
+0x72CD # <CJK>
+0x72CE # <CJK>
+0x72D0 # <CJK>
+0x72D2 # <CJK>
+0x72D7 # <CJK>
+0x72D9 # <CJK>
+0x72DE # <CJK>
+0x72E0 # <CJK>
+0x72E1 # <CJK>
+0x72E8 # <CJK>
+0x72E9 # <CJK>
+0x72EC # <CJK>
+0x72ED # <CJK>
+0x72EE # <CJK>
+0x72EF # <CJK>
+0x72F0 # <CJK>
+0x72F1 # <CJK>
+0x72F2 # <CJK>
+0x72F3 # <CJK>
+0x72F4 # <CJK>
+0x72F7 # <CJK>
+0x72F8 # <CJK>
+0x72FA # <CJK>
+0x72FB # <CJK>
+0x72FC # <CJK>
+0x7301 # <CJK>
+0x7303 # <CJK>
+0x730A # <CJK>
+0x730E # <CJK>
+0x7313 # <CJK>
+0x7315 # <CJK>
+0x7316 # <CJK>
+0x7317 # <CJK>
+0x731B # <CJK>
+0x731C # <CJK>
+0x731D # <CJK>
+0x731E # <CJK>
+0x7321 # <CJK>
+0x7322 # <CJK>
+0x7325 # <CJK>
+0x7329 # <CJK>
+0x732A # <CJK>
+0x732B # <CJK>
+0x732C # <CJK>
+0x732E # <CJK>
+0x7331 # <CJK>
+0x7334 # <CJK>
+0x7337 # <CJK>
+0x7338 # <CJK>
+0x7339 # <CJK>
+0x733E # <CJK>
+0x733F # <CJK>
+0x734D # <CJK>
+0x7350 # <CJK>
+0x7352 # <CJK>
+0x7357 # <CJK>
+0x7360 # <CJK>
+0x736C # <CJK>
+0x736D # <CJK>
+0x736F # <CJK>
+0x737E # <CJK>
+0x7384 # <CJK>
+0x7387 # <CJK>
+0x7389 # <CJK>
+0x738B # <CJK>
+0x738E # <CJK>
+0x7391 # <CJK>
+0x7396 # <CJK>
+0x739B # <CJK>
+0x739F # <CJK>
+0x73A2 # <CJK>
+0x73A9 # <CJK>
+0x73AB # <CJK>
+0x73AE # <CJK>
+0x73AF # <CJK>
+0x73B0 # <CJK>
+0x73B2 # <CJK>
+0x73B3 # <CJK>
+0x73B7 # <CJK>
+0x73BA # <CJK>
+0x73BB # <CJK>
+0x73C0 # <CJK>
+0x73C2 # <CJK>
+0x73C8 # <CJK>
+0x73C9 # <CJK>
+0x73CA # <CJK>
+0x73CD # <CJK>
+0x73CF # <CJK>
+0x73D0 # <CJK>
+0x73D1 # <CJK>
+0x73D9 # <CJK>
+0x73DE # <CJK>
+0x73E0 # <CJK>
+0x73E5 # <CJK>
+0x73E7 # <CJK>
+0x73E9 # <CJK>
+0x73ED # <CJK>
+0x73F2 # <CJK>
+0x7403 # <CJK>
+0x7405 # <CJK>
+0x7406 # <CJK>
+0x7409 # <CJK>
+0x740A # <CJK>
+0x740F # <CJK>
+0x7410 # <CJK>
+0x741A # <CJK>
+0x741B # <CJK>
+0x7422 # <CJK>
+0x7425 # <CJK>
+0x7426 # <CJK>
+0x7428 # <CJK>
+0x742A # <CJK>
+0x742C # <CJK>
+0x742E # <CJK>
+0x7430 # <CJK>
+0x7433 # <CJK>
+0x7434 # <CJK>
+0x7435 # <CJK>
+0x7436 # <CJK>
+0x743C # <CJK>
+0x7441 # <CJK>
+0x7455 # <CJK>
+0x7457 # <CJK>
+0x7459 # <CJK>
+0x745A # <CJK>
+0x745B # <CJK>
+0x745C # <CJK>
+0x745E # <CJK>
+0x745F # <CJK>
+0x746D # <CJK>
+0x7470 # <CJK>
+0x7476 # <CJK>
+0x7477 # <CJK>
+0x747E # <CJK>
+0x7480 # <CJK>
+0x7481 # <CJK>
+0x7483 # <CJK>
+0x7487 # <CJK>
+0x748B # <CJK>
+0x748E # <CJK>
+0x7490 # <CJK>
+0x749C # <CJK>
+0x749E # <CJK>
+0x74A7 # <CJK>
+0x74A8 # <CJK>
+0x74A9 # <CJK>
+0x74BA # <CJK>
+0x74D2 # <CJK>
+0x74DC # <CJK>
+0x74DE # <CJK>
+0x74E0 # <CJK>
+0x74E2 # <CJK>
+0x74E3 # <CJK>
+0x74E4 # <CJK>
+0x74E6 # <CJK>
+0x74EE # <CJK>
+0x74EF # <CJK>
+0x74F4 # <CJK>
+0x74F6 # <CJK>
+0x74F7 # <CJK>
+0x74FF # <CJK>
+0x7504 # <CJK>
+0x750D # <CJK>
+0x750F # <CJK>
+0x7511 # <CJK>
+0x7513 # <CJK>
+0x7518 # <CJK>
+0x7519 # <CJK>
+0x751A # <CJK>
+0x751C # <CJK>
+0x751F # <CJK>
+0x7525 # <CJK>
+0x7528 # <CJK>
+0x7529 # <CJK>
+0x752B # <CJK>
+0x752C # <CJK>
+0x752D # <CJK>
+0x752F # <CJK>
+0x7530 # <CJK>
+0x7531 # <CJK>
+0x7532 # <CJK>
+0x7533 # <CJK>
+0x7535 # <CJK>
+0x7537 # <CJK>
+0x7538 # <CJK>
+0x753A # <CJK>
+0x753B # <CJK>
+0x753E # <CJK>
+0x7540 # <CJK>
+0x7545 # <CJK>
+0x7548 # <CJK>
+0x754B # <CJK>
+0x754C # <CJK>
+0x754E # <CJK>
+0x754F # <CJK>
+0x7554 # <CJK>
+0x7559 # <CJK>
+0x755A # <CJK>
+0x755B # <CJK>
+0x755C # <CJK>
+0x7565 # <CJK>
+0x7566 # <CJK>
+0x756A # <CJK>
+0x7572 # <CJK>
+0x7574 # <CJK>
+0x7578 # <CJK>
+0x7579 # <CJK>
+0x757F # <CJK>
+0x7583 # <CJK>
+0x7586 # <CJK>
+0x758B # <CJK>
+0x758F # <CJK>
+0x7591 # <CJK>
+0x7592 # <CJK>
+0x7594 # <CJK>
+0x7596 # <CJK>
+0x7597 # <CJK>
+0x7599 # <CJK>
+0x759A # <CJK>
+0x759D # <CJK>
+0x759F # <CJK>
+0x75A0 # <CJK>
+0x75A1 # <CJK>
+0x75A3 # <CJK>
+0x75A4 # <CJK>
+0x75A5 # <CJK>
+0x75AB # <CJK>
+0x75AC # <CJK>
+0x75AE # <CJK>
+0x75AF # <CJK>
+0x75B0 # <CJK>
+0x75B1 # <CJK>
+0x75B2 # <CJK>
+0x75B3 # <CJK>
+0x75B4 # <CJK>
+0x75B5 # <CJK>
+0x75B8 # <CJK>
+0x75B9 # <CJK>
+0x75BC # <CJK>
+0x75BD # <CJK>
+0x75BE # <CJK>
+0x75C2 # <CJK>
+0x75C3 # <CJK>
+0x75C4 # <CJK>
+0x75C5 # <CJK>
+0x75C7 # <CJK>
+0x75C8 # <CJK>
+0x75C9 # <CJK>
+0x75CA # <CJK>
+0x75CD # <CJK>
+0x75D2 # <CJK>
+0x75D4 # <CJK>
+0x75D5 # <CJK>
+0x75D6 # <CJK>
+0x75D8 # <CJK>
+0x75DB # <CJK>
+0x75DE # <CJK>
+0x75E2 # <CJK>
+0x75E3 # <CJK>
+0x75E4 # <CJK>
+0x75E6 # <CJK>
+0x75E7 # <CJK>
+0x75E8 # <CJK>
+0x75EA # <CJK>
+0x75EB # <CJK>
+0x75F0 # <CJK>
+0x75F1 # <CJK>
+0x75F4 # <CJK>
+0x75F9 # <CJK>
+0x75FC # <CJK>
+0x75FF # <CJK>
+0x7600 # <CJK>
+0x7601 # <CJK>
+0x7603 # <CJK>
+0x7605 # <CJK>
+0x760A # <CJK>
+0x760C # <CJK>
+0x7610 # <CJK>
+0x7615 # <CJK>
+0x7617 # <CJK>
+0x7618 # <CJK>
+0x7619 # <CJK>
+0x761B # <CJK>
+0x761F # <CJK>
+0x7620 # <CJK>
+0x7622 # <CJK>
+0x7624 # <CJK>
+0x7625 # <CJK>
+0x7626 # <CJK>
+0x7629 # <CJK>
+0x762A # <CJK>
+0x762B # <CJK>
+0x762D # <CJK>
+0x7630 # <CJK>
+0x7633 # <CJK>
+0x7634 # <CJK>
+0x7635 # <CJK>
+0x7638 # <CJK>
+0x763C # <CJK>
+0x763E # <CJK>
+0x763F # <CJK>
+0x7640 # <CJK>
+0x7643 # <CJK>
+0x764C # <CJK>
+0x764D # <CJK>
+0x7654 # <CJK>
+0x7656 # <CJK>
+0x765C # <CJK>
+0x765E # <CJK>
+0x7663 # <CJK>
+0x766B # <CJK>
+0x766F # <CJK>
+0x7678 # <CJK>
+0x767B # <CJK>
+0x767D # <CJK>
+0x767E # <CJK>
+0x7682 # <CJK>
+0x7684 # <CJK>
+0x7686 # <CJK>
+0x7687 # <CJK>
+0x7688 # <CJK>
+0x768B # <CJK>
+0x768E # <CJK>
+0x7691 # <CJK>
+0x7693 # <CJK>
+0x7696 # <CJK>
+0x7699 # <CJK>
+0x76A4 # <CJK>
+0x76AE # <CJK>
+0x76B1 # <CJK>
+0x76B2 # <CJK>
+0x76B4 # <CJK>
+0x76BF # <CJK>
+0x76C2 # <CJK>
+0x76C5 # <CJK>
+0x76C6 # <CJK>
+0x76C8 # <CJK>
+0x76CA # <CJK>
+0x76CD # <CJK>
+0x76CE # <CJK>
+0x76CF # <CJK>
+0x76D0 # <CJK>
+0x76D1 # <CJK>
+0x76D2 # <CJK>
+0x76D4 # <CJK>
+0x76D6 # <CJK>
+0x76D7 # <CJK>
+0x76D8 # <CJK>
+0x76DB # <CJK>
+0x76DF # <CJK>
+0x76E5 # <CJK>
+0x76EE # <CJK>
+0x76EF # <CJK>
+0x76F1 # <CJK>
+0x76F2 # <CJK>
+0x76F4 # <CJK>
+0x76F8 # <CJK>
+0x76F9 # <CJK>
+0x76FC # <CJK>
+0x76FE # <CJK>
+0x7701 # <CJK>
+0x7704 # <CJK>
+0x7707 # <CJK>
+0x7708 # <CJK>
+0x7709 # <CJK>
+0x770B # <CJK>
+0x770D # <CJK>
+0x7719 # <CJK>
+0x771A # <CJK>
+0x771F # <CJK>
+0x7720 # <CJK>
+0x7722 # <CJK>
+0x7726 # <CJK>
+0x7728 # <CJK>
+0x7729 # <CJK>
+0x772D # <CJK>
+0x772F # <CJK>
+0x7735 # <CJK>
+0x7736 # <CJK>
+0x7737 # <CJK>
+0x7738 # <CJK>
+0x773A # <CJK>
+0x773C # <CJK>
+0x7740 # <CJK>
+0x7741 # <CJK>
+0x7743 # <CJK>
+0x7747 # <CJK>
+0x7750 # <CJK>
+0x7751 # <CJK>
+0x775A # <CJK>
+0x775B # <CJK>
+0x7761 # <CJK>
+0x7762 # <CJK>
+0x7763 # <CJK>
+0x7765 # <CJK>
+0x7766 # <CJK>
+0x7768 # <CJK>
+0x776B # <CJK>
+0x776C # <CJK>
+0x7779 # <CJK>
+0x777D # <CJK>
+0x777E # <CJK>
+0x777F # <CJK>
+0x7780 # <CJK>
+0x7784 # <CJK>
+0x7785 # <CJK>
+0x778C # <CJK>
+0x778D # <CJK>
+0x778E # <CJK>
+0x7791 # <CJK>
+0x7792 # <CJK>
+0x779F # <CJK>
+0x77A0 # <CJK>
+0x77A2 # <CJK>
+0x77A5 # <CJK>
+0x77A7 # <CJK>
+0x77A9 # <CJK>
+0x77AA # <CJK>
+0x77AC # <CJK>
+0x77B0 # <CJK>
+0x77B3 # <CJK>
+0x77B5 # <CJK>
+0x77BB # <CJK>
+0x77BD # <CJK>
+0x77BF # <CJK>
+0x77CD # <CJK>
+0x77D7 # <CJK>
+0x77DB # <CJK>
+0x77DC # <CJK>
+0x77E2 # <CJK>
+0x77E3 # <CJK>
+0x77E5 # <CJK>
+0x77E7 # <CJK>
+0x77E9 # <CJK>
+0x77EB # <CJK>
+0x77EC # <CJK>
+0x77ED # <CJK>
+0x77EE # <CJK>
+0x77F3 # <CJK>
+0x77F6 # <CJK>
+0x77F8 # <CJK>
+0x77FD # <CJK>
+0x77FE # <CJK>
+0x77FF # <CJK>
+0x7800 # <CJK>
+0x7801 # <CJK>
+0x7802 # <CJK>
+0x7809 # <CJK>
+0x780C # <CJK>
+0x780D # <CJK>
+0x7811 # <CJK>
+0x7812 # <CJK>
+0x7814 # <CJK>
+0x7816 # <CJK>
+0x7817 # <CJK>
+0x7818 # <CJK>
+0x781A # <CJK>
+0x781C # <CJK>
+0x781D # <CJK>
+0x781F # <CJK>
+0x7823 # <CJK>
+0x7825 # <CJK>
+0x7826 # <CJK>
+0x7827 # <CJK>
+0x7829 # <CJK>
+0x782C # <CJK>
+0x782D # <CJK>
+0x7830 # <CJK>
+0x7834 # <CJK>
+0x7837 # <CJK>
+0x7838 # <CJK>
+0x7839 # <CJK>
+0x783A # <CJK>
+0x783B # <CJK>
+0x783C # <CJK>
+0x783E # <CJK>
+0x7840 # <CJK>
+0x7845 # <CJK>
+0x7847 # <CJK>
+0x784C # <CJK>
+0x784E # <CJK>
+0x7850 # <CJK>
+0x7852 # <CJK>
+0x7855 # <CJK>
+0x7856 # <CJK>
+0x7857 # <CJK>
+0x785D # <CJK>
+0x786A # <CJK>
+0x786B # <CJK>
+0x786C # <CJK>
+0x786D # <CJK>
+0x786E # <CJK>
+0x7877 # <CJK>
+0x787C # <CJK>
+0x7887 # <CJK>
+0x7889 # <CJK>
+0x788C # <CJK>
+0x788D # <CJK>
+0x788E # <CJK>
+0x7891 # <CJK>
+0x7893 # <CJK>
+0x7897 # <CJK>
+0x7898 # <CJK>
+0x789A # <CJK>
+0x789B # <CJK>
+0x789C # <CJK>
+0x789F # <CJK>
+0x78A1 # <CJK>
+0x78A3 # <CJK>
+0x78A5 # <CJK>
+0x78A7 # <CJK>
+0x78B0 # <CJK>
+0x78B1 # <CJK>
+0x78B2 # <CJK>
+0x78B3 # <CJK>
+0x78B4 # <CJK>
+0x78B9 # <CJK>
+0x78BE # <CJK>
+0x78C1 # <CJK>
+0x78C5 # <CJK>
+0x78C9 # <CJK>
+0x78CA # <CJK>
+0x78CB # <CJK>
+0x78D0 # <CJK>
+0x78D4 # <CJK>
+0x78D5 # <CJK>
+0x78D9 # <CJK>
+0x78E8 # <CJK>
+0x78EC # <CJK>
+0x78F2 # <CJK>
+0x78F4 # <CJK>
+0x78F7 # <CJK>
+0x78FA # <CJK>
+0x7901 # <CJK>
+0x7905 # <CJK>
+0x7913 # <CJK>
+0x791E # <CJK>
+0x7924 # <CJK>
+0x7934 # <CJK>
+0x793A # <CJK>
+0x793B # <CJK>
+0x793C # <CJK>
+0x793E # <CJK>
+0x7940 # <CJK>
+0x7941 # <CJK>
+0x7946 # <CJK>
+0x7948 # <CJK>
+0x7949 # <CJK>
+0x7953 # <CJK>
+0x7956 # <CJK>
+0x7957 # <CJK>
+0x795A # <CJK>
+0x795B # <CJK>
+0x795C # <CJK>
+0x795D # <CJK>
+0x795E # <CJK>
+0x795F # <CJK>
+0x7960 # <CJK>
+0x7962 # <CJK>
+0x7965 # <CJK>
+0x7967 # <CJK>
+0x7968 # <CJK>
+0x796D # <CJK>
+0x796F # <CJK>
+0x7977 # <CJK>
+0x7978 # <CJK>
+0x797A # <CJK>
+0x7980 # <CJK>
+0x7981 # <CJK>
+0x7984 # <CJK>
+0x7985 # <CJK>
+0x798A # <CJK>
+0x798F # <CJK>
+0x799A # <CJK>
+0x79A7 # <CJK>
+0x79B3 # <CJK>
+0x79B9 # <CJK>
+0x79BA # <CJK>
+0x79BB # <CJK>
+0x79BD # <CJK>
+0x79BE # <CJK>
+0x79C0 # <CJK>
+0x79C1 # <CJK>
+0x79C3 # <CJK>
+0x79C6 # <CJK>
+0x79C9 # <CJK>
+0x79CB # <CJK>
+0x79CD # <CJK>
+0x79D1 # <CJK>
+0x79D2 # <CJK>
+0x79D5 # <CJK>
+0x79D8 # <CJK>
+0x79DF # <CJK>
+0x79E3 # <CJK>
+0x79E4 # <CJK>
+0x79E6 # <CJK>
+0x79E7 # <CJK>
+0x79E9 # <CJK>
+0x79EB # <CJK>
+0x79ED # <CJK>
+0x79EF # <CJK>
+0x79F0 # <CJK>
+0x79F8 # <CJK>
+0x79FB # <CJK>
+0x79FD # <CJK>
+0x7A00 # <CJK>
+0x7A02 # <CJK>
+0x7A03 # <CJK>
+0x7A06 # <CJK>
+0x7A0B # <CJK>
+0x7A0D # <CJK>
+0x7A0E # <CJK>
+0x7A14 # <CJK>
+0x7A17 # <CJK>
+0x7A1A # <CJK>
+0x7A1E # <CJK>
+0x7A20 # <CJK>
+0x7A23 # <CJK>
+0x7A33 # <CJK>
+0x7A37 # <CJK>
+0x7A39 # <CJK>
+0x7A3B # <CJK>
+0x7A3C # <CJK>
+0x7A3D # <CJK>
+0x7A3F # <CJK>
+0x7A46 # <CJK>
+0x7A51 # <CJK>
+0x7A57 # <CJK>
+0x7A70 # <CJK>
+0x7A74 # <CJK>
+0x7A76 # <CJK>
+0x7A77 # <CJK>
+0x7A78 # <CJK>
+0x7A79 # <CJK>
+0x7A7A # <CJK>
+0x7A7F # <CJK>
+0x7A80 # <CJK>
+0x7A81 # <CJK>
+0x7A83 # <CJK>
+0x7A84 # <CJK>
+0x7A86 # <CJK>
+0x7A88 # <CJK>
+0x7A8D # <CJK>
+0x7A91 # <CJK>
+0x7A92 # <CJK>
+0x7A95 # <CJK>
+0x7A96 # <CJK>
+0x7A97 # <CJK>
+0x7A98 # <CJK>
+0x7A9C # <CJK>
+0x7A9D # <CJK>
+0x7A9F # <CJK>
+0x7AA0 # <CJK>
+0x7AA5 # <CJK>
+0x7AA6 # <CJK>
+0x7AA8 # <CJK>
+0x7AAC # <CJK>
+0x7AAD # <CJK>
+0x7AB3 # <CJK>
+0x7ABF # <CJK>
+0x7ACB # <CJK>
+0x7AD6 # <CJK>
+0x7AD9 # <CJK>
+0x7ADE # <CJK>
+0x7ADF # <CJK>
+0x7AE0 # <CJK>
+0x7AE3 # <CJK>
+0x7AE5 # <CJK>
+0x7AE6 # <CJK>
+0x7AED # <CJK>
+0x7AEF # <CJK>
+0x7AF9 # <CJK>
+0x7AFA # <CJK>
+0x7AFD # <CJK>
+0x7AFF # <CJK>
+0x7B03 # <CJK>
+0x7B04 # <CJK>
+0x7B06 # <CJK>
+0x7B08 # <CJK>
+0x7B0A # <CJK>
+0x7B0B # <CJK>
+0x7B0F # <CJK>
+0x7B11 # <CJK>
+0x7B14 # <CJK>
+0x7B15 # <CJK>
+0x7B19 # <CJK>
+0x7B1B # <CJK>
+0x7B1E # <CJK>
+0x7B20 # <CJK>
+0x7B24 # <CJK>
+0x7B25 # <CJK>
+0x7B26 # <CJK>
+0x7B28 # <CJK>
+0x7B2A # <CJK>
+0x7B2B # <CJK>
+0x7B2C # <CJK>
+0x7B2E # <CJK>
+0x7B31 # <CJK>
+0x7B33 # <CJK>
+0x7B38 # <CJK>
+0x7B3A # <CJK>
+0x7B3C # <CJK>
+0x7B3E # <CJK>
+0x7B45 # <CJK>
+0x7B47 # <CJK>
+0x7B49 # <CJK>
+0x7B4B # <CJK>
+0x7B4C # <CJK>
+0x7B4F # <CJK>
+0x7B50 # <CJK>
+0x7B51 # <CJK>
+0x7B52 # <CJK>
+0x7B54 # <CJK>
+0x7B56 # <CJK>
+0x7B58 # <CJK>
+0x7B5A # <CJK>
+0x7B5B # <CJK>
+0x7B5D # <CJK>
+0x7B60 # <CJK>
+0x7B62 # <CJK>
+0x7B6E # <CJK>
+0x7B71 # <CJK>
+0x7B72 # <CJK>
+0x7B75 # <CJK>
+0x7B77 # <CJK>
+0x7B79 # <CJK>
+0x7B7B # <CJK>
+0x7B7E # <CJK>
+0x7B80 # <CJK>
+0x7B85 # <CJK>
+0x7B8D # <CJK>
+0x7B90 # <CJK>
+0x7B94 # <CJK>
+0x7B95 # <CJK>
+0x7B97 # <CJK>
+0x7B9C # <CJK>
+0x7B9D # <CJK>
+0x7BA1 # <CJK>
+0x7BA2 # <CJK>
+0x7BA6 # <CJK>
+0x7BA7 # <CJK>
+0x7BA8 # <CJK>
+0x7BA9 # <CJK>
+0x7BAA # <CJK>
+0x7BAB # <CJK>
+0x7BAC # <CJK>
+0x7BAD # <CJK>
+0x7BB1 # <CJK>
+0x7BB4 # <CJK>
+0x7BB8 # <CJK>
+0x7BC1 # <CJK>
+0x7BC6 # <CJK>
+0x7BC7 # <CJK>
+0x7BCC # <CJK>
+0x7BD1 # <CJK>
+0x7BD3 # <CJK>
+0x7BD9 # <CJK>
+0x7BDA # <CJK>
+0x7BDD # <CJK>
+0x7BE1 # <CJK>
+0x7BE5 # <CJK>
+0x7BE6 # <CJK>
+0x7BEA # <CJK>
+0x7BEE # <CJK>
+0x7BF1 # <CJK>
+0x7BF7 # <CJK>
+0x7BFC # <CJK>
+0x7BFE # <CJK>
+0x7C07 # <CJK>
+0x7C0B # <CJK>
+0x7C0C # <CJK>
+0x7C0F # <CJK>
+0x7C16 # <CJK>
+0x7C1F # <CJK>
+0x7C26 # <CJK>
+0x7C27 # <CJK>
+0x7C2A # <CJK>
+0x7C38 # <CJK>
+0x7C3F # <CJK>
+0x7C40 # <CJK>
+0x7C41 # <CJK>
+0x7C4D # <CJK>
+0x7C73 # <CJK>
+0x7C74 # <CJK>
+0x7C7B # <CJK>
+0x7C7C # <CJK>
+0x7C7D # <CJK>
+0x7C89 # <CJK>
+0x7C91 # <CJK>
+0x7C92 # <CJK>
+0x7C95 # <CJK>
+0x7C97 # <CJK>
+0x7C98 # <CJK>
+0x7C9C # <CJK>
+0x7C9D # <CJK>
+0x7C9E # <CJK>
+0x7C9F # <CJK>
+0x7CA2 # <CJK>
+0x7CA4 # <CJK>
+0x7CA5 # <CJK>
+0x7CAA # <CJK>
+0x7CAE # <CJK>
+0x7CB1 # <CJK>
+0x7CB2 # <CJK>
+0x7CB3 # <CJK>
+0x7CB9 # <CJK>
+0x7CBC # <CJK>
+0x7CBD # <CJK>
+0x7CBE # <CJK>
+0x7CC1 # <CJK>
+0x7CC5 # <CJK>
+0x7CC7 # <CJK>
+0x7CC8 # <CJK>
+0x7CCA # <CJK>
+0x7CCC # <CJK>
+0x7CCD # <CJK>
+0x7CD5 # <CJK>
+0x7CD6 # <CJK>
+0x7CD7 # <CJK>
+0x7CD9 # <CJK>
+0x7CDC # <CJK>
+0x7CDF # <CJK>
+0x7CE0 # <CJK>
+0x7CE8 # <CJK>
+0x7CEF # <CJK>
+0x7CF8 # <CJK>
+0x7CFB # <CJK>
+0x7D0A # <CJK>
+0x7D20 # <CJK>
+0x7D22 # <CJK>
+0x7D27 # <CJK>
+0x7D2B # <CJK>
+0x7D2F # <CJK>
+0x7D6E # <CJK>
+0x7D77 # <CJK>
+0x7DA6 # <CJK>
+0x7DAE # <CJK>
+0x7E3B # <CJK>
+0x7E41 # <CJK>
+0x7E47 # <CJK>
+0x7E82 # <CJK>
+0x7E9B # <CJK>
+0x7E9F # <CJK>
+0x7EA0 # <CJK>
+0x7EA1 # <CJK>
+0x7EA2 # <CJK>
+0x7EA3 # <CJK>
+0x7EA4 # <CJK>
+0x7EA5 # <CJK>
+0x7EA6 # <CJK>
+0x7EA7 # <CJK>
+0x7EA8 # <CJK>
+0x7EA9 # <CJK>
+0x7EAA # <CJK>
+0x7EAB # <CJK>
+0x7EAC # <CJK>
+0x7EAD # <CJK>
+0x7EAF # <CJK>
+0x7EB0 # <CJK>
+0x7EB1 # <CJK>
+0x7EB2 # <CJK>
+0x7EB3 # <CJK>
+0x7EB5 # <CJK>
+0x7EB6 # <CJK>
+0x7EB7 # <CJK>
+0x7EB8 # <CJK>
+0x7EB9 # <CJK>
+0x7EBA # <CJK>
+0x7EBD # <CJK>
+0x7EBE # <CJK>
+0x7EBF # <CJK>
+0x7EC0 # <CJK>
+0x7EC1 # <CJK>
+0x7EC2 # <CJK>
+0x7EC3 # <CJK>
+0x7EC4 # <CJK>
+0x7EC5 # <CJK>
+0x7EC6 # <CJK>
+0x7EC7 # <CJK>
+0x7EC8 # <CJK>
+0x7EC9 # <CJK>
+0x7ECA # <CJK>
+0x7ECB # <CJK>
+0x7ECC # <CJK>
+0x7ECD # <CJK>
+0x7ECE # <CJK>
+0x7ECF # <CJK>
+0x7ED0 # <CJK>
+0x7ED1 # <CJK>
+0x7ED2 # <CJK>
+0x7ED3 # <CJK>
+0x7ED4 # <CJK>
+0x7ED5 # <CJK>
+0x7ED7 # <CJK>
+0x7ED8 # <CJK>
+0x7ED9 # <CJK>
+0x7EDA # <CJK>
+0x7EDB # <CJK>
+0x7EDC # <CJK>
+0x7EDD # <CJK>
+0x7EDE # <CJK>
+0x7EDF # <CJK>
+0x7EE0 # <CJK>
+0x7EE1 # <CJK>
+0x7EE2 # <CJK>
+0x7EE3 # <CJK>
+0x7EE5 # <CJK>
+0x7EE6 # <CJK>
+0x7EE7 # <CJK>
+0x7EE8 # <CJK>
+0x7EE9 # <CJK>
+0x7EEA # <CJK>
+0x7EEB # <CJK>
+0x7EED # <CJK>
+0x7EEE # <CJK>
+0x7EEF # <CJK>
+0x7EF0 # <CJK>
+0x7EF1 # <CJK>
+0x7EF2 # <CJK>
+0x7EF3 # <CJK>
+0x7EF4 # <CJK>
+0x7EF5 # <CJK>
+0x7EF6 # <CJK>
+0x7EF7 # <CJK>
+0x7EF8 # <CJK>
+0x7EFA # <CJK>
+0x7EFB # <CJK>
+0x7EFC # <CJK>
+0x7EFD # <CJK>
+0x7EFE # <CJK>
+0x7EFF # <CJK>
+0x7F00 # <CJK>
+0x7F01 # <CJK>
+0x7F02 # <CJK>
+0x7F03 # <CJK>
+0x7F04 # <CJK>
+0x7F05 # <CJK>
+0x7F06 # <CJK>
+0x7F07 # <CJK>
+0x7F08 # <CJK>
+0x7F09 # <CJK>
+0x7F0B # <CJK>
+0x7F0C # <CJK>
+0x7F0D # <CJK>
+0x7F0E # <CJK>
+0x7F0F # <CJK>
+0x7F11 # <CJK>
+0x7F12 # <CJK>
+0x7F13 # <CJK>
+0x7F14 # <CJK>
+0x7F15 # <CJK>
+0x7F16 # <CJK>
+0x7F17 # <CJK>
+0x7F18 # <CJK>
+0x7F19 # <CJK>
+0x7F1A # <CJK>
+0x7F1B # <CJK>
+0x7F1C # <CJK>
+0x7F1D # <CJK>
+0x7F1F # <CJK>
+0x7F20 # <CJK>
+0x7F21 # <CJK>
+0x7F22 # <CJK>
+0x7F23 # <CJK>
+0x7F24 # <CJK>
+0x7F25 # <CJK>
+0x7F26 # <CJK>
+0x7F27 # <CJK>
+0x7F28 # <CJK>
+0x7F29 # <CJK>
+0x7F2A # <CJK>
+0x7F2B # <CJK>
+0x7F2C # <CJK>
+0x7F2D # <CJK>
+0x7F2E # <CJK>
+0x7F2F # <CJK>
+0x7F30 # <CJK>
+0x7F31 # <CJK>
+0x7F32 # <CJK>
+0x7F33 # <CJK>
+0x7F34 # <CJK>
+0x7F35 # <CJK>
+0x7F36 # <CJK>
+0x7F38 # <CJK>
+0x7F3A # <CJK>
+0x7F42 # <CJK>
+0x7F44 # <CJK>
+0x7F45 # <CJK>
+0x7F50 # <CJK>
+0x7F51 # <CJK>
+0x7F54 # <CJK>
+0x7F55 # <CJK>
+0x7F57 # <CJK>
+0x7F58 # <CJK>
+0x7F5A # <CJK>
+0x7F5F # <CJK>
+0x7F61 # <CJK>
+0x7F62 # <CJK>
+0x7F68 # <CJK>
+0x7F69 # <CJK>
+0x7F6A # <CJK>
+0x7F6E # <CJK>
+0x7F71 # <CJK>
+0x7F72 # <CJK>
+0x7F74 # <CJK>
+0x7F79 # <CJK>
+0x7F7E # <CJK>
+0x7F81 # <CJK>
+0x7F8A # <CJK>
+0x7F8C # <CJK>
+0x7F8E # <CJK>
+0x7F94 # <CJK>
+0x7F9A # <CJK>
+0x7F9D # <CJK>
+0x7F9E # <CJK>
+0x7F9F # <CJK>
+0x7FA1 # <CJK>
+0x7FA4 # <CJK>
+0x7FA7 # <CJK>
+0x7FAF # <CJK>
+0x7FB0 # <CJK>
+0x7FB2 # <CJK>
+0x7FB8 # <CJK>
+0x7FB9 # <CJK>
+0x7FBC # <CJK>
+0x7FBD # <CJK>
+0x7FBF # <CJK>
+0x7FC1 # <CJK>
+0x7FC5 # <CJK>
+0x7FCA # <CJK>
+0x7FCC # <CJK>
+0x7FCE # <CJK>
+0x7FD4 # <CJK>
+0x7FD5 # <CJK>
+0x7FD8 # <CJK>
+0x7FDF # <CJK>
+0x7FE0 # <CJK>
+0x7FE1 # <CJK>
+0x7FE5 # <CJK>
+0x7FE6 # <CJK>
+0x7FE9 # <CJK>
+0x7FEE # <CJK>
+0x7FF0 # <CJK>
+0x7FF1 # <CJK>
+0x7FF3 # <CJK>
+0x7FFB # <CJK>
+0x7FFC # <CJK>
+0x8000 # <CJK>
+0x8001 # <CJK>
+0x8003 # <CJK>
+0x8004 # <CJK>
+0x8005 # <CJK>
+0x8006 # <CJK>
+0x800B # <CJK>
+0x800C # <CJK>
+0x800D # <CJK>
+0x8010 # <CJK>
+0x8012 # <CJK>
+0x8014 # <CJK>
+0x8015 # <CJK>
+0x8016 # <CJK>
+0x8017 # <CJK>
+0x8018 # <CJK>
+0x8019 # <CJK>
+0x801C # <CJK>
+0x8020 # <CJK>
+0x8022 # <CJK>
+0x8025 # <CJK>
+0x8026 # <CJK>
+0x8027 # <CJK>
+0x8028 # <CJK>
+0x8029 # <CJK>
+0x802A # <CJK>
+0x8031 # <CJK>
+0x8033 # <CJK>
+0x8035 # <CJK>
+0x8036 # <CJK>
+0x8037 # <CJK>
+0x8038 # <CJK>
+0x803B # <CJK>
+0x803D # <CJK>
+0x803F # <CJK>
+0x8042 # <CJK>
+0x8043 # <CJK>
+0x8046 # <CJK>
+0x804A # <CJK>
+0x804B # <CJK>
+0x804C # <CJK>
+0x804D # <CJK>
+0x8052 # <CJK>
+0x8054 # <CJK>
+0x8058 # <CJK>
+0x805A # <CJK>
+0x8069 # <CJK>
+0x806A # <CJK>
+0x8071 # <CJK>
+0x807F # <CJK>
+0x8080 # <CJK>
+0x8083 # <CJK>
+0x8084 # <CJK>
+0x8086 # <CJK>
+0x8087 # <CJK>
+0x8089 # <CJK>
+0x808B # <CJK>
+0x808C # <CJK>
+0x8093 # <CJK>
+0x8096 # <CJK>
+0x8098 # <CJK>
+0x809A # <CJK>
+0x809B # <CJK>
+0x809C # <CJK>
+0x809D # <CJK>
+0x809F # <CJK>
+0x80A0 # <CJK>
+0x80A1 # <CJK>
+0x80A2 # <CJK>
+0x80A4 # <CJK>
+0x80A5 # <CJK>
+0x80A9 # <CJK>
+0x80AA # <CJK>
+0x80AB # <CJK>
+0x80AD # <CJK>
+0x80AE # <CJK>
+0x80AF # <CJK>
+0x80B1 # <CJK>
+0x80B2 # <CJK>
+0x80B4 # <CJK>
+0x80B7 # <CJK>
+0x80BA # <CJK>
+0x80BC # <CJK>
+0x80BD # <CJK>
+0x80BE # <CJK>
+0x80BF # <CJK>
+0x80C0 # <CJK>
+0x80C1 # <CJK>
+0x80C2 # <CJK>
+0x80C3 # <CJK>
+0x80C4 # <CJK>
+0x80C6 # <CJK>
+0x80CC # <CJK>
+0x80CD # <CJK>
+0x80CE # <CJK>
+0x80D6 # <CJK>
+0x80D7 # <CJK>
+0x80D9 # <CJK>
+0x80DA # <CJK>
+0x80DB # <CJK>
+0x80DC # <CJK>
+0x80DD # <CJK>
+0x80DE # <CJK>
+0x80E1 # <CJK>
+0x80E4 # <CJK>
+0x80E5 # <CJK>
+0x80E7 # <CJK>
+0x80E8 # <CJK>
+0x80E9 # <CJK>
+0x80EA # <CJK>
+0x80EB # <CJK>
+0x80EC # <CJK>
+0x80ED # <CJK>
+0x80EF # <CJK>
+0x80F0 # <CJK>
+0x80F1 # <CJK>
+0x80F2 # <CJK>
+0x80F3 # <CJK>
+0x80F4 # <CJK>
+0x80F6 # <CJK>
+0x80F8 # <CJK>
+0x80FA # <CJK>
+0x80FC # <CJK>
+0x80FD # <CJK>
+0x8102 # <CJK>
+0x8106 # <CJK>
+0x8109 # <CJK>
+0x810A # <CJK>
+0x810D # <CJK>
+0x810E # <CJK>
+0x810F # <CJK>
+0x8110 # <CJK>
+0x8111 # <CJK>
+0x8112 # <CJK>
+0x8113 # <CJK>
+0x8114 # <CJK>
+0x8116 # <CJK>
+0x8118 # <CJK>
+0x811A # <CJK>
+0x811E # <CJK>
+0x812C # <CJK>
+0x812F # <CJK>
+0x8131 # <CJK>
+0x8132 # <CJK>
+0x8136 # <CJK>
+0x8138 # <CJK>
+0x813E # <CJK>
+0x8146 # <CJK>
+0x8148 # <CJK>
+0x814A # <CJK>
+0x814B # <CJK>
+0x814C # <CJK>
+0x8150 # <CJK>
+0x8151 # <CJK>
+0x8153 # <CJK>
+0x8154 # <CJK>
+0x8155 # <CJK>
+0x8159 # <CJK>
+0x815A # <CJK>
+0x8160 # <CJK>
+0x8165 # <CJK>
+0x8167 # <CJK>
+0x8169 # <CJK>
+0x816D # <CJK>
+0x816E # <CJK>
+0x8170 # <CJK>
+0x8171 # <CJK>
+0x8174 # <CJK>
+0x8179 # <CJK>
+0x817A # <CJK>
+0x817B # <CJK>
+0x817C # <CJK>
+0x817D # <CJK>
+0x817E # <CJK>
+0x817F # <CJK>
+0x8180 # <CJK>
+0x8182 # <CJK>
+0x8188 # <CJK>
+0x818A # <CJK>
+0x818F # <CJK>
+0x8191 # <CJK>
+0x8198 # <CJK>
+0x819B # <CJK>
+0x819C # <CJK>
+0x819D # <CJK>
+0x81A3 # <CJK>
+0x81A6 # <CJK>
+0x81A8 # <CJK>
+0x81AA # <CJK>
+0x81B3 # <CJK>
+0x81BA # <CJK>
+0x81BB # <CJK>
+0x81C0 # <CJK>
+0x81C1 # <CJK>
+0x81C2 # <CJK>
+0x81C3 # <CJK>
+0x81C6 # <CJK>
+0x81CA # <CJK>
+0x81CC # <CJK>
+0x81E3 # <CJK>
+0x81E7 # <CJK>
+0x81EA # <CJK>
+0x81EC # <CJK>
+0x81ED # <CJK>
+0x81F3 # <CJK>
+0x81F4 # <CJK>
+0x81FB # <CJK>
+0x81FC # <CJK>
+0x81FE # <CJK>
+0x8200 # <CJK>
+0x8201 # <CJK>
+0x8202 # <CJK>
+0x8204 # <CJK>
+0x8205 # <CJK>
+0x8206 # <CJK>
+0x820C # <CJK>
+0x820D # <CJK>
+0x8210 # <CJK>
+0x8212 # <CJK>
+0x8214 # <CJK>
+0x821B # <CJK>
+0x821C # <CJK>
+0x821E # <CJK>
+0x821F # <CJK>
+0x8221 # <CJK>
+0x8222 # <CJK>
+0x8223 # <CJK>
+0x8228 # <CJK>
+0x822A # <CJK>
+0x822B # <CJK>
+0x822C # <CJK>
+0x822D # <CJK>
+0x822F # <CJK>
+0x8230 # <CJK>
+0x8231 # <CJK>
+0x8233 # <CJK>
+0x8234 # <CJK>
+0x8235 # <CJK>
+0x8236 # <CJK>
+0x8237 # <CJK>
+0x8238 # <CJK>
+0x8239 # <CJK>
+0x823B # <CJK>
+0x823E # <CJK>
+0x8244 # <CJK>
+0x8247 # <CJK>
+0x8249 # <CJK>
+0x824B # <CJK>
+0x824F # <CJK>
+0x8258 # <CJK>
+0x825A # <CJK>
+0x825F # <CJK>
+0x8268 # <CJK>
+0x826E # <CJK>
+0x826F # <CJK>
+0x8270 # <CJK>
+0x8272 # <CJK>
+0x8273 # <CJK>
+0x8274 # <CJK>
+0x8279 # <CJK>
+0x827A # <CJK>
+0x827D # <CJK>
+0x827E # <CJK>
+0x827F # <CJK>
+0x8282 # <CJK>
+0x8284 # <CJK>
+0x8288 # <CJK>
+0x828A # <CJK>
+0x828B # <CJK>
+0x828D # <CJK>
+0x828E # <CJK>
+0x828F # <CJK>
+0x8291 # <CJK>
+0x8292 # <CJK>
+0x8297 # <CJK>
+0x8298 # <CJK>
+0x8299 # <CJK>
+0x829C # <CJK>
+0x829D # <CJK>
+0x829F # <CJK>
+0x82A1 # <CJK>
+0x82A4 # <CJK>
+0x82A5 # <CJK>
+0x82A6 # <CJK>
+0x82A8 # <CJK>
+0x82A9 # <CJK>
+0x82AA # <CJK>
+0x82AB # <CJK>
+0x82AC # <CJK>
+0x82AD # <CJK>
+0x82AE # <CJK>
+0x82AF # <CJK>
+0x82B0 # <CJK>
+0x82B1 # <CJK>
+0x82B3 # <CJK>
+0x82B4 # <CJK>
+0x82B7 # <CJK>
+0x82B8 # <CJK>
+0x82B9 # <CJK>
+0x82BD # <CJK>
+0x82BE # <CJK>
+0x82C1 # <CJK>
+0x82C4 # <CJK>
+0x82C7 # <CJK>
+0x82C8 # <CJK>
+0x82CA # <CJK>
+0x82CB # <CJK>
+0x82CC # <CJK>
+0x82CD # <CJK>
+0x82CE # <CJK>
+0x82CF # <CJK>
+0x82D1 # <CJK>
+0x82D2 # <CJK>
+0x82D3 # <CJK>
+0x82D4 # <CJK>
+0x82D5 # <CJK>
+0x82D7 # <CJK>
+0x82D8 # <CJK>
+0x82DB # <CJK>
+0x82DC # <CJK>
+0x82DE # <CJK>
+0x82DF # <CJK>
+0x82E0 # <CJK>
+0x82E1 # <CJK>
+0x82E3 # <CJK>
+0x82E4 # <CJK>
+0x82E5 # <CJK>
+0x82E6 # <CJK>
+0x82EB # <CJK>
+0x82EF # <CJK>
+0x82F1 # <CJK>
+0x82F4 # <CJK>
+0x82F7 # <CJK>
+0x82F9 # <CJK>
+0x82FB # <CJK>
+0x8301 # <CJK>
+0x8302 # <CJK>
+0x8303 # <CJK>
+0x8304 # <CJK>
+0x8305 # <CJK>
+0x8306 # <CJK>
+0x8307 # <CJK>
+0x8308 # <CJK>
+0x8309 # <CJK>
+0x830C # <CJK>
+0x830E # <CJK>
+0x830F # <CJK>
+0x8311 # <CJK>
+0x8314 # <CJK>
+0x8315 # <CJK>
+0x8317 # <CJK>
+0x831A # <CJK>
+0x831B # <CJK>
+0x831C # <CJK>
+0x8327 # <CJK>
+0x8328 # <CJK>
+0x832B # <CJK>
+0x832C # <CJK>
+0x832D # <CJK>
+0x832F # <CJK>
+0x8331 # <CJK>
+0x8333 # <CJK>
+0x8334 # <CJK>
+0x8335 # <CJK>
+0x8336 # <CJK>
+0x8338 # <CJK>
+0x8339 # <CJK>
+0x833A # <CJK>
+0x833C # <CJK>
+0x8340 # <CJK>
+0x8343 # <CJK>
+0x8346 # <CJK>
+0x8347 # <CJK>
+0x8349 # <CJK>
+0x834F # <CJK>
+0x8350 # <CJK>
+0x8351 # <CJK>
+0x8352 # <CJK>
+0x8354 # <CJK>
+0x835A # <CJK>
+0x835B # <CJK>
+0x835C # <CJK>
+0x835E # <CJK>
+0x835F # <CJK>
+0x8360 # <CJK>
+0x8361 # <CJK>
+0x8363 # <CJK>
+0x8364 # <CJK>
+0x8365 # <CJK>
+0x8366 # <CJK>
+0x8367 # <CJK>
+0x8368 # <CJK>
+0x8369 # <CJK>
+0x836A # <CJK>
+0x836B # <CJK>
+0x836C # <CJK>
+0x836D # <CJK>
+0x836E # <CJK>
+0x836F # <CJK>
+0x8377 # <CJK>
+0x8378 # <CJK>
+0x837B # <CJK>
+0x837C # <CJK>
+0x837D # <CJK>
+0x8385 # <CJK>
+0x8386 # <CJK>
+0x8389 # <CJK>
+0x838E # <CJK>
+0x8392 # <CJK>
+0x8393 # <CJK>
+0x8398 # <CJK>
+0x839B # <CJK>
+0x839C # <CJK>
+0x839E # <CJK>
+0x83A0 # <CJK>
+0x83A8 # <CJK>
+0x83A9 # <CJK>
+0x83AA # <CJK>
+0x83AB # <CJK>
+0x83B0 # <CJK>
+0x83B1 # <CJK>
+0x83B2 # <CJK>
+0x83B3 # <CJK>
+0x83B4 # <CJK>
+0x83B6 # <CJK>
+0x83B7 # <CJK>
+0x83B8 # <CJK>
+0x83B9 # <CJK>
+0x83BA # <CJK>
+0x83BC # <CJK>
+0x83BD # <CJK>
+0x83C0 # <CJK>
+0x83C1 # <CJK>
+0x83C5 # <CJK>
+0x83C7 # <CJK>
+0x83CA # <CJK>
+0x83CC # <CJK>
+0x83CF # <CJK>
+0x83D4 # <CJK>
+0x83D6 # <CJK>
+0x83D8 # <CJK>
+0x83DC # <CJK>
+0x83DD # <CJK>
+0x83DF # <CJK>
+0x83E0 # <CJK>
+0x83E1 # <CJK>
+0x83E5 # <CJK>
+0x83E9 # <CJK>
+0x83EA # <CJK>
+0x83F0 # <CJK>
+0x83F1 # <CJK>
+0x83F2 # <CJK>
+0x83F8 # <CJK>
+0x83F9 # <CJK>
+0x83FD # <CJK>
+0x8401 # <CJK>
+0x8403 # <CJK>
+0x8404 # <CJK>
+0x8406 # <CJK>
+0x840B # <CJK>
+0x840C # <CJK>
+0x840D # <CJK>
+0x840E # <CJK>
+0x840F # <CJK>
+0x8411 # <CJK>
+0x8418 # <CJK>
+0x841C # <CJK>
+0x841D # <CJK>
+0x8424 # <CJK>
+0x8425 # <CJK>
+0x8426 # <CJK>
+0x8427 # <CJK>
+0x8428 # <CJK>
+0x8431 # <CJK>
+0x8438 # <CJK>
+0x843C # <CJK>
+0x843D # <CJK>
+0x8446 # <CJK>
+0x8451 # <CJK>
+0x8457 # <CJK>
+0x8459 # <CJK>
+0x845A # <CJK>
+0x845B # <CJK>
+0x845C # <CJK>
+0x8461 # <CJK>
+0x8463 # <CJK>
+0x8469 # <CJK>
+0x846B # <CJK>
+0x846C # <CJK>
+0x846D # <CJK>
+0x8471 # <CJK>
+0x8473 # <CJK>
+0x8475 # <CJK>
+0x8476 # <CJK>
+0x8478 # <CJK>
+0x847A # <CJK>
+0x8482 # <CJK>
+0x8487 # <CJK>
+0x8488 # <CJK>
+0x8489 # <CJK>
+0x848B # <CJK>
+0x848C # <CJK>
+0x848E # <CJK>
+0x8497 # <CJK>
+0x8499 # <CJK>
+0x849C # <CJK>
+0x84A1 # <CJK>
+0x84AF # <CJK>
+0x84B2 # <CJK>
+0x84B4 # <CJK>
+0x84B8 # <CJK>
+0x84B9 # <CJK>
+0x84BA # <CJK>
+0x84BD # <CJK>
+0x84BF # <CJK>
+0x84C1 # <CJK>
+0x84C4 # <CJK>
+0x84C9 # <CJK>
+0x84CA # <CJK>
+0x84CD # <CJK>
+0x84D0 # <CJK>
+0x84D1 # <CJK>
+0x84D3 # <CJK>
+0x84D6 # <CJK>
+0x84DD # <CJK>
+0x84DF # <CJK>
+0x84E0 # <CJK>
+0x84E3 # <CJK>
+0x84E5 # <CJK>
+0x84E6 # <CJK>
+0x84EC # <CJK>
+0x84F0 # <CJK>
+0x84FC # <CJK>
+0x84FF # <CJK>
+0x850C # <CJK>
+0x8511 # <CJK>
+0x8513 # <CJK>
+0x8517 # <CJK>
+0x851A # <CJK>
+0x851F # <CJK>
+0x8521 # <CJK>
+0x852B # <CJK>
+0x852C # <CJK>
+0x8537 # <CJK>
+0x8538 # <CJK>
+0x8539 # <CJK>
+0x853A # <CJK>
+0x853B # <CJK>
+0x853C # <CJK>
+0x853D # <CJK>
+0x8543 # <CJK>
+0x8548 # <CJK>
+0x8549 # <CJK>
+0x854A # <CJK>
+0x8556 # <CJK>
+0x8559 # <CJK>
+0x855E # <CJK>
+0x8564 # <CJK>
+0x8568 # <CJK>
+0x8572 # <CJK>
+0x8574 # <CJK>
+0x8579 # <CJK>
+0x857A # <CJK>
+0x857B # <CJK>
+0x857E # <CJK>
+0x8584 # <CJK>
+0x8585 # <CJK>
+0x8587 # <CJK>
+0x858F # <CJK>
+0x859B # <CJK>
+0x859C # <CJK>
+0x85A4 # <CJK>
+0x85A8 # <CJK>
+0x85AA # <CJK>
+0x85AE # <CJK>
+0x85AF # <CJK>
+0x85B0 # <CJK>
+0x85B7 # <CJK>
+0x85B9 # <CJK>
+0x85C1 # <CJK>
+0x85C9 # <CJK>
+0x85CF # <CJK>
+0x85D0 # <CJK>
+0x85D3 # <CJK>
+0x85D5 # <CJK>
+0x85DC # <CJK>
+0x85E4 # <CJK>
+0x85E9 # <CJK>
+0x85FB # <CJK>
+0x85FF # <CJK>
+0x8605 # <CJK>
+0x8611 # <CJK>
+0x8616 # <CJK>
+0x8627 # <CJK>
+0x8629 # <CJK>
+0x8638 # <CJK>
+0x863C # <CJK>
+0x864D # <CJK>
+0x864E # <CJK>
+0x864F # <CJK>
+0x8650 # <CJK>
+0x8651 # <CJK>
+0x8654 # <CJK>
+0x865A # <CJK>
+0x865E # <CJK>
+0x8662 # <CJK>
+0x866B # <CJK>
+0x866C # <CJK>
+0x866E # <CJK>
+0x8671 # <CJK>
+0x8679 # <CJK>
+0x867A # <CJK>
+0x867B # <CJK>
+0x867C # <CJK>
+0x867D # <CJK>
+0x867E # <CJK>
+0x867F # <CJK>
+0x8680 # <CJK>
+0x8681 # <CJK>
+0x8682 # <CJK>
+0x868A # <CJK>
+0x868B # <CJK>
+0x868C # <CJK>
+0x868D # <CJK>
+0x8693 # <CJK>
+0x8695 # <CJK>
+0x869C # <CJK>
+0x869D # <CJK>
+0x86A3 # <CJK>
+0x86A4 # <CJK>
+0x86A7 # <CJK>
+0x86A8 # <CJK>
+0x86A9 # <CJK>
+0x86AA # <CJK>
+0x86AC # <CJK>
+0x86AF # <CJK>
+0x86B0 # <CJK>
+0x86B1 # <CJK>
+0x86B4 # <CJK>
+0x86B5 # <CJK>
+0x86B6 # <CJK>
+0x86BA # <CJK>
+0x86C0 # <CJK>
+0x86C4 # <CJK>
+0x86C6 # <CJK>
+0x86C7 # <CJK>
+0x86C9 # <CJK>
+0x86CA # <CJK>
+0x86CB # <CJK>
+0x86CE # <CJK>
+0x86CF # <CJK>
+0x86D0 # <CJK>
+0x86D1 # <CJK>
+0x86D4 # <CJK>
+0x86D8 # <CJK>
+0x86D9 # <CJK>
+0x86DB # <CJK>
+0x86DE # <CJK>
+0x86DF # <CJK>
+0x86E4 # <CJK>
+0x86E9 # <CJK>
+0x86ED # <CJK>
+0x86EE # <CJK>
+0x86F0 # <CJK>
+0x86F1 # <CJK>
+0x86F2 # <CJK>
+0x86F3 # <CJK>
+0x86F4 # <CJK>
+0x86F8 # <CJK>
+0x86F9 # <CJK>
+0x86FE # <CJK>
+0x8700 # <CJK>
+0x8702 # <CJK>
+0x8703 # <CJK>
+0x8707 # <CJK>
+0x8708 # <CJK>
+0x8709 # <CJK>
+0x870A # <CJK>
+0x870D # <CJK>
+0x8712 # <CJK>
+0x8713 # <CJK>
+0x8715 # <CJK>
+0x8717 # <CJK>
+0x8718 # <CJK>
+0x871A # <CJK>
+0x871C # <CJK>
+0x871E # <CJK>
+0x8721 # <CJK>
+0x8722 # <CJK>
+0x8723 # <CJK>
+0x8725 # <CJK>
+0x8729 # <CJK>
+0x872E # <CJK>
+0x8731 # <CJK>
+0x8734 # <CJK>
+0x8737 # <CJK>
+0x873B # <CJK>
+0x873E # <CJK>
+0x873F # <CJK>
+0x8747 # <CJK>
+0x8748 # <CJK>
+0x8749 # <CJK>
+0x874C # <CJK>
+0x874E # <CJK>
+0x8753 # <CJK>
+0x8757 # <CJK>
+0x8759 # <CJK>
+0x8760 # <CJK>
+0x8763 # <CJK>
+0x8764 # <CJK>
+0x8765 # <CJK>
+0x876E # <CJK>
+0x8770 # <CJK>
+0x8774 # <CJK>
+0x8776 # <CJK>
+0x877B # <CJK>
+0x877C # <CJK>
+0x877D # <CJK>
+0x877E # <CJK>
+0x8782 # <CJK>
+0x8783 # <CJK>
+0x8785 # <CJK>
+0x8788 # <CJK>
+0x878B # <CJK>
+0x878D # <CJK>
+0x8793 # <CJK>
+0x8797 # <CJK>
+0x879F # <CJK>
+0x87A8 # <CJK>
+0x87AB # <CJK>
+0x87AC # <CJK>
+0x87AD # <CJK>
+0x87AF # <CJK>
+0x87B3 # <CJK>
+0x87B5 # <CJK>
+0x87BA # <CJK>
+0x87BD # <CJK>
+0x87C0 # <CJK>
+0x87C6 # <CJK>
+0x87CA # <CJK>
+0x87CB # <CJK>
+0x87D1 # <CJK>
+0x87D2 # <CJK>
+0x87D3 # <CJK>
+0x87DB # <CJK>
+0x87E0 # <CJK>
+0x87E5 # <CJK>
+0x87EA # <CJK>
+0x87EE # <CJK>
+0x87F9 # <CJK>
+0x87FE # <CJK>
+0x8803 # <CJK>
+0x880A # <CJK>
+0x8813 # <CJK>
+0x8815 # <CJK>
+0x8816 # <CJK>
+0x881B # <CJK>
+0x8821 # <CJK>
+0x8822 # <CJK>
+0x8832 # <CJK>
+0x8839 # <CJK>
+0x883C # <CJK>
+0x8840 # <CJK>
+0x8844 # <CJK>
+0x8845 # <CJK>
+0x884C # <CJK>
+0x884D # <CJK>
+0x8854 # <CJK>
+0x8857 # <CJK>
+0x8859 # <CJK>
+0x8861 # <CJK>
+0x8862 # <CJK>
+0x8863 # <CJK>
+0x8864 # <CJK>
+0x8865 # <CJK>
+0x8868 # <CJK>
+0x8869 # <CJK>
+0x886B # <CJK>
+0x886C # <CJK>
+0x886E # <CJK>
+0x8870 # <CJK>
+0x8872 # <CJK>
+0x8877 # <CJK>
+0x887D # <CJK>
+0x887E # <CJK>
+0x887F # <CJK>
+0x8881 # <CJK>
+0x8882 # <CJK>
+0x8884 # <CJK>
+0x8885 # <CJK>
+0x8888 # <CJK>
+0x888B # <CJK>
+0x888D # <CJK>
+0x8892 # <CJK>
+0x8896 # <CJK>
+0x889C # <CJK>
+0x88A2 # <CJK>
+0x88A4 # <CJK>
+0x88AB # <CJK>
+0x88AD # <CJK>
+0x88B1 # <CJK>
+0x88B7 # <CJK>
+0x88BC # <CJK>
+0x88C1 # <CJK>
+0x88C2 # <CJK>
+0x88C5 # <CJK>
+0x88C6 # <CJK>
+0x88C9 # <CJK>
+0x88CE # <CJK>
+0x88D2 # <CJK>
+0x88D4 # <CJK>
+0x88D5 # <CJK>
+0x88D8 # <CJK>
+0x88D9 # <CJK>
+0x88DF # <CJK>
+0x88E2 # <CJK>
+0x88E3 # <CJK>
+0x88E4 # <CJK>
+0x88E5 # <CJK>
+0x88E8 # <CJK>
+0x88F0 # <CJK>
+0x88F1 # <CJK>
+0x88F3 # <CJK>
+0x88F4 # <CJK>
+0x88F8 # <CJK>
+0x88F9 # <CJK>
+0x88FC # <CJK>
+0x88FE # <CJK>
+0x8902 # <CJK>
+0x890A # <CJK>
+0x8910 # <CJK>
+0x8912 # <CJK>
+0x8913 # <CJK>
+0x8919 # <CJK>
+0x891A # <CJK>
+0x891B # <CJK>
+0x8921 # <CJK>
+0x8925 # <CJK>
+0x892A # <CJK>
+0x892B # <CJK>
+0x8930 # <CJK>
+0x8934 # <CJK>
+0x8936 # <CJK>
+0x8941 # <CJK>
+0x8944 # <CJK>
+0x895E # <CJK>
+0x895F # <CJK>
+0x8966 # <CJK>
+0x897B # <CJK>
+0x897F # <CJK>
+0x8981 # <CJK>
+0x8983 # <CJK>
+0x8986 # <CJK>
+0x89C1 # <CJK>
+0x89C2 # <CJK>
+0x89C4 # <CJK>
+0x89C5 # <CJK>
+0x89C6 # <CJK>
+0x89C7 # <CJK>
+0x89C8 # <CJK>
+0x89C9 # <CJK>
+0x89CA # <CJK>
+0x89CB # <CJK>
+0x89CC # <CJK>
+0x89CE # <CJK>
+0x89CF # <CJK>
+0x89D0 # <CJK>
+0x89D1 # <CJK>
+0x89D2 # <CJK>
+0x89D6 # <CJK>
+0x89DA # <CJK>
+0x89DC # <CJK>
+0x89DE # <CJK>
+0x89E3 # <CJK>
+0x89E5 # <CJK>
+0x89E6 # <CJK>
+0x89EB # <CJK>
+0x89EF # <CJK>
+0x89F3 # <CJK>
+0x8A00 # <CJK>
+0x8A07 # <CJK>
+0x8A3E # <CJK>
+0x8A48 # <CJK>
+0x8A79 # <CJK>
+0x8A89 # <CJK>
+0x8A8A # <CJK>
+0x8A93 # <CJK>
+0x8B07 # <CJK>
+0x8B26 # <CJK>
+0x8B66 # <CJK>
+0x8B6C # <CJK>
+0x8BA0 # <CJK>
+0x8BA1 # <CJK>
+0x8BA2 # <CJK>
+0x8BA3 # <CJK>
+0x8BA4 # <CJK>
+0x8BA5 # <CJK>
+0x8BA6 # <CJK>
+0x8BA7 # <CJK>
+0x8BA8 # <CJK>
+0x8BA9 # <CJK>
+0x8BAA # <CJK>
+0x8BAB # <CJK>
+0x8BAD # <CJK>
+0x8BAE # <CJK>
+0x8BAF # <CJK>
+0x8BB0 # <CJK>
+0x8BB2 # <CJK>
+0x8BB3 # <CJK>
+0x8BB4 # <CJK>
+0x8BB5 # <CJK>
+0x8BB6 # <CJK>
+0x8BB7 # <CJK>
+0x8BB8 # <CJK>
+0x8BB9 # <CJK>
+0x8BBA # <CJK>
+0x8BBC # <CJK>
+0x8BBD # <CJK>
+0x8BBE # <CJK>
+0x8BBF # <CJK>
+0x8BC0 # <CJK>
+0x8BC1 # <CJK>
+0x8BC2 # <CJK>
+0x8BC3 # <CJK>
+0x8BC4 # <CJK>
+0x8BC5 # <CJK>
+0x8BC6 # <CJK>
+0x8BC8 # <CJK>
+0x8BC9 # <CJK>
+0x8BCA # <CJK>
+0x8BCB # <CJK>
+0x8BCC # <CJK>
+0x8BCD # <CJK>
+0x8BCE # <CJK>
+0x8BCF # <CJK>
+0x8BD1 # <CJK>
+0x8BD2 # <CJK>
+0x8BD3 # <CJK>
+0x8BD4 # <CJK>
+0x8BD5 # <CJK>
+0x8BD6 # <CJK>
+0x8BD7 # <CJK>
+0x8BD8 # <CJK>
+0x8BD9 # <CJK>
+0x8BDA # <CJK>
+0x8BDB # <CJK>
+0x8BDC # <CJK>
+0x8BDD # <CJK>
+0x8BDE # <CJK>
+0x8BDF # <CJK>
+0x8BE0 # <CJK>
+0x8BE1 # <CJK>
+0x8BE2 # <CJK>
+0x8BE3 # <CJK>
+0x8BE4 # <CJK>
+0x8BE5 # <CJK>
+0x8BE6 # <CJK>
+0x8BE7 # <CJK>
+0x8BE8 # <CJK>
+0x8BE9 # <CJK>
+0x8BEB # <CJK>
+0x8BEC # <CJK>
+0x8BED # <CJK>
+0x8BEE # <CJK>
+0x8BEF # <CJK>
+0x8BF0 # <CJK>
+0x8BF1 # <CJK>
+0x8BF2 # <CJK>
+0x8BF3 # <CJK>
+0x8BF4 # <CJK>
+0x8BF5 # <CJK>
+0x8BF6 # <CJK>
+0x8BF7 # <CJK>
+0x8BF8 # <CJK>
+0x8BF9 # <CJK>
+0x8BFA # <CJK>
+0x8BFB # <CJK>
+0x8BFC # <CJK>
+0x8BFD # <CJK>
+0x8BFE # <CJK>
+0x8BFF # <CJK>
+0x8C00 # <CJK>
+0x8C01 # <CJK>
+0x8C02 # <CJK>
+0x8C03 # <CJK>
+0x8C04 # <CJK>
+0x8C05 # <CJK>
+0x8C06 # <CJK>
+0x8C07 # <CJK>
+0x8C08 # <CJK>
+0x8C0A # <CJK>
+0x8C0B # <CJK>
+0x8C0C # <CJK>
+0x8C0D # <CJK>
+0x8C0E # <CJK>
+0x8C0F # <CJK>
+0x8C10 # <CJK>
+0x8C11 # <CJK>
+0x8C12 # <CJK>
+0x8C13 # <CJK>
+0x8C14 # <CJK>
+0x8C15 # <CJK>
+0x8C16 # <CJK>
+0x8C17 # <CJK>
+0x8C18 # <CJK>
+0x8C19 # <CJK>
+0x8C1A # <CJK>
+0x8C1B # <CJK>
+0x8C1C # <CJK>
+0x8C1D # <CJK>
+0x8C1F # <CJK>
+0x8C20 # <CJK>
+0x8C21 # <CJK>
+0x8C22 # <CJK>
+0x8C23 # <CJK>
+0x8C24 # <CJK>
+0x8C25 # <CJK>
+0x8C26 # <CJK>
+0x8C27 # <CJK>
+0x8C28 # <CJK>
+0x8C29 # <CJK>
+0x8C2A # <CJK>
+0x8C2B # <CJK>
+0x8C2C # <CJK>
+0x8C2D # <CJK>
+0x8C2E # <CJK>
+0x8C2F # <CJK>
+0x8C30 # <CJK>
+0x8C31 # <CJK>
+0x8C32 # <CJK>
+0x8C33 # <CJK>
+0x8C34 # <CJK>
+0x8C35 # <CJK>
+0x8C36 # <CJK>
+0x8C37 # <CJK>
+0x8C41 # <CJK>
+0x8C46 # <CJK>
+0x8C47 # <CJK>
+0x8C49 # <CJK>
+0x8C4C # <CJK>
+0x8C55 # <CJK>
+0x8C5A # <CJK>
+0x8C61 # <CJK>
+0x8C62 # <CJK>
+0x8C6A # <CJK>
+0x8C6B # <CJK>
+0x8C73 # <CJK>
+0x8C78 # <CJK>
+0x8C79 # <CJK>
+0x8C7A # <CJK>
+0x8C82 # <CJK>
+0x8C85 # <CJK>
+0x8C89 # <CJK>
+0x8C8A # <CJK>
+0x8C8C # <CJK>
+0x8C94 # <CJK>
+0x8C98 # <CJK>
+0x8D1D # <CJK>
+0x8D1E # <CJK>
+0x8D1F # <CJK>
+0x8D21 # <CJK>
+0x8D22 # <CJK>
+0x8D23 # <CJK>
+0x8D24 # <CJK>
+0x8D25 # <CJK>
+0x8D26 # <CJK>
+0x8D27 # <CJK>
+0x8D28 # <CJK>
+0x8D29 # <CJK>
+0x8D2A # <CJK>
+0x8D2B # <CJK>
+0x8D2C # <CJK>
+0x8D2D # <CJK>
+0x8D2E # <CJK>
+0x8D2F # <CJK>
+0x8D30 # <CJK>
+0x8D31 # <CJK>
+0x8D32 # <CJK>
+0x8D33 # <CJK>
+0x8D34 # <CJK>
+0x8D35 # <CJK>
+0x8D36 # <CJK>
+0x8D37 # <CJK>
+0x8D38 # <CJK>
+0x8D39 # <CJK>
+0x8D3A # <CJK>
+0x8D3B # <CJK>
+0x8D3C # <CJK>
+0x8D3D # <CJK>
+0x8D3E # <CJK>
+0x8D3F # <CJK>
+0x8D40 # <CJK>
+0x8D41 # <CJK>
+0x8D42 # <CJK>
+0x8D43 # <CJK>
+0x8D44 # <CJK>
+0x8D45 # <CJK>
+0x8D46 # <CJK>
+0x8D47 # <CJK>
+0x8D48 # <CJK>
+0x8D49 # <CJK>
+0x8D4A # <CJK>
+0x8D4B # <CJK>
+0x8D4C # <CJK>
+0x8D4D # <CJK>
+0x8D4E # <CJK>
+0x8D4F # <CJK>
+0x8D50 # <CJK>
+0x8D53 # <CJK>
+0x8D54 # <CJK>
+0x8D55 # <CJK>
+0x8D56 # <CJK>
+0x8D58 # <CJK>
+0x8D59 # <CJK>
+0x8D5A # <CJK>
+0x8D5B # <CJK>
+0x8D5C # <CJK>
+0x8D5D # <CJK>
+0x8D5E # <CJK>
+0x8D60 # <CJK>
+0x8D61 # <CJK>
+0x8D62 # <CJK>
+0x8D63 # <CJK>
+0x8D64 # <CJK>
+0x8D66 # <CJK>
+0x8D67 # <CJK>
+0x8D6B # <CJK>
+0x8D6D # <CJK>
+0x8D70 # <CJK>
+0x8D73 # <CJK>
+0x8D74 # <CJK>
+0x8D75 # <CJK>
+0x8D76 # <CJK>
+0x8D77 # <CJK>
+0x8D81 # <CJK>
+0x8D84 # <CJK>
+0x8D85 # <CJK>
+0x8D8A # <CJK>
+0x8D8B # <CJK>
+0x8D91 # <CJK>
+0x8D94 # <CJK>
+0x8D9F # <CJK>
+0x8DA3 # <CJK>
+0x8DB1 # <CJK>
+0x8DB3 # <CJK>
+0x8DB4 # <CJK>
+0x8DB5 # <CJK>
+0x8DB8 # <CJK>
+0x8DBA # <CJK>
+0x8DBC # <CJK>
+0x8DBE # <CJK>
+0x8DBF # <CJK>
+0x8DC3 # <CJK>
+0x8DC4 # <CJK>
+0x8DC6 # <CJK>
+0x8DCB # <CJK>
+0x8DCC # <CJK>
+0x8DCE # <CJK>
+0x8DCF # <CJK>
+0x8DD1 # <CJK>
+0x8DD6 # <CJK>
+0x8DD7 # <CJK>
+0x8DDA # <CJK>
+0x8DDB # <CJK>
+0x8DDD # <CJK>
+0x8DDE # <CJK>
+0x8DDF # <CJK>
+0x8DE3 # <CJK>
+0x8DE4 # <CJK>
+0x8DE8 # <CJK>
+0x8DEA # <CJK>
+0x8DEB # <CJK>
+0x8DEC # <CJK>
+0x8DEF # <CJK>
+0x8DF3 # <CJK>
+0x8DF5 # <CJK>
+0x8DF7 # <CJK>
+0x8DF8 # <CJK>
+0x8DF9 # <CJK>
+0x8DFA # <CJK>
+0x8DFB # <CJK>
+0x8DFD # <CJK>
+0x8E05 # <CJK>
+0x8E09 # <CJK>
+0x8E0A # <CJK>
+0x8E0C # <CJK>
+0x8E0F # <CJK>
+0x8E14 # <CJK>
+0x8E1D # <CJK>
+0x8E1E # <CJK>
+0x8E1F # <CJK>
+0x8E22 # <CJK>
+0x8E23 # <CJK>
+0x8E29 # <CJK>
+0x8E2A # <CJK>
+0x8E2C # <CJK>
+0x8E2E # <CJK>
+0x8E2F # <CJK>
+0x8E31 # <CJK>
+0x8E35 # <CJK>
+0x8E39 # <CJK>
+0x8E3A # <CJK>
+0x8E3D # <CJK>
+0x8E40 # <CJK>
+0x8E41 # <CJK>
+0x8E42 # <CJK>
+0x8E44 # <CJK>
+0x8E47 # <CJK>
+0x8E48 # <CJK>
+0x8E49 # <CJK>
+0x8E4A # <CJK>
+0x8E4B # <CJK>
+0x8E51 # <CJK>
+0x8E52 # <CJK>
+0x8E59 # <CJK>
+0x8E66 # <CJK>
+0x8E69 # <CJK>
+0x8E6C # <CJK>
+0x8E6D # <CJK>
+0x8E6F # <CJK>
+0x8E70 # <CJK>
+0x8E72 # <CJK>
+0x8E74 # <CJK>
+0x8E76 # <CJK>
+0x8E7C # <CJK>
+0x8E7F # <CJK>
+0x8E81 # <CJK>
+0x8E85 # <CJK>
+0x8E87 # <CJK>
+0x8E8F # <CJK>
+0x8E90 # <CJK>
+0x8E94 # <CJK>
+0x8E9C # <CJK>
+0x8E9E # <CJK>
+0x8EAB # <CJK>
+0x8EAC # <CJK>
+0x8EAF # <CJK>
+0x8EB2 # <CJK>
+0x8EBA # <CJK>
+0x8ECE # <CJK>
+0x8F66 # <CJK>
+0x8F67 # <CJK>
+0x8F68 # <CJK>
+0x8F69 # <CJK>
+0x8F6B # <CJK>
+0x8F6C # <CJK>
+0x8F6D # <CJK>
+0x8F6E # <CJK>
+0x8F6F # <CJK>
+0x8F70 # <CJK>
+0x8F71 # <CJK>
+0x8F72 # <CJK>
+0x8F73 # <CJK>
+0x8F74 # <CJK>
+0x8F75 # <CJK>
+0x8F76 # <CJK>
+0x8F77 # <CJK>
+0x8F78 # <CJK>
+0x8F79 # <CJK>
+0x8F7A # <CJK>
+0x8F7B # <CJK>
+0x8F7C # <CJK>
+0x8F7D # <CJK>
+0x8F7E # <CJK>
+0x8F7F # <CJK>
+0x8F81 # <CJK>
+0x8F82 # <CJK>
+0x8F83 # <CJK>
+0x8F84 # <CJK>
+0x8F85 # <CJK>
+0x8F86 # <CJK>
+0x8F87 # <CJK>
+0x8F88 # <CJK>
+0x8F89 # <CJK>
+0x8F8A # <CJK>
+0x8F8B # <CJK>
+0x8F8D # <CJK>
+0x8F8E # <CJK>
+0x8F8F # <CJK>
+0x8F90 # <CJK>
+0x8F91 # <CJK>
+0x8F93 # <CJK>
+0x8F94 # <CJK>
+0x8F95 # <CJK>
+0x8F96 # <CJK>
+0x8F97 # <CJK>
+0x8F98 # <CJK>
+0x8F99 # <CJK>
+0x8F9A # <CJK>
+0x8F9B # <CJK>
+0x8F9C # <CJK>
+0x8F9E # <CJK>
+0x8F9F # <CJK>
+0x8FA3 # <CJK>
+0x8FA8 # <CJK>
+0x8FA9 # <CJK>
+0x8FAB # <CJK>
+0x8FB0 # <CJK>
+0x8FB1 # <CJK>
+0x8FB6 # <CJK>
+0x8FB9 # <CJK>
+0x8FBD # <CJK>
+0x8FBE # <CJK>
+0x8FC1 # <CJK>
+0x8FC2 # <CJK>
+0x8FC4 # <CJK>
+0x8FC5 # <CJK>
+0x8FC7 # <CJK>
+0x8FC8 # <CJK>
+0x8FCE # <CJK>
+0x8FD0 # <CJK>
+0x8FD1 # <CJK>
+0x8FD3 # <CJK>
+0x8FD4 # <CJK>
+0x8FD5 # <CJK>
+0x8FD8 # <CJK>
+0x8FD9 # <CJK>
+0x8FDB # <CJK>
+0x8FDC # <CJK>
+0x8FDD # <CJK>
+0x8FDE # <CJK>
+0x8FDF # <CJK>
+0x8FE2 # <CJK>
+0x8FE4 # <CJK>
+0x8FE5 # <CJK>
+0x8FE6 # <CJK>
+0x8FE8 # <CJK>
+0x8FE9 # <CJK>
+0x8FEA # <CJK>
+0x8FEB # <CJK>
+0x8FED # <CJK>
+0x8FEE # <CJK>
+0x8FF0 # <CJK>
+0x8FF3 # <CJK>
+0x8FF7 # <CJK>
+0x8FF8 # <CJK>
+0x8FF9 # <CJK>
+0x8FFD # <CJK>
+0x9000 # <CJK>
+0x9001 # <CJK>
+0x9002 # <CJK>
+0x9003 # <CJK>
+0x9004 # <CJK>
+0x9005 # <CJK>
+0x9006 # <CJK>
+0x9009 # <CJK>
+0x900A # <CJK>
+0x900B # <CJK>
+0x900D # <CJK>
+0x900F # <CJK>
+0x9010 # <CJK>
+0x9011 # <CJK>
+0x9012 # <CJK>
+0x9014 # <CJK>
+0x9016 # <CJK>
+0x9017 # <CJK>
+0x901A # <CJK>
+0x901B # <CJK>
+0x901D # <CJK>
+0x901E # <CJK>
+0x901F # <CJK>
+0x9020 # <CJK>
+0x9021 # <CJK>
+0x9022 # <CJK>
+0x9026 # <CJK>
+0x902D # <CJK>
+0x902E # <CJK>
+0x902F # <CJK>
+0x9035 # <CJK>
+0x9036 # <CJK>
+0x9038 # <CJK>
+0x903B # <CJK>
+0x903C # <CJK>
+0x903E # <CJK>
+0x9041 # <CJK>
+0x9042 # <CJK>
+0x9044 # <CJK>
+0x9047 # <CJK>
+0x904D # <CJK>
+0x904F # <CJK>
+0x9050 # <CJK>
+0x9051 # <CJK>
+0x9052 # <CJK>
+0x9053 # <CJK>
+0x9057 # <CJK>
+0x9058 # <CJK>
+0x905B # <CJK>
+0x9062 # <CJK>
+0x9063 # <CJK>
+0x9065 # <CJK>
+0x9068 # <CJK>
+0x906D # <CJK>
+0x906E # <CJK>
+0x9074 # <CJK>
+0x9075 # <CJK>
+0x907D # <CJK>
+0x907F # <CJK>
+0x9080 # <CJK>
+0x9082 # <CJK>
+0x9083 # <CJK>
+0x9088 # <CJK>
+0x908B # <CJK>
+0x9091 # <CJK>
+0x9093 # <CJK>
+0x9095 # <CJK>
+0x9097 # <CJK>
+0x9099 # <CJK>
+0x909B # <CJK>
+0x909D # <CJK>
+0x90A1 # <CJK>
+0x90A2 # <CJK>
+0x90A3 # <CJK>
+0x90A6 # <CJK>
+0x90AA # <CJK>
+0x90AC # <CJK>
+0x90AE # <CJK>
+0x90AF # <CJK>
+0x90B0 # <CJK>
+0x90B1 # <CJK>
+0x90B3 # <CJK>
+0x90B4 # <CJK>
+0x90B5 # <CJK>
+0x90B6 # <CJK>
+0x90B8 # <CJK>
+0x90B9 # <CJK>
+0x90BA # <CJK>
+0x90BB # <CJK>
+0x90BE # <CJK>
+0x90C1 # <CJK>
+0x90C4 # <CJK>
+0x90C5 # <CJK>
+0x90C7 # <CJK>
+0x90CA # <CJK>
+0x90CE # <CJK>
+0x90CF # <CJK>
+0x90D0 # <CJK>
+0x90D1 # <CJK>
+0x90D3 # <CJK>
+0x90D7 # <CJK>
+0x90DB # <CJK>
+0x90DC # <CJK>
+0x90DD # <CJK>
+0x90E1 # <CJK>
+0x90E2 # <CJK>
+0x90E6 # <CJK>
+0x90E7 # <CJK>
+0x90E8 # <CJK>
+0x90EB # <CJK>
+0x90ED # <CJK>
+0x90EF # <CJK>
+0x90F4 # <CJK>
+0x90F8 # <CJK>
+0x90FD # <CJK>
+0x90FE # <CJK>
+0x9102 # <CJK>
+0x9104 # <CJK>
+0x9119 # <CJK>
+0x911E # <CJK>
+0x9122 # <CJK>
+0x9123 # <CJK>
+0x912F # <CJK>
+0x9131 # <CJK>
+0x9139 # <CJK>
+0x9143 # <CJK>
+0x9146 # <CJK>
+0x9149 # <CJK>
+0x914A # <CJK>
+0x914B # <CJK>
+0x914C # <CJK>
+0x914D # <CJK>
+0x914E # <CJK>
+0x914F # <CJK>
+0x9150 # <CJK>
+0x9152 # <CJK>
+0x9157 # <CJK>
+0x915A # <CJK>
+0x915D # <CJK>
+0x915E # <CJK>
+0x9161 # <CJK>
+0x9162 # <CJK>
+0x9163 # <CJK>
+0x9164 # <CJK>
+0x9165 # <CJK>
+0x9169 # <CJK>
+0x916A # <CJK>
+0x916C # <CJK>
+0x916E # <CJK>
+0x916F # <CJK>
+0x9170 # <CJK>
+0x9171 # <CJK>
+0x9172 # <CJK>
+0x9174 # <CJK>
+0x9175 # <CJK>
+0x9176 # <CJK>
+0x9177 # <CJK>
+0x9178 # <CJK>
+0x9179 # <CJK>
+0x917D # <CJK>
+0x917E # <CJK>
+0x917F # <CJK>
+0x9185 # <CJK>
+0x9187 # <CJK>
+0x9189 # <CJK>
+0x918B # <CJK>
+0x918C # <CJK>
+0x918D # <CJK>
+0x9190 # <CJK>
+0x9191 # <CJK>
+0x9192 # <CJK>
+0x919A # <CJK>
+0x919B # <CJK>
+0x91A2 # <CJK>
+0x91A3 # <CJK>
+0x91AA # <CJK>
+0x91AD # <CJK>
+0x91AE # <CJK>
+0x91AF # <CJK>
+0x91B4 # <CJK>
+0x91B5 # <CJK>
+0x91BA # <CJK>
+0x91C7 # <CJK>
+0x91C9 # <CJK>
+0x91CA # <CJK>
+0x91CC # <CJK>
+0x91CD # <CJK>
+0x91CE # <CJK>
+0x91CF # <CJK>
+0x91D1 # <CJK>
+0x91DC # <CJK>
+0x9274 # <CJK>
+0x928E # <CJK>
+0x92AE # <CJK>
+0x92C8 # <CJK>
+0x933E # <CJK>
+0x936A # <CJK>
+0x938F # <CJK>
+0x93CA # <CJK>
+0x93D6 # <CJK>
+0x943E # <CJK>
+0x946B # <CJK>
+0x9485 # <CJK>
+0x9486 # <CJK>
+0x9487 # <CJK>
+0x9488 # <CJK>
+0x9489 # <CJK>
+0x948A # <CJK>
+0x948B # <CJK>
+0x948C # <CJK>
+0x948D # <CJK>
+0x948E # <CJK>
+0x948F # <CJK>
+0x9490 # <CJK>
+0x9492 # <CJK>
+0x9493 # <CJK>
+0x9494 # <CJK>
+0x9495 # <CJK>
+0x9497 # <CJK>
+0x9499 # <CJK>
+0x949A # <CJK>
+0x949B # <CJK>
+0x949C # <CJK>
+0x949D # <CJK>
+0x949E # <CJK>
+0x949F # <CJK>
+0x94A0 # <CJK>
+0x94A1 # <CJK>
+0x94A2 # <CJK>
+0x94A3 # <CJK>
+0x94A4 # <CJK>
+0x94A5 # <CJK>
+0x94A6 # <CJK>
+0x94A7 # <CJK>
+0x94A8 # <CJK>
+0x94A9 # <CJK>
+0x94AA # <CJK>
+0x94AB # <CJK>
+0x94AC # <CJK>
+0x94AD # <CJK>
+0x94AE # <CJK>
+0x94AF # <CJK>
+0x94B0 # <CJK>
+0x94B1 # <CJK>
+0x94B2 # <CJK>
+0x94B3 # <CJK>
+0x94B4 # <CJK>
+0x94B5 # <CJK>
+0x94B6 # <CJK>
+0x94B7 # <CJK>
+0x94B8 # <CJK>
+0x94B9 # <CJK>
+0x94BA # <CJK>
+0x94BB # <CJK>
+0x94BC # <CJK>
+0x94BD # <CJK>
+0x94BE # <CJK>
+0x94BF # <CJK>
+0x94C0 # <CJK>
+0x94C1 # <CJK>
+0x94C2 # <CJK>
+0x94C3 # <CJK>
+0x94C4 # <CJK>
+0x94C5 # <CJK>
+0x94C6 # <CJK>
+0x94C8 # <CJK>
+0x94C9 # <CJK>
+0x94CA # <CJK>
+0x94CB # <CJK>
+0x94CC # <CJK>
+0x94CD # <CJK>
+0x94CE # <CJK>
+0x94D0 # <CJK>
+0x94D1 # <CJK>
+0x94D2 # <CJK>
+0x94D5 # <CJK>
+0x94D6 # <CJK>
+0x94D7 # <CJK>
+0x94D8 # <CJK>
+0x94D9 # <CJK>
+0x94DB # <CJK>
+0x94DC # <CJK>
+0x94DD # <CJK>
+0x94DE # <CJK>
+0x94DF # <CJK>
+0x94E0 # <CJK>
+0x94E1 # <CJK>
+0x94E2 # <CJK>
+0x94E3 # <CJK>
+0x94E4 # <CJK>
+0x94E5 # <CJK>
+0x94E7 # <CJK>
+0x94E8 # <CJK>
+0x94E9 # <CJK>
+0x94EA # <CJK>
+0x94EB # <CJK>
+0x94EC # <CJK>
+0x94ED # <CJK>
+0x94EE # <CJK>
+0x94EF # <CJK>
+0x94F0 # <CJK>
+0x94F1 # <CJK>
+0x94F2 # <CJK>
+0x94F3 # <CJK>
+0x94F4 # <CJK>
+0x94F5 # <CJK>
+0x94F6 # <CJK>
+0x94F7 # <CJK>
+0x94F8 # <CJK>
+0x94F9 # <CJK>
+0x94FA # <CJK>
+0x94FC # <CJK>
+0x94FD # <CJK>
+0x94FE # <CJK>
+0x94FF # <CJK>
+0x9500 # <CJK>
+0x9501 # <CJK>
+0x9502 # <CJK>
+0x9503 # <CJK>
+0x9504 # <CJK>
+0x9505 # <CJK>
+0x9506 # <CJK>
+0x9507 # <CJK>
+0x9508 # <CJK>
+0x9509 # <CJK>
+0x950A # <CJK>
+0x950B # <CJK>
+0x950C # <CJK>
+0x950D # <CJK>
+0x950E # <CJK>
+0x950F # <CJK>
+0x9510 # <CJK>
+0x9511 # <CJK>
+0x9512 # <CJK>
+0x9513 # <CJK>
+0x9514 # <CJK>
+0x9515 # <CJK>
+0x9516 # <CJK>
+0x9517 # <CJK>
+0x9518 # <CJK>
+0x9519 # <CJK>
+0x951A # <CJK>
+0x951B # <CJK>
+0x951D # <CJK>
+0x951E # <CJK>
+0x951F # <CJK>
+0x9521 # <CJK>
+0x9522 # <CJK>
+0x9523 # <CJK>
+0x9524 # <CJK>
+0x9525 # <CJK>
+0x9526 # <CJK>
+0x9528 # <CJK>
+0x9529 # <CJK>
+0x952A # <CJK>
+0x952B # <CJK>
+0x952C # <CJK>
+0x952D # <CJK>
+0x952E # <CJK>
+0x952F # <CJK>
+0x9530 # <CJK>
+0x9531 # <CJK>
+0x9532 # <CJK>
+0x9534 # <CJK>
+0x9535 # <CJK>
+0x9536 # <CJK>
+0x9537 # <CJK>
+0x9538 # <CJK>
+0x9539 # <CJK>
+0x953A # <CJK>
+0x953B # <CJK>
+0x953C # <CJK>
+0x953E # <CJK>
+0x953F # <CJK>
+0x9540 # <CJK>
+0x9541 # <CJK>
+0x9542 # <CJK>
+0x9544 # <CJK>
+0x9545 # <CJK>
+0x9546 # <CJK>
+0x9547 # <CJK>
+0x9549 # <CJK>
+0x954A # <CJK>
+0x954C # <CJK>
+0x954D # <CJK>
+0x954E # <CJK>
+0x954F # <CJK>
+0x9550 # <CJK>
+0x9551 # <CJK>
+0x9552 # <CJK>
+0x9553 # <CJK>
+0x9554 # <CJK>
+0x9556 # <CJK>
+0x9557 # <CJK>
+0x9558 # <CJK>
+0x9559 # <CJK>
+0x955B # <CJK>
+0x955C # <CJK>
+0x955D # <CJK>
+0x955E # <CJK>
+0x955F # <CJK>
+0x9561 # <CJK>
+0x9562 # <CJK>
+0x9563 # <CJK>
+0x9564 # <CJK>
+0x9565 # <CJK>
+0x9566 # <CJK>
+0x9567 # <CJK>
+0x9568 # <CJK>
+0x9569 # <CJK>
+0x956A # <CJK>
+0x956B # <CJK>
+0x956C # <CJK>
+0x956D # <CJK>
+0x956F # <CJK>
+0x9570 # <CJK>
+0x9571 # <CJK>
+0x9572 # <CJK>
+0x9573 # <CJK>
+0x9576 # <CJK>
+0x957F # <CJK>
+0x95E8 # <CJK>
+0x95E9 # <CJK>
+0x95EA # <CJK>
+0x95EB # <CJK>
+0x95ED # <CJK>
+0x95EE # <CJK>
+0x95EF # <CJK>
+0x95F0 # <CJK>
+0x95F1 # <CJK>
+0x95F2 # <CJK>
+0x95F3 # <CJK>
+0x95F4 # <CJK>
+0x95F5 # <CJK>
+0x95F6 # <CJK>
+0x95F7 # <CJK>
+0x95F8 # <CJK>
+0x95F9 # <CJK>
+0x95FA # <CJK>
+0x95FB # <CJK>
+0x95FC # <CJK>
+0x95FD # <CJK>
+0x95FE # <CJK>
+0x9600 # <CJK>
+0x9601 # <CJK>
+0x9602 # <CJK>
+0x9603 # <CJK>
+0x9604 # <CJK>
+0x9605 # <CJK>
+0x9606 # <CJK>
+0x9608 # <CJK>
+0x9609 # <CJK>
+0x960A # <CJK>
+0x960B # <CJK>
+0x960C # <CJK>
+0x960D # <CJK>
+0x960E # <CJK>
+0x960F # <CJK>
+0x9610 # <CJK>
+0x9611 # <CJK>
+0x9612 # <CJK>
+0x9614 # <CJK>
+0x9615 # <CJK>
+0x9616 # <CJK>
+0x9617 # <CJK>
+0x9619 # <CJK>
+0x961A # <CJK>
+0x961C # <CJK>
+0x961D # <CJK>
+0x961F # <CJK>
+0x9621 # <CJK>
+0x9622 # <CJK>
+0x962A # <CJK>
+0x962E # <CJK>
+0x9631 # <CJK>
+0x9632 # <CJK>
+0x9633 # <CJK>
+0x9634 # <CJK>
+0x9635 # <CJK>
+0x9636 # <CJK>
+0x963B # <CJK>
+0x963C # <CJK>
+0x963D # <CJK>
+0x963F # <CJK>
+0x9640 # <CJK>
+0x9642 # <CJK>
+0x9644 # <CJK>
+0x9645 # <CJK>
+0x9646 # <CJK>
+0x9647 # <CJK>
+0x9648 # <CJK>
+0x9649 # <CJK>
+0x964B # <CJK>
+0x964C # <CJK>
+0x964D # <CJK>
+0x9650 # <CJK>
+0x9654 # <CJK>
+0x9655 # <CJK>
+0x965B # <CJK>
+0x965F # <CJK>
+0x9661 # <CJK>
+0x9662 # <CJK>
+0x9664 # <CJK>
+0x9667 # <CJK>
+0x9668 # <CJK>
+0x9669 # <CJK>
+0x966A # <CJK>
+0x966C # <CJK>
+0x9672 # <CJK>
+0x9674 # <CJK>
+0x9675 # <CJK>
+0x9676 # <CJK>
+0x9677 # <CJK>
+0x9685 # <CJK>
+0x9686 # <CJK>
+0x9688 # <CJK>
+0x968B # <CJK>
+0x968D # <CJK>
+0x968F # <CJK>
+0x9690 # <CJK>
+0x9694 # <CJK>
+0x9697 # <CJK>
+0x9698 # <CJK>
+0x9699 # <CJK>
+0x969C # <CJK>
+0x96A7 # <CJK>
+0x96B0 # <CJK>
+0x96B3 # <CJK>
+0x96B6 # <CJK>
+0x96B9 # <CJK>
+0x96BC # <CJK>
+0x96BD # <CJK>
+0x96BE # <CJK>
+0x96C0 # <CJK>
+0x96C1 # <CJK>
+0x96C4 # <CJK>
+0x96C5 # <CJK>
+0x96C6 # <CJK>
+0x96C7 # <CJK>
+0x96C9 # <CJK>
+0x96CC # <CJK>
+0x96CD # <CJK>
+0x96CE # <CJK>
+0x96CF # <CJK>
+0x96D2 # <CJK>
+0x96D5 # <CJK>
+0x96E0 # <CJK>
+0x96E8 # <CJK>
+0x96E9 # <CJK>
+0x96EA # <CJK>
+0x96EF # <CJK>
+0x96F3 # <CJK>
+0x96F6 # <CJK>
+0x96F7 # <CJK>
+0x96F9 # <CJK>
+0x96FE # <CJK>
+0x9700 # <CJK>
+0x9701 # <CJK>
+0x9704 # <CJK>
+0x9706 # <CJK>
+0x9707 # <CJK>
+0x9708 # <CJK>
+0x9709 # <CJK>
+0x970D # <CJK>
+0x970E # <CJK>
+0x970F # <CJK>
+0x9713 # <CJK>
+0x9716 # <CJK>
+0x971C # <CJK>
+0x971E # <CJK>
+0x972A # <CJK>
+0x972D # <CJK>
+0x9730 # <CJK>
+0x9732 # <CJK>
+0x9738 # <CJK>
+0x9739 # <CJK>
+0x973E # <CJK>
+0x9752 # <CJK>
+0x9753 # <CJK>
+0x9756 # <CJK>
+0x9759 # <CJK>
+0x975B # <CJK>
+0x975E # <CJK>
+0x9760 # <CJK>
+0x9761 # <CJK>
+0x9762 # <CJK>
+0x9765 # <CJK>
+0x9769 # <CJK>
+0x9773 # <CJK>
+0x9774 # <CJK>
+0x9776 # <CJK>
+0x977C # <CJK>
+0x9785 # <CJK>
+0x978B # <CJK>
+0x978D # <CJK>
+0x9791 # <CJK>
+0x9792 # <CJK>
+0x9794 # <CJK>
+0x9798 # <CJK>
+0x97A0 # <CJK>
+0x97A3 # <CJK>
+0x97AB # <CJK>
+0x97AD # <CJK>
+0x97AF # <CJK>
+0x97B2 # <CJK>
+0x97B4 # <CJK>
+0x97E6 # <CJK>
+0x97E7 # <CJK>
+0x97E9 # <CJK>
+0x97EA # <CJK>
+0x97EB # <CJK>
+0x97EC # <CJK>
+0x97ED # <CJK>
+0x97F3 # <CJK>
+0x97F5 # <CJK>
+0x97F6 # <CJK>
+0x9875 # <CJK>
+0x9876 # <CJK>
+0x9877 # <CJK>
+0x9878 # <CJK>
+0x9879 # <CJK>
+0x987A # <CJK>
+0x987B # <CJK>
+0x987C # <CJK>
+0x987D # <CJK>
+0x987E # <CJK>
+0x987F # <CJK>
+0x9880 # <CJK>
+0x9881 # <CJK>
+0x9882 # <CJK>
+0x9883 # <CJK>
+0x9884 # <CJK>
+0x9885 # <CJK>
+0x9886 # <CJK>
+0x9887 # <CJK>
+0x9888 # <CJK>
+0x9889 # <CJK>
+0x988A # <CJK>
+0x988C # <CJK>
+0x988D # <CJK>
+0x988F # <CJK>
+0x9890 # <CJK>
+0x9891 # <CJK>
+0x9893 # <CJK>
+0x9894 # <CJK>
+0x9896 # <CJK>
+0x9897 # <CJK>
+0x9898 # <CJK>
+0x989A # <CJK>
+0x989B # <CJK>
+0x989C # <CJK>
+0x989D # <CJK>
+0x989E # <CJK>
+0x989F # <CJK>
+0x98A0 # <CJK>
+0x98A1 # <CJK>
+0x98A2 # <CJK>
+0x98A4 # <CJK>
+0x98A5 # <CJK>
+0x98A6 # <CJK>
+0x98A7 # <CJK>
+0x98CE # <CJK>
+0x98D1 # <CJK>
+0x98D2 # <CJK>
+0x98D3 # <CJK>
+0x98D5 # <CJK>
+0x98D8 # <CJK>
+0x98D9 # <CJK>
+0x98DA # <CJK>
+0x98DE # <CJK>
+0x98DF # <CJK>
+0x98E7 # <CJK>
+0x98E8 # <CJK>
+0x990D # <CJK>
+0x9910 # <CJK>
+0x992E # <CJK>
+0x9954 # <CJK>
+0x9955 # <CJK>
+0x9963 # <CJK>
+0x9965 # <CJK>
+0x9967 # <CJK>
+0x9968 # <CJK>
+0x9969 # <CJK>
+0x996A # <CJK>
+0x996B # <CJK>
+0x996C # <CJK>
+0x996D # <CJK>
+0x996E # <CJK>
+0x996F # <CJK>
+0x9970 # <CJK>
+0x9971 # <CJK>
+0x9972 # <CJK>
+0x9974 # <CJK>
+0x9975 # <CJK>
+0x9976 # <CJK>
+0x9977 # <CJK>
+0x997A # <CJK>
+0x997C # <CJK>
+0x997D # <CJK>
+0x997F # <CJK>
+0x9980 # <CJK>
+0x9981 # <CJK>
+0x9984 # <CJK>
+0x9985 # <CJK>
+0x9986 # <CJK>
+0x9987 # <CJK>
+0x9988 # <CJK>
+0x998A # <CJK>
+0x998B # <CJK>
+0x998D # <CJK>
+0x998F # <CJK>
+0x9990 # <CJK>
+0x9991 # <CJK>
+0x9992 # <CJK>
+0x9993 # <CJK>
+0x9994 # <CJK>
+0x9995 # <CJK>
+0x9996 # <CJK>
+0x9997 # <CJK>
+0x9998 # <CJK>
+0x9999 # <CJK>
+0x99A5 # <CJK>
+0x99A8 # <CJK>
+0x9A6C # <CJK>
+0x9A6D # <CJK>
+0x9A6E # <CJK>
+0x9A6F # <CJK>
+0x9A70 # <CJK>
+0x9A71 # <CJK>
+0x9A73 # <CJK>
+0x9A74 # <CJK>
+0x9A75 # <CJK>
+0x9A76 # <CJK>
+0x9A77 # <CJK>
+0x9A78 # <CJK>
+0x9A79 # <CJK>
+0x9A7A # <CJK>
+0x9A7B # <CJK>
+0x9A7C # <CJK>
+0x9A7D # <CJK>
+0x9A7E # <CJK>
+0x9A7F # <CJK>
+0x9A80 # <CJK>
+0x9A81 # <CJK>
+0x9A82 # <CJK>
+0x9A84 # <CJK>
+0x9A85 # <CJK>
+0x9A86 # <CJK>
+0x9A87 # <CJK>
+0x9A88 # <CJK>
+0x9A8A # <CJK>
+0x9A8B # <CJK>
+0x9A8C # <CJK>
+0x9A8F # <CJK>
+0x9A90 # <CJK>
+0x9A91 # <CJK>
+0x9A92 # <CJK>
+0x9A93 # <CJK>
+0x9A96 # <CJK>
+0x9A97 # <CJK>
+0x9A98 # <CJK>
+0x9A9A # <CJK>
+0x9A9B # <CJK>
+0x9A9C # <CJK>
+0x9A9D # <CJK>
+0x9A9E # <CJK>
+0x9A9F # <CJK>
+0x9AA0 # <CJK>
+0x9AA1 # <CJK>
+0x9AA2 # <CJK>
+0x9AA3 # <CJK>
+0x9AA4 # <CJK>
+0x9AA5 # <CJK>
+0x9AA7 # <CJK>
+0x9AA8 # <CJK>
+0x9AB0 # <CJK>
+0x9AB1 # <CJK>
+0x9AB6 # <CJK>
+0x9AB7 # <CJK>
+0x9AB8 # <CJK>
+0x9ABA # <CJK>
+0x9ABC # <CJK>
+0x9AC0 # <CJK>
+0x9AC1 # <CJK>
+0x9AC2 # <CJK>
+0x9AC5 # <CJK>
+0x9ACB # <CJK>
+0x9ACC # <CJK>
+0x9AD1 # <CJK>
+0x9AD3 # <CJK>
+0x9AD8 # <CJK>
+0x9ADF # <CJK>
+0x9AE1 # <CJK>
+0x9AE6 # <CJK>
+0x9AEB # <CJK>
+0x9AED # <CJK>
+0x9AEF # <CJK>
+0x9AF9 # <CJK>
+0x9AFB # <CJK>
+0x9B03 # <CJK>
+0x9B08 # <CJK>
+0x9B0F # <CJK>
+0x9B13 # <CJK>
+0x9B1F # <CJK>
+0x9B23 # <CJK>
+0x9B2F # <CJK>
+0x9B32 # <CJK>
+0x9B3B # <CJK>
+0x9B3C # <CJK>
+0x9B41 # <CJK>
+0x9B42 # <CJK>
+0x9B43 # <CJK>
+0x9B44 # <CJK>
+0x9B45 # <CJK>
+0x9B47 # <CJK>
+0x9B48 # <CJK>
+0x9B49 # <CJK>
+0x9B4D # <CJK>
+0x9B4F # <CJK>
+0x9B51 # <CJK>
+0x9B54 # <CJK>
+0x9C7C # <CJK>
+0x9C7F # <CJK>
+0x9C81 # <CJK>
+0x9C82 # <CJK>
+0x9C85 # <CJK>
+0x9C86 # <CJK>
+0x9C87 # <CJK>
+0x9C88 # <CJK>
+0x9C8B # <CJK>
+0x9C8D # <CJK>
+0x9C8E # <CJK>
+0x9C90 # <CJK>
+0x9C91 # <CJK>
+0x9C92 # <CJK>
+0x9C94 # <CJK>
+0x9C95 # <CJK>
+0x9C9A # <CJK>
+0x9C9B # <CJK>
+0x9C9C # <CJK>
+0x9C9E # <CJK>
+0x9C9F # <CJK>
+0x9CA0 # <CJK>
+0x9CA1 # <CJK>
+0x9CA2 # <CJK>
+0x9CA3 # <CJK>
+0x9CA4 # <CJK>
+0x9CA5 # <CJK>
+0x9CA6 # <CJK>
+0x9CA7 # <CJK>
+0x9CA8 # <CJK>
+0x9CA9 # <CJK>
+0x9CAB # <CJK>
+0x9CAD # <CJK>
+0x9CAE # <CJK>
+0x9CB0 # <CJK>
+0x9CB1 # <CJK>
+0x9CB2 # <CJK>
+0x9CB3 # <CJK>
+0x9CB4 # <CJK>
+0x9CB5 # <CJK>
+0x9CB6 # <CJK>
+0x9CB7 # <CJK>
+0x9CB8 # <CJK>
+0x9CBA # <CJK>
+0x9CBB # <CJK>
+0x9CBC # <CJK>
+0x9CBD # <CJK>
+0x9CC3 # <CJK>
+0x9CC4 # <CJK>
+0x9CC5 # <CJK>
+0x9CC6 # <CJK>
+0x9CC7 # <CJK>
+0x9CCA # <CJK>
+0x9CCB # <CJK>
+0x9CCC # <CJK>
+0x9CCD # <CJK>
+0x9CCE # <CJK>
+0x9CCF # <CJK>
+0x9CD0 # <CJK>
+0x9CD3 # <CJK>
+0x9CD4 # <CJK>
+0x9CD5 # <CJK>
+0x9CD6 # <CJK>
+0x9CD7 # <CJK>
+0x9CD8 # <CJK>
+0x9CD9 # <CJK>
+0x9CDC # <CJK>
+0x9CDD # <CJK>
+0x9CDE # <CJK>
+0x9CDF # <CJK>
+0x9CE2 # <CJK>
+0x9E1F # <CJK>
+0x9E20 # <CJK>
+0x9E21 # <CJK>
+0x9E22 # <CJK>
+0x9E23 # <CJK>
+0x9E25 # <CJK>
+0x9E26 # <CJK>
+0x9E28 # <CJK>
+0x9E29 # <CJK>
+0x9E2A # <CJK>
+0x9E2B # <CJK>
+0x9E2C # <CJK>
+0x9E2D # <CJK>
+0x9E2F # <CJK>
+0x9E31 # <CJK>
+0x9E32 # <CJK>
+0x9E33 # <CJK>
+0x9E35 # <CJK>
+0x9E36 # <CJK>
+0x9E37 # <CJK>
+0x9E38 # <CJK>
+0x9E39 # <CJK>
+0x9E3A # <CJK>
+0x9E3D # <CJK>
+0x9E3E # <CJK>
+0x9E3F # <CJK>
+0x9E41 # <CJK>
+0x9E42 # <CJK>
+0x9E43 # <CJK>
+0x9E44 # <CJK>
+0x9E45 # <CJK>
+0x9E46 # <CJK>
+0x9E47 # <CJK>
+0x9E48 # <CJK>
+0x9E49 # <CJK>
+0x9E4A # <CJK>
+0x9E4B # <CJK>
+0x9E4C # <CJK>
+0x9E4E # <CJK>
+0x9E4F # <CJK>
+0x9E51 # <CJK>
+0x9E55 # <CJK>
+0x9E57 # <CJK>
+0x9E58 # <CJK>
+0x9E5A # <CJK>
+0x9E5B # <CJK>
+0x9E5C # <CJK>
+0x9E5E # <CJK>
+0x9E63 # <CJK>
+0x9E64 # <CJK>
+0x9E66 # <CJK>
+0x9E67 # <CJK>
+0x9E68 # <CJK>
+0x9E69 # <CJK>
+0x9E6A # <CJK>
+0x9E6B # <CJK>
+0x9E6C # <CJK>
+0x9E6D # <CJK>
+0x9E70 # <CJK>
+0x9E71 # <CJK>
+0x9E73 # <CJK>
+0x9E7E # <CJK>
+0x9E7F # <CJK>
+0x9E82 # <CJK>
+0x9E87 # <CJK>
+0x9E88 # <CJK>
+0x9E8B # <CJK>
+0x9E92 # <CJK>
+0x9E93 # <CJK>
+0x9E9D # <CJK>
+0x9E9F # <CJK>
+0x9EA6 # <CJK>
+0x9EB4 # <CJK>
+0x9EB8 # <CJK>
+0x9EBB # <CJK>
+0x9EBD # <CJK>
+0x9EBE # <CJK>
+0x9EC4 # <CJK>
+0x9EC9 # <CJK>
+0x9ECD # <CJK>
+0x9ECE # <CJK>
+0x9ECF # <CJK>
+0x9ED1 # <CJK>
+0x9ED4 # <CJK>
+0x9ED8 # <CJK>
+0x9EDB # <CJK>
+0x9EDC # <CJK>
+0x9EDD # <CJK>
+0x9EDF # <CJK>
+0x9EE0 # <CJK>
+0x9EE2 # <CJK>
+0x9EE5 # <CJK>
+0x9EE7 # <CJK>
+0x9EE9 # <CJK>
+0x9EEA # <CJK>
+0x9EEF # <CJK>
+0x9EF9 # <CJK>
+0x9EFB # <CJK>
+0x9EFC # <CJK>
+0x9EFE # <CJK>
+0x9F0B # <CJK>
+0x9F0D # <CJK>
+0x9F0E # <CJK>
+0x9F10 # <CJK>
+0x9F13 # <CJK>
+0x9F17 # <CJK>
+0x9F19 # <CJK>
+0x9F20 # <CJK>
+0x9F22 # <CJK>
+0x9F2C # <CJK>
+0x9F2F # <CJK>
+0x9F37 # <CJK>
+0x9F39 # <CJK>
+0x9F3B # <CJK>
+0x9F3D # <CJK>
+0x9F3E # <CJK>
+0x9F44 # <CJK>
+0x9F50 # <CJK>
+0x9F51 # <CJK>
+0x9F7F # <CJK>
+0x9F80 # <CJK>
+0x9F83 # <CJK>
+0x9F84 # <CJK>
+0x9F85 # <CJK>
+0x9F86 # <CJK>
+0x9F87 # <CJK>
+0x9F88 # <CJK>
+0x9F89 # <CJK>
+0x9F8A # <CJK>
+0x9F8B # <CJK>
+0x9F8C # <CJK>
+0x9F99 # <CJK>
+0x9F9A # <CJK>
+0x9F9B # <CJK>
+0x9F9F # <CJK>
+0x9FA0 # <CJK>
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zh_hk.orth b/chromium/third_party/fontconfig/src/fc-lang/zh_hk.orth
new file mode 100644
index 00000000000..5d5ef052696
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zh_hk.orth
@@ -0,0 +1,2240 @@
+#
+# fontconfig/fc-lang/zh_hk.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese Hong Kong Supplementary Character Set (ZH-HK)
+#
+# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs
+# as encoded in ISO/IEC 10646-1:2000
+4E04
+4E1A
+4E1C
+4E21
+4E24
+4E28
+4E2A
+4E2C
+4E2F
+4E36
+4E37
+4E3D
+4E3F
+4E49
+4E5A
+4E5B
+4E6A
+4E78
+4E80
+4E81
+4E85
+4E87
+4E89
+4E98
+4E9A
+4EA0
+4EA3
+4EB7
+4EBB
+4EBC
+4EBF
+4ECE
+4EEA
+4EEB
+4EEE
+4EF8
+4F03
+4F17
+4F1A
+4F28
+4F29
+4F32
+4F37
+4F39
+4F42
+4F45
+4F4B
+4F72
+4F8A
+4FA2
+4FA8
+4FAB
+4FB0
+4FBD
+4FC8
+4FCC
+4FE4
+4FE5
+4FF0
+4FF2
+4FF9
+4FFD
+5003
+5008
+502E
+5034
+503B
+5056
+5058
+5066
+506C
+5081
+5088
+5090
+50A6
+50BC
+50CD
+50D0
+50D9
+50DF
+50E1
+50F4
+50FC
+5101
+510D
+510E
+512B
+5156
+5160
+516A
+5174
+5179
+5182
+5186
+5188
+5196
+519A
+519C
+51A7
+51A8
+51AB
+51AE
+51B2
+51B3
+51B4
+51B5
+51B8
+51C3
+51C7
+51C9
+51CF
+51D1
+51D2
+51D3
+51DB
+51DF
+51E2
+51E4
+51ED
+51F4
+51FC
+51FE
+5202
+5205
+520B
+521F
+5220
+5226
+5227
+5234
+523C
+5257
+5259
+5260
+5268
+5273
+5279
+528F
+5290
+5294
+529A
+52A1
+52A4
+52A8
+52B5
+52B9
+52C5
+52CC
+52D0
+52D1
+52E0
+52E1
+52F9
+5301
+5324
+5327
+532C
+5332
+5333
+5338
+533B
+5342
+534E
+535D
+535F
+5364
+5367
+5369
+536D
+5374
+537D
+537E
+5393
+53A0
+53A2
+53A6
+53A8
+53A9
+53AA
+53AB
+53AE
+53B0
+53B6
+53C1
+53C2
+53C5
+53CC
+53D0
+53D1
+53D2
+53D8
+53D9
+53DA
+53E0
+53F6
+53F7
+53FE
+5413
+5414
+5416
+541A
+5421
+5423
+542F
+5432
+5434
+544B
+544D
+5469
+546A
+546D
+5485
+548F
+5493
+5494
+5497
+549C
+549E
+54A3
+54A4
+54B2
+54B4
+54B9
+54CB
+54CC
+54CD
+54D0
+54DA
+54E3
+54EF
+5502
+550D
+5513
+5518
+551E
+5523
+5525
+5528
+552B
+553F
+5547
+5549
+5553
+555D
+5569
+556B
+5571
+5572
+5573
+5579
+5586
+5590
+55A9
+55B0
+55B4
+55B9
+55BA
+55BC
+55C1
+55D7
+55D8
+55DE
+55EA
+55EC
+55F0
+55F1
+55F5
+55FB
+5605
+5611
+561E
+5620
+5621
+5622
+5623
+5625
+562D
+5637
+5643
+564D
+564F
+5650
+5652
+5654
+565D
+5661
+567A
+567B
+567C
+5689
+568A
+568B
+5692
+569E
+569F
+56A1
+56A4
+56AF
+56B1
+56B9
+56BF
+56D6
+56E2
+56ED
+56EF
+56F1
+56FD
+5700
+5715
+571D
+5732
+573D
+573F
+5742
+5743
+5746
+5754
+5757
+575B
+575F
+5767
+577A
+577E
+577F
+5788
+578A
+578D
+5790
+579C
+57A1
+57A7
+57AA
+57B4
+57BB
+57BE
+57C4
+57C8
+57D7
+57DD
+57DE
+57E6
+57EF
+57FE
+5803
+5812
+5822
+5826
+583A
+5840
+5844
+5847
+585C
+585F
+5869
+586C
+5872
+5873
+5892
+5899
+589A
+58A7
+58AA
+58B0
+58B5
+58B6
+58BB
+58CB
+58D0
+58DC
+58E0
+58F0
+58F2
+58F3
+58FB
+5902
+5904
+5905
+5907
+590A
+5911
+591F
+5932
+5934
+5965
+5975
+5989
+5994
+599A
+599F
+59AC
+59B0
+59B7
+59B8
+59C4
+59C9
+59D9
+59EB
+59EF
+59F0
+59F8
+59F9
+5A02
+5A0B
+5A0D
+5A12
+5A1A
+5A21
+5A24
+5A27
+5A2A
+5A2B
+5A2C
+5A3D
+5A45
+5A54
+5A59
+5A61
+5A63
+5A68
+5A6B
+5A6E
+5A71
+5A79
+5A7E
+5A81
+5A82
+5A86
+5A88
+5A91
+5A96
+5A99
+5AA0
+5AA1
+5AAB
+5AC3
+5ACE
+5ACF
+5AD3
+5AE4
+5AF0
+5AF2
+5AFA
+5AFE
+5B0D
+5B11
+5B15
+5B1F
+5B2B
+5B41
+5B44
+5B46
+5B4A
+5B4F
+5B66
+5B68
+5B6D
+5B74
+5B76
+5B7C
+5B80
+5B82
+5B90
+5B96
+5B9D
+5B9E
+5B9F
+5BAA
+5BC3
+5BD5
+5BD7
+5BF3
+5BFF
+5C05
+5C13
+5C14
+5C1C
+5C1E
+5C20
+5C23
+5C49
+5C4A
+5C53
+5C5E
+5C85
+5C99
+5C9A
+5C9C
+5C9E
+5CBA
+5CC1
+5CC2
+5CD1
+5CE5
+5CE9
+5CEF
+5CF5
+5D10
+5D15
+5D18
+5D2C
+5D2F
+5D3E
+5D46
+5D48
+5D56
+5D57
+5D5B
+5D70
+5D74
+5D7B
+5D85
+5D8B
+5D8E
+5DA4
+5DAB
+5DB6
+5DB9
+5DC1
+5DD7
+5DDB
+5DF5
+5E09
+5E0B
+5E12
+5E2E
+5E42
+5E48
+5E5E
+5E7A
+5E7F
+5E83
+5E86
+5E92
+5E99
+5EBD
+5ECD
+5ED0
+5EF4
+5EF8
+5EF9
+5EFB
+5EFC
+5F0C
+5F0D
+5F0E
+5F25
+5F3A
+5F4D
+5F50
+5F51
+5F5C
+5F61
+5F63
+5F72
+5F7B
+5F83
+5FA4
+5FA7
+5FB1
+5FBA
+5FC2
+5FC4
+5FDB
+5FDF
+6023
+6031
+603B
+604A
+6052
+6075
+6077
+607E
+609E
+60A4
+60A7
+60B3
+60D7
+60DE
+60E3
+60E7
+60E8
+60E9
+60FD
+6107
+610C
+6119
+6122
+6130
+613D
+6142
+6150
+6159
+615C
+6160
+6164
+616F
+617D
+6181
+6187
+6195
+6198
+6199
+619C
+61B7
+61B9
+61C0
+61CF
+61D0
+61D3
+61DA
+61E2
+622C
+6237
+6239
+624C
+6268
+6282
+6285
+6290
+629D
+62A4
+62A6
+62C3
+62C5
+62D5
+62DF
+62E5
+6318
+632E
+6331
+6335
+6337
+6364
+636C
+6379
+637F
+638B
+63B9
+63C1
+63D1
+63DE
+63E2
+63E6
+63F8
+63FB
+63FC
+63FE
+6407
+6432
+6438
+643A
+643B
+645A
+6471
+647C
+648D
+6491
+64AF
+64B4
+64B6
+64C0
+64D3
+64DD
+64E1
+64E5
+64E7
+64EA
+650A
+6511
+651E
+651F
+6530
+6534
+6535
+654D
+655F
+656B
+656D
+6585
+6586
+6588
+6589
+658B
+65B5
+65BE
+65D1
+65D4
+65E0
+65E3
+65FF
+6618
+661E
+6623
+6630
+6644
+6648
+664B
+6653
+6657
+6663
+6667
+666B
+6673
+667D
+6685
+668E
+6692
+669A
+66A4
+66AD
+66B3
+66B6
+66BF
+66CD
+66CE
+66F1
+6702
+670C
+670E
+6716
+6719
+671E
+6725
+6736
+6744
+6761
+6762
+6767
+676B
+678F
+67A0
+67A4
+67AC
+67B1
+67BF
+67D6
+67D7
+67F9
+67FE
+6800
+6801
+6802
+6803
+6804
+680D
+6810
+681B
+681E
+6822
+6836
+6837
+683E
+6847
+684A
+6855
+6856
+685D
+6865
+6884
+6888
+6898
+68A6
+68B6
+68B9
+68BD
+68C3
+68C5
+68CA
+6900
+6901
+6902
+6903
+6909
+6918
+6919
+691A
+691B
+692C
+6936
+693E
+6943
+6946
+6955
+6961
+6964
+6967
+6972
+6973
+6980
+6985
+698A
+6998
+699F
+69A2
+69B2
+69C0
+69D1
+69D5
+69D6
+69E1
+69E9
+69F9
+69FA
+6A03
+6A0B
+6A0C
+6A1A
+6A1C
+6A2B
+6A2C
+6A2D
+6A33
+6A43
+6A45
+6A4C
+6A52
+6A53
+6A57
+6A63
+6A65
+6A71
+6A74
+6A7A
+6A82
+6A8A
+6A8F
+6A99
+6A9D
+6AA7
+6AAB
+6AB1
+6AB2
+6AB5
+6ABE
+6AC8
+6AC9
+6ACA
+6AD4
+6AD8
+6AF6
+6B05
+6B1D
+6B35
+6B52
+6B57
+6B6F
+6B74
+6B7A
+6B81
+6BC1
+6BDC
+6BE1
+6BEA
+6BFA
+6C1C
+6C31
+6C35
+6C37
+6C39
+6C3A
+6C3D
+6C49
+6C58
+6C5A
+6C6E
+6C75
+6C79
+6C7F
+6C9F
+6CA2
+6CAA
+6CAF
+6CB2
+6CCB
+6CCE
+6CDF
+6CEA
+6CFF
+6D02
+6D05
+6D06
+6D24
+6D26
+6D4E
+6D57
+6D5B
+6D5C
+6D71
+6D72
+6D81
+6D8F
+6D96
+6DA4
+6DA5
+6DB1
+6DB9
+6DFE
+6E02
+6E04
+6E0A
+6E0F
+6E15
+6E18
+6E29
+6E2A
+6E4F
+6E50
+6E59
+6E76
+6E7C
+6E86
+6E8B
+6E9A
+6EB5
+6EB8
+6EBB
+6ED9
+6EDA
+6EDB
+6EDD
+6EE2
+6EE8
+6EE9
+6EFA
+6F04
+6F0B
+6F0C
+6F16
+6F17
+6F24
+6F34
+6F3D
+6F44
+6F56
+6F5C
+6F74
+6F79
+6F81
+6F8A
+6F9D
+6F9F
+6FB5
+6FBB
+6FBE
+6FD3
+6FD9
+6FDA
+6FF6
+6FF8
+7003
+701E
+702C
+704B
+704D
+7050
+7054
+705C
+7067
+706C
+706F
+7075
+7077
+7079
+707E
+707F
+7081
+7089
+708B
+708F
+70A0
+70A3
+70A5
+70A6
+70A7
+70B9
+70BB
+70BC
+70BD
+70C0
+70C4
+70CC
+70D0
+70D5
+70D6
+70DF
+70F1
+70F5
+70FE
+7105
+711D
+7129
+712B
+712C
+7133
+7134
+7135
+713B
+713E
+7140
+7145
+714A
+714F
+7151
+716B
+7171
+7173
+7175
+7176
+7177
+717A
+717C
+717E
+7188
+718C
+718E
+7191
+7196
+7198
+71A2
+71A3
+71AD
+71B4
+71B7
+71BA
+71D1
+71DD
+71EB
+71F5
+71F6
+7200
+7209
+720E
+720F
+7215
+7216
+7217
+7224
+722B
+722E
+7240
+7250
+7255
+7257
+725C
+7266
+7282
+7287
+728F
+7294
+729F
+72AD
+72B2
+72CD
+72E2
+7302
+7304
+7310
+7328
+732A
+732B
+732C
+732E
+7338
+7339
+7341
+7348
+734F
+7371
+7374
+738C
+738F
+7398
+739C
+739E
+73A7
+73AA
+73BA
+73C9
+73CE
+73CF
+73D0
+73D5
+73E1
+73E2
+73E4
+73E6
+73EF
+73F3
+73F7
+73F9
+73FB
+7402
+7411
+7412
+7414
+7415
+7417
+7419
+741C
+741E
+741F
+7437
+7438
+7439
+743C
+7443
+7445
+7447
+7448
+7449
+7453
+7456
+745D
+7460
+7465
+7468
+746B
+746C
+7474
+7476
+747A
+7482
+748C
+748D
+7499
+749B
+74A4
+74B4
+74B9
+74C8
+74CC
+74D0
+74D3
+74E7
+74F0
+74F1
+74F2
+74F8
+7505
+750E
+7519
+751E
+7534
+7535
+753B
+7542
+7546
+754A
+754D
+7551
+7553
+7555
+7560
+7567
+756D
+756E
+7572
+757A
+7583
+758D
+758E
+7592
+759E
+75B1
+75B4
+75C3
+75C8
+75DC
+7602
+7607
+762C
+763B
+7640
+764D
+764E
+764F
+7651
+7654
+7666
+7667
+766F
+7673
+7674
+7676
+767A
+7690
+76A1
+76A5
+76B7
+76CC
+76D6
+76D9
+770C
+770E
+770F
+771E
+7724
+7726
+772B
+7740
+7743
+7758
+7772
+7777
+7778
+777A
+777B
+7793
+7798
+77AF
+77B9
+77BE
+77C3
+77C5
+77CB
+77DD
+77E6
+77F4
+77FE
+7808
+7818
+781C
+781E
+7839
+783C
+783D
+7842
+7844
+7847
+784B
+7851
+7853
+7854
+7866
+787A
+7881
+7888
+788D
+78AF
+78B1
+78B6
+78B8
+78B9
+78C7
+78D2
+78D3
+78D7
+78D8
+78E4
+78EE
+78F0
+78F1
+78F5
+7906
+792E
+7932
+7933
+7934
+7936
+793B
+793C
+7958
+7959
+7962
+7971
+797E
+7980
+7983
+7986
+7987
+7991
+7999
+799D
+799F
+79A5
+79A9
+79C4
+79C6
+79CC
+79D4
+79E2
+79F1
+79F4
+7A06
+7A2A
+7A2D
+7A3A
+7A3E
+7A43
+7A45
+7A49
+7A65
+7A7D
+7A83
+7A91
+7A93
+7AB0
+7ABB
+7ABC
+7AC2
+7AC3
+7AC8
+7AC9
+7ACF
+7AD3
+7ADA
+7ADB
+7ADC
+7ADD
+7AE2
+7AE7
+7AE9
+7AEA
+7AFE
+7B0B
+7B0C
+7B14
+7B1F
+7B27
+7B29
+7B39
+7B42
+7B43
+7B55
+7B62
+7B6C
+7B6F
+7B7B
+7B92
+7BA2
+7BA3
+7BB2
+7BCF
+7BD0
+7BEC
+7BFA
+7BFC
+7C12
+7C15
+7C1B
+7C35
+7C42
+7C44
+7C51
+7C56
+7C5D
+7C6D
+7C70
+7C74
+7C7B
+7C7C
+7C7E
+7C83
+7C86
+7C8E
+7C9C
+7CA6
+7CA7
+7CAC
+7CAE
+7CB8
+7CC2
+7CC3
+7CC7
+7CC9
+7CCD
+7CD3
+7CDA
+7CE6
+7CED
+7CF3
+7CF5
+7CF9
+7CFC
+7D25
+7D4D
+7D5A
+7D5D
+7D89
+7D8B
+7D97
+7DA4
+7DA8
+7DAB
+7DB3
+7DCD
+7DCF
+7DD0
+7DD3
+7DD4
+7DDC
+7DE4
+7DE5
+7DF5
+7DFD
+7DFE
+7E07
+7E27
+7E5B
+7E65
+7E67
+7E6C
+7E6E
+7E7F
+7E8E
+7E92
+7E9F
+7EA4
+7EAC
+7EBA
+7EC7
+7ECF
+7EDF
+7F06
+7F37
+7F40
+7F41
+7F47
+7F49
+7F4E
+7F52
+7F53
+7F71
+7F78
+7F8F
+7F93
+7F97
+7FA3
+7FAE
+7FB4
+7FDD
+7FE7
+7FFA
+8002
+8008
+801D
+8020
+8025
+802E
+802F
+8031
+803B
+803C
+8054
+805B
+8061
+8062
+8063
+8066
+8080
+809F
+80A7
+80B6
+80B7
+80BC
+80BD
+80C6
+80E9
+80EC
+80F6
+8103
+8107
+8109
+810C
+810E
+8112
+8114
+8117
+811A
+812A
+8132
+8134
+8137
+8142
+8148
+8156
+8159
+815A
+816D
+817C
+8184
+8193
+81A5
+81AA
+81B6
+81C1
+81C8
+81E4
+81EF
+81F6
+8218
+821A
+8226
+8229
+822D
+823E
+8254
+8262
+8265
+8276
+8279
+827A
+827B
+8287
+82A6
+82AA
+82BF
+82C4
+82CA
+82CF
+82D0
+82D8
+82E2
+82EE
+82F7
+82F8
+82FC
+82FD
+82FF
+830B
+8318
+831A
+831D
+833D
+8357
+8362
+8363
+8366
+836F
+8385
+8391
+839C
+83AC
+83B9
+83BE
+83CD
+83D3
+83ED
+8405
+8414
+8416
+8418
+841C
+8420
+8421
+8424
+8426
+842E
+843E
+8448
+844A
+8453
+8455
+8458
+845C
+8462
+8464
+8471
+8472
+847F
+8480
+8488
+8492
+8493
+8496
+84A3
+84AD
+84BD
+84BE
+84DA
+84DE
+84E1
+84E2
+84E4
+84E5
+84F8
+8503
+8505
+8510
+8533
+8534
+8538
+8542
+854B
+854C
+8552
+855A
+855F
+856F
+8570
+8573
+8597
+85C1
+85D6
+85E0
+85EE
+85FC
+8602
+860D
+860F
+8610
+8614
+8616
+8628
+862F
+8642
+8645
+866C
+8672
+867E
+8692
+86A0
+86AD
+86B2
+86EF
+8770
+8771
+877D
+8786
+878B
+878C
+87A5
+87A9
+87B1
+87C1
+87CE
+87D6
+87DA
+87EE
+87F5
+8804
+880F
+8818
+8827
+882D
+8842
+8845
+8846
+884F
+885E
+8860
+8864
+8865
+886E
+8884
+8887
+888F
+8890
+889C
+88A0
+88AE
+88B4
+88B5
+88BF
+88C5
+88C7
+88CF
+88E6
+88F5
+88FF
+8900
+8924
+8943
+8947
+894D
+8954
+8965
+8977
+8980
+8987
+8989
+898A
+8991
+8994
+89A5
+89A7
+89A9
+89BC
+89C1
+89C6
+89E7
+8A1C
+8A29
+8A2B
+8A38
+8A3D
+8A49
+8A67
+8A7E
+8A90
+8A94
+8A9C
+8AA9
+8AAF
+8AB4
+8ADA
+8AEA
+8B0C
+8B1F
+8B2D
+8B3F
+8B43
+8B4C
+8B4D
+8B5E
+8B62
+8B69
+8B81
+8B83
+8B90
+8B9B
+8BA0
+8BBE
+8BE2
+8C51
+8C9B
+8C9F
+8CAD
+8CCD
+8CD4
+8CD6
+8CDB
+8CE9
+8CEB
+8CF2
+8CF7
+8D03
+8D0B
+8D0C
+8D11
+8D12
+8D18
+8D1C
+8D1D
+8D7A
+8D82
+8DA6
+8DA9
+8DC0
+8DC3
+8DD4
+8E01
+8E0E
+8E28
+8E2A
+8E2D
+8E3A
+8E46
+8E4F
+8E68
+8E71
+8E75
+8E77
+8E7E
+8E80
+8EA7
+8EAD
+8EB0
+8EB6
+8EB9
+8EBC
+8EC3
+8ECE
+8EDA
+8EE2
+8EE4
+8EED
+8EF2
+8F19
+8F2D
+8F30
+8F41
+8F4A
+8F5C
+8F66
+8F67
+8F6E
+8F93
+8FA0
+8FA5
+8FA7
+8FB3
+8FB5
+8FB6
+8FB7
+8FB8
+8FB9
+8FBA
+8FBB
+8FBC
+8FBE
+8FC1
+8FCA
+8FCC
+8FCF
+8FD0
+8FDA
+8FF9
+9008
+9012
+9033
+9037
+904C
+9056
+9061
+9064
+906C
+90A8
+90AE
+90BB
+90C4
+9151
+9159
+915C
+915E
+9167
+9170
+9176
+917C
+918C
+918E
+91A9
+91B6
+91BB
+91C4
+91D6
+91DF
+91E5
+91F6
+91FA
+91FE
+9208
+920E
+9213
+9221
+9228
+922A
+922B
+9235
+923C
+9241
+9244
+9255
+9258
+925D
+925F
+9262
+926B
+926E
+9277
+9281
+9284
+9289
+928F
+92AE
+92B1
+92B9
+92BA
+92BE
+92BF
+92D4
+92DB
+92E3
+92E5
+92EB
+92EC
+92F2
+92F3
+92F4
+92F6
+92FD
+9303
+9307
+932C
+9330
+9331
+9340
+9341
+9342
+9343
+9344
+9345
+9348
+935F
+9362
+9366
+9368
+9369
+936B
+936E
+9373
+9374
+9378
+937D
+9381
+9384
+9385
+9386
+9387
+9390
+939C
+93A0
+93AD
+93B8
+93BB
+93BD
+93BF
+93C6
+93CB
+93D3
+93DB
+93E0
+93F0
+93F1
+93F3
+93F4
+9401
+9404
+9408
+9417
+941B
+941D
+9424
+9425
+9426
+9427
+942D
+943E
+9442
+9443
+944D
+9454
+9458
+945B
+9465
+9467
+946C
+9479
+947B
+9485
+949F
+94A2
+94C1
+94C3
+94DC
+94F6
+952D
+9547
+9578
+957F
+9585
+9596
+9597
+9599
+95A0
+95A2
+95A6
+95A7
+95AA
+95E8
+95F4
+961D
+9633
+9638
+9641
+9645
+9656
+9669
+967B
+9681
+968F
+9696
+96A3
+96A5
+96B6
+96BD
+96F4
+9703
+971B
+9721
+9731
+9736
+9740
+9741
+9751
+9755
+9757
+975D
+975F
+976D
+9771
+9787
+9789
+979B
+979F
+97B1
+97B2
+97B4
+97B8
+97BA
+97BD
+97BE
+97C0
+97C2
+97C8
+97D2
+97E0
+97E6
+97EE
+97F2
+97F5
+9814
+9815
+981F
+9823
+982E
+9833
+9834
+9847
+984B
+9866
+9868
+986C
+9875
+98B4
+98B7
+98B9
+98C3
+98C7
+98C8
+98CA
+98CE
+98DC
+98DE
+98E0
+98E1
+98E6
+98EC
+98F1
+98F5
+990E
+9919
+991C
+9937
+9938
+9939
+993B
+9940
+9942
+994A
+994D
+995D
+9962
+9963
+999B
+99A4
+99AA
+99B8
+99BC
+99C4
+99C5
+99DA
+99E0
+99E1
+99E6
+99F5
+9A0C
+9A10
+9A1F
+9A21
+9A26
+9A2F
+9A3B
+9A3C
+9A58
+9A5C
+9A63
+9A6C
+9A8F
+9AB2
+9AB6
+9ABA
+9ABD
+9AD7
+9AE0
+9AE2
+9AF4
+9AFF
+9B02
+9B09
+9B0F
+9B14
+9B2A
+9B2D
+9B34
+9B39
+9B40
+9B50
+9B69
+9B7F
+9B81
+9B83
+9B8B
+9B8D
+9B8E
+9B8F
+9B97
+9B9D
+9B9F
+9BB0
+9BCF
+9BDD
+9BE9
+9BED
+9BF1
+9BF4
+9BFF
+9C02
+9C0A
+9C0C
+9C10
+9C15
+9C1B
+9C1F
+9C20
+9C26
+9C2F
+9C35
+9C3A
+9C45
+9C4F
+9C53
+9C5D
+9C72
+9C7B
+9C7C
+9D02
+9D0C
+9D16
+9D21
+9D34
+9D39
+9D44
+9D49
+9D4E
+9D50
+9D5E
+9D6D
+9D6E
+9D7C
+9D7E
+9D83
+9D93
+9DA5
+9DAB
+9DBD
+9DC0
+9DC4
+9DC9
+9DD4
+9DFC
+9E0A
+9E0C
+9E0E
+9E18
+9E1C
+9E1F
+9E7B
+9E81
+9E84
+9E85
+9E90
+9E95
+9E96
+9E98
+9E9E
+9EA2
+9EA6
+9EA8
+9EAA
+9EAB
+9EAC
+9EAF
+9EB1
+9EBD
+9EBF
+9EC1
+9EC4
+9EC6
+9EC7
+9EE2
+9EF1
+9EF8
+9EFE
+9F02
+9F08
+9F17
+9F26
+9F27
+9F39
+9F44
+9F45
+9F50
+9F53
+9F5A
+9F62
+9F69
+9F7F
+9F8E
+9F99
+9F9F
+9FA5
+20547
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zh_mo.orth b/chromium/third_party/fontconfig/src/fc-lang/zh_mo.orth
new file mode 100644
index 00000000000..ae086f9d850
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zh_mo.orth
@@ -0,0 +1,32 @@
+#
+# fontconfig/fc-lang/zh_mo.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese in Macau (ZH-MO)
+#
+# from Abel Cheung:
+#
+# a majority of Macau people speak Cantonese too, and also uses additional
+# traditional Chinese chars from Hong Kong (there are already some place names
+# that can't be represented in just chars used in Taiwan).
+#
+include zh_hk.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zh_sg.orth b/chromium/third_party/fontconfig/src/fc-lang/zh_sg.orth
new file mode 100644
index 00000000000..354e2a4b86b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zh_sg.orth
@@ -0,0 +1,27 @@
+#
+# fontconfig/fc-lang/zh_sg.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese in Singapore (ZH-SG)
+#
+# Just use GB2312 as for ZH-CN
+include zh_cn.orth
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zh_tw.orth b/chromium/third_party/fontconfig/src/fc-lang/zh_tw.orth
new file mode 100644
index 00000000000..8447453421a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zh_tw.orth
@@ -0,0 +1,13105 @@
+#
+# fontconfig/fc-lang/zh_tw.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Chinese (traditional) ZH-TW
+#
+# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs
+#
+#0x3000 # ideographic space
+#0x3001 # ideographic comma
+#0x3002 # ideographic full stop
+#0x3003 # ditto mark
+#0x3005 # ideographic iteration mark
+#0x3021 # Suzhou numeral 1
+#0x3022 # Suzhou numeral 2
+#0x3023 # Suzhou numeral 3
+#0x3024 # Suzhou numeral 4
+#0x3025 # Suzhou numeral 5
+#0x3026 # Suzhou numeral 6
+#0x3027 # Suzhou numeral 7
+#0x3028 # Suzhou numeral 8
+#0x3029 # Suzhou numeral 9
+# Han
+0x4E00
+0x4E01
+0x4E03
+0x4E07
+0x4E08
+0x4E09
+0x4E0A
+0x4E0B
+0x4E0C
+0x4E0D
+0x4E0E
+0x4E0F
+0x4E10
+0x4E11
+0x4E14
+0x4E15
+0x4E16
+0x4E18
+0x4E19
+0x4E1E
+0x4E1F
+0x4E26
+0x4E2B
+0x4E2D
+0x4E2E
+0x4E30
+0x4E31
+0x4E32
+0x4E33
+0x4E38
+0x4E39
+0x4E3B
+0x4E3C
+0x4E42
+0x4E43
+0x4E45
+0x4E47
+0x4E48
+0x4E4B
+0x4E4D
+0x4E4E
+0x4E4F
+0x4E52
+0x4E53
+0x4E56
+0x4E58
+0x4E59
+0x4E5C
+0x4E5D
+0x4E5E
+0x4E5F
+0x4E69
+0x4E73
+0x4E7E
+0x4E7F
+0x4E82
+0x4E83
+0x4E84
+0x4E86
+0x4E88
+0x4E8B
+0x4E8C
+0x4E8D
+0x4E8E
+0x4E91
+0x4E92
+0x4E93
+0x4E94
+0x4E95
+0x4E99
+0x4E9B
+0x4E9E
+0x4E9F
+0x4EA1
+0x4EA2
+0x4EA4
+0x4EA5
+0x4EA6
+0x4EA8
+0x4EAB
+0x4EAC
+0x4EAD
+0x4EAE
+0x4EB3
+0x4EB6
+0x4EB9
+0x4EBA
+0x4EC0
+0x4EC1
+0x4EC2
+0x4EC3
+0x4EC4
+0x4EC6
+0x4EC7
+0x4EC8
+0x4EC9
+0x4ECA
+0x4ECB
+0x4ECD
+0x4ED4
+0x4ED5
+0x4ED6
+0x4ED7
+0x4ED8
+0x4ED9
+0x4EDA
+0x4EDC
+0x4EDD
+0x4EDE
+0x4EDF
+0x4EE1
+0x4EE3
+0x4EE4
+0x4EE5
+0x4EE8
+0x4EE9
+0x4EF0
+0x4EF1
+0x4EF2
+0x4EF3
+0x4EF4
+0x4EF5
+0x4EF6
+0x4EF7
+0x4EFB
+0x4EFD
+0x4EFF
+0x4F00
+0x4F01
+0x4F02
+0x4F04
+0x4F05
+0x4F08
+0x4F09
+0x4F0A
+0x4F0B
+0x4F0D
+0x4F0E
+0x4F0F
+0x4F10
+0x4F11
+0x4F12
+0x4F13
+0x4F14
+0x4F15
+0x4F18
+0x4F19
+0x4F1D
+0x4F22
+0x4F2C
+0x4F2D
+0x4F2F
+0x4F30
+0x4F33
+0x4F34
+0x4F36
+0x4F38
+0x4F3A
+0x4F3B
+0x4F3C
+0x4F3D
+0x4F3E
+0x4F3F
+0x4F41
+0x4F43
+0x4F46
+0x4F47
+0x4F48
+0x4F49
+0x4F4C
+0x4F4D
+0x4F4E
+0x4F4F
+0x4F50
+0x4F51
+0x4F52
+0x4F53
+0x4F54
+0x4F55
+0x4F56
+0x4F57
+0x4F58
+0x4F59
+0x4F5A
+0x4F5B
+0x4F5C
+0x4F5D
+0x4F5E
+0x4F5F
+0x4F60
+0x4F61
+0x4F62
+0x4F63
+0x4F64
+0x4F67
+0x4F69
+0x4F6A
+0x4F6B
+0x4F6C
+0x4F6E
+0x4F6F
+0x4F70
+0x4F73
+0x4F74
+0x4F75
+0x4F76
+0x4F77
+0x4F78
+0x4F79
+0x4F7A
+0x4F7B
+0x4F7C
+0x4F7D
+0x4F7E
+0x4F7F
+0x4F80
+0x4F81
+0x4F82
+0x4F83
+0x4F84
+0x4F85
+0x4F86
+0x4F87
+0x4F88
+0x4F89
+0x4F8B
+0x4F8D
+0x4F8F
+0x4F90
+0x4F91
+0x4F92
+0x4F94
+0x4F95
+0x4F96
+0x4F97
+0x4F98
+0x4F9A
+0x4F9B
+0x4F9C
+0x4F9D
+0x4F9E
+0x4FAE
+0x4FAF
+0x4FB2
+0x4FB3
+0x4FB5
+0x4FB6
+0x4FB7
+0x4FB9
+0x4FBA
+0x4FBB
+0x4FBF
+0x4FC0
+0x4FC1
+0x4FC2
+0x4FC3
+0x4FC4
+0x4FC5
+0x4FC7
+0x4FC9
+0x4FCA
+0x4FCB
+0x4FCD
+0x4FCE
+0x4FCF
+0x4FD0
+0x4FD1
+0x4FD3
+0x4FD4
+0x4FD6
+0x4FD7
+0x4FD8
+0x4FD9
+0x4FDA
+0x4FDB
+0x4FDC
+0x4FDD
+0x4FDE
+0x4FDF
+0x4FE0
+0x4FE1
+0x4FEC
+0x4FEE
+0x4FEF
+0x4FF1
+0x4FF3
+0x4FF4
+0x4FF5
+0x4FF6
+0x4FF7
+0x4FF8
+0x4FFA
+0x4FFE
+0x5000
+0x5005
+0x5006
+0x5007
+0x5009
+0x500B
+0x500C
+0x500D
+0x500E
+0x500F
+0x5011
+0x5012
+0x5013
+0x5014
+0x5015
+0x5016
+0x5017
+0x5018
+0x5019
+0x501A
+0x501B
+0x501C
+0x501E
+0x501F
+0x5020
+0x5021
+0x5022
+0x5023
+0x5025
+0x5026
+0x5027
+0x5028
+0x5029
+0x502A
+0x502B
+0x502C
+0x502D
+0x502F
+0x5030
+0x5031
+0x5033
+0x5035
+0x5037
+0x503C
+0x5040
+0x5041
+0x5043
+0x5045
+0x5046
+0x5047
+0x5048
+0x5049
+0x504A
+0x504B
+0x504C
+0x504D
+0x504E
+0x504F
+0x5051
+0x5053
+0x5055
+0x5057
+0x505A
+0x505B
+0x505C
+0x505D
+0x505E
+0x505F
+0x5060
+0x5061
+0x5062
+0x5063
+0x5064
+0x5065
+0x5068
+0x5069
+0x506A
+0x506B
+0x506D
+0x506E
+0x506F
+0x5070
+0x5072
+0x5073
+0x5074
+0x5075
+0x5076
+0x5077
+0x507A
+0x507D
+0x5080
+0x5082
+0x5083
+0x5085
+0x5087
+0x508B
+0x508C
+0x508D
+0x508E
+0x5091
+0x5092
+0x5094
+0x5095
+0x5096
+0x5098
+0x5099
+0x509A
+0x509B
+0x509C
+0x509D
+0x509E
+0x50A2
+0x50A3
+0x50AC
+0x50AD
+0x50AE
+0x50AF
+0x50B0
+0x50B1
+0x50B2
+0x50B3
+0x50B4
+0x50B5
+0x50B6
+0x50B7
+0x50B8
+0x50BA
+0x50BB
+0x50BD
+0x50BE
+0x50BF
+0x50C1
+0x50C2
+0x50C4
+0x50C5
+0x50C6
+0x50C7
+0x50C8
+0x50C9
+0x50CA
+0x50CB
+0x50CE
+0x50CF
+0x50D1
+0x50D3
+0x50D4
+0x50D5
+0x50D6
+0x50D7
+0x50DA
+0x50DB
+0x50DD
+0x50E0
+0x50E3
+0x50E4
+0x50E5
+0x50E6
+0x50E7
+0x50E8
+0x50E9
+0x50EA
+0x50EC
+0x50ED
+0x50EE
+0x50EF
+0x50F0
+0x50F1
+0x50F3
+0x50F5
+0x50F6
+0x50F8
+0x50F9
+0x50FB
+0x50FD
+0x50FE
+0x50FF
+0x5100
+0x5102
+0x5103
+0x5104
+0x5105
+0x5106
+0x5107
+0x5108
+0x5109
+0x510A
+0x510B
+0x510C
+0x5110
+0x5111
+0x5112
+0x5113
+0x5114
+0x5115
+0x5117
+0x5118
+0x511A
+0x511C
+0x511F
+0x5120
+0x5121
+0x5122
+0x5124
+0x5125
+0x5126
+0x5129
+0x512A
+0x512D
+0x512E
+0x5130
+0x5131
+0x5132
+0x5133
+0x5134
+0x5135
+0x5137
+0x5138
+0x5139
+0x513A
+0x513B
+0x513C
+0x513D
+0x513F
+0x5140
+0x5141
+0x5143
+0x5144
+0x5145
+0x5146
+0x5147
+0x5148
+0x5149
+0x514B
+0x514C
+0x514D
+0x5152
+0x5154
+0x5155
+0x5157
+0x5159
+0x515A
+0x515B
+0x515C
+0x515D
+0x515E
+0x515F
+0x5161
+0x5162
+0x5163
+0x5165
+0x5167
+0x5168
+0x5169
+0x516B
+0x516C
+0x516D
+0x516E
+0x5171
+0x5175
+0x5176
+0x5177
+0x5178
+0x517C
+0x5180
+0x5187
+0x5189
+0x518A
+0x518D
+0x518F
+0x5191
+0x5192
+0x5193
+0x5194
+0x5195
+0x5197
+0x5198
+0x519E
+0x51A0
+0x51A2
+0x51A4
+0x51A5
+0x51AA
+0x51AC
+0x51B0
+0x51B1
+0x51B6
+0x51B7
+0x51B9
+0x51BC
+0x51BD
+0x51BE
+0x51C4
+0x51C5
+0x51C6
+0x51C8
+0x51CA
+0x51CB
+0x51CC
+0x51CD
+0x51CE
+0x51D0
+0x51D4
+0x51D7
+0x51D8
+0x51DC
+0x51DD
+0x51DE
+0x51E0
+0x51E1
+0x51F0
+0x51F1
+0x51F3
+0x51F5
+0x51F6
+0x51F8
+0x51F9
+0x51FA
+0x51FD
+0x5200
+0x5201
+0x5203
+0x5206
+0x5207
+0x5208
+0x5209
+0x520A
+0x520C
+0x520E
+0x5210
+0x5211
+0x5212
+0x5213
+0x5216
+0x5217
+0x521C
+0x521D
+0x521E
+0x5221
+0x5224
+0x5225
+0x5228
+0x5229
+0x522A
+0x522E
+0x5230
+0x5231
+0x5232
+0x5233
+0x5235
+0x5236
+0x5237
+0x5238
+0x523A
+0x523B
+0x5241
+0x5243
+0x5244
+0x5246
+0x5247
+0x5249
+0x524A
+0x524B
+0x524C
+0x524D
+0x524E
+0x5252
+0x5254
+0x5255
+0x5256
+0x525A
+0x525B
+0x525C
+0x525D
+0x525E
+0x525F
+0x5261
+0x5262
+0x5269
+0x526A
+0x526B
+0x526C
+0x526D
+0x526E
+0x526F
+0x5272
+0x5274
+0x5275
+0x5277
+0x5278
+0x527A
+0x527B
+0x527C
+0x527D
+0x527F
+0x5280
+0x5281
+0x5282
+0x5283
+0x5284
+0x5287
+0x5288
+0x5289
+0x528A
+0x528B
+0x528C
+0x528D
+0x5291
+0x5293
+0x5296
+0x5297
+0x5298
+0x5299
+0x529B
+0x529F
+0x52A0
+0x52A3
+0x52A6
+0x52A9
+0x52AA
+0x52AB
+0x52AC
+0x52AD
+0x52AE
+0x52BB
+0x52BC
+0x52BE
+0x52C0
+0x52C1
+0x52C2
+0x52C3
+0x52C7
+0x52C9
+0x52CD
+0x52D2
+0x52D3
+0x52D5
+0x52D6
+0x52D7
+0x52D8
+0x52D9
+0x52DB
+0x52DD
+0x52DE
+0x52DF
+0x52E2
+0x52E3
+0x52E4
+0x52E6
+0x52E9
+0x52EB
+0x52EF
+0x52F0
+0x52F1
+0x52F3
+0x52F4
+0x52F5
+0x52F7
+0x52F8
+0x52FA
+0x52FB
+0x52FC
+0x52FE
+0x52FF
+0x5305
+0x5306
+0x5308
+0x5309
+0x530A
+0x530B
+0x530D
+0x530E
+0x530F
+0x5310
+0x5311
+0x5312
+0x5315
+0x5316
+0x5317
+0x5319
+0x531A
+0x531C
+0x531D
+0x531F
+0x5320
+0x5321
+0x5322
+0x5323
+0x532A
+0x532D
+0x532F
+0x5330
+0x5331
+0x5334
+0x5337
+0x5339
+0x533C
+0x533D
+0x533E
+0x533F
+0x5340
+0x5341
+0x5343
+0x5344
+0x5345
+0x5347
+0x5348
+0x5349
+0x534A
+0x534C
+0x534D
+0x5351
+0x5352
+0x5353
+0x5354
+0x5357
+0x535A
+0x535C
+0x535E
+0x5360
+0x5361
+0x5363
+0x5366
+0x536C
+0x536E
+0x536F
+0x5370
+0x5371
+0x5372
+0x5373
+0x5375
+0x5377
+0x5378
+0x5379
+0x537B
+0x537C
+0x537F
+0x5382
+0x5384
+0x538A
+0x538E
+0x538F
+0x5392
+0x5394
+0x5396
+0x5397
+0x5398
+0x5399
+0x539A
+0x539C
+0x539D
+0x539E
+0x539F
+0x53A4
+0x53A5
+0x53A7
+0x53AC
+0x53AD
+0x53B2
+0x53B4
+0x53B9
+0x53BB
+0x53C3
+0x53C8
+0x53C9
+0x53CA
+0x53CB
+0x53CD
+0x53D4
+0x53D6
+0x53D7
+0x53DB
+0x53DF
+0x53E1
+0x53E2
+0x53E3
+0x53E4
+0x53E5
+0x53E6
+0x53E8
+0x53E9
+0x53EA
+0x53EB
+0x53EC
+0x53ED
+0x53EE
+0x53EF
+0x53F0
+0x53F1
+0x53F2
+0x53F3
+0x53F5
+0x53F8
+0x53FB
+0x53FC
+0x5401
+0x5403
+0x5404
+0x5406
+0x5407
+0x5408
+0x5409
+0x540A
+0x540B
+0x540C
+0x540D
+0x540E
+0x540F
+0x5410
+0x5411
+0x5412
+0x5418
+0x5419
+0x541B
+0x541C
+0x541D
+0x541E
+0x541F
+0x5420
+0x5424
+0x5425
+0x5426
+0x5427
+0x5428
+0x5429
+0x542A
+0x542B
+0x542C
+0x542D
+0x542E
+0x5430
+0x5431
+0x5433
+0x5435
+0x5436
+0x5437
+0x5438
+0x5439
+0x543B
+0x543C
+0x543D
+0x543E
+0x5440
+0x5441
+0x5442
+0x5443
+0x5445
+0x5446
+0x5447
+0x5448
+0x544A
+0x544E
+0x544F
+0x5454
+0x5460
+0x5461
+0x5462
+0x5463
+0x5464
+0x5465
+0x5466
+0x5467
+0x5468
+0x546B
+0x546C
+0x546F
+0x5470
+0x5471
+0x5472
+0x5473
+0x5474
+0x5475
+0x5476
+0x5477
+0x5478
+0x547A
+0x547B
+0x547C
+0x547D
+0x547E
+0x547F
+0x5480
+0x5481
+0x5482
+0x5484
+0x5486
+0x5487
+0x5488
+0x548B
+0x548C
+0x548D
+0x548E
+0x5490
+0x5491
+0x5492
+0x5495
+0x5496
+0x5498
+0x549A
+0x54A0
+0x54A1
+0x54A2
+0x54A5
+0x54A6
+0x54A7
+0x54A8
+0x54A9
+0x54AA
+0x54AB
+0x54AC
+0x54AD
+0x54AE
+0x54AF
+0x54B0
+0x54B1
+0x54B3
+0x54B6
+0x54B7
+0x54B8
+0x54BA
+0x54BB
+0x54BC
+0x54BD
+0x54BE
+0x54BF
+0x54C0
+0x54C1
+0x54C2
+0x54C3
+0x54C4
+0x54C5
+0x54C6
+0x54C7
+0x54C8
+0x54C9
+0x54CE
+0x54CF
+0x54D6
+0x54DE
+0x54E0
+0x54E1
+0x54E2
+0x54E4
+0x54E5
+0x54E6
+0x54E7
+0x54E8
+0x54E9
+0x54EA
+0x54EB
+0x54ED
+0x54EE
+0x54F1
+0x54F2
+0x54F3
+0x54F7
+0x54F8
+0x54FA
+0x54FB
+0x54FC
+0x54FD
+0x54FF
+0x5501
+0x5503
+0x5504
+0x5505
+0x5506
+0x5507
+0x5508
+0x5509
+0x550A
+0x550B
+0x550C
+0x550E
+0x550F
+0x5510
+0x5511
+0x5512
+0x5514
+0x5517
+0x551A
+0x5526
+0x5527
+0x552A
+0x552C
+0x552D
+0x552E
+0x552F
+0x5530
+0x5531
+0x5532
+0x5533
+0x5534
+0x5535
+0x5536
+0x5537
+0x5538
+0x5539
+0x553B
+0x553C
+0x553E
+0x5540
+0x5541
+0x5543
+0x5544
+0x5545
+0x5546
+0x5548
+0x554A
+0x554B
+0x554D
+0x554E
+0x554F
+0x5550
+0x5551
+0x5552
+0x5555
+0x5556
+0x5557
+0x555C
+0x555E
+0x555F
+0x5561
+0x5562
+0x5563
+0x5564
+0x5565
+0x5566
+0x556A
+0x5575
+0x5576
+0x5577
+0x557B
+0x557C
+0x557D
+0x557E
+0x557F
+0x5580
+0x5581
+0x5582
+0x5583
+0x5584
+0x5587
+0x5588
+0x5589
+0x558A
+0x558B
+0x558C
+0x558D
+0x558E
+0x558F
+0x5591
+0x5592
+0x5593
+0x5594
+0x5595
+0x5598
+0x5599
+0x559A
+0x559C
+0x559D
+0x559F
+0x55A1
+0x55A2
+0x55A3
+0x55A4
+0x55A5
+0x55A6
+0x55A7
+0x55A8
+0x55AA
+0x55AB
+0x55AC
+0x55AD
+0x55AE
+0x55B1
+0x55B2
+0x55B3
+0x55B5
+0x55BB
+0x55BF
+0x55C0
+0x55C2
+0x55C3
+0x55C4
+0x55C5
+0x55C6
+0x55C7
+0x55C8
+0x55C9
+0x55CA
+0x55CB
+0x55CC
+0x55CD
+0x55CE
+0x55CF
+0x55D0
+0x55D1
+0x55D2
+0x55D3
+0x55D4
+0x55D5
+0x55D6
+0x55D9
+0x55DA
+0x55DB
+0x55DC
+0x55DD
+0x55DF
+0x55E1
+0x55E2
+0x55E3
+0x55E4
+0x55E5
+0x55E6
+0x55E7
+0x55E8
+0x55E9
+0x55EF
+0x55F2
+0x55F6
+0x55F7
+0x55F9
+0x55FA
+0x55FC
+0x55FD
+0x55FE
+0x55FF
+0x5600
+0x5601
+0x5602
+0x5604
+0x5606
+0x5608
+0x5609
+0x560C
+0x560D
+0x560E
+0x560F
+0x5610
+0x5612
+0x5613
+0x5614
+0x5615
+0x5616
+0x5617
+0x561B
+0x561C
+0x561D
+0x561F
+0x5627
+0x5629
+0x562A
+0x562C
+0x562E
+0x562F
+0x5630
+0x5632
+0x5633
+0x5634
+0x5635
+0x5636
+0x5638
+0x5639
+0x563A
+0x563B
+0x563D
+0x563E
+0x563F
+0x5640
+0x5641
+0x5642
+0x5645
+0x5646
+0x5648
+0x5649
+0x564A
+0x564C
+0x564E
+0x5653
+0x5657
+0x5658
+0x5659
+0x565A
+0x565E
+0x5660
+0x5662
+0x5663
+0x5664
+0x5665
+0x5666
+0x5668
+0x5669
+0x566A
+0x566B
+0x566C
+0x566D
+0x566E
+0x566F
+0x5670
+0x5671
+0x5672
+0x5673
+0x5674
+0x5676
+0x5677
+0x5678
+0x5679
+0x567E
+0x567F
+0x5680
+0x5681
+0x5682
+0x5683
+0x5684
+0x5685
+0x5686
+0x5687
+0x568C
+0x568D
+0x568E
+0x568F
+0x5690
+0x5693
+0x5695
+0x5697
+0x5698
+0x5699
+0x569A
+0x569C
+0x569D
+0x56A5
+0x56A6
+0x56A7
+0x56A8
+0x56AA
+0x56AB
+0x56AC
+0x56AD
+0x56AE
+0x56B2
+0x56B3
+0x56B4
+0x56B5
+0x56B6
+0x56B7
+0x56BC
+0x56BD
+0x56BE
+0x56C0
+0x56C1
+0x56C2
+0x56C3
+0x56C5
+0x56C6
+0x56C8
+0x56C9
+0x56CA
+0x56CB
+0x56CC
+0x56CD
+0x56D1
+0x56D3
+0x56D4
+0x56D7
+0x56DA
+0x56DB
+0x56DD
+0x56DE
+0x56DF
+0x56E0
+0x56E1
+0x56E4
+0x56E5
+0x56E7
+0x56EA
+0x56EB
+0x56EE
+0x56F0
+0x56F7
+0x56F9
+0x56FA
+0x56FF
+0x5701
+0x5702
+0x5703
+0x5704
+0x5707
+0x5708
+0x5709
+0x570A
+0x570B
+0x570C
+0x570D
+0x5712
+0x5713
+0x5714
+0x5716
+0x5718
+0x571A
+0x571B
+0x571C
+0x571E
+0x571F
+0x5720
+0x5722
+0x5723
+0x5728
+0x5729
+0x572A
+0x572C
+0x572D
+0x572E
+0x572F
+0x5730
+0x5733
+0x5734
+0x573B
+0x573E
+0x5740
+0x5741
+0x5745
+0x5747
+0x5749
+0x574A
+0x574B
+0x574C
+0x574D
+0x574E
+0x574F
+0x5750
+0x5751
+0x5752
+0x5761
+0x5762
+0x5764
+0x5766
+0x5768
+0x5769
+0x576A
+0x576B
+0x576D
+0x576F
+0x5770
+0x5771
+0x5772
+0x5773
+0x5774
+0x5775
+0x5776
+0x5777
+0x577B
+0x577C
+0x577D
+0x5780
+0x5782
+0x5783
+0x578B
+0x578C
+0x578F
+0x5793
+0x5794
+0x5795
+0x5797
+0x5798
+0x5799
+0x579A
+0x579B
+0x579D
+0x579E
+0x579F
+0x57A0
+0x57A2
+0x57A3
+0x57A4
+0x57A5
+0x57AE
+0x57B5
+0x57B6
+0x57B8
+0x57B9
+0x57BA
+0x57BC
+0x57BD
+0x57BF
+0x57C1
+0x57C2
+0x57C3
+0x57C6
+0x57C7
+0x57CB
+0x57CC
+0x57CE
+0x57CF
+0x57D0
+0x57D2
+0x57D4
+0x57D5
+0x57DC
+0x57DF
+0x57E0
+0x57E1
+0x57E2
+0x57E3
+0x57E4
+0x57E5
+0x57E7
+0x57E9
+0x57EC
+0x57ED
+0x57EE
+0x57F0
+0x57F1
+0x57F2
+0x57F3
+0x57F4
+0x57F5
+0x57F6
+0x57F7
+0x57F8
+0x57F9
+0x57FA
+0x57FB
+0x57FC
+0x57FD
+0x5800
+0x5801
+0x5802
+0x5804
+0x5805
+0x5806
+0x5807
+0x5808
+0x5809
+0x580A
+0x580B
+0x580C
+0x580D
+0x580E
+0x5810
+0x5814
+0x5819
+0x581B
+0x581C
+0x581D
+0x581E
+0x5820
+0x5821
+0x5823
+0x5824
+0x5825
+0x5827
+0x5828
+0x5829
+0x582A
+0x582C
+0x582D
+0x582E
+0x582F
+0x5830
+0x5831
+0x5832
+0x5833
+0x5834
+0x5835
+0x5836
+0x5837
+0x5838
+0x5839
+0x583B
+0x583D
+0x583F
+0x5848
+0x5849
+0x584A
+0x584B
+0x584C
+0x584D
+0x584E
+0x584F
+0x5851
+0x5852
+0x5853
+0x5854
+0x5855
+0x5857
+0x5858
+0x5859
+0x585A
+0x585B
+0x585D
+0x585E
+0x5862
+0x5863
+0x5864
+0x5865
+0x5868
+0x586B
+0x586D
+0x586F
+0x5871
+0x5874
+0x5875
+0x5876
+0x5879
+0x587A
+0x587B
+0x587C
+0x587D
+0x587E
+0x587F
+0x5880
+0x5881
+0x5882
+0x5883
+0x5885
+0x5886
+0x5887
+0x5888
+0x5889
+0x588A
+0x588B
+0x588E
+0x588F
+0x5890
+0x5891
+0x5893
+0x5894
+0x5898
+0x589C
+0x589D
+0x589E
+0x589F
+0x58A0
+0x58A1
+0x58A3
+0x58A5
+0x58A6
+0x58A8
+0x58A9
+0x58AB
+0x58AC
+0x58AE
+0x58AF
+0x58B1
+0x58B3
+0x58BA
+0x58BC
+0x58BD
+0x58BE
+0x58BF
+0x58C1
+0x58C2
+0x58C5
+0x58C6
+0x58C7
+0x58C8
+0x58C9
+0x58CE
+0x58CF
+0x58D1
+0x58D2
+0x58D3
+0x58D4
+0x58D5
+0x58D6
+0x58D8
+0x58D9
+0x58DA
+0x58DB
+0x58DD
+0x58DE
+0x58DF
+0x58E2
+0x58E3
+0x58E4
+0x58E7
+0x58E8
+0x58E9
+0x58EB
+0x58EC
+0x58EF
+0x58F4
+0x58F9
+0x58FA
+0x58FC
+0x58FD
+0x58FE
+0x58FF
+0x5903
+0x5906
+0x590C
+0x590D
+0x590E
+0x590F
+0x5912
+0x5914
+0x5915
+0x5916
+0x5917
+0x5919
+0x591A
+0x591C
+0x5920
+0x5922
+0x5924
+0x5925
+0x5927
+0x5929
+0x592A
+0x592B
+0x592C
+0x592D
+0x592E
+0x592F
+0x5931
+0x5937
+0x5938
+0x593C
+0x593E
+0x5940
+0x5944
+0x5945
+0x5947
+0x5948
+0x5949
+0x594A
+0x594E
+0x594F
+0x5950
+0x5951
+0x5953
+0x5954
+0x5955
+0x5957
+0x5958
+0x595A
+0x595C
+0x5960
+0x5961
+0x5962
+0x5967
+0x5969
+0x596A
+0x596B
+0x596D
+0x596E
+0x5970
+0x5971
+0x5972
+0x5973
+0x5974
+0x5976
+0x5977
+0x5978
+0x5979
+0x597B
+0x597C
+0x597D
+0x597E
+0x597F
+0x5980
+0x5981
+0x5982
+0x5983
+0x5984
+0x5985
+0x598A
+0x598D
+0x598E
+0x598F
+0x5990
+0x5992
+0x5993
+0x5996
+0x5997
+0x5998
+0x5999
+0x599D
+0x599E
+0x59A0
+0x59A1
+0x59A2
+0x59A3
+0x59A4
+0x59A5
+0x59A6
+0x59A7
+0x59A8
+0x59AE
+0x59AF
+0x59B1
+0x59B2
+0x59B3
+0x59B4
+0x59B5
+0x59B6
+0x59B9
+0x59BA
+0x59BB
+0x59BC
+0x59BD
+0x59BE
+0x59C0
+0x59C1
+0x59C3
+0x59C5
+0x59C6
+0x59C7
+0x59C8
+0x59CA
+0x59CB
+0x59CC
+0x59CD
+0x59CE
+0x59CF
+0x59D0
+0x59D1
+0x59D2
+0x59D3
+0x59D4
+0x59D6
+0x59D8
+0x59DA
+0x59DB
+0x59DC
+0x59DD
+0x59DE
+0x59E0
+0x59E1
+0x59E3
+0x59E4
+0x59E5
+0x59E6
+0x59E8
+0x59E9
+0x59EA
+0x59EC
+0x59ED
+0x59EE
+0x59F1
+0x59F2
+0x59F3
+0x59F4
+0x59F5
+0x59F6
+0x59F7
+0x59FA
+0x59FB
+0x59FC
+0x59FD
+0x59FE
+0x59FF
+0x5A00
+0x5A01
+0x5A03
+0x5A09
+0x5A0A
+0x5A0C
+0x5A0F
+0x5A11
+0x5A13
+0x5A15
+0x5A16
+0x5A17
+0x5A18
+0x5A19
+0x5A1B
+0x5A1C
+0x5A1E
+0x5A1F
+0x5A20
+0x5A23
+0x5A25
+0x5A29
+0x5A2D
+0x5A2E
+0x5A33
+0x5A35
+0x5A36
+0x5A37
+0x5A38
+0x5A39
+0x5A3C
+0x5A3E
+0x5A40
+0x5A41
+0x5A42
+0x5A43
+0x5A44
+0x5A46
+0x5A47
+0x5A48
+0x5A49
+0x5A4A
+0x5A4C
+0x5A4D
+0x5A50
+0x5A51
+0x5A52
+0x5A53
+0x5A55
+0x5A56
+0x5A57
+0x5A58
+0x5A5A
+0x5A5B
+0x5A5C
+0x5A5D
+0x5A5E
+0x5A5F
+0x5A60
+0x5A62
+0x5A64
+0x5A65
+0x5A66
+0x5A67
+0x5A69
+0x5A6A
+0x5A6C
+0x5A6D
+0x5A70
+0x5A77
+0x5A78
+0x5A7A
+0x5A7B
+0x5A7C
+0x5A7D
+0x5A7F
+0x5A83
+0x5A84
+0x5A8A
+0x5A8B
+0x5A8C
+0x5A8E
+0x5A8F
+0x5A90
+0x5A92
+0x5A93
+0x5A94
+0x5A95
+0x5A97
+0x5A9A
+0x5A9B
+0x5A9C
+0x5A9D
+0x5A9E
+0x5A9F
+0x5AA2
+0x5AA5
+0x5AA6
+0x5AA7
+0x5AA9
+0x5AAC
+0x5AAE
+0x5AAF
+0x5AB0
+0x5AB1
+0x5AB2
+0x5AB3
+0x5AB4
+0x5AB5
+0x5AB6
+0x5AB7
+0x5AB8
+0x5AB9
+0x5ABA
+0x5ABB
+0x5ABC
+0x5ABD
+0x5ABE
+0x5ABF
+0x5AC0
+0x5AC1
+0x5AC2
+0x5AC4
+0x5AC6
+0x5AC7
+0x5AC8
+0x5AC9
+0x5ACA
+0x5ACB
+0x5ACC
+0x5ACD
+0x5AD5
+0x5AD6
+0x5AD7
+0x5AD8
+0x5AD9
+0x5ADA
+0x5ADB
+0x5ADC
+0x5ADD
+0x5ADE
+0x5ADF
+0x5AE0
+0x5AE1
+0x5AE2
+0x5AE3
+0x5AE5
+0x5AE6
+0x5AE8
+0x5AE9
+0x5AEA
+0x5AEB
+0x5AEC
+0x5AED
+0x5AEE
+0x5AF3
+0x5AF4
+0x5AF5
+0x5AF6
+0x5AF7
+0x5AF8
+0x5AF9
+0x5AFB
+0x5AFD
+0x5AFF
+0x5B01
+0x5B02
+0x5B03
+0x5B05
+0x5B07
+0x5B08
+0x5B09
+0x5B0B
+0x5B0C
+0x5B0F
+0x5B10
+0x5B13
+0x5B14
+0x5B16
+0x5B17
+0x5B19
+0x5B1A
+0x5B1B
+0x5B1D
+0x5B1E
+0x5B20
+0x5B21
+0x5B23
+0x5B24
+0x5B25
+0x5B26
+0x5B27
+0x5B28
+0x5B2A
+0x5B2C
+0x5B2D
+0x5B2E
+0x5B2F
+0x5B30
+0x5B32
+0x5B34
+0x5B38
+0x5B3C
+0x5B3D
+0x5B3E
+0x5B3F
+0x5B40
+0x5B43
+0x5B45
+0x5B47
+0x5B48
+0x5B4B
+0x5B4C
+0x5B4D
+0x5B4E
+0x5B50
+0x5B51
+0x5B53
+0x5B54
+0x5B55
+0x5B56
+0x5B57
+0x5B58
+0x5B5A
+0x5B5B
+0x5B5C
+0x5B5D
+0x5B5F
+0x5B62
+0x5B63
+0x5B64
+0x5B65
+0x5B69
+0x5B6B
+0x5B6C
+0x5B6E
+0x5B70
+0x5B71
+0x5B72
+0x5B73
+0x5B75
+0x5B77
+0x5B78
+0x5B7A
+0x5B7B
+0x5B7D
+0x5B7F
+0x5B81
+0x5B83
+0x5B84
+0x5B85
+0x5B87
+0x5B88
+0x5B89
+0x5B8B
+0x5B8C
+0x5B8E
+0x5B8F
+0x5B92
+0x5B93
+0x5B95
+0x5B97
+0x5B98
+0x5B99
+0x5B9A
+0x5B9B
+0x5B9C
+0x5BA2
+0x5BA3
+0x5BA4
+0x5BA5
+0x5BA6
+0x5BA7
+0x5BA8
+0x5BAC
+0x5BAD
+0x5BAE
+0x5BB0
+0x5BB3
+0x5BB4
+0x5BB5
+0x5BB6
+0x5BB8
+0x5BB9
+0x5BBF
+0x5BC0
+0x5BC1
+0x5BC2
+0x5BC4
+0x5BC5
+0x5BC6
+0x5BC7
+0x5BCA
+0x5BCB
+0x5BCC
+0x5BCD
+0x5BCE
+0x5BD0
+0x5BD1
+0x5BD2
+0x5BD3
+0x5BD4
+0x5BD6
+0x5BD8
+0x5BD9
+0x5BDE
+0x5BDF
+0x5BE0
+0x5BE1
+0x5BE2
+0x5BE3
+0x5BE4
+0x5BE5
+0x5BE6
+0x5BE7
+0x5BE8
+0x5BE9
+0x5BEA
+0x5BEB
+0x5BEC
+0x5BEE
+0x5BEF
+0x5BF0
+0x5BF1
+0x5BF2
+0x5BF5
+0x5BF6
+0x5BF8
+0x5BFA
+0x5C01
+0x5C03
+0x5C04
+0x5C07
+0x5C08
+0x5C09
+0x5C0A
+0x5C0B
+0x5C0C
+0x5C0D
+0x5C0E
+0x5C0F
+0x5C10
+0x5C11
+0x5C12
+0x5C15
+0x5C16
+0x5C1A
+0x5C1F
+0x5C22
+0x5C24
+0x5C25
+0x5C28
+0x5C2A
+0x5C2C
+0x5C30
+0x5C31
+0x5C33
+0x5C37
+0x5C38
+0x5C39
+0x5C3A
+0x5C3B
+0x5C3C
+0x5C3E
+0x5C3F
+0x5C40
+0x5C41
+0x5C44
+0x5C45
+0x5C46
+0x5C47
+0x5C48
+0x5C4B
+0x5C4C
+0x5C4D
+0x5C4E
+0x5C4F
+0x5C50
+0x5C51
+0x5C54
+0x5C55
+0x5C56
+0x5C58
+0x5C59
+0x5C5C
+0x5C5D
+0x5C60
+0x5C62
+0x5C63
+0x5C64
+0x5C65
+0x5C67
+0x5C68
+0x5C69
+0x5C6A
+0x5C6C
+0x5C6D
+0x5C6E
+0x5C6F
+0x5C71
+0x5C73
+0x5C74
+0x5C79
+0x5C7A
+0x5C7B
+0x5C7C
+0x5C7E
+0x5C86
+0x5C88
+0x5C89
+0x5C8A
+0x5C8B
+0x5C8C
+0x5C8D
+0x5C8F
+0x5C90
+0x5C91
+0x5C92
+0x5C93
+0x5C94
+0x5C95
+0x5C9D
+0x5C9F
+0x5CA0
+0x5CA1
+0x5CA2
+0x5CA3
+0x5CA4
+0x5CA5
+0x5CA6
+0x5CA7
+0x5CA8
+0x5CA9
+0x5CAA
+0x5CAB
+0x5CAC
+0x5CAD
+0x5CAE
+0x5CAF
+0x5CB0
+0x5CB1
+0x5CB3
+0x5CB5
+0x5CB6
+0x5CB7
+0x5CB8
+0x5CC6
+0x5CC7
+0x5CC8
+0x5CC9
+0x5CCA
+0x5CCB
+0x5CCC
+0x5CCE
+0x5CCF
+0x5CD0
+0x5CD2
+0x5CD3
+0x5CD4
+0x5CD6
+0x5CD7
+0x5CD8
+0x5CD9
+0x5CDA
+0x5CDB
+0x5CDE
+0x5CDF
+0x5CE8
+0x5CEA
+0x5CEC
+0x5CED
+0x5CEE
+0x5CF0
+0x5CF1
+0x5CF4
+0x5CF6
+0x5CF7
+0x5CF8
+0x5CF9
+0x5CFB
+0x5CFD
+0x5CFF
+0x5D00
+0x5D01
+0x5D06
+0x5D07
+0x5D0B
+0x5D0C
+0x5D0D
+0x5D0E
+0x5D0F
+0x5D11
+0x5D12
+0x5D14
+0x5D16
+0x5D17
+0x5D19
+0x5D1A
+0x5D1B
+0x5D1D
+0x5D1E
+0x5D1F
+0x5D20
+0x5D22
+0x5D23
+0x5D24
+0x5D25
+0x5D26
+0x5D27
+0x5D28
+0x5D29
+0x5D2E
+0x5D30
+0x5D31
+0x5D32
+0x5D33
+0x5D34
+0x5D35
+0x5D36
+0x5D37
+0x5D38
+0x5D39
+0x5D3A
+0x5D3C
+0x5D3D
+0x5D3F
+0x5D40
+0x5D41
+0x5D42
+0x5D43
+0x5D45
+0x5D47
+0x5D49
+0x5D4A
+0x5D4B
+0x5D4C
+0x5D4E
+0x5D50
+0x5D51
+0x5D52
+0x5D55
+0x5D59
+0x5D5E
+0x5D62
+0x5D63
+0x5D65
+0x5D67
+0x5D68
+0x5D69
+0x5D6B
+0x5D6C
+0x5D6F
+0x5D71
+0x5D72
+0x5D77
+0x5D79
+0x5D7A
+0x5D7C
+0x5D7D
+0x5D7E
+0x5D7F
+0x5D80
+0x5D81
+0x5D82
+0x5D84
+0x5D86
+0x5D87
+0x5D88
+0x5D89
+0x5D8A
+0x5D8D
+0x5D92
+0x5D93
+0x5D94
+0x5D95
+0x5D97
+0x5D99
+0x5D9A
+0x5D9C
+0x5D9D
+0x5D9E
+0x5D9F
+0x5DA0
+0x5DA1
+0x5DA2
+0x5DA7
+0x5DA8
+0x5DA9
+0x5DAA
+0x5DAC
+0x5DAD
+0x5DAE
+0x5DAF
+0x5DB0
+0x5DB1
+0x5DB2
+0x5DB4
+0x5DB5
+0x5DB7
+0x5DB8
+0x5DBA
+0x5DBC
+0x5DBD
+0x5DC0
+0x5DC2
+0x5DC3
+0x5DC6
+0x5DC7
+0x5DC9
+0x5DCB
+0x5DCD
+0x5DCF
+0x5DD1
+0x5DD2
+0x5DD4
+0x5DD5
+0x5DD6
+0x5DD8
+0x5DDD
+0x5DDE
+0x5DDF
+0x5DE0
+0x5DE1
+0x5DE2
+0x5DE5
+0x5DE6
+0x5DE7
+0x5DE8
+0x5DEB
+0x5DEE
+0x5DF0
+0x5DF1
+0x5DF2
+0x5DF3
+0x5DF4
+0x5DF7
+0x5DF9
+0x5DFD
+0x5DFE
+0x5DFF
+0x5E02
+0x5E03
+0x5E04
+0x5E06
+0x5E0A
+0x5E0C
+0x5E0E
+0x5E11
+0x5E14
+0x5E15
+0x5E16
+0x5E17
+0x5E18
+0x5E19
+0x5E1A
+0x5E1B
+0x5E1D
+0x5E1F
+0x5E20
+0x5E21
+0x5E22
+0x5E23
+0x5E24
+0x5E25
+0x5E28
+0x5E29
+0x5E2B
+0x5E2D
+0x5E33
+0x5E34
+0x5E36
+0x5E37
+0x5E38
+0x5E3D
+0x5E3E
+0x5E40
+0x5E41
+0x5E43
+0x5E44
+0x5E45
+0x5E4A
+0x5E4B
+0x5E4C
+0x5E4D
+0x5E4E
+0x5E4F
+0x5E53
+0x5E54
+0x5E55
+0x5E57
+0x5E58
+0x5E59
+0x5E5B
+0x5E5C
+0x5E5D
+0x5E5F
+0x5E60
+0x5E61
+0x5E62
+0x5E63
+0x5E66
+0x5E67
+0x5E68
+0x5E69
+0x5E6A
+0x5E6B
+0x5E6C
+0x5E6D
+0x5E6E
+0x5E6F
+0x5E70
+0x5E72
+0x5E73
+0x5E74
+0x5E75
+0x5E76
+0x5E78
+0x5E79
+0x5E7B
+0x5E7C
+0x5E7D
+0x5E7E
+0x5E80
+0x5E82
+0x5E84
+0x5E87
+0x5E88
+0x5E89
+0x5E8A
+0x5E8B
+0x5E8C
+0x5E8D
+0x5E8F
+0x5E95
+0x5E96
+0x5E97
+0x5E9A
+0x5E9B
+0x5E9C
+0x5EA0
+0x5EA2
+0x5EA3
+0x5EA4
+0x5EA5
+0x5EA6
+0x5EA7
+0x5EA8
+0x5EAA
+0x5EAB
+0x5EAC
+0x5EAD
+0x5EAE
+0x5EB0
+0x5EB1
+0x5EB2
+0x5EB3
+0x5EB4
+0x5EB5
+0x5EB6
+0x5EB7
+0x5EB8
+0x5EB9
+0x5EBE
+0x5EC1
+0x5EC2
+0x5EC4
+0x5EC5
+0x5EC6
+0x5EC7
+0x5EC8
+0x5EC9
+0x5ECA
+0x5ECB
+0x5ECC
+0x5ECE
+0x5ED1
+0x5ED2
+0x5ED3
+0x5ED4
+0x5ED5
+0x5ED6
+0x5ED7
+0x5ED8
+0x5ED9
+0x5EDA
+0x5EDB
+0x5EDC
+0x5EDD
+0x5EDE
+0x5EDF
+0x5EE0
+0x5EE1
+0x5EE2
+0x5EE3
+0x5EE5
+0x5EE6
+0x5EE7
+0x5EE8
+0x5EE9
+0x5EEC
+0x5EEE
+0x5EEF
+0x5EF1
+0x5EF2
+0x5EF3
+0x5EF6
+0x5EF7
+0x5EFA
+0x5EFE
+0x5EFF
+0x5F01
+0x5F02
+0x5F04
+0x5F05
+0x5F07
+0x5F08
+0x5F0A
+0x5F0B
+0x5F0F
+0x5F12
+0x5F13
+0x5F14
+0x5F15
+0x5F17
+0x5F18
+0x5F1A
+0x5F1B
+0x5F1D
+0x5F1F
+0x5F22
+0x5F23
+0x5F24
+0x5F26
+0x5F27
+0x5F28
+0x5F29
+0x5F2D
+0x5F2E
+0x5F30
+0x5F31
+0x5F33
+0x5F35
+0x5F36
+0x5F37
+0x5F38
+0x5F3C
+0x5F40
+0x5F43
+0x5F44
+0x5F46
+0x5F48
+0x5F49
+0x5F4A
+0x5F4B
+0x5F4C
+0x5F4E
+0x5F4F
+0x5F54
+0x5F56
+0x5F57
+0x5F58
+0x5F59
+0x5F5D
+0x5F62
+0x5F64
+0x5F65
+0x5F67
+0x5F69
+0x5F6A
+0x5F6B
+0x5F6C
+0x5F6D
+0x5F6F
+0x5F70
+0x5F71
+0x5F73
+0x5F74
+0x5F76
+0x5F77
+0x5F78
+0x5F79
+0x5F7C
+0x5F7D
+0x5F7E
+0x5F7F
+0x5F80
+0x5F81
+0x5F82
+0x5F85
+0x5F86
+0x5F87
+0x5F88
+0x5F89
+0x5F8A
+0x5F8B
+0x5F8C
+0x5F90
+0x5F91
+0x5F92
+0x5F96
+0x5F97
+0x5F98
+0x5F99
+0x5F9B
+0x5F9C
+0x5F9E
+0x5F9F
+0x5FA0
+0x5FA1
+0x5FA5
+0x5FA6
+0x5FA8
+0x5FA9
+0x5FAA
+0x5FAB
+0x5FAC
+0x5FAD
+0x5FAE
+0x5FAF
+0x5FB2
+0x5FB5
+0x5FB6
+0x5FB7
+0x5FB9
+0x5FBB
+0x5FBC
+0x5FBD
+0x5FBE
+0x5FBF
+0x5FC0
+0x5FC1
+0x5FC3
+0x5FC5
+0x5FC9
+0x5FCC
+0x5FCD
+0x5FCF
+0x5FD0
+0x5FD1
+0x5FD2
+0x5FD4
+0x5FD5
+0x5FD6
+0x5FD7
+0x5FD8
+0x5FD9
+0x5FDD
+0x5FDE
+0x5FE0
+0x5FE1
+0x5FE3
+0x5FE4
+0x5FE5
+0x5FE8
+0x5FEA
+0x5FEB
+0x5FED
+0x5FEE
+0x5FEF
+0x5FF1
+0x5FF3
+0x5FF4
+0x5FF5
+0x5FF7
+0x5FF8
+0x5FFA
+0x5FFB
+0x5FFD
+0x5FFF
+0x6000
+0x6009
+0x600A
+0x600B
+0x600C
+0x600D
+0x600E
+0x600F
+0x6010
+0x6011
+0x6012
+0x6013
+0x6014
+0x6015
+0x6016
+0x6017
+0x6019
+0x601A
+0x601B
+0x601C
+0x601D
+0x601E
+0x6020
+0x6021
+0x6022
+0x6024
+0x6025
+0x6026
+0x6027
+0x6028
+0x6029
+0x602A
+0x602B
+0x602C
+0x602D
+0x602E
+0x602F
+0x6032
+0x6033
+0x6034
+0x6035
+0x6037
+0x6039
+0x6040
+0x6041
+0x6042
+0x6043
+0x6044
+0x6045
+0x6046
+0x6047
+0x6049
+0x604C
+0x604D
+0x6050
+0x6053
+0x6054
+0x6055
+0x6058
+0x6059
+0x605A
+0x605B
+0x605D
+0x605E
+0x605F
+0x6062
+0x6063
+0x6064
+0x6065
+0x6066
+0x6067
+0x6068
+0x6069
+0x606A
+0x606B
+0x606C
+0x606D
+0x606E
+0x606F
+0x6070
+0x6072
+0x607F
+0x6080
+0x6081
+0x6083
+0x6084
+0x6085
+0x6086
+0x6087
+0x6088
+0x6089
+0x608A
+0x608C
+0x608D
+0x608E
+0x6090
+0x6092
+0x6094
+0x6095
+0x6096
+0x6097
+0x609A
+0x609B
+0x609C
+0x609D
+0x609F
+0x60A0
+0x60A2
+0x60A3
+0x60A8
+0x60B0
+0x60B1
+0x60B2
+0x60B4
+0x60B5
+0x60B6
+0x60B7
+0x60B8
+0x60B9
+0x60BA
+0x60BB
+0x60BC
+0x60BD
+0x60BE
+0x60BF
+0x60C0
+0x60C1
+0x60C3
+0x60C4
+0x60C5
+0x60C6
+0x60C7
+0x60C8
+0x60C9
+0x60CA
+0x60CB
+0x60CC
+0x60CD
+0x60CE
+0x60CF
+0x60D1
+0x60D3
+0x60D4
+0x60D5
+0x60D8
+0x60D9
+0x60DA
+0x60DB
+0x60DC
+0x60DD
+0x60DF
+0x60E0
+0x60E1
+0x60E2
+0x60E4
+0x60E6
+0x60F0
+0x60F1
+0x60F2
+0x60F3
+0x60F4
+0x60F5
+0x60F6
+0x60F7
+0x60F8
+0x60F9
+0x60FA
+0x60FB
+0x60FC
+0x60FE
+0x60FF
+0x6100
+0x6101
+0x6103
+0x6104
+0x6105
+0x6106
+0x6108
+0x6109
+0x610A
+0x610B
+0x610D
+0x610E
+0x610F
+0x6110
+0x6112
+0x6113
+0x6114
+0x6115
+0x6116
+0x6118
+0x611A
+0x611B
+0x611C
+0x611D
+0x611F
+0x6123
+0x6127
+0x6128
+0x6129
+0x612B
+0x612C
+0x612E
+0x612F
+0x6132
+0x6134
+0x6136
+0x6137
+0x613B
+0x613E
+0x613F
+0x6140
+0x6141
+0x6144
+0x6145
+0x6146
+0x6147
+0x6148
+0x6149
+0x614A
+0x614B
+0x614C
+0x614D
+0x614E
+0x614F
+0x6152
+0x6153
+0x6154
+0x6155
+0x6156
+0x6158
+0x615A
+0x615B
+0x615D
+0x615E
+0x615F
+0x6161
+0x6162
+0x6163
+0x6165
+0x6166
+0x6167
+0x6168
+0x616A
+0x616B
+0x616C
+0x616E
+0x6170
+0x6171
+0x6172
+0x6173
+0x6174
+0x6175
+0x6176
+0x6177
+0x6179
+0x617A
+0x617C
+0x617E
+0x6180
+0x6182
+0x6183
+0x6189
+0x618A
+0x618B
+0x618C
+0x618D
+0x618E
+0x6190
+0x6191
+0x6192
+0x6193
+0x6194
+0x6196
+0x619A
+0x619B
+0x619D
+0x619F
+0x61A1
+0x61A2
+0x61A4
+0x61A7
+0x61A8
+0x61A9
+0x61AA
+0x61AB
+0x61AC
+0x61AD
+0x61AE
+0x61AF
+0x61B0
+0x61B1
+0x61B2
+0x61B3
+0x61B4
+0x61B5
+0x61B6
+0x61B8
+0x61BA
+0x61BC
+0x61BE
+0x61BF
+0x61C1
+0x61C2
+0x61C3
+0x61C5
+0x61C6
+0x61C7
+0x61C8
+0x61C9
+0x61CA
+0x61CB
+0x61CC
+0x61CD
+0x61D6
+0x61D8
+0x61DE
+0x61DF
+0x61E0
+0x61E3
+0x61E4
+0x61E5
+0x61E6
+0x61E7
+0x61E8
+0x61E9
+0x61EA
+0x61EB
+0x61ED
+0x61EE
+0x61F0
+0x61F1
+0x61F2
+0x61F5
+0x61F6
+0x61F7
+0x61F8
+0x61F9
+0x61FA
+0x61FB
+0x61FC
+0x61FD
+0x61FE
+0x61FF
+0x6200
+0x6201
+0x6203
+0x6204
+0x6207
+0x6208
+0x6209
+0x620A
+0x620C
+0x620D
+0x620E
+0x6210
+0x6211
+0x6212
+0x6214
+0x6215
+0x6216
+0x6219
+0x621A
+0x621B
+0x621F
+0x6220
+0x6221
+0x6222
+0x6223
+0x6224
+0x6225
+0x6227
+0x6229
+0x622A
+0x622B
+0x622D
+0x622E
+0x6230
+0x6232
+0x6233
+0x6234
+0x6236
+0x623A
+0x623D
+0x623E
+0x623F
+0x6240
+0x6241
+0x6242
+0x6243
+0x6246
+0x6247
+0x6248
+0x6249
+0x624A
+0x624B
+0x624D
+0x624E
+0x6250
+0x6251
+0x6252
+0x6253
+0x6254
+0x6258
+0x6259
+0x625A
+0x625B
+0x625C
+0x625E
+0x6260
+0x6261
+0x6262
+0x6263
+0x6264
+0x6265
+0x6266
+0x626D
+0x626E
+0x626F
+0x6270
+0x6271
+0x6272
+0x6273
+0x6274
+0x6276
+0x6277
+0x6279
+0x627A
+0x627B
+0x627C
+0x627D
+0x627E
+0x627F
+0x6280
+0x6281
+0x6283
+0x6284
+0x6286
+0x6287
+0x6288
+0x6289
+0x628A
+0x628C
+0x628E
+0x628F
+0x6291
+0x6292
+0x6293
+0x6294
+0x6295
+0x6296
+0x6297
+0x6298
+0x62A8
+0x62A9
+0x62AA
+0x62AB
+0x62AC
+0x62AD
+0x62AE
+0x62AF
+0x62B0
+0x62B1
+0x62B3
+0x62B4
+0x62B5
+0x62B6
+0x62B8
+0x62B9
+0x62BB
+0x62BC
+0x62BD
+0x62BE
+0x62BF
+0x62C2
+0x62C4
+0x62C6
+0x62C7
+0x62C8
+0x62C9
+0x62CA
+0x62CB
+0x62CC
+0x62CD
+0x62CE
+0x62CF
+0x62D0
+0x62D1
+0x62D2
+0x62D3
+0x62D4
+0x62D6
+0x62D7
+0x62D8
+0x62D9
+0x62DA
+0x62DB
+0x62DC
+0x62EB
+0x62EC
+0x62ED
+0x62EE
+0x62EF
+0x62F0
+0x62F1
+0x62F2
+0x62F3
+0x62F4
+0x62F5
+0x62F6
+0x62F7
+0x62F8
+0x62F9
+0x62FA
+0x62FB
+0x62FC
+0x62FD
+0x62FE
+0x62FF
+0x6300
+0x6301
+0x6302
+0x6303
+0x6307
+0x6308
+0x6309
+0x630B
+0x630C
+0x630D
+0x630E
+0x630F
+0x6310
+0x6311
+0x6313
+0x6314
+0x6315
+0x6316
+0x6328
+0x6329
+0x632A
+0x632B
+0x632C
+0x632D
+0x632F
+0x6332
+0x6333
+0x6334
+0x6336
+0x6338
+0x6339
+0x633A
+0x633B
+0x633C
+0x633D
+0x633E
+0x6340
+0x6341
+0x6342
+0x6343
+0x6344
+0x6345
+0x6346
+0x6347
+0x6348
+0x6349
+0x634A
+0x634B
+0x634C
+0x634D
+0x634E
+0x634F
+0x6350
+0x6351
+0x6354
+0x6355
+0x6356
+0x6357
+0x6358
+0x6359
+0x635A
+0x6365
+0x6367
+0x6368
+0x6369
+0x636B
+0x636D
+0x636E
+0x636F
+0x6370
+0x6371
+0x6372
+0x6375
+0x6376
+0x6377
+0x6378
+0x637A
+0x637B
+0x637C
+0x637D
+0x6380
+0x6381
+0x6382
+0x6383
+0x6384
+0x6385
+0x6387
+0x6388
+0x6389
+0x638A
+0x638C
+0x638D
+0x638E
+0x638F
+0x6390
+0x6391
+0x6392
+0x6394
+0x6396
+0x6397
+0x6398
+0x6399
+0x639B
+0x639C
+0x639D
+0x639E
+0x639F
+0x63A0
+0x63A1
+0x63A2
+0x63A3
+0x63A4
+0x63A5
+0x63A7
+0x63A8
+0x63A9
+0x63AA
+0x63AB
+0x63AC
+0x63AD
+0x63AE
+0x63AF
+0x63B0
+0x63B1
+0x63BD
+0x63BE
+0x63C0
+0x63C2
+0x63C3
+0x63C4
+0x63C5
+0x63C6
+0x63C7
+0x63C8
+0x63C9
+0x63CA
+0x63CB
+0x63CC
+0x63CD
+0x63CE
+0x63CF
+0x63D0
+0x63D2
+0x63D3
+0x63D5
+0x63D6
+0x63D7
+0x63D8
+0x63D9
+0x63DA
+0x63DB
+0x63DC
+0x63DD
+0x63DF
+0x63E0
+0x63E1
+0x63E3
+0x63E4
+0x63E5
+0x63E7
+0x63E8
+0x63E9
+0x63EA
+0x63EB
+0x63ED
+0x63EE
+0x63EF
+0x63F0
+0x63F1
+0x63F2
+0x63F3
+0x63F4
+0x63F5
+0x63F6
+0x63F9
+0x6406
+0x6409
+0x640A
+0x640B
+0x640C
+0x640D
+0x640E
+0x640F
+0x6410
+0x6412
+0x6413
+0x6414
+0x6415
+0x6416
+0x6417
+0x6418
+0x641A
+0x641B
+0x641C
+0x641E
+0x641F
+0x6420
+0x6421
+0x6422
+0x6423
+0x6424
+0x6425
+0x6426
+0x6427
+0x6428
+0x642A
+0x642B
+0x642C
+0x642D
+0x642E
+0x642F
+0x6430
+0x6433
+0x6434
+0x6435
+0x6436
+0x6437
+0x6439
+0x643D
+0x643E
+0x643F
+0x6440
+0x6441
+0x6443
+0x644B
+0x644D
+0x644E
+0x6450
+0x6451
+0x6452
+0x6453
+0x6454
+0x6458
+0x6459
+0x645B
+0x645C
+0x645D
+0x645E
+0x645F
+0x6460
+0x6461
+0x6465
+0x6466
+0x6467
+0x6468
+0x6469
+0x646B
+0x646C
+0x646D
+0x646E
+0x646F
+0x6470
+0x6472
+0x6473
+0x6474
+0x6475
+0x6476
+0x6477
+0x6478
+0x6479
+0x647A
+0x647B
+0x647D
+0x647F
+0x6482
+0x6485
+0x6487
+0x6488
+0x6489
+0x648A
+0x648B
+0x648C
+0x648F
+0x6490
+0x6492
+0x6493
+0x6495
+0x6496
+0x6497
+0x6498
+0x6499
+0x649A
+0x649C
+0x649D
+0x649E
+0x649F
+0x64A0
+0x64A2
+0x64A3
+0x64A4
+0x64A5
+0x64A6
+0x64A9
+0x64AB
+0x64AC
+0x64AD
+0x64AE
+0x64B0
+0x64B1
+0x64B2
+0x64B3
+0x64BB
+0x64BC
+0x64BD
+0x64BE
+0x64BF
+0x64C1
+0x64C2
+0x64C3
+0x64C4
+0x64C5
+0x64C7
+0x64C9
+0x64CA
+0x64CB
+0x64CD
+0x64CE
+0x64CF
+0x64D0
+0x64D2
+0x64D4
+0x64D6
+0x64D7
+0x64D8
+0x64D9
+0x64DA
+0x64DB
+0x64E0
+0x64E2
+0x64E3
+0x64E4
+0x64E6
+0x64E8
+0x64E9
+0x64EB
+0x64EC
+0x64ED
+0x64EF
+0x64F0
+0x64F1
+0x64F2
+0x64F3
+0x64F4
+0x64F7
+0x64F8
+0x64FA
+0x64FB
+0x64FC
+0x64FD
+0x64FE
+0x64FF
+0x6500
+0x6501
+0x6503
+0x6504
+0x6506
+0x6507
+0x6509
+0x650C
+0x650D
+0x650E
+0x650F
+0x6510
+0x6513
+0x6514
+0x6515
+0x6516
+0x6517
+0x6518
+0x6519
+0x651B
+0x651C
+0x651D
+0x6520
+0x6521
+0x6522
+0x6523
+0x6524
+0x6525
+0x6526
+0x6529
+0x652A
+0x652B
+0x652C
+0x652D
+0x652E
+0x652F
+0x6532
+0x6533
+0x6536
+0x6537
+0x6538
+0x6539
+0x653B
+0x653D
+0x653E
+0x653F
+0x6541
+0x6543
+0x6545
+0x6546
+0x6548
+0x6549
+0x654A
+0x654F
+0x6551
+0x6553
+0x6554
+0x6555
+0x6556
+0x6557
+0x6558
+0x6559
+0x655C
+0x655D
+0x655E
+0x6562
+0x6563
+0x6564
+0x6565
+0x6566
+0x6567
+0x6568
+0x656A
+0x656C
+0x656F
+0x6572
+0x6573
+0x6574
+0x6575
+0x6576
+0x6577
+0x6578
+0x6579
+0x657A
+0x657B
+0x657C
+0x657F
+0x6580
+0x6581
+0x6582
+0x6583
+0x6584
+0x6587
+0x658C
+0x6590
+0x6591
+0x6592
+0x6594
+0x6595
+0x6596
+0x6597
+0x6599
+0x659B
+0x659C
+0x659D
+0x659E
+0x659F
+0x65A0
+0x65A1
+0x65A2
+0x65A4
+0x65A5
+0x65A7
+0x65A8
+0x65AA
+0x65AB
+0x65AC
+0x65AE
+0x65AF
+0x65B0
+0x65B2
+0x65B3
+0x65B6
+0x65B7
+0x65B8
+0x65B9
+0x65BB
+0x65BC
+0x65BD
+0x65BF
+0x65C1
+0x65C2
+0x65C3
+0x65C4
+0x65C5
+0x65C6
+0x65CB
+0x65CC
+0x65CD
+0x65CE
+0x65CF
+0x65D0
+0x65D2
+0x65D3
+0x65D6
+0x65D7
+0x65DA
+0x65DB
+0x65DD
+0x65DE
+0x65DF
+0x65E1
+0x65E2
+0x65E5
+0x65E6
+0x65E8
+0x65E9
+0x65EC
+0x65ED
+0x65EE
+0x65EF
+0x65F0
+0x65F1
+0x65F2
+0x65F3
+0x65F4
+0x65F5
+0x65FA
+0x65FB
+0x65FC
+0x65FD
+0x6600
+0x6602
+0x6603
+0x6604
+0x6605
+0x6606
+0x6607
+0x6608
+0x6609
+0x660A
+0x660B
+0x660C
+0x660D
+0x660E
+0x660F
+0x6610
+0x6611
+0x6612
+0x6613
+0x6614
+0x6615
+0x661C
+0x661D
+0x661F
+0x6620
+0x6621
+0x6622
+0x6624
+0x6625
+0x6626
+0x6627
+0x6628
+0x662B
+0x662D
+0x662E
+0x662F
+0x6631
+0x6632
+0x6633
+0x6634
+0x6635
+0x6636
+0x6639
+0x663A
+0x6641
+0x6642
+0x6643
+0x6645
+0x6647
+0x6649
+0x664A
+0x664C
+0x664F
+0x6651
+0x6652
+0x6659
+0x665A
+0x665B
+0x665C
+0x665D
+0x665E
+0x665F
+0x6661
+0x6662
+0x6664
+0x6665
+0x6666
+0x6668
+0x666A
+0x666C
+0x666E
+0x666F
+0x6670
+0x6671
+0x6672
+0x6674
+0x6676
+0x6677
+0x6678
+0x6679
+0x667A
+0x667B
+0x667C
+0x667E
+0x6680
+0x6684
+0x6686
+0x6687
+0x6688
+0x6689
+0x668A
+0x668B
+0x668C
+0x668D
+0x6690
+0x6691
+0x6694
+0x6695
+0x6696
+0x6697
+0x6698
+0x6699
+0x669D
+0x669F
+0x66A0
+0x66A1
+0x66A2
+0x66A8
+0x66A9
+0x66AA
+0x66AB
+0x66AE
+0x66AF
+0x66B0
+0x66B1
+0x66B2
+0x66B4
+0x66B5
+0x66B7
+0x66B8
+0x66B9
+0x66BA
+0x66BB
+0x66BD
+0x66BE
+0x66C0
+0x66C4
+0x66C6
+0x66C7
+0x66C8
+0x66C9
+0x66CA
+0x66CB
+0x66CC
+0x66CF
+0x66D2
+0x66D6
+0x66D8
+0x66D9
+0x66DA
+0x66DB
+0x66DC
+0x66DD
+0x66DE
+0x66E0
+0x66E3
+0x66E4
+0x66E6
+0x66E8
+0x66E9
+0x66EB
+0x66EC
+0x66ED
+0x66EE
+0x66F0
+0x66F2
+0x66F3
+0x66F4
+0x66F6
+0x66F7
+0x66F8
+0x66F9
+0x66FC
+0x66FE
+0x66FF
+0x6700
+0x6701
+0x6703
+0x6704
+0x6705
+0x6708
+0x6709
+0x670A
+0x670B
+0x670D
+0x670F
+0x6710
+0x6712
+0x6713
+0x6714
+0x6715
+0x6717
+0x6718
+0x671B
+0x671D
+0x671F
+0x6720
+0x6721
+0x6722
+0x6723
+0x6726
+0x6727
+0x6728
+0x672A
+0x672B
+0x672C
+0x672D
+0x672E
+0x6731
+0x6733
+0x6734
+0x6735
+0x6738
+0x6739
+0x673A
+0x673B
+0x673C
+0x673D
+0x673E
+0x673F
+0x6745
+0x6746
+0x6747
+0x6748
+0x6749
+0x674B
+0x674C
+0x674D
+0x674E
+0x674F
+0x6750
+0x6751
+0x6753
+0x6755
+0x6756
+0x6757
+0x6759
+0x675A
+0x675C
+0x675D
+0x675E
+0x675F
+0x6760
+0x676A
+0x676C
+0x676D
+0x676F
+0x6770
+0x6771
+0x6772
+0x6773
+0x6774
+0x6775
+0x6776
+0x6777
+0x6778
+0x6779
+0x677A
+0x677B
+0x677C
+0x677D
+0x677E
+0x677F
+0x6781
+0x6783
+0x6784
+0x6785
+0x6786
+0x6787
+0x6789
+0x678B
+0x678C
+0x678D
+0x678E
+0x6790
+0x6791
+0x6792
+0x6793
+0x6794
+0x6795
+0x6797
+0x6798
+0x6799
+0x679A
+0x679C
+0x679D
+0x679F
+0x67AE
+0x67AF
+0x67B0
+0x67B2
+0x67B3
+0x67B4
+0x67B5
+0x67B6
+0x67B7
+0x67B8
+0x67B9
+0x67BA
+0x67BB
+0x67C0
+0x67C1
+0x67C2
+0x67C3
+0x67C4
+0x67C5
+0x67C6
+0x67C8
+0x67C9
+0x67CA
+0x67CB
+0x67CC
+0x67CD
+0x67CE
+0x67CF
+0x67D0
+0x67D1
+0x67D2
+0x67D3
+0x67D4
+0x67D8
+0x67D9
+0x67DA
+0x67DB
+0x67DC
+0x67DD
+0x67DE
+0x67DF
+0x67E2
+0x67E3
+0x67E4
+0x67E5
+0x67E6
+0x67E7
+0x67E9
+0x67EA
+0x67EB
+0x67EC
+0x67ED
+0x67EE
+0x67EF
+0x67F0
+0x67F1
+0x67F2
+0x67F3
+0x67F4
+0x67F5
+0x67F6
+0x67F7
+0x67F8
+0x67FA
+0x67FC
+0x67FF
+0x6812
+0x6813
+0x6814
+0x6816
+0x6817
+0x6818
+0x681A
+0x681C
+0x681D
+0x681F
+0x6820
+0x6821
+0x6825
+0x6826
+0x6828
+0x6829
+0x682A
+0x682B
+0x682D
+0x682E
+0x682F
+0x6831
+0x6832
+0x6833
+0x6834
+0x6835
+0x6838
+0x6839
+0x683A
+0x683B
+0x683C
+0x683D
+0x6840
+0x6841
+0x6842
+0x6843
+0x6844
+0x6845
+0x6846
+0x6848
+0x6849
+0x684B
+0x684C
+0x684D
+0x684E
+0x684F
+0x6850
+0x6851
+0x6853
+0x6854
+0x686B
+0x686D
+0x686E
+0x686F
+0x6871
+0x6872
+0x6874
+0x6875
+0x6876
+0x6877
+0x6878
+0x6879
+0x687B
+0x687C
+0x687D
+0x687E
+0x687F
+0x6880
+0x6881
+0x6882
+0x6883
+0x6885
+0x6886
+0x6887
+0x6889
+0x688A
+0x688B
+0x688C
+0x688F
+0x6890
+0x6891
+0x6892
+0x6893
+0x6894
+0x6896
+0x6897
+0x689B
+0x689C
+0x689D
+0x689F
+0x68A0
+0x68A1
+0x68A2
+0x68A3
+0x68A4
+0x68A7
+0x68A8
+0x68A9
+0x68AA
+0x68AB
+0x68AC
+0x68AD
+0x68AE
+0x68AF
+0x68B0
+0x68B1
+0x68B2
+0x68B3
+0x68B4
+0x68B5
+0x68C4
+0x68C6
+0x68C7
+0x68C8
+0x68C9
+0x68CB
+0x68CC
+0x68CD
+0x68CE
+0x68D0
+0x68D1
+0x68D2
+0x68D3
+0x68D4
+0x68D5
+0x68D6
+0x68D7
+0x68D8
+0x68DA
+0x68DC
+0x68DD
+0x68DE
+0x68DF
+0x68E0
+0x68E1
+0x68E3
+0x68E4
+0x68E6
+0x68E7
+0x68E8
+0x68E9
+0x68EA
+0x68EB
+0x68EC
+0x68EE
+0x68EF
+0x68F0
+0x68F1
+0x68F2
+0x68F3
+0x68F4
+0x68F5
+0x68F6
+0x68F7
+0x68F8
+0x68F9
+0x68FA
+0x68FB
+0x68FC
+0x68FD
+0x6904
+0x6905
+0x6906
+0x6907
+0x6908
+0x690A
+0x690B
+0x690C
+0x690D
+0x690E
+0x690F
+0x6910
+0x6911
+0x6912
+0x6913
+0x6914
+0x6915
+0x6917
+0x6925
+0x692A
+0x692F
+0x6930
+0x6932
+0x6933
+0x6934
+0x6935
+0x6937
+0x6938
+0x6939
+0x693B
+0x693C
+0x693D
+0x693F
+0x6940
+0x6941
+0x6942
+0x6944
+0x6945
+0x6948
+0x6949
+0x694A
+0x694B
+0x694C
+0x694E
+0x694F
+0x6951
+0x6952
+0x6953
+0x6954
+0x6956
+0x6957
+0x6958
+0x6959
+0x695A
+0x695B
+0x695C
+0x695D
+0x695E
+0x695F
+0x6960
+0x6962
+0x6963
+0x6965
+0x6966
+0x6968
+0x6969
+0x696A
+0x696B
+0x696C
+0x696D
+0x696E
+0x696F
+0x6970
+0x6971
+0x6974
+0x6975
+0x6976
+0x6977
+0x6978
+0x6979
+0x697A
+0x697B
+0x6982
+0x6983
+0x6986
+0x698D
+0x698E
+0x6990
+0x6991
+0x6993
+0x6994
+0x6995
+0x6996
+0x6997
+0x6999
+0x699A
+0x699B
+0x699C
+0x699E
+0x69A0
+0x69A1
+0x69A3
+0x69A4
+0x69A5
+0x69A6
+0x69A7
+0x69A8
+0x69A9
+0x69AA
+0x69AB
+0x69AC
+0x69AD
+0x69AE
+0x69AF
+0x69B0
+0x69B1
+0x69B3
+0x69B4
+0x69B5
+0x69B6
+0x69B7
+0x69B9
+0x69BB
+0x69BC
+0x69BD
+0x69BE
+0x69BF
+0x69C1
+0x69C2
+0x69C3
+0x69C4
+0x69C6
+0x69C9
+0x69CA
+0x69CB
+0x69CC
+0x69CD
+0x69CE
+0x69CF
+0x69D0
+0x69D3
+0x69D4
+0x69D9
+0x69E2
+0x69E4
+0x69E5
+0x69E6
+0x69E7
+0x69E8
+0x69EB
+0x69EC
+0x69ED
+0x69EE
+0x69F1
+0x69F2
+0x69F3
+0x69F4
+0x69F6
+0x69F7
+0x69F8
+0x69FB
+0x69FC
+0x69FD
+0x69FE
+0x69FF
+0x6A00
+0x6A01
+0x6A02
+0x6A04
+0x6A05
+0x6A06
+0x6A07
+0x6A08
+0x6A09
+0x6A0A
+0x6A0D
+0x6A0F
+0x6A11
+0x6A13
+0x6A14
+0x6A15
+0x6A16
+0x6A17
+0x6A18
+0x6A19
+0x6A1B
+0x6A1D
+0x6A1E
+0x6A1F
+0x6A20
+0x6A21
+0x6A23
+0x6A25
+0x6A26
+0x6A27
+0x6A28
+0x6A32
+0x6A34
+0x6A35
+0x6A38
+0x6A39
+0x6A3A
+0x6A3B
+0x6A3C
+0x6A3D
+0x6A3E
+0x6A3F
+0x6A40
+0x6A41
+0x6A44
+0x6A46
+0x6A47
+0x6A48
+0x6A49
+0x6A4B
+0x6A4D
+0x6A4E
+0x6A4F
+0x6A50
+0x6A51
+0x6A54
+0x6A55
+0x6A56
+0x6A58
+0x6A59
+0x6A5A
+0x6A5B
+0x6A5D
+0x6A5E
+0x6A5F
+0x6A60
+0x6A61
+0x6A62
+0x6A64
+0x6A66
+0x6A67
+0x6A68
+0x6A69
+0x6A6A
+0x6A6B
+0x6A6D
+0x6A6F
+0x6A76
+0x6A7E
+0x6A7F
+0x6A80
+0x6A81
+0x6A83
+0x6A84
+0x6A85
+0x6A87
+0x6A89
+0x6A8C
+0x6A8D
+0x6A8E
+0x6A90
+0x6A91
+0x6A92
+0x6A93
+0x6A94
+0x6A95
+0x6A96
+0x6A97
+0x6A9A
+0x6A9B
+0x6A9C
+0x6A9E
+0x6A9F
+0x6AA0
+0x6AA1
+0x6AA2
+0x6AA3
+0x6AA4
+0x6AA5
+0x6AA6
+0x6AA8
+0x6AAC
+0x6AAD
+0x6AAE
+0x6AAF
+0x6AB3
+0x6AB4
+0x6AB6
+0x6AB7
+0x6AB8
+0x6AB9
+0x6ABA
+0x6ABB
+0x6ABD
+0x6AC2
+0x6AC3
+0x6AC5
+0x6AC6
+0x6AC7
+0x6ACB
+0x6ACC
+0x6ACD
+0x6ACF
+0x6AD0
+0x6AD1
+0x6AD3
+0x6AD9
+0x6ADA
+0x6ADB
+0x6ADC
+0x6ADD
+0x6ADE
+0x6ADF
+0x6AE0
+0x6AE1
+0x6AE5
+0x6AE7
+0x6AE8
+0x6AEA
+0x6AEB
+0x6AEC
+0x6AEE
+0x6AEF
+0x6AF0
+0x6AF1
+0x6AF3
+0x6AF8
+0x6AF9
+0x6AFA
+0x6AFB
+0x6AFC
+0x6B00
+0x6B02
+0x6B03
+0x6B04
+0x6B08
+0x6B09
+0x6B0A
+0x6B0B
+0x6B0F
+0x6B10
+0x6B11
+0x6B12
+0x6B13
+0x6B16
+0x6B17
+0x6B18
+0x6B19
+0x6B1A
+0x6B1E
+0x6B20
+0x6B21
+0x6B23
+0x6B25
+0x6B28
+0x6B2C
+0x6B2D
+0x6B2F
+0x6B31
+0x6B32
+0x6B33
+0x6B34
+0x6B36
+0x6B37
+0x6B38
+0x6B39
+0x6B3A
+0x6B3B
+0x6B3C
+0x6B3D
+0x6B3E
+0x6B3F
+0x6B41
+0x6B42
+0x6B43
+0x6B45
+0x6B46
+0x6B47
+0x6B48
+0x6B49
+0x6B4A
+0x6B4B
+0x6B4C
+0x6B4D
+0x6B4E
+0x6B50
+0x6B51
+0x6B54
+0x6B55
+0x6B56
+0x6B59
+0x6B5B
+0x6B5C
+0x6B5E
+0x6B5F
+0x6B60
+0x6B61
+0x6B62
+0x6B63
+0x6B64
+0x6B65
+0x6B66
+0x6B67
+0x6B6A
+0x6B6D
+0x6B72
+0x6B76
+0x6B77
+0x6B78
+0x6B79
+0x6B7B
+0x6B7E
+0x6B7F
+0x6B80
+0x6B82
+0x6B83
+0x6B84
+0x6B86
+0x6B88
+0x6B89
+0x6B8A
+0x6B8C
+0x6B8D
+0x6B8E
+0x6B8F
+0x6B91
+0x6B94
+0x6B95
+0x6B96
+0x6B97
+0x6B98
+0x6B99
+0x6B9B
+0x6B9E
+0x6B9F
+0x6BA0
+0x6BA2
+0x6BA3
+0x6BA4
+0x6BA5
+0x6BA6
+0x6BA7
+0x6BAA
+0x6BAB
+0x6BAD
+0x6BAE
+0x6BAF
+0x6BB0
+0x6BB2
+0x6BB3
+0x6BB5
+0x6BB6
+0x6BB7
+0x6BBA
+0x6BBC
+0x6BBD
+0x6BBF
+0x6BC0
+0x6BC3
+0x6BC4
+0x6BC5
+0x6BC6
+0x6BC7
+0x6BC8
+0x6BC9
+0x6BCA
+0x6BCB
+0x6BCC
+0x6BCD
+0x6BCF
+0x6BD0
+0x6BD2
+0x6BD3
+0x6BD4
+0x6BD6
+0x6BD7
+0x6BD8
+0x6BDA
+0x6BDB
+0x6BDE
+0x6BE0
+0x6BE2
+0x6BE3
+0x6BE4
+0x6BE6
+0x6BE7
+0x6BE8
+0x6BEB
+0x6BEC
+0x6BEF
+0x6BF0
+0x6BF2
+0x6BF3
+0x6BF7
+0x6BF8
+0x6BF9
+0x6BFB
+0x6BFC
+0x6BFD
+0x6BFE
+0x6BFF
+0x6C00
+0x6C01
+0x6C02
+0x6C03
+0x6C04
+0x6C05
+0x6C06
+0x6C08
+0x6C09
+0x6C0B
+0x6C0C
+0x6C0D
+0x6C0F
+0x6C10
+0x6C11
+0x6C13
+0x6C14
+0x6C15
+0x6C16
+0x6C18
+0x6C19
+0x6C1A
+0x6C1B
+0x6C1D
+0x6C1F
+0x6C20
+0x6C21
+0x6C23
+0x6C24
+0x6C25
+0x6C26
+0x6C27
+0x6C28
+0x6C2A
+0x6C2B
+0x6C2C
+0x6C2E
+0x6C2F
+0x6C30
+0x6C33
+0x6C34
+0x6C36
+0x6C38
+0x6C3B
+0x6C3E
+0x6C3F
+0x6C40
+0x6C41
+0x6C42
+0x6C43
+0x6C46
+0x6C4A
+0x6C4B
+0x6C4C
+0x6C4D
+0x6C4E
+0x6C4F
+0x6C50
+0x6C52
+0x6C54
+0x6C55
+0x6C57
+0x6C59
+0x6C5B
+0x6C5C
+0x6C5D
+0x6C5E
+0x6C5F
+0x6C60
+0x6C61
+0x6C65
+0x6C66
+0x6C67
+0x6C68
+0x6C69
+0x6C6A
+0x6C6B
+0x6C6D
+0x6C6F
+0x6C70
+0x6C71
+0x6C72
+0x6C73
+0x6C74
+0x6C76
+0x6C78
+0x6C7A
+0x6C7B
+0x6C7D
+0x6C7E
+0x6C80
+0x6C81
+0x6C82
+0x6C83
+0x6C84
+0x6C85
+0x6C86
+0x6C87
+0x6C88
+0x6C89
+0x6C8A
+0x6C8B
+0x6C8C
+0x6C8D
+0x6C8E
+0x6C8F
+0x6C90
+0x6C92
+0x6C93
+0x6C94
+0x6C95
+0x6C96
+0x6C98
+0x6C99
+0x6C9A
+0x6C9B
+0x6C9C
+0x6C9D
+0x6CAB
+0x6CAC
+0x6CAD
+0x6CAE
+0x6CB0
+0x6CB1
+0x6CB3
+0x6CB4
+0x6CB6
+0x6CB7
+0x6CB8
+0x6CB9
+0x6CBA
+0x6CBB
+0x6CBC
+0x6CBD
+0x6CBE
+0x6CBF
+0x6CC0
+0x6CC1
+0x6CC2
+0x6CC3
+0x6CC4
+0x6CC5
+0x6CC6
+0x6CC7
+0x6CC9
+0x6CCA
+0x6CCC
+0x6CCD
+0x6CCF
+0x6CD0
+0x6CD1
+0x6CD2
+0x6CD3
+0x6CD4
+0x6CD5
+0x6CD6
+0x6CD7
+0x6CD9
+0x6CDA
+0x6CDB
+0x6CDC
+0x6CDD
+0x6CDE
+0x6CE0
+0x6CE1
+0x6CE2
+0x6CE3
+0x6CE5
+0x6CE7
+0x6CE8
+0x6CE9
+0x6CEB
+0x6CEC
+0x6CED
+0x6CEE
+0x6CEF
+0x6CF0
+0x6CF1
+0x6CF2
+0x6CF3
+0x6CF5
+0x6CF9
+0x6D00
+0x6D01
+0x6D03
+0x6D04
+0x6D07
+0x6D08
+0x6D09
+0x6D0A
+0x6D0B
+0x6D0C
+0x6D0D
+0x6D0E
+0x6D0F
+0x6D10
+0x6D11
+0x6D12
+0x6D16
+0x6D17
+0x6D18
+0x6D19
+0x6D1A
+0x6D1B
+0x6D1D
+0x6D1E
+0x6D1F
+0x6D20
+0x6D22
+0x6D25
+0x6D27
+0x6D28
+0x6D29
+0x6D2A
+0x6D2B
+0x6D2C
+0x6D2D
+0x6D2E
+0x6D2F
+0x6D30
+0x6D31
+0x6D32
+0x6D33
+0x6D34
+0x6D35
+0x6D36
+0x6D37
+0x6D38
+0x6D39
+0x6D3A
+0x6D3B
+0x6D3C
+0x6D3D
+0x6D3E
+0x6D3F
+0x6D40
+0x6D41
+0x6D42
+0x6D58
+0x6D59
+0x6D5A
+0x6D5E
+0x6D5F
+0x6D60
+0x6D61
+0x6D62
+0x6D63
+0x6D64
+0x6D65
+0x6D66
+0x6D67
+0x6D68
+0x6D69
+0x6D6A
+0x6D6C
+0x6D6D
+0x6D6E
+0x6D6F
+0x6D70
+0x6D74
+0x6D75
+0x6D76
+0x6D77
+0x6D78
+0x6D79
+0x6D7A
+0x6D7B
+0x6D7C
+0x6D7D
+0x6D7E
+0x6D7F
+0x6D80
+0x6D82
+0x6D83
+0x6D84
+0x6D85
+0x6D86
+0x6D87
+0x6D88
+0x6D89
+0x6D8A
+0x6D8B
+0x6D8C
+0x6D8D
+0x6D8E
+0x6D90
+0x6D91
+0x6D92
+0x6D93
+0x6D94
+0x6D95
+0x6D97
+0x6D98
+0x6DAA
+0x6DAB
+0x6DAC
+0x6DAE
+0x6DAF
+0x6DB2
+0x6DB3
+0x6DB4
+0x6DB5
+0x6DB7
+0x6DB8
+0x6DBA
+0x6DBB
+0x6DBC
+0x6DBD
+0x6DBE
+0x6DBF
+0x6DC0
+0x6DC2
+0x6DC4
+0x6DC5
+0x6DC6
+0x6DC7
+0x6DC8
+0x6DC9
+0x6DCA
+0x6DCB
+0x6DCC
+0x6DCD
+0x6DCF
+0x6DD0
+0x6DD1
+0x6DD2
+0x6DD3
+0x6DD4
+0x6DD5
+0x6DD6
+0x6DD7
+0x6DD8
+0x6DD9
+0x6DDA
+0x6DDB
+0x6DDC
+0x6DDD
+0x6DDE
+0x6DDF
+0x6DE0
+0x6DE1
+0x6DE2
+0x6DE3
+0x6DE4
+0x6DE5
+0x6DE6
+0x6DE8
+0x6DE9
+0x6DEA
+0x6DEB
+0x6DEC
+0x6DED
+0x6DEE
+0x6DEF
+0x6DF0
+0x6DF1
+0x6DF2
+0x6DF3
+0x6DF4
+0x6DF5
+0x6DF6
+0x6DF7
+0x6DF9
+0x6DFA
+0x6DFB
+0x6DFC
+0x6DFD
+0x6E00
+0x6E03
+0x6E05
+0x6E19
+0x6E1A
+0x6E1B
+0x6E1C
+0x6E1D
+0x6E1F
+0x6E20
+0x6E21
+0x6E22
+0x6E23
+0x6E24
+0x6E25
+0x6E26
+0x6E27
+0x6E28
+0x6E2B
+0x6E2C
+0x6E2D
+0x6E2E
+0x6E2F
+0x6E30
+0x6E31
+0x6E32
+0x6E33
+0x6E34
+0x6E35
+0x6E36
+0x6E38
+0x6E39
+0x6E3A
+0x6E3B
+0x6E3C
+0x6E3D
+0x6E3E
+0x6E3F
+0x6E40
+0x6E41
+0x6E43
+0x6E44
+0x6E45
+0x6E46
+0x6E47
+0x6E49
+0x6E4A
+0x6E4B
+0x6E4D
+0x6E4E
+0x6E51
+0x6E52
+0x6E53
+0x6E54
+0x6E55
+0x6E56
+0x6E58
+0x6E5A
+0x6E5B
+0x6E5C
+0x6E5D
+0x6E5E
+0x6E5F
+0x6E60
+0x6E61
+0x6E62
+0x6E63
+0x6E64
+0x6E65
+0x6E66
+0x6E67
+0x6E68
+0x6E69
+0x6E6B
+0x6E6E
+0x6E6F
+0x6E71
+0x6E72
+0x6E73
+0x6E74
+0x6E77
+0x6E78
+0x6E79
+0x6E88
+0x6E89
+0x6E8D
+0x6E8E
+0x6E8F
+0x6E90
+0x6E92
+0x6E93
+0x6E94
+0x6E96
+0x6E97
+0x6E98
+0x6E99
+0x6E9B
+0x6E9C
+0x6E9D
+0x6E9E
+0x6E9F
+0x6EA0
+0x6EA1
+0x6EA2
+0x6EA3
+0x6EA4
+0x6EA5
+0x6EA6
+0x6EA7
+0x6EAA
+0x6EAB
+0x6EAE
+0x6EAF
+0x6EB0
+0x6EB1
+0x6EB2
+0x6EB3
+0x6EB4
+0x6EB6
+0x6EB7
+0x6EB9
+0x6EBA
+0x6EBC
+0x6EBD
+0x6EBE
+0x6EBF
+0x6EC0
+0x6EC1
+0x6EC2
+0x6EC3
+0x6EC4
+0x6EC5
+0x6EC6
+0x6EC7
+0x6EC8
+0x6EC9
+0x6ECA
+0x6ECB
+0x6ECC
+0x6ECD
+0x6ECE
+0x6ECF
+0x6ED0
+0x6ED1
+0x6ED2
+0x6ED3
+0x6ED4
+0x6ED5
+0x6ED6
+0x6ED8
+0x6EDC
+0x6EEB
+0x6EEC
+0x6EED
+0x6EEE
+0x6EEF
+0x6EF1
+0x6EF2
+0x6EF4
+0x6EF5
+0x6EF6
+0x6EF7
+0x6EF8
+0x6EF9
+0x6EFB
+0x6EFC
+0x6EFD
+0x6EFE
+0x6EFF
+0x6F00
+0x6F01
+0x6F02
+0x6F03
+0x6F05
+0x6F06
+0x6F07
+0x6F08
+0x6F09
+0x6F0A
+0x6F0D
+0x6F0E
+0x6F0F
+0x6F12
+0x6F13
+0x6F14
+0x6F15
+0x6F18
+0x6F19
+0x6F1A
+0x6F1C
+0x6F1E
+0x6F1F
+0x6F20
+0x6F21
+0x6F22
+0x6F23
+0x6F25
+0x6F26
+0x6F27
+0x6F29
+0x6F2A
+0x6F2B
+0x6F2C
+0x6F2D
+0x6F2E
+0x6F2F
+0x6F30
+0x6F31
+0x6F32
+0x6F33
+0x6F35
+0x6F36
+0x6F37
+0x6F38
+0x6F39
+0x6F3A
+0x6F3B
+0x6F3C
+0x6F3E
+0x6F3F
+0x6F40
+0x6F41
+0x6F43
+0x6F4E
+0x6F4F
+0x6F50
+0x6F51
+0x6F52
+0x6F53
+0x6F54
+0x6F55
+0x6F57
+0x6F58
+0x6F5A
+0x6F5B
+0x6F5D
+0x6F5E
+0x6F5F
+0x6F60
+0x6F61
+0x6F62
+0x6F63
+0x6F64
+0x6F66
+0x6F67
+0x6F69
+0x6F6A
+0x6F6B
+0x6F6C
+0x6F6D
+0x6F6E
+0x6F6F
+0x6F70
+0x6F72
+0x6F73
+0x6F76
+0x6F77
+0x6F78
+0x6F7A
+0x6F7B
+0x6F7C
+0x6F7D
+0x6F7E
+0x6F7F
+0x6F80
+0x6F82
+0x6F84
+0x6F85
+0x6F86
+0x6F87
+0x6F88
+0x6F89
+0x6F8B
+0x6F8C
+0x6F8D
+0x6F8E
+0x6F90
+0x6F92
+0x6F93
+0x6F94
+0x6F95
+0x6F96
+0x6F97
+0x6F9E
+0x6FA0
+0x6FA1
+0x6FA2
+0x6FA3
+0x6FA4
+0x6FA5
+0x6FA6
+0x6FA7
+0x6FA8
+0x6FA9
+0x6FAA
+0x6FAB
+0x6FAC
+0x6FAD
+0x6FAE
+0x6FAF
+0x6FB0
+0x6FB1
+0x6FB2
+0x6FB3
+0x6FB4
+0x6FB6
+0x6FB8
+0x6FB9
+0x6FBA
+0x6FBC
+0x6FBD
+0x6FBF
+0x6FC0
+0x6FC1
+0x6FC2
+0x6FC3
+0x6FC4
+0x6FC6
+0x6FC7
+0x6FC8
+0x6FC9
+0x6FCA
+0x6FCB
+0x6FCC
+0x6FCD
+0x6FCE
+0x6FCF
+0x6FD4
+0x6FD5
+0x6FD8
+0x6FDB
+0x6FDC
+0x6FDD
+0x6FDE
+0x6FDF
+0x6FE0
+0x6FE1
+0x6FE2
+0x6FE3
+0x6FE4
+0x6FE6
+0x6FE7
+0x6FE8
+0x6FE9
+0x6FEB
+0x6FEC
+0x6FED
+0x6FEE
+0x6FEF
+0x6FF0
+0x6FF1
+0x6FF2
+0x6FF4
+0x6FF7
+0x6FFA
+0x6FFB
+0x6FFC
+0x6FFE
+0x6FFF
+0x7000
+0x7001
+0x7004
+0x7005
+0x7006
+0x7007
+0x7009
+0x700A
+0x700B
+0x700C
+0x700D
+0x700E
+0x700F
+0x7011
+0x7014
+0x7015
+0x7016
+0x7017
+0x7018
+0x7019
+0x701A
+0x701B
+0x701C
+0x701D
+0x701F
+0x7020
+0x7021
+0x7022
+0x7023
+0x7024
+0x7026
+0x7027
+0x7028
+0x7029
+0x702A
+0x702B
+0x702F
+0x7030
+0x7031
+0x7032
+0x7033
+0x7034
+0x7035
+0x7037
+0x7038
+0x7039
+0x703A
+0x703B
+0x703C
+0x703E
+0x703F
+0x7040
+0x7041
+0x7042
+0x7043
+0x7044
+0x7045
+0x7046
+0x7048
+0x7049
+0x704A
+0x704C
+0x7051
+0x7052
+0x7055
+0x7056
+0x7057
+0x7058
+0x705A
+0x705B
+0x705D
+0x705E
+0x705F
+0x7060
+0x7061
+0x7062
+0x7063
+0x7064
+0x7065
+0x7066
+0x7068
+0x7069
+0x706A
+0x706B
+0x7070
+0x7071
+0x7074
+0x7076
+0x7078
+0x707A
+0x707C
+0x707D
+0x7082
+0x7083
+0x7084
+0x7085
+0x7086
+0x708A
+0x708E
+0x7091
+0x7092
+0x7093
+0x7094
+0x7095
+0x7096
+0x7098
+0x7099
+0x709A
+0x709F
+0x70A1
+0x70A4
+0x70A9
+0x70AB
+0x70AC
+0x70AD
+0x70AE
+0x70AF
+0x70B0
+0x70B1
+0x70B3
+0x70B4
+0x70B5
+0x70B7
+0x70B8
+0x70BA
+0x70BE
+0x70C5
+0x70C6
+0x70C7
+0x70C8
+0x70CA
+0x70CB
+0x70CD
+0x70CE
+0x70CF
+0x70D1
+0x70D2
+0x70D3
+0x70D4
+0x70D7
+0x70D8
+0x70D9
+0x70DA
+0x70DC
+0x70DD
+0x70DE
+0x70E0
+0x70E1
+0x70E2
+0x70E4
+0x70EF
+0x70F0
+0x70F3
+0x70F4
+0x70F6
+0x70F7
+0x70F8
+0x70F9
+0x70FA
+0x70FB
+0x70FC
+0x70FD
+0x70FF
+0x7100
+0x7102
+0x7104
+0x7106
+0x7109
+0x710A
+0x710B
+0x710C
+0x710D
+0x710E
+0x7110
+0x7113
+0x7117
+0x7119
+0x711A
+0x711B
+0x711C
+0x711E
+0x711F
+0x7120
+0x7121
+0x7122
+0x7123
+0x7125
+0x7126
+0x7128
+0x712E
+0x712F
+0x7130
+0x7131
+0x7132
+0x7136
+0x713A
+0x7141
+0x7142
+0x7143
+0x7144
+0x7146
+0x7147
+0x7149
+0x714B
+0x714C
+0x714D
+0x714E
+0x7150
+0x7152
+0x7153
+0x7154
+0x7156
+0x7158
+0x7159
+0x715A
+0x715C
+0x715D
+0x715E
+0x715F
+0x7160
+0x7161
+0x7162
+0x7163
+0x7164
+0x7165
+0x7166
+0x7167
+0x7168
+0x7169
+0x716A
+0x716C
+0x716E
+0x7170
+0x7172
+0x7178
+0x717B
+0x717D
+0x7180
+0x7181
+0x7182
+0x7184
+0x7185
+0x7186
+0x7187
+0x7189
+0x718A
+0x718F
+0x7190
+0x7192
+0x7194
+0x7197
+0x7199
+0x719A
+0x719B
+0x719C
+0x719D
+0x719E
+0x719F
+0x71A0
+0x71A1
+0x71A4
+0x71A5
+0x71A7
+0x71A8
+0x71A9
+0x71AA
+0x71AC
+0x71AF
+0x71B0
+0x71B1
+0x71B2
+0x71B3
+0x71B5
+0x71B8
+0x71B9
+0x71BC
+0x71BD
+0x71BE
+0x71BF
+0x71C0
+0x71C1
+0x71C2
+0x71C3
+0x71C4
+0x71C5
+0x71C6
+0x71C7
+0x71C8
+0x71C9
+0x71CA
+0x71CB
+0x71CE
+0x71CF
+0x71D0
+0x71D2
+0x71D4
+0x71D5
+0x71D6
+0x71D8
+0x71D9
+0x71DA
+0x71DB
+0x71DC
+0x71DF
+0x71E0
+0x71E1
+0x71E2
+0x71E4
+0x71E5
+0x71E6
+0x71E7
+0x71E8
+0x71EC
+0x71ED
+0x71EE
+0x71F0
+0x71F1
+0x71F2
+0x71F4
+0x71F8
+0x71F9
+0x71FB
+0x71FC
+0x71FD
+0x71FE
+0x71FF
+0x7201
+0x7202
+0x7203
+0x7205
+0x7206
+0x7207
+0x720A
+0x720C
+0x720D
+0x7210
+0x7213
+0x7214
+0x7219
+0x721A
+0x721B
+0x721D
+0x721E
+0x721F
+0x7222
+0x7223
+0x7226
+0x7227
+0x7228
+0x7229
+0x722A
+0x722C
+0x722D
+0x7230
+0x7235
+0x7236
+0x7238
+0x7239
+0x723A
+0x723B
+0x723D
+0x723E
+0x723F
+0x7241
+0x7242
+0x7244
+0x7246
+0x7247
+0x7248
+0x7249
+0x724A
+0x724B
+0x724C
+0x724F
+0x7252
+0x7253
+0x7256
+0x7258
+0x7259
+0x725A
+0x725B
+0x725D
+0x725E
+0x725F
+0x7260
+0x7261
+0x7262
+0x7263
+0x7267
+0x7269
+0x726A
+0x726C
+0x726E
+0x726F
+0x7270
+0x7272
+0x7273
+0x7274
+0x7276
+0x7277
+0x7278
+0x7279
+0x727B
+0x727C
+0x727D
+0x727E
+0x727F
+0x7280
+0x7281
+0x7284
+0x7285
+0x7286
+0x7288
+0x7289
+0x728B
+0x728C
+0x728D
+0x728E
+0x7290
+0x7291
+0x7292
+0x7293
+0x7295
+0x7296
+0x7297
+0x7298
+0x729A
+0x729B
+0x729D
+0x729E
+0x72A1
+0x72A2
+0x72A3
+0x72A4
+0x72A5
+0x72A6
+0x72A7
+0x72A8
+0x72A9
+0x72AA
+0x72AC
+0x72AE
+0x72AF
+0x72B0
+0x72B4
+0x72B5
+0x72BA
+0x72BD
+0x72BF
+0x72C0
+0x72C1
+0x72C2
+0x72C3
+0x72C4
+0x72C5
+0x72C6
+0x72C9
+0x72CA
+0x72CB
+0x72CC
+0x72CE
+0x72D0
+0x72D1
+0x72D2
+0x72D4
+0x72D6
+0x72D7
+0x72D8
+0x72D9
+0x72DA
+0x72DC
+0x72DF
+0x72E0
+0x72E1
+0x72E3
+0x72E4
+0x72E6
+0x72E8
+0x72E9
+0x72EA
+0x72EB
+0x72F3
+0x72F4
+0x72F6
+0x72F7
+0x72F8
+0x72F9
+0x72FA
+0x72FB
+0x72FC
+0x72FD
+0x72FE
+0x72FF
+0x7300
+0x7301
+0x7307
+0x7308
+0x730A
+0x730B
+0x730C
+0x730F
+0x7311
+0x7312
+0x7313
+0x7316
+0x7317
+0x7318
+0x7319
+0x731B
+0x731C
+0x731D
+0x731E
+0x7322
+0x7323
+0x7325
+0x7326
+0x7327
+0x7329
+0x732D
+0x7330
+0x7331
+0x7332
+0x7333
+0x7334
+0x7335
+0x7336
+0x7337
+0x733A
+0x733B
+0x733C
+0x733E
+0x733F
+0x7340
+0x7342
+0x7343
+0x7344
+0x7345
+0x7349
+0x734A
+0x734C
+0x734D
+0x734E
+0x7350
+0x7351
+0x7352
+0x7357
+0x7358
+0x7359
+0x735A
+0x735B
+0x735D
+0x735E
+0x735F
+0x7360
+0x7361
+0x7362
+0x7365
+0x7366
+0x7367
+0x7368
+0x7369
+0x736A
+0x736B
+0x736C
+0x736E
+0x736F
+0x7370
+0x7372
+0x7373
+0x7375
+0x7376
+0x7377
+0x7378
+0x737A
+0x737B
+0x737C
+0x737D
+0x737E
+0x737F
+0x7380
+0x7381
+0x7382
+0x7383
+0x7384
+0x7385
+0x7386
+0x7387
+0x7388
+0x7389
+0x738A
+0x738B
+0x738E
+0x7392
+0x7393
+0x7394
+0x7395
+0x7396
+0x7397
+0x739D
+0x739F
+0x73A0
+0x73A1
+0x73A2
+0x73A4
+0x73A5
+0x73A6
+0x73A8
+0x73A9
+0x73AB
+0x73AC
+0x73AD
+0x73B2
+0x73B3
+0x73B4
+0x73B5
+0x73B6
+0x73B7
+0x73B8
+0x73B9
+0x73BB
+0x73BC
+0x73BE
+0x73BF
+0x73C0
+0x73C2
+0x73C3
+0x73C5
+0x73C6
+0x73C7
+0x73C8
+0x73CA
+0x73CB
+0x73CC
+0x73CD
+0x73D2
+0x73D3
+0x73D4
+0x73D6
+0x73D7
+0x73D8
+0x73D9
+0x73DA
+0x73DB
+0x73DC
+0x73DD
+0x73DE
+0x73E0
+0x73E3
+0x73E5
+0x73E7
+0x73E8
+0x73E9
+0x73EA
+0x73EB
+0x73ED
+0x73EE
+0x73F4
+0x73F5
+0x73F6
+0x73F8
+0x73FA
+0x73FC
+0x73FD
+0x73FE
+0x73FF
+0x7400
+0x7401
+0x7403
+0x7404
+0x7405
+0x7406
+0x7407
+0x7408
+0x7409
+0x740A
+0x740B
+0x740C
+0x740D
+0x7416
+0x741A
+0x741B
+0x741D
+0x7420
+0x7421
+0x7422
+0x7423
+0x7424
+0x7425
+0x7426
+0x7428
+0x7429
+0x742A
+0x742B
+0x742C
+0x742D
+0x742E
+0x742F
+0x7430
+0x7431
+0x7432
+0x7433
+0x7434
+0x7435
+0x7436
+0x743A
+0x743F
+0x7440
+0x7441
+0x7442
+0x7444
+0x7446
+0x744A
+0x744B
+0x744D
+0x744E
+0x744F
+0x7450
+0x7451
+0x7452
+0x7454
+0x7455
+0x7457
+0x7459
+0x745A
+0x745B
+0x745C
+0x745E
+0x745F
+0x7462
+0x7463
+0x7464
+0x7467
+0x7469
+0x746A
+0x746D
+0x746E
+0x746F
+0x7470
+0x7471
+0x7472
+0x7473
+0x7475
+0x7479
+0x747C
+0x747D
+0x747E
+0x747F
+0x7480
+0x7481
+0x7483
+0x7485
+0x7486
+0x7487
+0x7488
+0x7489
+0x748A
+0x748B
+0x7490
+0x7492
+0x7494
+0x7495
+0x7497
+0x7498
+0x749A
+0x749C
+0x749E
+0x749F
+0x74A0
+0x74A1
+0x74A3
+0x74A5
+0x74A6
+0x74A7
+0x74A8
+0x74A9
+0x74AA
+0x74AB
+0x74AD
+0x74AF
+0x74B0
+0x74B1
+0x74B2
+0x74B5
+0x74B6
+0x74B7
+0x74B8
+0x74BA
+0x74BB
+0x74BD
+0x74BE
+0x74BF
+0x74C0
+0x74C1
+0x74C2
+0x74C3
+0x74C5
+0x74CA
+0x74CB
+0x74CF
+0x74D4
+0x74D5
+0x74D6
+0x74D7
+0x74D8
+0x74D9
+0x74DA
+0x74DB
+0x74DC
+0x74DD
+0x74DE
+0x74DF
+0x74E0
+0x74E1
+0x74E2
+0x74E3
+0x74E4
+0x74E5
+0x74E6
+0x74E8
+0x74E9
+0x74EC
+0x74EE
+0x74F4
+0x74F5
+0x74F6
+0x74F7
+0x74FB
+0x74FD
+0x74FE
+0x74FF
+0x7500
+0x7502
+0x7503
+0x7504
+0x7507
+0x7508
+0x750B
+0x750C
+0x750D
+0x750F
+0x7510
+0x7511
+0x7512
+0x7513
+0x7514
+0x7515
+0x7516
+0x7517
+0x7518
+0x751A
+0x751C
+0x751D
+0x751F
+0x7521
+0x7522
+0x7525
+0x7526
+0x7528
+0x7529
+0x752A
+0x752B
+0x752C
+0x752D
+0x752E
+0x752F
+0x7530
+0x7531
+0x7532
+0x7533
+0x7537
+0x7538
+0x7539
+0x753A
+0x753D
+0x753E
+0x753F
+0x7540
+0x7547
+0x7548
+0x754B
+0x754C
+0x754E
+0x754F
+0x7554
+0x7559
+0x755A
+0x755B
+0x755C
+0x755D
+0x755F
+0x7562
+0x7563
+0x7564
+0x7565
+0x7566
+0x756A
+0x756B
+0x756C
+0x756F
+0x7570
+0x7576
+0x7577
+0x7578
+0x7579
+0x757D
+0x757E
+0x757F
+0x7580
+0x7584
+0x7586
+0x7587
+0x758A
+0x758B
+0x758C
+0x758F
+0x7590
+0x7591
+0x7594
+0x7595
+0x7598
+0x7599
+0x759A
+0x759D
+0x75A2
+0x75A3
+0x75A4
+0x75A5
+0x75A7
+0x75AA
+0x75AB
+0x75B0
+0x75B2
+0x75B3
+0x75B5
+0x75B6
+0x75B8
+0x75B9
+0x75BA
+0x75BB
+0x75BC
+0x75BD
+0x75BE
+0x75BF
+0x75C0
+0x75C1
+0x75C2
+0x75C4
+0x75C5
+0x75C7
+0x75CA
+0x75CB
+0x75CC
+0x75CD
+0x75CE
+0x75CF
+0x75D0
+0x75D1
+0x75D2
+0x75D4
+0x75D5
+0x75D7
+0x75D8
+0x75D9
+0x75DA
+0x75DB
+0x75DD
+0x75DE
+0x75DF
+0x75E0
+0x75E1
+0x75E2
+0x75E3
+0x75E4
+0x75E6
+0x75E7
+0x75ED
+0x75EF
+0x75F0
+0x75F1
+0x75F2
+0x75F3
+0x75F4
+0x75F5
+0x75F6
+0x75F7
+0x75F8
+0x75F9
+0x75FA
+0x75FB
+0x75FC
+0x75FD
+0x75FE
+0x75FF
+0x7600
+0x7601
+0x7603
+0x7608
+0x7609
+0x760A
+0x760B
+0x760C
+0x760D
+0x760F
+0x7610
+0x7611
+0x7613
+0x7614
+0x7615
+0x7616
+0x7619
+0x761A
+0x761B
+0x761C
+0x761D
+0x761E
+0x761F
+0x7620
+0x7621
+0x7622
+0x7623
+0x7624
+0x7625
+0x7626
+0x7627
+0x7628
+0x7629
+0x762D
+0x762F
+0x7630
+0x7631
+0x7632
+0x7633
+0x7634
+0x7635
+0x7638
+0x763A
+0x763C
+0x763D
+0x7642
+0x7643
+0x7646
+0x7647
+0x7648
+0x7649
+0x764C
+0x7650
+0x7652
+0x7653
+0x7656
+0x7657
+0x7658
+0x7659
+0x765A
+0x765C
+0x765F
+0x7660
+0x7661
+0x7662
+0x7664
+0x7665
+0x7669
+0x766A
+0x766C
+0x766D
+0x766E
+0x7670
+0x7671
+0x7672
+0x7675
+0x7678
+0x7679
+0x767B
+0x767C
+0x767D
+0x767E
+0x767F
+0x7681
+0x7682
+0x7684
+0x7686
+0x7687
+0x7688
+0x7689
+0x768A
+0x768B
+0x768E
+0x768F
+0x7692
+0x7693
+0x7695
+0x7696
+0x7699
+0x769A
+0x769B
+0x769C
+0x769D
+0x769E
+0x76A4
+0x76A6
+0x76AA
+0x76AB
+0x76AD
+0x76AE
+0x76AF
+0x76B0
+0x76B4
+0x76B5
+0x76B8
+0x76BA
+0x76BB
+0x76BD
+0x76BE
+0x76BF
+0x76C2
+0x76C3
+0x76C4
+0x76C5
+0x76C6
+0x76C8
+0x76C9
+0x76CA
+0x76CD
+0x76CE
+0x76D2
+0x76D3
+0x76D4
+0x76DA
+0x76DB
+0x76DC
+0x76DD
+0x76DE
+0x76DF
+0x76E1
+0x76E3
+0x76E4
+0x76E5
+0x76E6
+0x76E7
+0x76E9
+0x76EA
+0x76EC
+0x76ED
+0x76EE
+0x76EF
+0x76F0
+0x76F1
+0x76F2
+0x76F3
+0x76F4
+0x76F5
+0x76F7
+0x76F8
+0x76F9
+0x76FA
+0x76FB
+0x76FC
+0x76FE
+0x7701
+0x7703
+0x7704
+0x7705
+0x7707
+0x7708
+0x7709
+0x770A
+0x770B
+0x7710
+0x7711
+0x7712
+0x7713
+0x7715
+0x7719
+0x771A
+0x771B
+0x771D
+0x771F
+0x7720
+0x7722
+0x7723
+0x7725
+0x7727
+0x7728
+0x7729
+0x772D
+0x772F
+0x7731
+0x7732
+0x7733
+0x7734
+0x7735
+0x7736
+0x7737
+0x7738
+0x7739
+0x773A
+0x773B
+0x773C
+0x773D
+0x773E
+0x7744
+0x7745
+0x7746
+0x7747
+0x774A
+0x774B
+0x774C
+0x774D
+0x774E
+0x774F
+0x7752
+0x7754
+0x7755
+0x7756
+0x7759
+0x775A
+0x775B
+0x775C
+0x775E
+0x775F
+0x7760
+0x7761
+0x7762
+0x7763
+0x7765
+0x7766
+0x7767
+0x7768
+0x7769
+0x776A
+0x776B
+0x776C
+0x776D
+0x776E
+0x776F
+0x7779
+0x777C
+0x777D
+0x777E
+0x777F
+0x7780
+0x7781
+0x7782
+0x7783
+0x7784
+0x7785
+0x7787
+0x7788
+0x7789
+0x778B
+0x778C
+0x778D
+0x778E
+0x778F
+0x7791
+0x7795
+0x7797
+0x7799
+0x779A
+0x779B
+0x779C
+0x779D
+0x779E
+0x779F
+0x77A0
+0x77A1
+0x77A2
+0x77A3
+0x77A5
+0x77A7
+0x77A8
+0x77AA
+0x77AB
+0x77AC
+0x77AD
+0x77B0
+0x77B1
+0x77B2
+0x77B3
+0x77B4
+0x77B5
+0x77B6
+0x77B7
+0x77BA
+0x77BB
+0x77BC
+0x77BD
+0x77BF
+0x77C2
+0x77C4
+0x77C7
+0x77C9
+0x77CA
+0x77CC
+0x77CD
+0x77CE
+0x77CF
+0x77D0
+0x77D3
+0x77D4
+0x77D5
+0x77D7
+0x77D8
+0x77D9
+0x77DA
+0x77DB
+0x77DC
+0x77DE
+0x77E0
+0x77E2
+0x77E3
+0x77E5
+0x77E7
+0x77E8
+0x77E9
+0x77EC
+0x77ED
+0x77EE
+0x77EF
+0x77F0
+0x77F1
+0x77F2
+0x77F3
+0x77F7
+0x77F8
+0x77F9
+0x77FA
+0x77FB
+0x77FC
+0x77FD
+0x7802
+0x7803
+0x7805
+0x7806
+0x7809
+0x780C
+0x780D
+0x780E
+0x780F
+0x7810
+0x7811
+0x7812
+0x7813
+0x7814
+0x781D
+0x781F
+0x7820
+0x7821
+0x7822
+0x7823
+0x7825
+0x7826
+0x7827
+0x7828
+0x7829
+0x782A
+0x782B
+0x782C
+0x782D
+0x782E
+0x782F
+0x7830
+0x7831
+0x7832
+0x7833
+0x7834
+0x7835
+0x7837
+0x7838
+0x7843
+0x7845
+0x7848
+0x7849
+0x784A
+0x784C
+0x784D
+0x784E
+0x7850
+0x7852
+0x785C
+0x785D
+0x785E
+0x7860
+0x7862
+0x7864
+0x7865
+0x7868
+0x7869
+0x786A
+0x786B
+0x786C
+0x786D
+0x786E
+0x786F
+0x7870
+0x7871
+0x7879
+0x787B
+0x787C
+0x787E
+0x787F
+0x7880
+0x7883
+0x7884
+0x7885
+0x7886
+0x7887
+0x7889
+0x788C
+0x788E
+0x788F
+0x7891
+0x7893
+0x7894
+0x7895
+0x7896
+0x7897
+0x7898
+0x7899
+0x789A
+0x789E
+0x789F
+0x78A0
+0x78A1
+0x78A2
+0x78A3
+0x78A4
+0x78A5
+0x78A7
+0x78A8
+0x78A9
+0x78AA
+0x78AB
+0x78AC
+0x78AD
+0x78B0
+0x78B2
+0x78B3
+0x78B4
+0x78BA
+0x78BB
+0x78BC
+0x78BE
+0x78C1
+0x78C3
+0x78C4
+0x78C5
+0x78C8
+0x78C9
+0x78CA
+0x78CB
+0x78CC
+0x78CD
+0x78CE
+0x78CF
+0x78D0
+0x78D1
+0x78D4
+0x78D5
+0x78DA
+0x78DB
+0x78DD
+0x78DE
+0x78DF
+0x78E0
+0x78E1
+0x78E2
+0x78E3
+0x78E5
+0x78E7
+0x78E8
+0x78E9
+0x78EA
+0x78EC
+0x78ED
+0x78EF
+0x78F2
+0x78F3
+0x78F4
+0x78F7
+0x78F9
+0x78FA
+0x78FB
+0x78FC
+0x78FD
+0x78FE
+0x78FF
+0x7901
+0x7902
+0x7904
+0x7905
+0x7909
+0x790C
+0x790E
+0x7910
+0x7911
+0x7912
+0x7913
+0x7914
+0x7917
+0x7919
+0x791B
+0x791C
+0x791D
+0x791E
+0x7921
+0x7923
+0x7924
+0x7925
+0x7926
+0x7927
+0x7928
+0x7929
+0x792A
+0x792B
+0x792C
+0x792D
+0x792F
+0x7931
+0x7935
+0x7938
+0x7939
+0x793A
+0x793D
+0x793E
+0x793F
+0x7940
+0x7941
+0x7942
+0x7944
+0x7945
+0x7946
+0x7947
+0x7948
+0x7949
+0x794A
+0x794B
+0x794C
+0x794F
+0x7950
+0x7951
+0x7952
+0x7953
+0x7954
+0x7955
+0x7956
+0x7957
+0x795A
+0x795B
+0x795C
+0x795D
+0x795E
+0x795F
+0x7960
+0x7961
+0x7963
+0x7964
+0x7965
+0x7967
+0x7968
+0x7969
+0x796A
+0x796B
+0x796D
+0x7970
+0x7972
+0x7973
+0x7974
+0x7979
+0x797A
+0x797C
+0x797D
+0x797F
+0x7981
+0x7982
+0x7988
+0x798A
+0x798B
+0x798D
+0x798E
+0x798F
+0x7990
+0x7992
+0x7993
+0x7994
+0x7995
+0x7996
+0x7997
+0x7998
+0x799A
+0x799B
+0x799C
+0x79A0
+0x79A1
+0x79A2
+0x79A4
+0x79A6
+0x79A7
+0x79A8
+0x79AA
+0x79AB
+0x79AC
+0x79AD
+0x79AE
+0x79B0
+0x79B1
+0x79B2
+0x79B3
+0x79B4
+0x79B6
+0x79B7
+0x79B8
+0x79B9
+0x79BA
+0x79BB
+0x79BD
+0x79BE
+0x79BF
+0x79C0
+0x79C1
+0x79C5
+0x79C8
+0x79C9
+0x79CB
+0x79CD
+0x79CE
+0x79CF
+0x79D1
+0x79D2
+0x79D5
+0x79D6
+0x79D8
+0x79DC
+0x79DD
+0x79DE
+0x79DF
+0x79E0
+0x79E3
+0x79E4
+0x79E6
+0x79E7
+0x79E9
+0x79EA
+0x79EB
+0x79EC
+0x79ED
+0x79EE
+0x79F6
+0x79F7
+0x79F8
+0x79FA
+0x79FB
+0x7A00
+0x7A02
+0x7A03
+0x7A04
+0x7A05
+0x7A08
+0x7A0A
+0x7A0B
+0x7A0C
+0x7A0D
+0x7A10
+0x7A11
+0x7A12
+0x7A13
+0x7A14
+0x7A15
+0x7A17
+0x7A18
+0x7A19
+0x7A1A
+0x7A1B
+0x7A1C
+0x7A1E
+0x7A1F
+0x7A20
+0x7A22
+0x7A26
+0x7A28
+0x7A2B
+0x7A2E
+0x7A2F
+0x7A30
+0x7A31
+0x7A37
+0x7A39
+0x7A3B
+0x7A3C
+0x7A3D
+0x7A3F
+0x7A40
+0x7A44
+0x7A46
+0x7A47
+0x7A48
+0x7A4A
+0x7A4B
+0x7A4C
+0x7A4D
+0x7A4E
+0x7A54
+0x7A56
+0x7A57
+0x7A58
+0x7A5A
+0x7A5B
+0x7A5C
+0x7A5F
+0x7A60
+0x7A61
+0x7A62
+0x7A67
+0x7A68
+0x7A69
+0x7A6B
+0x7A6C
+0x7A6D
+0x7A6E
+0x7A70
+0x7A71
+0x7A74
+0x7A75
+0x7A76
+0x7A78
+0x7A79
+0x7A7A
+0x7A7B
+0x7A7E
+0x7A7F
+0x7A80
+0x7A81
+0x7A84
+0x7A85
+0x7A86
+0x7A87
+0x7A88
+0x7A89
+0x7A8A
+0x7A8B
+0x7A8C
+0x7A8F
+0x7A90
+0x7A92
+0x7A94
+0x7A95
+0x7A96
+0x7A97
+0x7A98
+0x7A99
+0x7A9E
+0x7A9F
+0x7AA0
+0x7AA2
+0x7AA3
+0x7AA8
+0x7AA9
+0x7AAA
+0x7AAB
+0x7AAC
+0x7AAE
+0x7AAF
+0x7AB1
+0x7AB2
+0x7AB3
+0x7AB4
+0x7AB5
+0x7AB6
+0x7AB7
+0x7AB8
+0x7ABA
+0x7ABE
+0x7ABF
+0x7AC0
+0x7AC1
+0x7AC4
+0x7AC5
+0x7AC7
+0x7ACA
+0x7ACB
+0x7AD1
+0x7AD8
+0x7AD9
+0x7ADF
+0x7AE0
+0x7AE3
+0x7AE4
+0x7AE5
+0x7AE6
+0x7AEB
+0x7AED
+0x7AEE
+0x7AEF
+0x7AF6
+0x7AF7
+0x7AF9
+0x7AFA
+0x7AFB
+0x7AFD
+0x7AFF
+0x7B00
+0x7B01
+0x7B04
+0x7B05
+0x7B06
+0x7B08
+0x7B09
+0x7B0A
+0x7B0E
+0x7B0F
+0x7B10
+0x7B11
+0x7B12
+0x7B13
+0x7B18
+0x7B19
+0x7B1A
+0x7B1B
+0x7B1D
+0x7B1E
+0x7B20
+0x7B22
+0x7B23
+0x7B24
+0x7B25
+0x7B26
+0x7B28
+0x7B2A
+0x7B2B
+0x7B2C
+0x7B2D
+0x7B2E
+0x7B2F
+0x7B30
+0x7B31
+0x7B32
+0x7B33
+0x7B34
+0x7B35
+0x7B38
+0x7B3B
+0x7B40
+0x7B44
+0x7B45
+0x7B46
+0x7B47
+0x7B48
+0x7B49
+0x7B4A
+0x7B4B
+0x7B4C
+0x7B4D
+0x7B4E
+0x7B4F
+0x7B50
+0x7B51
+0x7B52
+0x7B54
+0x7B56
+0x7B58
+0x7B60
+0x7B61
+0x7B63
+0x7B64
+0x7B65
+0x7B66
+0x7B67
+0x7B69
+0x7B6D
+0x7B6E
+0x7B70
+0x7B71
+0x7B72
+0x7B73
+0x7B74
+0x7B75
+0x7B76
+0x7B77
+0x7B78
+0x7B82
+0x7B84
+0x7B85
+0x7B87
+0x7B88
+0x7B8A
+0x7B8B
+0x7B8C
+0x7B8D
+0x7B8E
+0x7B8F
+0x7B90
+0x7B91
+0x7B94
+0x7B95
+0x7B96
+0x7B97
+0x7B98
+0x7B99
+0x7B9B
+0x7B9C
+0x7B9D
+0x7BA0
+0x7BA1
+0x7BA4
+0x7BAC
+0x7BAD
+0x7BAF
+0x7BB1
+0x7BB4
+0x7BB5
+0x7BB7
+0x7BB8
+0x7BB9
+0x7BBE
+0x7BC0
+0x7BC1
+0x7BC4
+0x7BC6
+0x7BC7
+0x7BC9
+0x7BCA
+0x7BCB
+0x7BCC
+0x7BCE
+0x7BD4
+0x7BD5
+0x7BD8
+0x7BD9
+0x7BDA
+0x7BDB
+0x7BDC
+0x7BDD
+0x7BDE
+0x7BDF
+0x7BE0
+0x7BE1
+0x7BE2
+0x7BE3
+0x7BE4
+0x7BE5
+0x7BE6
+0x7BE7
+0x7BE8
+0x7BE9
+0x7BEA
+0x7BEB
+0x7BF0
+0x7BF1
+0x7BF2
+0x7BF3
+0x7BF4
+0x7BF7
+0x7BF8
+0x7BF9
+0x7BFB
+0x7BFD
+0x7BFE
+0x7BFF
+0x7C00
+0x7C01
+0x7C02
+0x7C03
+0x7C05
+0x7C06
+0x7C07
+0x7C09
+0x7C0A
+0x7C0B
+0x7C0C
+0x7C0D
+0x7C0E
+0x7C0F
+0x7C10
+0x7C11
+0x7C19
+0x7C1C
+0x7C1D
+0x7C1E
+0x7C1F
+0x7C20
+0x7C21
+0x7C22
+0x7C23
+0x7C25
+0x7C26
+0x7C27
+0x7C28
+0x7C29
+0x7C2A
+0x7C2B
+0x7C2C
+0x7C2D
+0x7C30
+0x7C33
+0x7C37
+0x7C38
+0x7C39
+0x7C3B
+0x7C3C
+0x7C3D
+0x7C3E
+0x7C3F
+0x7C40
+0x7C43
+0x7C45
+0x7C47
+0x7C48
+0x7C49
+0x7C4A
+0x7C4C
+0x7C4D
+0x7C50
+0x7C53
+0x7C54
+0x7C57
+0x7C59
+0x7C5A
+0x7C5B
+0x7C5C
+0x7C5F
+0x7C60
+0x7C63
+0x7C64
+0x7C65
+0x7C66
+0x7C67
+0x7C69
+0x7C6A
+0x7C6B
+0x7C6C
+0x7C6E
+0x7C6F
+0x7C72
+0x7C73
+0x7C75
+0x7C78
+0x7C79
+0x7C7A
+0x7C7D
+0x7C7F
+0x7C80
+0x7C81
+0x7C84
+0x7C85
+0x7C88
+0x7C89
+0x7C8A
+0x7C8C
+0x7C8D
+0x7C91
+0x7C92
+0x7C94
+0x7C95
+0x7C96
+0x7C97
+0x7C98
+0x7C9E
+0x7C9F
+0x7CA1
+0x7CA2
+0x7CA3
+0x7CA5
+0x7CA8
+0x7CAF
+0x7CB1
+0x7CB2
+0x7CB3
+0x7CB4
+0x7CB5
+0x7CB9
+0x7CBA
+0x7CBB
+0x7CBC
+0x7CBD
+0x7CBE
+0x7CBF
+0x7CC5
+0x7CC8
+0x7CCA
+0x7CCB
+0x7CCC
+0x7CCE
+0x7CD0
+0x7CD1
+0x7CD2
+0x7CD4
+0x7CD5
+0x7CD6
+0x7CD7
+0x7CD9
+0x7CDC
+0x7CDD
+0x7CDE
+0x7CDF
+0x7CE0
+0x7CE2
+0x7CE7
+0x7CE8
+0x7CEA
+0x7CEC
+0x7CEE
+0x7CEF
+0x7CF0
+0x7CF1
+0x7CF2
+0x7CF4
+0x7CF6
+0x7CF7
+0x7CF8
+0x7CFB
+0x7CFD
+0x7CFE
+0x7D00
+0x7D01
+0x7D02
+0x7D03
+0x7D04
+0x7D05
+0x7D06
+0x7D07
+0x7D08
+0x7D09
+0x7D0A
+0x7D0B
+0x7D0C
+0x7D0D
+0x7D0E
+0x7D0F
+0x7D10
+0x7D11
+0x7D12
+0x7D13
+0x7D14
+0x7D15
+0x7D16
+0x7D17
+0x7D18
+0x7D19
+0x7D1A
+0x7D1B
+0x7D1C
+0x7D1D
+0x7D1E
+0x7D1F
+0x7D20
+0x7D21
+0x7D22
+0x7D28
+0x7D29
+0x7D2B
+0x7D2C
+0x7D2E
+0x7D2F
+0x7D30
+0x7D31
+0x7D32
+0x7D33
+0x7D35
+0x7D36
+0x7D38
+0x7D39
+0x7D3A
+0x7D3B
+0x7D3C
+0x7D3D
+0x7D3E
+0x7D3F
+0x7D40
+0x7D41
+0x7D42
+0x7D43
+0x7D44
+0x7D45
+0x7D46
+0x7D47
+0x7D4A
+0x7D4E
+0x7D4F
+0x7D50
+0x7D51
+0x7D52
+0x7D53
+0x7D54
+0x7D55
+0x7D56
+0x7D58
+0x7D5B
+0x7D5C
+0x7D5E
+0x7D5F
+0x7D61
+0x7D62
+0x7D63
+0x7D66
+0x7D67
+0x7D68
+0x7D69
+0x7D6A
+0x7D6B
+0x7D6D
+0x7D6E
+0x7D6F
+0x7D70
+0x7D71
+0x7D72
+0x7D73
+0x7D79
+0x7D7A
+0x7D7B
+0x7D7C
+0x7D7D
+0x7D7F
+0x7D80
+0x7D81
+0x7D83
+0x7D84
+0x7D85
+0x7D86
+0x7D88
+0x7D8C
+0x7D8D
+0x7D8E
+0x7D8F
+0x7D91
+0x7D92
+0x7D93
+0x7D94
+0x7D96
+0x7D9C
+0x7D9D
+0x7D9E
+0x7D9F
+0x7DA0
+0x7DA1
+0x7DA2
+0x7DA3
+0x7DA6
+0x7DA7
+0x7DA9
+0x7DAA
+0x7DAC
+0x7DAD
+0x7DAE
+0x7DAF
+0x7DB0
+0x7DB1
+0x7DB2
+0x7DB4
+0x7DB5
+0x7DB7
+0x7DB8
+0x7DB9
+0x7DBA
+0x7DBB
+0x7DBC
+0x7DBD
+0x7DBE
+0x7DBF
+0x7DC0
+0x7DC1
+0x7DC2
+0x7DC4
+0x7DC5
+0x7DC6
+0x7DC7
+0x7DC9
+0x7DCA
+0x7DCB
+0x7DCC
+0x7DCE
+0x7DD2
+0x7DD7
+0x7DD8
+0x7DD9
+0x7DDA
+0x7DDB
+0x7DDD
+0x7DDE
+0x7DDF
+0x7DE0
+0x7DE1
+0x7DE3
+0x7DE6
+0x7DE7
+0x7DE8
+0x7DE9
+0x7DEA
+0x7DEC
+0x7DEE
+0x7DEF
+0x7DF0
+0x7DF1
+0x7DF2
+0x7DF3
+0x7DF4
+0x7DF6
+0x7DF7
+0x7DF9
+0x7DFA
+0x7DFB
+0x7E03
+0x7E08
+0x7E09
+0x7E0A
+0x7E0B
+0x7E0C
+0x7E0D
+0x7E0E
+0x7E0F
+0x7E10
+0x7E11
+0x7E12
+0x7E13
+0x7E14
+0x7E15
+0x7E16
+0x7E17
+0x7E1A
+0x7E1B
+0x7E1C
+0x7E1D
+0x7E1E
+0x7E1F
+0x7E20
+0x7E21
+0x7E22
+0x7E23
+0x7E24
+0x7E25
+0x7E29
+0x7E2A
+0x7E2B
+0x7E2D
+0x7E2E
+0x7E2F
+0x7E30
+0x7E31
+0x7E32
+0x7E33
+0x7E34
+0x7E35
+0x7E36
+0x7E37
+0x7E38
+0x7E39
+0x7E3A
+0x7E3B
+0x7E3C
+0x7E3D
+0x7E3E
+0x7E3F
+0x7E40
+0x7E41
+0x7E42
+0x7E43
+0x7E44
+0x7E45
+0x7E46
+0x7E47
+0x7E48
+0x7E49
+0x7E4C
+0x7E50
+0x7E51
+0x7E52
+0x7E53
+0x7E54
+0x7E55
+0x7E56
+0x7E57
+0x7E58
+0x7E59
+0x7E5A
+0x7E5C
+0x7E5E
+0x7E5F
+0x7E60
+0x7E61
+0x7E62
+0x7E63
+0x7E68
+0x7E69
+0x7E6A
+0x7E6B
+0x7E6D
+0x7E6F
+0x7E70
+0x7E72
+0x7E73
+0x7E74
+0x7E75
+0x7E76
+0x7E77
+0x7E78
+0x7E79
+0x7E7A
+0x7E7B
+0x7E7C
+0x7E7D
+0x7E7E
+0x7E80
+0x7E81
+0x7E82
+0x7E86
+0x7E87
+0x7E88
+0x7E8A
+0x7E8B
+0x7E8C
+0x7E8D
+0x7E8F
+0x7E91
+0x7E93
+0x7E94
+0x7E95
+0x7E96
+0x7E97
+0x7E98
+0x7E99
+0x7E9A
+0x7E9B
+0x7E9C
+0x7F36
+0x7F38
+0x7F39
+0x7F3A
+0x7F3D
+0x7F3E
+0x7F3F
+0x7F43
+0x7F44
+0x7F45
+0x7F48
+0x7F4A
+0x7F4B
+0x7F4C
+0x7F4D
+0x7F4F
+0x7F50
+0x7F51
+0x7F54
+0x7F55
+0x7F58
+0x7F5B
+0x7F5C
+0x7F5D
+0x7F5E
+0x7F5F
+0x7F60
+0x7F61
+0x7F63
+0x7F65
+0x7F66
+0x7F67
+0x7F68
+0x7F69
+0x7F6A
+0x7F6B
+0x7F6C
+0x7F6D
+0x7F6E
+0x7F70
+0x7F72
+0x7F73
+0x7F75
+0x7F76
+0x7F77
+0x7F79
+0x7F7A
+0x7F7B
+0x7F7C
+0x7F7D
+0x7F7E
+0x7F7F
+0x7F83
+0x7F85
+0x7F86
+0x7F87
+0x7F88
+0x7F89
+0x7F8A
+0x7F8B
+0x7F8C
+0x7F8D
+0x7F8E
+0x7F91
+0x7F92
+0x7F94
+0x7F95
+0x7F96
+0x7F9A
+0x7F9B
+0x7F9C
+0x7F9D
+0x7F9E
+0x7FA0
+0x7FA1
+0x7FA2
+0x7FA4
+0x7FA5
+0x7FA6
+0x7FA7
+0x7FA8
+0x7FA9
+0x7FAC
+0x7FAD
+0x7FAF
+0x7FB0
+0x7FB1
+0x7FB2
+0x7FB3
+0x7FB5
+0x7FB6
+0x7FB7
+0x7FB8
+0x7FB9
+0x7FBA
+0x7FBB
+0x7FBC
+0x7FBD
+0x7FBE
+0x7FBF
+0x7FC0
+0x7FC1
+0x7FC2
+0x7FC3
+0x7FC5
+0x7FC7
+0x7FC9
+0x7FCA
+0x7FCB
+0x7FCC
+0x7FCD
+0x7FCE
+0x7FCF
+0x7FD0
+0x7FD1
+0x7FD2
+0x7FD4
+0x7FD5
+0x7FD7
+0x7FDB
+0x7FDC
+0x7FDE
+0x7FDF
+0x7FE0
+0x7FE1
+0x7FE2
+0x7FE3
+0x7FE5
+0x7FE6
+0x7FE8
+0x7FE9
+0x7FEA
+0x7FEB
+0x7FEC
+0x7FED
+0x7FEE
+0x7FEF
+0x7FF0
+0x7FF1
+0x7FF2
+0x7FF3
+0x7FF4
+0x7FF5
+0x7FF7
+0x7FF8
+0x7FF9
+0x7FFB
+0x7FFC
+0x7FFD
+0x7FFE
+0x7FFF
+0x8000
+0x8001
+0x8003
+0x8004
+0x8005
+0x8006
+0x8007
+0x800B
+0x800C
+0x800D
+0x800E
+0x800F
+0x8010
+0x8011
+0x8012
+0x8014
+0x8015
+0x8016
+0x8017
+0x8018
+0x8019
+0x801B
+0x801C
+0x801E
+0x801F
+0x8021
+0x8024
+0x8026
+0x8028
+0x8029
+0x802A
+0x802C
+0x8030
+0x8033
+0x8034
+0x8035
+0x8036
+0x8037
+0x8039
+0x803D
+0x803E
+0x803F
+0x8043
+0x8046
+0x8047
+0x8048
+0x804A
+0x804F
+0x8050
+0x8051
+0x8052
+0x8056
+0x8058
+0x805A
+0x805C
+0x805D
+0x805E
+0x8064
+0x8067
+0x806C
+0x806F
+0x8070
+0x8071
+0x8072
+0x8073
+0x8075
+0x8076
+0x8077
+0x8078
+0x8079
+0x807D
+0x807E
+0x807F
+0x8082
+0x8084
+0x8085
+0x8086
+0x8087
+0x8089
+0x808A
+0x808B
+0x808C
+0x808F
+0x8090
+0x8092
+0x8093
+0x8095
+0x8096
+0x8098
+0x8099
+0x809A
+0x809B
+0x809C
+0x809D
+0x80A1
+0x80A2
+0x80A3
+0x80A5
+0x80A9
+0x80AA
+0x80AB
+0x80AD
+0x80AE
+0x80AF
+0x80B1
+0x80B2
+0x80B4
+0x80B5
+0x80B8
+0x80BA
+0x80C2
+0x80C3
+0x80C4
+0x80C5
+0x80C7
+0x80C8
+0x80C9
+0x80CA
+0x80CC
+0x80CD
+0x80CE
+0x80CF
+0x80D0
+0x80D1
+0x80D4
+0x80D5
+0x80D6
+0x80D7
+0x80D8
+0x80D9
+0x80DA
+0x80DB
+0x80DC
+0x80DD
+0x80DE
+0x80E0
+0x80E1
+0x80E3
+0x80E4
+0x80E5
+0x80E6
+0x80ED
+0x80EF
+0x80F0
+0x80F1
+0x80F2
+0x80F3
+0x80F4
+0x80F5
+0x80F8
+0x80F9
+0x80FA
+0x80FB
+0x80FC
+0x80FD
+0x80FE
+0x8100
+0x8101
+0x8102
+0x8105
+0x8106
+0x8108
+0x810A
+0x8115
+0x8116
+0x8118
+0x8119
+0x811B
+0x811D
+0x811E
+0x811F
+0x8121
+0x8122
+0x8123
+0x8124
+0x8125
+0x8127
+0x8129
+0x812B
+0x812C
+0x812D
+0x812F
+0x8130
+0x8139
+0x813A
+0x813D
+0x813E
+0x8143
+0x8144
+0x8146
+0x8147
+0x814A
+0x814B
+0x814C
+0x814D
+0x814E
+0x814F
+0x8150
+0x8151
+0x8152
+0x8153
+0x8154
+0x8155
+0x815B
+0x815C
+0x815E
+0x8160
+0x8161
+0x8162
+0x8164
+0x8165
+0x8166
+0x8167
+0x8169
+0x816B
+0x816E
+0x816F
+0x8170
+0x8171
+0x8172
+0x8173
+0x8174
+0x8176
+0x8177
+0x8178
+0x8179
+0x817A
+0x817F
+0x8180
+0x8182
+0x8183
+0x8186
+0x8187
+0x8188
+0x8189
+0x818A
+0x818B
+0x818C
+0x818D
+0x818F
+0x8195
+0x8197
+0x8198
+0x8199
+0x819A
+0x819B
+0x819C
+0x819D
+0x819E
+0x819F
+0x81A0
+0x81A2
+0x81A3
+0x81A6
+0x81A7
+0x81A8
+0x81A9
+0x81AB
+0x81AC
+0x81AE
+0x81B0
+0x81B1
+0x81B2
+0x81B3
+0x81B4
+0x81B5
+0x81B7
+0x81B9
+0x81BA
+0x81BB
+0x81BC
+0x81BD
+0x81BE
+0x81BF
+0x81C0
+0x81C2
+0x81C3
+0x81C4
+0x81C5
+0x81C6
+0x81C7
+0x81C9
+0x81CA
+0x81CC
+0x81CD
+0x81CF
+0x81D0
+0x81D1
+0x81D2
+0x81D5
+0x81D7
+0x81D8
+0x81D9
+0x81DA
+0x81DB
+0x81DD
+0x81DE
+0x81DF
+0x81E0
+0x81E1
+0x81E2
+0x81E3
+0x81E5
+0x81E6
+0x81E7
+0x81E8
+0x81E9
+0x81EA
+0x81EC
+0x81ED
+0x81EE
+0x81F2
+0x81F3
+0x81F4
+0x81F7
+0x81F8
+0x81F9
+0x81FA
+0x81FB
+0x81FC
+0x81FE
+0x81FF
+0x8200
+0x8201
+0x8202
+0x8204
+0x8205
+0x8207
+0x8208
+0x8209
+0x820A
+0x820B
+0x820C
+0x820D
+0x8210
+0x8211
+0x8212
+0x8214
+0x8215
+0x8216
+0x821B
+0x821C
+0x821D
+0x821E
+0x821F
+0x8220
+0x8221
+0x8222
+0x8225
+0x8228
+0x822A
+0x822B
+0x822C
+0x822F
+0x8232
+0x8233
+0x8234
+0x8235
+0x8236
+0x8237
+0x8238
+0x8239
+0x823A
+0x823C
+0x823D
+0x823F
+0x8240
+0x8242
+0x8244
+0x8245
+0x8247
+0x8249
+0x824B
+0x824E
+0x824F
+0x8250
+0x8251
+0x8252
+0x8253
+0x8255
+0x8256
+0x8257
+0x8258
+0x8259
+0x825A
+0x825B
+0x825C
+0x825E
+0x825F
+0x8261
+0x8263
+0x8264
+0x8266
+0x8268
+0x8269
+0x826B
+0x826C
+0x826D
+0x826E
+0x826F
+0x8271
+0x8272
+0x8274
+0x8275
+0x8277
+0x8278
+0x827C
+0x827D
+0x827E
+0x827F
+0x8280
+0x8283
+0x8284
+0x8285
+0x828A
+0x828B
+0x828D
+0x828E
+0x828F
+0x8290
+0x8291
+0x8292
+0x8293
+0x8294
+0x8298
+0x8299
+0x829A
+0x829B
+0x829D
+0x829E
+0x829F
+0x82A0
+0x82A1
+0x82A2
+0x82A3
+0x82A4
+0x82A5
+0x82A7
+0x82A8
+0x82A9
+0x82AB
+0x82AC
+0x82AD
+0x82AE
+0x82AF
+0x82B0
+0x82B1
+0x82B3
+0x82B4
+0x82B5
+0x82B6
+0x82B7
+0x82B8
+0x82B9
+0x82BA
+0x82BB
+0x82BC
+0x82BD
+0x82BE
+0x82C0
+0x82C2
+0x82C3
+0x82D1
+0x82D2
+0x82D3
+0x82D4
+0x82D5
+0x82D6
+0x82D7
+0x82D9
+0x82DB
+0x82DC
+0x82DE
+0x82DF
+0x82E0
+0x82E1
+0x82E3
+0x82E4
+0x82E5
+0x82E6
+0x82E7
+0x82E8
+0x82EA
+0x82EB
+0x82EC
+0x82ED
+0x82EF
+0x82F0
+0x82F1
+0x82F2
+0x82F3
+0x82F4
+0x82F5
+0x82F6
+0x82F9
+0x82FA
+0x82FB
+0x82FE
+0x8300
+0x8301
+0x8302
+0x8303
+0x8304
+0x8305
+0x8306
+0x8307
+0x8308
+0x8309
+0x830C
+0x830D
+0x8316
+0x8317
+0x8319
+0x831B
+0x831C
+0x831E
+0x8320
+0x8322
+0x8324
+0x8325
+0x8326
+0x8327
+0x8328
+0x8329
+0x832A
+0x832B
+0x832C
+0x832D
+0x832F
+0x8331
+0x8332
+0x8333
+0x8334
+0x8335
+0x8336
+0x8337
+0x8338
+0x8339
+0x833A
+0x833B
+0x833C
+0x833F
+0x8340
+0x8341
+0x8342
+0x8343
+0x8344
+0x8345
+0x8347
+0x8348
+0x8349
+0x834A
+0x834B
+0x834C
+0x834D
+0x834E
+0x834F
+0x8350
+0x8351
+0x8352
+0x8353
+0x8354
+0x8356
+0x8373
+0x8374
+0x8375
+0x8376
+0x8377
+0x8378
+0x837A
+0x837B
+0x837C
+0x837D
+0x837E
+0x837F
+0x8381
+0x8383
+0x8386
+0x8387
+0x8388
+0x8389
+0x838A
+0x838B
+0x838C
+0x838D
+0x838E
+0x838F
+0x8390
+0x8392
+0x8393
+0x8394
+0x8395
+0x8396
+0x8397
+0x8398
+0x8399
+0x839A
+0x839B
+0x839D
+0x839E
+0x83A0
+0x83A2
+0x83A3
+0x83A4
+0x83A5
+0x83A6
+0x83A7
+0x83A8
+0x83A9
+0x83AA
+0x83AB
+0x83AE
+0x83AF
+0x83B0
+0x83BD
+0x83BF
+0x83C0
+0x83C1
+0x83C2
+0x83C3
+0x83C4
+0x83C5
+0x83C6
+0x83C7
+0x83C8
+0x83C9
+0x83CA
+0x83CB
+0x83CC
+0x83CE
+0x83CF
+0x83D1
+0x83D4
+0x83D5
+0x83D6
+0x83D7
+0x83D8
+0x83D9
+0x83DB
+0x83DC
+0x83DD
+0x83DE
+0x83DF
+0x83E0
+0x83E1
+0x83E2
+0x83E3
+0x83E4
+0x83E5
+0x83E7
+0x83E8
+0x83E9
+0x83EA
+0x83EB
+0x83EC
+0x83EE
+0x83EF
+0x83F0
+0x83F1
+0x83F2
+0x83F3
+0x83F4
+0x83F5
+0x83F6
+0x83F8
+0x83F9
+0x83FA
+0x83FB
+0x83FC
+0x83FD
+0x83FE
+0x83FF
+0x8401
+0x8403
+0x8404
+0x8406
+0x8407
+0x8409
+0x840A
+0x840B
+0x840C
+0x840D
+0x840E
+0x840F
+0x8410
+0x8411
+0x8412
+0x8413
+0x841B
+0x8423
+0x8429
+0x842B
+0x842C
+0x842D
+0x842F
+0x8430
+0x8431
+0x8432
+0x8433
+0x8434
+0x8435
+0x8436
+0x8437
+0x8438
+0x8439
+0x843A
+0x843B
+0x843C
+0x843D
+0x843F
+0x8440
+0x8442
+0x8443
+0x8444
+0x8445
+0x8446
+0x8447
+0x8449
+0x844B
+0x844C
+0x844D
+0x844E
+0x8450
+0x8451
+0x8452
+0x8454
+0x8456
+0x8457
+0x8459
+0x845A
+0x845B
+0x845D
+0x845E
+0x845F
+0x8460
+0x8461
+0x8463
+0x8465
+0x8466
+0x8467
+0x8468
+0x8469
+0x846B
+0x846C
+0x846D
+0x846E
+0x846F
+0x8470
+0x8473
+0x8474
+0x8475
+0x8476
+0x8477
+0x8478
+0x8479
+0x847A
+0x847D
+0x847E
+0x8482
+0x8486
+0x848D
+0x848E
+0x848F
+0x8490
+0x8491
+0x8494
+0x8497
+0x8498
+0x8499
+0x849A
+0x849B
+0x849C
+0x849D
+0x849E
+0x849F
+0x84A0
+0x84A1
+0x84A2
+0x84A4
+0x84A7
+0x84A8
+0x84A9
+0x84AA
+0x84AB
+0x84AC
+0x84AE
+0x84AF
+0x84B0
+0x84B1
+0x84B2
+0x84B4
+0x84B6
+0x84B8
+0x84B9
+0x84BA
+0x84BB
+0x84BC
+0x84BF
+0x84C0
+0x84C1
+0x84C2
+0x84C4
+0x84C5
+0x84C6
+0x84C7
+0x84C9
+0x84CA
+0x84CB
+0x84CC
+0x84CD
+0x84CE
+0x84CF
+0x84D0
+0x84D1
+0x84D2
+0x84D3
+0x84D4
+0x84D6
+0x84D7
+0x84DB
+0x84E7
+0x84E8
+0x84E9
+0x84EA
+0x84EB
+0x84EC
+0x84EE
+0x84EF
+0x84F0
+0x84F1
+0x84F2
+0x84F3
+0x84F4
+0x84F6
+0x84F7
+0x84F9
+0x84FA
+0x84FB
+0x84FC
+0x84FD
+0x84FE
+0x84FF
+0x8500
+0x8502
+0x8506
+0x8507
+0x8508
+0x8509
+0x850A
+0x850B
+0x850C
+0x850D
+0x850E
+0x850F
+0x8511
+0x8512
+0x8513
+0x8514
+0x8515
+0x8516
+0x8517
+0x8518
+0x8519
+0x851A
+0x851C
+0x851D
+0x851E
+0x851F
+0x8520
+0x8521
+0x8523
+0x8524
+0x8525
+0x8526
+0x8527
+0x8528
+0x8529
+0x852A
+0x852B
+0x852C
+0x852D
+0x852E
+0x852F
+0x8530
+0x8531
+0x853B
+0x853D
+0x853E
+0x8540
+0x8541
+0x8543
+0x8544
+0x8545
+0x8546
+0x8547
+0x8548
+0x8549
+0x854A
+0x854D
+0x854E
+0x8551
+0x8553
+0x8554
+0x8555
+0x8556
+0x8557
+0x8558
+0x8559
+0x855B
+0x855D
+0x855E
+0x8560
+0x8561
+0x8562
+0x8563
+0x8564
+0x8565
+0x8566
+0x8567
+0x8568
+0x8569
+0x856A
+0x856B
+0x856C
+0x856D
+0x856E
+0x8571
+0x8575
+0x8576
+0x8577
+0x8578
+0x8579
+0x857A
+0x857B
+0x857C
+0x857E
+0x8580
+0x8581
+0x8582
+0x8583
+0x8584
+0x8585
+0x8586
+0x8587
+0x8588
+0x8589
+0x858A
+0x858B
+0x858C
+0x858D
+0x858E
+0x858F
+0x8590
+0x8591
+0x8594
+0x8595
+0x8596
+0x8598
+0x8599
+0x859A
+0x859B
+0x859C
+0x859D
+0x859E
+0x859F
+0x85A0
+0x85A1
+0x85A2
+0x85A3
+0x85A4
+0x85A6
+0x85A7
+0x85A8
+0x85A9
+0x85AA
+0x85AF
+0x85B0
+0x85B1
+0x85B3
+0x85B4
+0x85B5
+0x85B6
+0x85B7
+0x85B8
+0x85B9
+0x85BA
+0x85BD
+0x85BE
+0x85BF
+0x85C0
+0x85C2
+0x85C3
+0x85C4
+0x85C5
+0x85C6
+0x85C7
+0x85C8
+0x85C9
+0x85CB
+0x85CD
+0x85CE
+0x85CF
+0x85D0
+0x85D1
+0x85D2
+0x85D5
+0x85D7
+0x85D8
+0x85D9
+0x85DA
+0x85DC
+0x85DD
+0x85DE
+0x85DF
+0x85E1
+0x85E2
+0x85E3
+0x85E4
+0x85E5
+0x85E6
+0x85E8
+0x85E9
+0x85EA
+0x85EB
+0x85EC
+0x85ED
+0x85EF
+0x85F0
+0x85F1
+0x85F2
+0x85F6
+0x85F7
+0x85F8
+0x85F9
+0x85FA
+0x85FB
+0x85FD
+0x85FE
+0x85FF
+0x8600
+0x8601
+0x8604
+0x8605
+0x8606
+0x8607
+0x8609
+0x860A
+0x860B
+0x860C
+0x8611
+0x8617
+0x8618
+0x8619
+0x861A
+0x861B
+0x861C
+0x861E
+0x861F
+0x8620
+0x8621
+0x8622
+0x8623
+0x8624
+0x8625
+0x8626
+0x8627
+0x8629
+0x862A
+0x862C
+0x862D
+0x862E
+0x8631
+0x8632
+0x8633
+0x8634
+0x8635
+0x8636
+0x8638
+0x8639
+0x863A
+0x863B
+0x863C
+0x863E
+0x863F
+0x8640
+0x8643
+0x8646
+0x8647
+0x8648
+0x864B
+0x864C
+0x864D
+0x864E
+0x8650
+0x8652
+0x8653
+0x8654
+0x8655
+0x8656
+0x8659
+0x865B
+0x865C
+0x865E
+0x865F
+0x8661
+0x8662
+0x8663
+0x8664
+0x8665
+0x8667
+0x8668
+0x8669
+0x866A
+0x866B
+0x866D
+0x866E
+0x866F
+0x8670
+0x8671
+0x8673
+0x8674
+0x8677
+0x8679
+0x867A
+0x867B
+0x867C
+0x8685
+0x8686
+0x8687
+0x868A
+0x868B
+0x868C
+0x868D
+0x868E
+0x8690
+0x8691
+0x8693
+0x8694
+0x8695
+0x8696
+0x8697
+0x8698
+0x8699
+0x869A
+0x869C
+0x869D
+0x869E
+0x86A1
+0x86A2
+0x86A3
+0x86A4
+0x86A5
+0x86A7
+0x86A8
+0x86A9
+0x86AA
+0x86AF
+0x86B0
+0x86B1
+0x86B3
+0x86B4
+0x86B5
+0x86B6
+0x86B7
+0x86B8
+0x86B9
+0x86BA
+0x86BB
+0x86BC
+0x86BD
+0x86BE
+0x86BF
+0x86C0
+0x86C1
+0x86C2
+0x86C3
+0x86C4
+0x86C5
+0x86C6
+0x86C7
+0x86C8
+0x86C9
+0x86CB
+0x86CC
+0x86D0
+0x86D1
+0x86D3
+0x86D4
+0x86D6
+0x86D7
+0x86D8
+0x86D9
+0x86DA
+0x86DB
+0x86DC
+0x86DD
+0x86DE
+0x86DF
+0x86E2
+0x86E3
+0x86E4
+0x86E6
+0x86E8
+0x86E9
+0x86EA
+0x86EB
+0x86EC
+0x86ED
+0x86F5
+0x86F6
+0x86F7
+0x86F8
+0x86F9
+0x86FA
+0x86FB
+0x86FE
+0x8700
+0x8701
+0x8702
+0x8703
+0x8704
+0x8705
+0x8706
+0x8707
+0x8708
+0x8709
+0x870A
+0x870B
+0x870C
+0x870D
+0x870E
+0x8711
+0x8712
+0x8713
+0x8718
+0x8719
+0x871A
+0x871B
+0x871C
+0x871E
+0x8720
+0x8721
+0x8722
+0x8723
+0x8724
+0x8725
+0x8726
+0x8727
+0x8728
+0x8729
+0x872A
+0x872C
+0x872D
+0x872E
+0x8730
+0x8731
+0x8732
+0x8733
+0x8734
+0x8735
+0x8737
+0x8738
+0x873A
+0x873B
+0x873C
+0x873E
+0x873F
+0x8740
+0x8741
+0x8742
+0x8743
+0x8746
+0x874C
+0x874D
+0x874E
+0x874F
+0x8750
+0x8751
+0x8752
+0x8753
+0x8754
+0x8755
+0x8756
+0x8757
+0x8758
+0x8759
+0x875A
+0x875B
+0x875C
+0x875D
+0x875E
+0x875F
+0x8760
+0x8761
+0x8762
+0x8763
+0x8764
+0x8765
+0x8766
+0x8767
+0x8768
+0x8769
+0x876A
+0x876B
+0x876C
+0x876D
+0x876E
+0x876F
+0x8773
+0x8774
+0x8775
+0x8776
+0x8777
+0x8778
+0x8779
+0x877A
+0x877B
+0x8781
+0x8782
+0x8783
+0x8784
+0x8785
+0x8787
+0x8788
+0x8789
+0x878D
+0x878F
+0x8790
+0x8791
+0x8792
+0x8793
+0x8794
+0x8796
+0x8797
+0x8798
+0x879A
+0x879B
+0x879C
+0x879D
+0x879E
+0x879F
+0x87A2
+0x87A3
+0x87A4
+0x87AA
+0x87AB
+0x87AC
+0x87AD
+0x87AE
+0x87AF
+0x87B0
+0x87B2
+0x87B3
+0x87B4
+0x87B5
+0x87B6
+0x87B7
+0x87B8
+0x87B9
+0x87BA
+0x87BB
+0x87BC
+0x87BD
+0x87BE
+0x87BF
+0x87C0
+0x87C2
+0x87C3
+0x87C4
+0x87C5
+0x87C6
+0x87C8
+0x87C9
+0x87CA
+0x87CB
+0x87CC
+0x87D1
+0x87D2
+0x87D3
+0x87D4
+0x87D7
+0x87D8
+0x87D9
+0x87DB
+0x87DC
+0x87DD
+0x87DE
+0x87DF
+0x87E0
+0x87E1
+0x87E2
+0x87E3
+0x87E4
+0x87E5
+0x87E6
+0x87E7
+0x87E8
+0x87EA
+0x87EB
+0x87EC
+0x87ED
+0x87EF
+0x87F2
+0x87F3
+0x87F4
+0x87F6
+0x87F7
+0x87F9
+0x87FA
+0x87FB
+0x87FC
+0x87FE
+0x87FF
+0x8800
+0x8801
+0x8802
+0x8803
+0x8805
+0x8806
+0x8808
+0x8809
+0x880A
+0x880B
+0x880C
+0x880D
+0x8810
+0x8811
+0x8813
+0x8814
+0x8815
+0x8816
+0x8817
+0x8819
+0x881B
+0x881C
+0x881D
+0x881F
+0x8820
+0x8821
+0x8822
+0x8823
+0x8824
+0x8825
+0x8826
+0x8828
+0x8829
+0x882A
+0x882B
+0x882C
+0x882E
+0x882F
+0x8830
+0x8831
+0x8832
+0x8833
+0x8835
+0x8836
+0x8837
+0x8838
+0x8839
+0x883B
+0x883C
+0x883D
+0x883E
+0x883F
+0x8840
+0x8841
+0x8843
+0x8844
+0x8848
+0x884A
+0x884B
+0x884C
+0x884D
+0x884E
+0x8852
+0x8853
+0x8855
+0x8856
+0x8857
+0x8859
+0x885A
+0x885B
+0x885D
+0x8861
+0x8862
+0x8863
+0x8867
+0x8868
+0x8869
+0x886A
+0x886B
+0x886D
+0x886F
+0x8870
+0x8871
+0x8872
+0x8874
+0x8875
+0x8876
+0x8877
+0x8879
+0x887C
+0x887D
+0x887E
+0x887F
+0x8880
+0x8881
+0x8882
+0x8883
+0x8888
+0x8889
+0x888B
+0x888C
+0x888D
+0x888E
+0x8891
+0x8892
+0x8893
+0x8895
+0x8896
+0x8897
+0x8898
+0x8899
+0x889A
+0x889B
+0x889E
+0x889F
+0x88A1
+0x88A2
+0x88A4
+0x88A7
+0x88A8
+0x88AA
+0x88AB
+0x88AC
+0x88B1
+0x88B2
+0x88B6
+0x88B7
+0x88B8
+0x88B9
+0x88BA
+0x88BC
+0x88BD
+0x88BE
+0x88C0
+0x88C1
+0x88C2
+0x88C9
+0x88CA
+0x88CB
+0x88CC
+0x88CD
+0x88CE
+0x88D0
+0x88D2
+0x88D4
+0x88D5
+0x88D6
+0x88D7
+0x88D8
+0x88D9
+0x88DA
+0x88DB
+0x88DC
+0x88DD
+0x88DE
+0x88DF
+0x88E1
+0x88E7
+0x88E8
+0x88EB
+0x88EC
+0x88EE
+0x88EF
+0x88F0
+0x88F1
+0x88F2
+0x88F3
+0x88F4
+0x88F6
+0x88F7
+0x88F8
+0x88F9
+0x88FA
+0x88FB
+0x88FC
+0x88FD
+0x88FE
+0x8901
+0x8902
+0x8905
+0x8906
+0x8907
+0x8909
+0x890A
+0x890B
+0x890C
+0x890E
+0x8910
+0x8911
+0x8912
+0x8913
+0x8914
+0x8915
+0x8916
+0x8917
+0x8918
+0x8919
+0x891A
+0x891E
+0x891F
+0x8921
+0x8922
+0x8923
+0x8925
+0x8926
+0x8927
+0x8929
+0x892A
+0x892B
+0x892C
+0x892D
+0x892E
+0x892F
+0x8930
+0x8931
+0x8932
+0x8933
+0x8935
+0x8936
+0x8937
+0x8938
+0x893B
+0x893C
+0x893D
+0x893E
+0x8941
+0x8942
+0x8944
+0x8946
+0x8949
+0x894B
+0x894C
+0x894F
+0x8950
+0x8951
+0x8952
+0x8953
+0x8956
+0x8957
+0x8958
+0x8959
+0x895A
+0x895B
+0x895C
+0x895D
+0x895E
+0x895F
+0x8960
+0x8961
+0x8962
+0x8963
+0x8964
+0x8966
+0x8969
+0x896A
+0x896B
+0x896C
+0x896D
+0x896E
+0x896F
+0x8971
+0x8972
+0x8973
+0x8974
+0x8976
+0x8979
+0x897A
+0x897B
+0x897C
+0x897E
+0x897F
+0x8981
+0x8982
+0x8983
+0x8985
+0x8986
+0x8988
+0x898B
+0x898F
+0x8993
+0x8995
+0x8996
+0x8997
+0x8998
+0x899B
+0x899C
+0x899D
+0x899E
+0x899F
+0x89A1
+0x89A2
+0x89A3
+0x89A4
+0x89A6
+0x89AA
+0x89AC
+0x89AD
+0x89AE
+0x89AF
+0x89B2
+0x89B6
+0x89B7
+0x89B9
+0x89BA
+0x89BD
+0x89BE
+0x89BF
+0x89C0
+0x89D2
+0x89D3
+0x89D4
+0x89D5
+0x89D6
+0x89D9
+0x89DA
+0x89DB
+0x89DC
+0x89DD
+0x89DF
+0x89E0
+0x89E1
+0x89E2
+0x89E3
+0x89E4
+0x89E5
+0x89E6
+0x89E8
+0x89E9
+0x89EB
+0x89EC
+0x89ED
+0x89F0
+0x89F1
+0x89F2
+0x89F3
+0x89F4
+0x89F6
+0x89F7
+0x89F8
+0x89FA
+0x89FB
+0x89FC
+0x89FE
+0x89FF
+0x8A00
+0x8A02
+0x8A03
+0x8A04
+0x8A07
+0x8A08
+0x8A0A
+0x8A0C
+0x8A0E
+0x8A0F
+0x8A10
+0x8A11
+0x8A12
+0x8A13
+0x8A15
+0x8A16
+0x8A17
+0x8A18
+0x8A1B
+0x8A1D
+0x8A1E
+0x8A1F
+0x8A22
+0x8A23
+0x8A25
+0x8A27
+0x8A2A
+0x8A2C
+0x8A2D
+0x8A30
+0x8A31
+0x8A34
+0x8A36
+0x8A39
+0x8A3A
+0x8A3B
+0x8A3C
+0x8A3E
+0x8A3F
+0x8A40
+0x8A41
+0x8A44
+0x8A45
+0x8A46
+0x8A48
+0x8A4A
+0x8A4C
+0x8A4D
+0x8A4E
+0x8A4F
+0x8A50
+0x8A51
+0x8A52
+0x8A54
+0x8A55
+0x8A56
+0x8A57
+0x8A58
+0x8A59
+0x8A5B
+0x8A5E
+0x8A60
+0x8A61
+0x8A62
+0x8A63
+0x8A66
+0x8A68
+0x8A69
+0x8A6B
+0x8A6C
+0x8A6D
+0x8A6E
+0x8A70
+0x8A71
+0x8A72
+0x8A73
+0x8A74
+0x8A75
+0x8A76
+0x8A77
+0x8A79
+0x8A7A
+0x8A7B
+0x8A7C
+0x8A7F
+0x8A81
+0x8A82
+0x8A83
+0x8A84
+0x8A85
+0x8A86
+0x8A87
+0x8A8B
+0x8A8C
+0x8A8D
+0x8A8F
+0x8A91
+0x8A92
+0x8A93
+0x8A95
+0x8A96
+0x8A98
+0x8A99
+0x8A9A
+0x8A9E
+0x8AA0
+0x8AA1
+0x8AA3
+0x8AA4
+0x8AA5
+0x8AA6
+0x8AA7
+0x8AA8
+0x8AAA
+0x8AAB
+0x8AB0
+0x8AB2
+0x8AB6
+0x8AB8
+0x8AB9
+0x8ABA
+0x8ABB
+0x8ABC
+0x8ABD
+0x8ABE
+0x8ABF
+0x8AC0
+0x8AC2
+0x8AC3
+0x8AC4
+0x8AC5
+0x8AC6
+0x8AC7
+0x8AC8
+0x8AC9
+0x8ACB
+0x8ACD
+0x8ACF
+0x8AD1
+0x8AD2
+0x8AD3
+0x8AD4
+0x8AD5
+0x8AD6
+0x8AD7
+0x8AD8
+0x8AD9
+0x8ADB
+0x8ADC
+0x8ADD
+0x8ADE
+0x8ADF
+0x8AE0
+0x8AE1
+0x8AE2
+0x8AE4
+0x8AE6
+0x8AE7
+0x8AE8
+0x8AEB
+0x8AED
+0x8AEE
+0x8AEF
+0x8AF0
+0x8AF1
+0x8AF2
+0x8AF3
+0x8AF4
+0x8AF5
+0x8AF6
+0x8AF7
+0x8AF8
+0x8AFA
+0x8AFB
+0x8AFC
+0x8AFE
+0x8AFF
+0x8B00
+0x8B01
+0x8B02
+0x8B04
+0x8B05
+0x8B06
+0x8B07
+0x8B08
+0x8B0A
+0x8B0B
+0x8B0D
+0x8B0E
+0x8B0F
+0x8B10
+0x8B11
+0x8B12
+0x8B13
+0x8B14
+0x8B15
+0x8B16
+0x8B17
+0x8B18
+0x8B19
+0x8B1A
+0x8B1B
+0x8B1C
+0x8B1D
+0x8B1E
+0x8B20
+0x8B22
+0x8B23
+0x8B24
+0x8B25
+0x8B26
+0x8B27
+0x8B28
+0x8B2A
+0x8B2B
+0x8B2C
+0x8B2E
+0x8B2F
+0x8B30
+0x8B31
+0x8B33
+0x8B35
+0x8B36
+0x8B37
+0x8B39
+0x8B3A
+0x8B3B
+0x8B3C
+0x8B3D
+0x8B3E
+0x8B40
+0x8B41
+0x8B42
+0x8B45
+0x8B46
+0x8B47
+0x8B48
+0x8B49
+0x8B4A
+0x8B4B
+0x8B4E
+0x8B4F
+0x8B50
+0x8B51
+0x8B52
+0x8B53
+0x8B54
+0x8B55
+0x8B56
+0x8B57
+0x8B58
+0x8B59
+0x8B5A
+0x8B5C
+0x8B5D
+0x8B5F
+0x8B60
+0x8B63
+0x8B65
+0x8B66
+0x8B67
+0x8B68
+0x8B6A
+0x8B6B
+0x8B6C
+0x8B6D
+0x8B6F
+0x8B70
+0x8B74
+0x8B77
+0x8B78
+0x8B79
+0x8B7A
+0x8B7B
+0x8B7D
+0x8B7E
+0x8B7F
+0x8B80
+0x8B82
+0x8B84
+0x8B85
+0x8B86
+0x8B88
+0x8B8A
+0x8B8B
+0x8B8C
+0x8B8E
+0x8B92
+0x8B93
+0x8B94
+0x8B95
+0x8B96
+0x8B98
+0x8B99
+0x8B9A
+0x8B9C
+0x8B9E
+0x8B9F
+0x8C37
+0x8C39
+0x8C3B
+0x8C3C
+0x8C3D
+0x8C3E
+0x8C3F
+0x8C41
+0x8C42
+0x8C43
+0x8C45
+0x8C46
+0x8C47
+0x8C48
+0x8C49
+0x8C4A
+0x8C4B
+0x8C4C
+0x8C4D
+0x8C4E
+0x8C4F
+0x8C50
+0x8C54
+0x8C55
+0x8C56
+0x8C57
+0x8C5A
+0x8C5C
+0x8C5D
+0x8C5F
+0x8C61
+0x8C62
+0x8C64
+0x8C65
+0x8C66
+0x8C68
+0x8C69
+0x8C6A
+0x8C6B
+0x8C6C
+0x8C6D
+0x8C6F
+0x8C70
+0x8C71
+0x8C72
+0x8C73
+0x8C75
+0x8C76
+0x8C77
+0x8C78
+0x8C79
+0x8C7A
+0x8C7B
+0x8C7D
+0x8C80
+0x8C81
+0x8C82
+0x8C84
+0x8C85
+0x8C86
+0x8C89
+0x8C8A
+0x8C8C
+0x8C8D
+0x8C8F
+0x8C90
+0x8C91
+0x8C92
+0x8C93
+0x8C94
+0x8C95
+0x8C97
+0x8C98
+0x8C99
+0x8C9A
+0x8C9C
+0x8C9D
+0x8C9E
+0x8CA0
+0x8CA1
+0x8CA2
+0x8CA3
+0x8CA4
+0x8CA5
+0x8CA7
+0x8CA8
+0x8CA9
+0x8CAA
+0x8CAB
+0x8CAC
+0x8CAF
+0x8CB0
+0x8CB2
+0x8CB3
+0x8CB4
+0x8CB5
+0x8CB6
+0x8CB7
+0x8CB8
+0x8CB9
+0x8CBA
+0x8CBB
+0x8CBC
+0x8CBD
+0x8CBE
+0x8CBF
+0x8CC0
+0x8CC1
+0x8CC2
+0x8CC3
+0x8CC4
+0x8CC5
+0x8CC7
+0x8CC8
+0x8CCA
+0x8CCC
+0x8CCF
+0x8CD1
+0x8CD2
+0x8CD3
+0x8CD5
+0x8CD7
+0x8CD9
+0x8CDA
+0x8CDC
+0x8CDD
+0x8CDE
+0x8CDF
+0x8CE0
+0x8CE1
+0x8CE2
+0x8CE3
+0x8CE4
+0x8CE5
+0x8CE6
+0x8CE7
+0x8CE8
+0x8CEA
+0x8CEC
+0x8CED
+0x8CEE
+0x8CF0
+0x8CF1
+0x8CF3
+0x8CF4
+0x8CF5
+0x8CF8
+0x8CF9
+0x8CFA
+0x8CFB
+0x8CFC
+0x8CFD
+0x8CFE
+0x8D00
+0x8D02
+0x8D04
+0x8D05
+0x8D06
+0x8D07
+0x8D08
+0x8D09
+0x8D0A
+0x8D0D
+0x8D0F
+0x8D10
+0x8D13
+0x8D14
+0x8D15
+0x8D16
+0x8D17
+0x8D19
+0x8D1B
+0x8D64
+0x8D66
+0x8D67
+0x8D68
+0x8D69
+0x8D6B
+0x8D6C
+0x8D6D
+0x8D6E
+0x8D6F
+0x8D70
+0x8D72
+0x8D73
+0x8D74
+0x8D76
+0x8D77
+0x8D78
+0x8D79
+0x8D7B
+0x8D7D
+0x8D80
+0x8D81
+0x8D84
+0x8D85
+0x8D89
+0x8D8A
+0x8D8C
+0x8D8D
+0x8D8E
+0x8D8F
+0x8D90
+0x8D91
+0x8D92
+0x8D93
+0x8D94
+0x8D95
+0x8D96
+0x8D99
+0x8D9B
+0x8D9C
+0x8D9F
+0x8DA0
+0x8DA1
+0x8DA3
+0x8DA5
+0x8DA7
+0x8DA8
+0x8DAA
+0x8DAB
+0x8DAC
+0x8DAD
+0x8DAE
+0x8DAF
+0x8DB2
+0x8DB3
+0x8DB4
+0x8DB5
+0x8DB6
+0x8DB7
+0x8DB9
+0x8DBA
+0x8DBC
+0x8DBE
+0x8DBF
+0x8DC1
+0x8DC2
+0x8DC5
+0x8DC6
+0x8DC7
+0x8DC8
+0x8DCB
+0x8DCC
+0x8DCD
+0x8DCE
+0x8DCF
+0x8DD0
+0x8DD1
+0x8DD3
+0x8DD5
+0x8DD6
+0x8DD7
+0x8DD8
+0x8DD9
+0x8DDA
+0x8DDB
+0x8DDC
+0x8DDD
+0x8DDF
+0x8DE0
+0x8DE1
+0x8DE2
+0x8DE3
+0x8DE4
+0x8DE6
+0x8DE7
+0x8DE8
+0x8DE9
+0x8DEA
+0x8DEB
+0x8DEC
+0x8DEE
+0x8DEF
+0x8DF0
+0x8DF1
+0x8DF2
+0x8DF3
+0x8DF4
+0x8DFA
+0x8DFC
+0x8DFD
+0x8DFE
+0x8DFF
+0x8E00
+0x8E02
+0x8E03
+0x8E04
+0x8E05
+0x8E06
+0x8E07
+0x8E09
+0x8E0A
+0x8E0D
+0x8E0F
+0x8E10
+0x8E11
+0x8E12
+0x8E13
+0x8E14
+0x8E15
+0x8E16
+0x8E17
+0x8E18
+0x8E19
+0x8E1A
+0x8E1B
+0x8E1C
+0x8E1D
+0x8E1E
+0x8E1F
+0x8E20
+0x8E21
+0x8E22
+0x8E23
+0x8E24
+0x8E25
+0x8E26
+0x8E27
+0x8E29
+0x8E2B
+0x8E2E
+0x8E30
+0x8E31
+0x8E33
+0x8E34
+0x8E35
+0x8E36
+0x8E38
+0x8E39
+0x8E3C
+0x8E3D
+0x8E3E
+0x8E3F
+0x8E40
+0x8E41
+0x8E42
+0x8E44
+0x8E45
+0x8E47
+0x8E48
+0x8E49
+0x8E4A
+0x8E4B
+0x8E4C
+0x8E4D
+0x8E4E
+0x8E50
+0x8E53
+0x8E54
+0x8E55
+0x8E56
+0x8E57
+0x8E59
+0x8E5A
+0x8E5B
+0x8E5C
+0x8E5D
+0x8E5E
+0x8E5F
+0x8E60
+0x8E61
+0x8E62
+0x8E63
+0x8E64
+0x8E65
+0x8E66
+0x8E67
+0x8E69
+0x8E6A
+0x8E6C
+0x8E6D
+0x8E6F
+0x8E72
+0x8E73
+0x8E74
+0x8E76
+0x8E78
+0x8E7A
+0x8E7B
+0x8E7C
+0x8E81
+0x8E82
+0x8E84
+0x8E85
+0x8E86
+0x8E87
+0x8E88
+0x8E89
+0x8E8A
+0x8E8B
+0x8E8C
+0x8E8D
+0x8E8E
+0x8E90
+0x8E91
+0x8E92
+0x8E93
+0x8E94
+0x8E95
+0x8E96
+0x8E97
+0x8E98
+0x8E9A
+0x8E9D
+0x8E9E
+0x8E9F
+0x8EA0
+0x8EA1
+0x8EA3
+0x8EA4
+0x8EA5
+0x8EA6
+0x8EA8
+0x8EA9
+0x8EAA
+0x8EAB
+0x8EAC
+0x8EB2
+0x8EBA
+0x8EBD
+0x8EC0
+0x8EC2
+0x8EC9
+0x8ECA
+0x8ECB
+0x8ECC
+0x8ECD
+0x8ECF
+0x8ED1
+0x8ED2
+0x8ED3
+0x8ED4
+0x8ED7
+0x8ED8
+0x8EDB
+0x8EDC
+0x8EDD
+0x8EDE
+0x8EDF
+0x8EE0
+0x8EE1
+0x8EE5
+0x8EE6
+0x8EE7
+0x8EE8
+0x8EE9
+0x8EEB
+0x8EEC
+0x8EEE
+0x8EEF
+0x8EF1
+0x8EF4
+0x8EF5
+0x8EF6
+0x8EF7
+0x8EF8
+0x8EF9
+0x8EFA
+0x8EFB
+0x8EFC
+0x8EFE
+0x8EFF
+0x8F00
+0x8F01
+0x8F02
+0x8F03
+0x8F05
+0x8F06
+0x8F07
+0x8F08
+0x8F09
+0x8F0A
+0x8F0B
+0x8F0D
+0x8F0E
+0x8F10
+0x8F11
+0x8F12
+0x8F13
+0x8F14
+0x8F15
+0x8F16
+0x8F17
+0x8F18
+0x8F1A
+0x8F1B
+0x8F1C
+0x8F1D
+0x8F1E
+0x8F1F
+0x8F20
+0x8F23
+0x8F24
+0x8F25
+0x8F26
+0x8F29
+0x8F2A
+0x8F2C
+0x8F2E
+0x8F2F
+0x8F32
+0x8F33
+0x8F34
+0x8F35
+0x8F36
+0x8F37
+0x8F38
+0x8F39
+0x8F3B
+0x8F3E
+0x8F3F
+0x8F40
+0x8F42
+0x8F43
+0x8F44
+0x8F45
+0x8F46
+0x8F47
+0x8F48
+0x8F49
+0x8F4B
+0x8F4D
+0x8F4E
+0x8F4F
+0x8F50
+0x8F51
+0x8F52
+0x8F53
+0x8F54
+0x8F55
+0x8F56
+0x8F57
+0x8F58
+0x8F59
+0x8F5A
+0x8F5B
+0x8F5D
+0x8F5E
+0x8F5F
+0x8F60
+0x8F61
+0x8F62
+0x8F63
+0x8F64
+0x8F9B
+0x8F9C
+0x8F9F
+0x8FA3
+0x8FA6
+0x8FA8
+0x8FAD
+0x8FAE
+0x8FAF
+0x8FB0
+0x8FB1
+0x8FB2
+0x8FB4
+0x8FBF
+0x8FC2
+0x8FC4
+0x8FC5
+0x8FC6
+0x8FC9
+0x8FCB
+0x8FCD
+0x8FCE
+0x8FD1
+0x8FD2
+0x8FD3
+0x8FD4
+0x8FD5
+0x8FD6
+0x8FD7
+0x8FE0
+0x8FE1
+0x8FE2
+0x8FE3
+0x8FE4
+0x8FE5
+0x8FE6
+0x8FE8
+0x8FEA
+0x8FEB
+0x8FED
+0x8FEE
+0x8FF0
+0x8FF4
+0x8FF5
+0x8FF6
+0x8FF7
+0x8FF8
+0x8FFA
+0x8FFB
+0x8FFC
+0x8FFD
+0x8FFE
+0x8FFF
+0x9000
+0x9001
+0x9002
+0x9003
+0x9004
+0x9005
+0x9006
+0x900B
+0x900C
+0x900D
+0x900F
+0x9010
+0x9011
+0x9014
+0x9015
+0x9016
+0x9017
+0x9019
+0x901A
+0x901B
+0x901C
+0x901D
+0x901E
+0x901F
+0x9020
+0x9021
+0x9022
+0x9023
+0x9024
+0x902D
+0x902E
+0x902F
+0x9031
+0x9032
+0x9034
+0x9035
+0x9036
+0x9038
+0x903C
+0x903D
+0x903E
+0x903F
+0x9041
+0x9042
+0x9044
+0x9047
+0x9049
+0x904A
+0x904B
+0x904D
+0x904E
+0x904F
+0x9050
+0x9051
+0x9052
+0x9053
+0x9054
+0x9055
+0x9058
+0x9059
+0x905B
+0x905C
+0x905D
+0x905E
+0x9060
+0x9062
+0x9063
+0x9067
+0x9068
+0x9069
+0x906B
+0x906D
+0x906E
+0x906F
+0x9070
+0x9072
+0x9073
+0x9074
+0x9075
+0x9076
+0x9077
+0x9078
+0x9079
+0x907A
+0x907B
+0x907C
+0x907D
+0x907E
+0x907F
+0x9080
+0x9081
+0x9082
+0x9083
+0x9084
+0x9085
+0x9086
+0x9087
+0x9088
+0x908A
+0x908B
+0x908D
+0x908F
+0x9090
+0x9091
+0x9094
+0x9095
+0x9097
+0x9098
+0x9099
+0x909B
+0x909E
+0x909F
+0x90A0
+0x90A1
+0x90A2
+0x90A3
+0x90A5
+0x90A6
+0x90A7
+0x90AA
+0x90AF
+0x90B0
+0x90B1
+0x90B2
+0x90B3
+0x90B4
+0x90B5
+0x90B6
+0x90B8
+0x90BD
+0x90BE
+0x90BF
+0x90C1
+0x90C3
+0x90C5
+0x90C7
+0x90C8
+0x90CA
+0x90CB
+0x90CE
+0x90D4
+0x90D5
+0x90D6
+0x90D7
+0x90D8
+0x90D9
+0x90DA
+0x90DB
+0x90DC
+0x90DD
+0x90DF
+0x90E0
+0x90E1
+0x90E2
+0x90E3
+0x90E4
+0x90E5
+0x90E8
+0x90E9
+0x90EA
+0x90EB
+0x90EC
+0x90ED
+0x90EF
+0x90F0
+0x90F1
+0x90F2
+0x90F3
+0x90F4
+0x90F5
+0x90F9
+0x90FA
+0x90FB
+0x90FC
+0x90FD
+0x90FE
+0x90FF
+0x9100
+0x9101
+0x9102
+0x9103
+0x9104
+0x9105
+0x9106
+0x9107
+0x9108
+0x9109
+0x910B
+0x910D
+0x910E
+0x910F
+0x9110
+0x9111
+0x9112
+0x9114
+0x9116
+0x9117
+0x9118
+0x9119
+0x911A
+0x911B
+0x911C
+0x911D
+0x911E
+0x911F
+0x9120
+0x9121
+0x9122
+0x9123
+0x9124
+0x9126
+0x9127
+0x9128
+0x9129
+0x912A
+0x912B
+0x912C
+0x912D
+0x912E
+0x912F
+0x9130
+0x9131
+0x9132
+0x9133
+0x9134
+0x9135
+0x9136
+0x9138
+0x9139
+0x913A
+0x913B
+0x913E
+0x913F
+0x9140
+0x9141
+0x9143
+0x9144
+0x9145
+0x9146
+0x9147
+0x9148
+0x9149
+0x914A
+0x914B
+0x914C
+0x914D
+0x914E
+0x914F
+0x9150
+0x9152
+0x9153
+0x9155
+0x9156
+0x9157
+0x9158
+0x915A
+0x915F
+0x9160
+0x9161
+0x9162
+0x9163
+0x9164
+0x9165
+0x9168
+0x9169
+0x916A
+0x916C
+0x916E
+0x916F
+0x9172
+0x9173
+0x9174
+0x9175
+0x9177
+0x9178
+0x9179
+0x917A
+0x9180
+0x9181
+0x9182
+0x9183
+0x9184
+0x9185
+0x9186
+0x9187
+0x9189
+0x918A
+0x918B
+0x918D
+0x918F
+0x9190
+0x9191
+0x9192
+0x9193
+0x9199
+0x919A
+0x919B
+0x919C
+0x919D
+0x919E
+0x919F
+0x91A0
+0x91A1
+0x91A2
+0x91A3
+0x91A5
+0x91A7
+0x91A8
+0x91AA
+0x91AB
+0x91AC
+0x91AD
+0x91AE
+0x91AF
+0x91B0
+0x91B1
+0x91B2
+0x91B3
+0x91B4
+0x91B5
+0x91B7
+0x91B9
+0x91BA
+0x91BC
+0x91BD
+0x91BE
+0x91C0
+0x91C1
+0x91C2
+0x91C3
+0x91C5
+0x91C6
+0x91C7
+0x91C9
+0x91CB
+0x91CC
+0x91CD
+0x91CE
+0x91CF
+0x91D0
+0x91D1
+0x91D3
+0x91D4
+0x91D5
+0x91D7
+0x91D8
+0x91D9
+0x91DA
+0x91DC
+0x91DD
+0x91E2
+0x91E3
+0x91E4
+0x91E6
+0x91E7
+0x91E8
+0x91E9
+0x91EA
+0x91EB
+0x91EC
+0x91ED
+0x91EE
+0x91F1
+0x91F3
+0x91F4
+0x91F5
+0x91F7
+0x91F8
+0x91F9
+0x91FD
+0x91FF
+0x9200
+0x9201
+0x9202
+0x9203
+0x9204
+0x9205
+0x9206
+0x9207
+0x9209
+0x920A
+0x920C
+0x920D
+0x920F
+0x9210
+0x9211
+0x9212
+0x9214
+0x9215
+0x9216
+0x9217
+0x9219
+0x921A
+0x921C
+0x921E
+0x9223
+0x9224
+0x9225
+0x9226
+0x9227
+0x922D
+0x922E
+0x9230
+0x9231
+0x9232
+0x9233
+0x9234
+0x9236
+0x9237
+0x9238
+0x9239
+0x923A
+0x923D
+0x923E
+0x923F
+0x9240
+0x9245
+0x9246
+0x9248
+0x9249
+0x924A
+0x924B
+0x924C
+0x924D
+0x924E
+0x924F
+0x9250
+0x9251
+0x9252
+0x9253
+0x9254
+0x9256
+0x9257
+0x925A
+0x925B
+0x925E
+0x9260
+0x9261
+0x9263
+0x9264
+0x9265
+0x9266
+0x9267
+0x926C
+0x926D
+0x926F
+0x9270
+0x9272
+0x9276
+0x9278
+0x9279
+0x927A
+0x927B
+0x927C
+0x927D
+0x927E
+0x927F
+0x9280
+0x9282
+0x9283
+0x9285
+0x9286
+0x9287
+0x9288
+0x928A
+0x928B
+0x928C
+0x928D
+0x928E
+0x9291
+0x9293
+0x9294
+0x9295
+0x9296
+0x9297
+0x9298
+0x9299
+0x929A
+0x929B
+0x929C
+0x929D
+0x92A0
+0x92A1
+0x92A2
+0x92A3
+0x92A4
+0x92A5
+0x92A6
+0x92A7
+0x92A8
+0x92A9
+0x92AA
+0x92AB
+0x92AC
+0x92B2
+0x92B3
+0x92B4
+0x92B5
+0x92B6
+0x92B7
+0x92BB
+0x92BC
+0x92C0
+0x92C1
+0x92C2
+0x92C3
+0x92C4
+0x92C5
+0x92C6
+0x92C7
+0x92C8
+0x92C9
+0x92CA
+0x92CB
+0x92CC
+0x92CD
+0x92CE
+0x92CF
+0x92D0
+0x92D1
+0x92D2
+0x92D3
+0x92D5
+0x92D7
+0x92D8
+0x92D9
+0x92DD
+0x92DE
+0x92DF
+0x92E0
+0x92E1
+0x92E4
+0x92E6
+0x92E7
+0x92E8
+0x92E9
+0x92EA
+0x92EE
+0x92EF
+0x92F0
+0x92F1
+0x92F7
+0x92F8
+0x92F9
+0x92FA
+0x92FB
+0x92FC
+0x92FE
+0x92FF
+0x9300
+0x9301
+0x9302
+0x9304
+0x9306
+0x9308
+0x9309
+0x930B
+0x930C
+0x930D
+0x930E
+0x930F
+0x9310
+0x9312
+0x9313
+0x9314
+0x9315
+0x9316
+0x9318
+0x9319
+0x931A
+0x931B
+0x931D
+0x931E
+0x931F
+0x9320
+0x9321
+0x9322
+0x9323
+0x9324
+0x9325
+0x9326
+0x9327
+0x9328
+0x9329
+0x932A
+0x932B
+0x932D
+0x932E
+0x932F
+0x9333
+0x9334
+0x9335
+0x9336
+0x9338
+0x9339
+0x933C
+0x9346
+0x9347
+0x9349
+0x934A
+0x934B
+0x934C
+0x934D
+0x934E
+0x934F
+0x9350
+0x9351
+0x9352
+0x9354
+0x9355
+0x9356
+0x9357
+0x9358
+0x9359
+0x935A
+0x935B
+0x935C
+0x935E
+0x9360
+0x9361
+0x9363
+0x9364
+0x9365
+0x9367
+0x936A
+0x936C
+0x936D
+0x9370
+0x9371
+0x9375
+0x9376
+0x9377
+0x9379
+0x937A
+0x937B
+0x937C
+0x937E
+0x9380
+0x9382
+0x9383
+0x9388
+0x9389
+0x938A
+0x938C
+0x938D
+0x938E
+0x938F
+0x9391
+0x9392
+0x9394
+0x9395
+0x9396
+0x9397
+0x9398
+0x9399
+0x939A
+0x939B
+0x939D
+0x939E
+0x939F
+0x93A1
+0x93A2
+0x93A3
+0x93A4
+0x93A5
+0x93A6
+0x93A7
+0x93A8
+0x93A9
+0x93AA
+0x93AC
+0x93AE
+0x93AF
+0x93B0
+0x93B1
+0x93B2
+0x93B3
+0x93B4
+0x93B5
+0x93B7
+0x93C0
+0x93C2
+0x93C3
+0x93C4
+0x93C7
+0x93C8
+0x93CA
+0x93CC
+0x93CD
+0x93CE
+0x93CF
+0x93D0
+0x93D1
+0x93D2
+0x93D4
+0x93D5
+0x93D6
+0x93D7
+0x93D8
+0x93D9
+0x93DA
+0x93DC
+0x93DD
+0x93DE
+0x93DF
+0x93E1
+0x93E2
+0x93E3
+0x93E4
+0x93E6
+0x93E7
+0x93E8
+0x93EC
+0x93EE
+0x93F5
+0x93F6
+0x93F7
+0x93F8
+0x93F9
+0x93FA
+0x93FB
+0x93FC
+0x93FD
+0x93FE
+0x93FF
+0x9400
+0x9403
+0x9406
+0x9407
+0x9409
+0x940A
+0x940B
+0x940C
+0x940D
+0x940E
+0x940F
+0x9410
+0x9411
+0x9412
+0x9413
+0x9414
+0x9415
+0x9416
+0x9418
+0x9419
+0x9420
+0x9428
+0x9429
+0x942A
+0x942B
+0x942C
+0x942E
+0x9430
+0x9431
+0x9432
+0x9433
+0x9435
+0x9436
+0x9437
+0x9438
+0x9439
+0x943A
+0x943B
+0x943C
+0x943D
+0x943F
+0x9440
+0x9444
+0x9445
+0x9446
+0x9447
+0x9448
+0x9449
+0x944A
+0x944B
+0x944C
+0x944F
+0x9450
+0x9451
+0x9452
+0x9455
+0x9457
+0x945D
+0x945E
+0x9460
+0x9462
+0x9463
+0x9464
+0x9468
+0x9469
+0x946A
+0x946B
+0x946D
+0x946E
+0x946F
+0x9470
+0x9471
+0x9472
+0x9473
+0x9474
+0x9475
+0x9476
+0x9477
+0x9478
+0x947C
+0x947D
+0x947E
+0x947F
+0x9480
+0x9481
+0x9482
+0x9483
+0x9577
+0x957A
+0x957B
+0x957C
+0x957D
+0x9580
+0x9582
+0x9583
+0x9586
+0x9588
+0x9589
+0x958B
+0x958C
+0x958D
+0x958E
+0x958F
+0x9590
+0x9591
+0x9592
+0x9593
+0x9594
+0x9598
+0x959B
+0x959C
+0x959E
+0x959F
+0x95A1
+0x95A3
+0x95A4
+0x95A5
+0x95A8
+0x95A9
+0x95AB
+0x95AC
+0x95AD
+0x95AE
+0x95B0
+0x95B1
+0x95B5
+0x95B6
+0x95B7
+0x95B9
+0x95BA
+0x95BB
+0x95BC
+0x95BD
+0x95BE
+0x95BF
+0x95C0
+0x95C3
+0x95C5
+0x95C6
+0x95C7
+0x95C8
+0x95C9
+0x95CA
+0x95CB
+0x95CC
+0x95CD
+0x95D0
+0x95D1
+0x95D2
+0x95D3
+0x95D4
+0x95D5
+0x95D6
+0x95DA
+0x95DB
+0x95DC
+0x95DE
+0x95DF
+0x95E0
+0x95E1
+0x95E2
+0x95E3
+0x95E4
+0x95E5
+0x961C
+0x961E
+0x9620
+0x9621
+0x9622
+0x9623
+0x9624
+0x9628
+0x962A
+0x962C
+0x962D
+0x962E
+0x962F
+0x9630
+0x9631
+0x9632
+0x9639
+0x963A
+0x963B
+0x963C
+0x963D
+0x963F
+0x9640
+0x9642
+0x9643
+0x9644
+0x964A
+0x964B
+0x964C
+0x964D
+0x964E
+0x964F
+0x9650
+0x9651
+0x9653
+0x9654
+0x9658
+0x965B
+0x965C
+0x965D
+0x965E
+0x965F
+0x9661
+0x9662
+0x9663
+0x9664
+0x966A
+0x966B
+0x966C
+0x966D
+0x966F
+0x9670
+0x9671
+0x9672
+0x9673
+0x9674
+0x9675
+0x9676
+0x9677
+0x9678
+0x967C
+0x967D
+0x967E
+0x9680
+0x9683
+0x9684
+0x9685
+0x9686
+0x9687
+0x9688
+0x9689
+0x968A
+0x968B
+0x968D
+0x968E
+0x9691
+0x9692
+0x9693
+0x9694
+0x9695
+0x9697
+0x9698
+0x9699
+0x969B
+0x969C
+0x969E
+0x96A1
+0x96A2
+0x96A4
+0x96A7
+0x96A8
+0x96A9
+0x96AA
+0x96AC
+0x96AE
+0x96B0
+0x96B1
+0x96B3
+0x96B4
+0x96B8
+0x96B9
+0x96BB
+0x96BC
+0x96BF
+0x96C0
+0x96C1
+0x96C2
+0x96C3
+0x96C4
+0x96C5
+0x96C6
+0x96C7
+0x96C8
+0x96C9
+0x96CA
+0x96CB
+0x96CC
+0x96CD
+0x96CE
+0x96D2
+0x96D3
+0x96D4
+0x96D5
+0x96D6
+0x96D7
+0x96D8
+0x96D9
+0x96DA
+0x96DB
+0x96DC
+0x96DD
+0x96DE
+0x96DF
+0x96E1
+0x96E2
+0x96E3
+0x96E5
+0x96E8
+0x96E9
+0x96EA
+0x96EF
+0x96F0
+0x96F1
+0x96F2
+0x96F5
+0x96F6
+0x96F7
+0x96F8
+0x96F9
+0x96FA
+0x96FB
+0x96FD
+0x96FF
+0x9700
+0x9702
+0x9704
+0x9705
+0x9706
+0x9707
+0x9708
+0x9709
+0x970B
+0x970D
+0x970E
+0x970F
+0x9710
+0x9711
+0x9712
+0x9713
+0x9716
+0x9718
+0x9719
+0x971C
+0x971D
+0x971E
+0x971F
+0x9720
+0x9722
+0x9723
+0x9724
+0x9725
+0x9726
+0x9727
+0x9728
+0x9729
+0x972A
+0x972B
+0x972C
+0x972E
+0x972F
+0x9730
+0x9732
+0x9735
+0x9738
+0x9739
+0x973A
+0x973D
+0x973E
+0x973F
+0x9742
+0x9743
+0x9744
+0x9746
+0x9747
+0x9748
+0x9749
+0x974B
+0x9752
+0x9756
+0x9758
+0x975A
+0x975B
+0x975C
+0x975E
+0x9760
+0x9761
+0x9762
+0x9766
+0x9768
+0x9769
+0x976A
+0x976C
+0x976E
+0x9770
+0x9772
+0x9773
+0x9774
+0x9776
+0x9777
+0x9778
+0x977A
+0x977B
+0x977C
+0x977D
+0x977E
+0x977F
+0x9780
+0x9781
+0x9782
+0x9783
+0x9784
+0x9785
+0x9788
+0x978A
+0x978B
+0x978D
+0x978E
+0x978F
+0x9794
+0x9797
+0x9798
+0x9799
+0x979A
+0x979C
+0x979D
+0x979E
+0x97A0
+0x97A1
+0x97A2
+0x97A3
+0x97A4
+0x97A5
+0x97A6
+0x97A8
+0x97AA
+0x97AB
+0x97AC
+0x97AD
+0x97AE
+0x97B3
+0x97B6
+0x97B7
+0x97B9
+0x97BB
+0x97BF
+0x97C1
+0x97C3
+0x97C4
+0x97C5
+0x97C6
+0x97C7
+0x97C9
+0x97CB
+0x97CC
+0x97CD
+0x97CE
+0x97CF
+0x97D0
+0x97D3
+0x97D4
+0x97D5
+0x97D6
+0x97D7
+0x97D8
+0x97D9
+0x97DC
+0x97DD
+0x97DE
+0x97DF
+0x97E1
+0x97E3
+0x97E5
+0x97ED
+0x97F0
+0x97F1
+0x97F3
+0x97F6
+0x97F8
+0x97F9
+0x97FA
+0x97FB
+0x97FD
+0x97FE
+0x97FF
+0x9800
+0x9801
+0x9802
+0x9803
+0x9804
+0x9805
+0x9806
+0x9807
+0x9808
+0x980A
+0x980C
+0x980D
+0x980E
+0x980F
+0x9810
+0x9811
+0x9812
+0x9813
+0x9816
+0x9817
+0x9818
+0x981B
+0x981C
+0x981D
+0x981E
+0x9820
+0x9821
+0x9824
+0x9826
+0x9827
+0x9828
+0x9829
+0x982B
+0x982D
+0x982F
+0x9830
+0x9832
+0x9835
+0x9837
+0x9838
+0x9839
+0x983B
+0x9841
+0x9843
+0x9844
+0x9845
+0x9846
+0x9848
+0x9849
+0x984A
+0x984C
+0x984D
+0x984E
+0x984F
+0x9850
+0x9851
+0x9852
+0x9853
+0x9857
+0x9858
+0x9859
+0x985B
+0x985C
+0x985D
+0x985E
+0x985F
+0x9860
+0x9862
+0x9863
+0x9864
+0x9865
+0x9867
+0x9869
+0x986A
+0x986B
+0x986F
+0x9870
+0x9871
+0x9872
+0x9873
+0x9874
+0x98A8
+0x98A9
+0x98AC
+0x98AD
+0x98AE
+0x98AF
+0x98B1
+0x98B2
+0x98B3
+0x98B6
+0x98B8
+0x98BA
+0x98BB
+0x98BC
+0x98BD
+0x98BE
+0x98BF
+0x98C0
+0x98C1
+0x98C2
+0x98C4
+0x98C6
+0x98C9
+0x98CB
+0x98CC
+0x98DB
+0x98DF
+0x98E2
+0x98E3
+0x98E5
+0x98E7
+0x98E9
+0x98EA
+0x98EB
+0x98ED
+0x98EF
+0x98F2
+0x98F4
+0x98F6
+0x98F9
+0x98FA
+0x98FC
+0x98FD
+0x98FE
+0x9900
+0x9902
+0x9903
+0x9905
+0x9907
+0x9908
+0x9909
+0x990A
+0x990C
+0x9910
+0x9911
+0x9912
+0x9913
+0x9914
+0x9915
+0x9916
+0x9917
+0x9918
+0x991A
+0x991B
+0x991E
+0x991F
+0x9921
+0x9924
+0x9925
+0x9927
+0x9928
+0x9929
+0x992A
+0x992B
+0x992C
+0x992D
+0x992E
+0x992F
+0x9930
+0x9931
+0x9932
+0x9933
+0x9935
+0x993A
+0x993C
+0x993D
+0x993E
+0x993F
+0x9941
+0x9943
+0x9945
+0x9947
+0x9948
+0x9949
+0x994B
+0x994C
+0x994E
+0x9950
+0x9951
+0x9952
+0x9953
+0x9954
+0x9955
+0x9956
+0x9957
+0x9958
+0x9959
+0x995B
+0x995C
+0x995E
+0x995F
+0x9961
+0x9996
+0x9997
+0x9998
+0x9999
+0x999C
+0x999D
+0x999E
+0x99A1
+0x99A3
+0x99A5
+0x99A6
+0x99A7
+0x99A8
+0x99AB
+0x99AC
+0x99AD
+0x99AE
+0x99AF
+0x99B0
+0x99B1
+0x99B2
+0x99B3
+0x99B4
+0x99B5
+0x99B9
+0x99BA
+0x99BB
+0x99BD
+0x99C1
+0x99C2
+0x99C3
+0x99C7
+0x99C9
+0x99CB
+0x99CC
+0x99CD
+0x99CE
+0x99CF
+0x99D0
+0x99D1
+0x99D2
+0x99D3
+0x99D4
+0x99D5
+0x99D6
+0x99D7
+0x99D8
+0x99D9
+0x99DB
+0x99DC
+0x99DD
+0x99DF
+0x99E2
+0x99E3
+0x99E4
+0x99E5
+0x99E7
+0x99E9
+0x99EA
+0x99EC
+0x99ED
+0x99EE
+0x99F0
+0x99F1
+0x99F4
+0x99F6
+0x99F7
+0x99F8
+0x99F9
+0x99FA
+0x99FB
+0x99FC
+0x99FD
+0x99FE
+0x99FF
+0x9A01
+0x9A02
+0x9A03
+0x9A04
+0x9A05
+0x9A06
+0x9A07
+0x9A09
+0x9A0A
+0x9A0B
+0x9A0D
+0x9A0E
+0x9A0F
+0x9A11
+0x9A14
+0x9A15
+0x9A16
+0x9A19
+0x9A1A
+0x9A1B
+0x9A1C
+0x9A1D
+0x9A1E
+0x9A20
+0x9A22
+0x9A23
+0x9A24
+0x9A25
+0x9A27
+0x9A29
+0x9A2A
+0x9A2B
+0x9A2C
+0x9A2D
+0x9A2E
+0x9A30
+0x9A31
+0x9A32
+0x9A34
+0x9A35
+0x9A36
+0x9A37
+0x9A38
+0x9A39
+0x9A3A
+0x9A3D
+0x9A3E
+0x9A3F
+0x9A40
+0x9A41
+0x9A42
+0x9A43
+0x9A44
+0x9A45
+0x9A46
+0x9A48
+0x9A49
+0x9A4A
+0x9A4C
+0x9A4D
+0x9A4E
+0x9A4F
+0x9A50
+0x9A52
+0x9A53
+0x9A54
+0x9A55
+0x9A56
+0x9A57
+0x9A59
+0x9A5A
+0x9A5B
+0x9A5E
+0x9A5F
+0x9A60
+0x9A62
+0x9A64
+0x9A65
+0x9A66
+0x9A67
+0x9A68
+0x9A69
+0x9A6A
+0x9A6B
+0x9AA8
+0x9AAB
+0x9AAD
+0x9AAF
+0x9AB0
+0x9AB1
+0x9AB3
+0x9AB4
+0x9AB7
+0x9AB8
+0x9AB9
+0x9ABB
+0x9ABC
+0x9ABE
+0x9ABF
+0x9AC0
+0x9AC1
+0x9AC2
+0x9AC6
+0x9AC7
+0x9ACA
+0x9ACD
+0x9ACF
+0x9AD0
+0x9AD1
+0x9AD2
+0x9AD3
+0x9AD4
+0x9AD5
+0x9AD6
+0x9AD8
+0x9ADC
+0x9ADF
+0x9AE1
+0x9AE3
+0x9AE6
+0x9AE7
+0x9AEB
+0x9AEC
+0x9AED
+0x9AEE
+0x9AEF
+0x9AF1
+0x9AF2
+0x9AF3
+0x9AF6
+0x9AF7
+0x9AF9
+0x9AFA
+0x9AFB
+0x9AFC
+0x9AFD
+0x9AFE
+0x9B01
+0x9B03
+0x9B04
+0x9B05
+0x9B06
+0x9B08
+0x9B0A
+0x9B0B
+0x9B0C
+0x9B0D
+0x9B0E
+0x9B10
+0x9B11
+0x9B12
+0x9B15
+0x9B16
+0x9B17
+0x9B18
+0x9B19
+0x9B1A
+0x9B1E
+0x9B1F
+0x9B20
+0x9B22
+0x9B23
+0x9B24
+0x9B25
+0x9B27
+0x9B28
+0x9B29
+0x9B2B
+0x9B2E
+0x9B2F
+0x9B31
+0x9B32
+0x9B33
+0x9B35
+0x9B37
+0x9B3A
+0x9B3B
+0x9B3C
+0x9B3E
+0x9B3F
+0x9B41
+0x9B42
+0x9B43
+0x9B44
+0x9B45
+0x9B46
+0x9B48
+0x9B4A
+0x9B4B
+0x9B4C
+0x9B4D
+0x9B4E
+0x9B4F
+0x9B51
+0x9B52
+0x9B54
+0x9B55
+0x9B56
+0x9B58
+0x9B59
+0x9B5A
+0x9B5B
+0x9B5F
+0x9B60
+0x9B61
+0x9B64
+0x9B66
+0x9B67
+0x9B68
+0x9B6C
+0x9B6F
+0x9B70
+0x9B71
+0x9B74
+0x9B75
+0x9B76
+0x9B77
+0x9B7A
+0x9B7B
+0x9B7C
+0x9B7D
+0x9B7E
+0x9B80
+0x9B82
+0x9B85
+0x9B86
+0x9B87
+0x9B88
+0x9B90
+0x9B91
+0x9B92
+0x9B93
+0x9B95
+0x9B9A
+0x9B9B
+0x9B9E
+0x9BA0
+0x9BA1
+0x9BA2
+0x9BA4
+0x9BA5
+0x9BA6
+0x9BA8
+0x9BAA
+0x9BAB
+0x9BAD
+0x9BAE
+0x9BAF
+0x9BB5
+0x9BB6
+0x9BB8
+0x9BB9
+0x9BBD
+0x9BBF
+0x9BC0
+0x9BC1
+0x9BC3
+0x9BC4
+0x9BC6
+0x9BC7
+0x9BC8
+0x9BC9
+0x9BCA
+0x9BD3
+0x9BD4
+0x9BD5
+0x9BD6
+0x9BD7
+0x9BD9
+0x9BDA
+0x9BDB
+0x9BDC
+0x9BDE
+0x9BE0
+0x9BE1
+0x9BE2
+0x9BE4
+0x9BE5
+0x9BE6
+0x9BE7
+0x9BE8
+0x9BEA
+0x9BEB
+0x9BEC
+0x9BF0
+0x9BF7
+0x9BF8
+0x9BFD
+0x9C05
+0x9C06
+0x9C07
+0x9C08
+0x9C09
+0x9C0B
+0x9C0D
+0x9C0E
+0x9C12
+0x9C13
+0x9C14
+0x9C17
+0x9C1C
+0x9C1D
+0x9C21
+0x9C23
+0x9C24
+0x9C25
+0x9C28
+0x9C29
+0x9C2B
+0x9C2C
+0x9C2D
+0x9C31
+0x9C32
+0x9C33
+0x9C34
+0x9C36
+0x9C37
+0x9C39
+0x9C3B
+0x9C3C
+0x9C3D
+0x9C3E
+0x9C3F
+0x9C40
+0x9C41
+0x9C44
+0x9C46
+0x9C48
+0x9C49
+0x9C4A
+0x9C4B
+0x9C4C
+0x9C4D
+0x9C4E
+0x9C50
+0x9C52
+0x9C54
+0x9C55
+0x9C56
+0x9C57
+0x9C58
+0x9C59
+0x9C5E
+0x9C5F
+0x9C60
+0x9C62
+0x9C63
+0x9C66
+0x9C67
+0x9C68
+0x9C6D
+0x9C6E
+0x9C71
+0x9C73
+0x9C74
+0x9C75
+0x9C77
+0x9C78
+0x9C79
+0x9C7A
+0x9CE5
+0x9CE6
+0x9CE7
+0x9CE9
+0x9CEA
+0x9CED
+0x9CF1
+0x9CF2
+0x9CF3
+0x9CF4
+0x9CF5
+0x9CF6
+0x9CF7
+0x9CF9
+0x9CFA
+0x9CFB
+0x9CFC
+0x9CFD
+0x9CFF
+0x9D00
+0x9D03
+0x9D04
+0x9D05
+0x9D06
+0x9D07
+0x9D08
+0x9D09
+0x9D10
+0x9D12
+0x9D14
+0x9D15
+0x9D17
+0x9D18
+0x9D19
+0x9D1B
+0x9D1D
+0x9D1E
+0x9D1F
+0x9D20
+0x9D22
+0x9D23
+0x9D25
+0x9D26
+0x9D28
+0x9D29
+0x9D2D
+0x9D2E
+0x9D2F
+0x9D30
+0x9D31
+0x9D33
+0x9D36
+0x9D37
+0x9D38
+0x9D3B
+0x9D3D
+0x9D3E
+0x9D3F
+0x9D40
+0x9D41
+0x9D42
+0x9D43
+0x9D45
+0x9D4A
+0x9D4B
+0x9D4C
+0x9D4F
+0x9D51
+0x9D52
+0x9D53
+0x9D54
+0x9D56
+0x9D57
+0x9D58
+0x9D59
+0x9D5A
+0x9D5B
+0x9D5C
+0x9D5D
+0x9D5F
+0x9D60
+0x9D61
+0x9D67
+0x9D68
+0x9D69
+0x9D6A
+0x9D6B
+0x9D6C
+0x9D6F
+0x9D70
+0x9D71
+0x9D72
+0x9D73
+0x9D74
+0x9D75
+0x9D77
+0x9D78
+0x9D79
+0x9D7B
+0x9D7D
+0x9D7F
+0x9D80
+0x9D81
+0x9D82
+0x9D84
+0x9D85
+0x9D86
+0x9D87
+0x9D88
+0x9D89
+0x9D8A
+0x9D8B
+0x9D8C
+0x9D90
+0x9D92
+0x9D94
+0x9D96
+0x9D97
+0x9D98
+0x9D99
+0x9D9A
+0x9D9B
+0x9D9C
+0x9D9D
+0x9D9E
+0x9D9F
+0x9DA0
+0x9DA1
+0x9DA2
+0x9DA3
+0x9DA4
+0x9DA6
+0x9DA7
+0x9DA8
+0x9DA9
+0x9DAA
+0x9DAC
+0x9DAD
+0x9DAF
+0x9DB1
+0x9DB2
+0x9DB3
+0x9DB4
+0x9DB5
+0x9DB6
+0x9DB7
+0x9DB8
+0x9DB9
+0x9DBA
+0x9DBB
+0x9DBC
+0x9DBE
+0x9DBF
+0x9DC1
+0x9DC2
+0x9DC3
+0x9DC5
+0x9DC7
+0x9DC8
+0x9DCA
+0x9DCB
+0x9DCC
+0x9DCD
+0x9DCE
+0x9DCF
+0x9DD0
+0x9DD1
+0x9DD2
+0x9DD3
+0x9DD5
+0x9DD6
+0x9DD7
+0x9DD8
+0x9DD9
+0x9DDA
+0x9DDB
+0x9DDC
+0x9DDD
+0x9DDE
+0x9DDF
+0x9DE1
+0x9DE2
+0x9DE3
+0x9DE4
+0x9DE5
+0x9DE6
+0x9DE8
+0x9DE9
+0x9DEB
+0x9DEC
+0x9DED
+0x9DEE
+0x9DEF
+0x9DF0
+0x9DF2
+0x9DF3
+0x9DF4
+0x9DF5
+0x9DF6
+0x9DF7
+0x9DF8
+0x9DF9
+0x9DFA
+0x9DFB
+0x9DFD
+0x9DFE
+0x9DFF
+0x9E00
+0x9E01
+0x9E02
+0x9E03
+0x9E04
+0x9E05
+0x9E06
+0x9E07
+0x9E09
+0x9E0B
+0x9E0D
+0x9E0F
+0x9E10
+0x9E11
+0x9E12
+0x9E13
+0x9E14
+0x9E15
+0x9E17
+0x9E19
+0x9E1A
+0x9E1B
+0x9E1D
+0x9E1E
+0x9E75
+0x9E79
+0x9E7A
+0x9E7C
+0x9E7D
+0x9E7F
+0x9E80
+0x9E82
+0x9E83
+0x9E86
+0x9E87
+0x9E88
+0x9E89
+0x9E8A
+0x9E8B
+0x9E8C
+0x9E8D
+0x9E8E
+0x9E91
+0x9E92
+0x9E93
+0x9E94
+0x9E97
+0x9E99
+0x9E9A
+0x9E9B
+0x9E9C
+0x9E9D
+0x9E9F
+0x9EA0
+0x9EA1
+0x9EA4
+0x9EA5
+0x9EA7
+0x9EA9
+0x9EAD
+0x9EAE
+0x9EB0
+0x9EB4
+0x9EB5
+0x9EB6
+0x9EB7
+0x9EBB
+0x9EBC
+0x9EBE
+0x9EC0
+0x9EC2
+0x9EC3
+0x9EC8
+0x9ECC
+0x9ECD
+0x9ECE
+0x9ECF
+0x9ED0
+0x9ED1
+0x9ED3
+0x9ED4
+0x9ED5
+0x9ED6
+0x9ED8
+0x9EDA
+0x9EDB
+0x9EDC
+0x9EDD
+0x9EDE
+0x9EDF
+0x9EE0
+0x9EE4
+0x9EE5
+0x9EE6
+0x9EE7
+0x9EE8
+0x9EEB
+0x9EED
+0x9EEE
+0x9EEF
+0x9EF0
+0x9EF2
+0x9EF3
+0x9EF4
+0x9EF5
+0x9EF6
+0x9EF7
+0x9EF9
+0x9EFA
+0x9EFB
+0x9EFC
+0x9EFD
+0x9EFF
+0x9F00
+0x9F01
+0x9F06
+0x9F07
+0x9F09
+0x9F0A
+0x9F0E
+0x9F0F
+0x9F10
+0x9F12
+0x9F13
+0x9F15
+0x9F16
+0x9F18
+0x9F19
+0x9F1A
+0x9F1B
+0x9F1C
+0x9F1E
+0x9F20
+0x9F22
+0x9F23
+0x9F24
+0x9F25
+0x9F28
+0x9F29
+0x9F2A
+0x9F2B
+0x9F2C
+0x9F2D
+0x9F2E
+0x9F2F
+0x9F30
+0x9F31
+0x9F32
+0x9F33
+0x9F34
+0x9F35
+0x9F36
+0x9F37
+0x9F38
+0x9F3B
+0x9F3D
+0x9F3E
+0x9F40
+0x9F41
+0x9F42
+0x9F43
+0x9F46
+0x9F47
+0x9F48
+0x9F49
+0x9F4A
+0x9F4B
+0x9F4C
+0x9F4D
+0x9F4E
+0x9F4F
+0x9F52
+0x9F54
+0x9F55
+0x9F56
+0x9F57
+0x9F58
+0x9F59
+0x9F5B
+0x9F5C
+0x9F5D
+0x9F5E
+0x9F5F
+0x9F60
+0x9F61
+0x9F63
+0x9F64
+0x9F65
+0x9F66
+0x9F67
+0x9F6A
+0x9F6B
+0x9F6C
+0x9F6E
+0x9F6F
+0x9F70
+0x9F71
+0x9F72
+0x9F74
+0x9F75
+0x9F76
+0x9F77
+0x9F78
+0x9F79
+0x9F7A
+0x9F7B
+0x9F7E
+0x9F8D
+0x9F90
+0x9F91
+0x9F92
+0x9F94
+0x9F95
+0x9F98
+0x9F9C
+0x9FA0
+0x9FA2
+0x9FA4
+0xFA0C
+0xFA0D
diff --git a/chromium/third_party/fontconfig/src/fc-lang/zu.orth b/chromium/third_party/fontconfig/src/fc-lang/zu.orth
new file mode 100644
index 00000000000..4aff79440cc
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-lang/zu.orth
@@ -0,0 +1,29 @@
+#
+# fontconfig/fc-lang/zu.orth
+#
+# Copyright © 2002 Keith Packard
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Zulu (zu)
+#
+# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
+#
+0041-005a
+0061-007a
diff --git a/chromium/third_party/fontconfig/src/fc-list/Makefile.am b/chromium/third_party/fontconfig/src/fc-list/Makefile.am
new file mode 100644
index 00000000000..c58540ec6a8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-list/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_list_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-list/fc-list.c b/chromium/third_party/fontconfig/src/fc-list/fc-list.c
new file mode 100644
index 00000000000..f6c7282e97d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-list/fc-list.c
@@ -0,0 +1,200 @@
+/*
+ * fontconfig/fc-list/fc-list.c
+ *
+ * Copyright © 2002 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+const struct option longopts[] = {
+ {"verbose", 0, 0, 'v'},
+ {"format", 1, 0, 'f'},
+ {"quiet", 0, 0, 'q'},
+ {"version", 0, 0, 'V'},
+ {"help", 0, 0, 'h'},
+ {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void
+usage (char *program, int error)
+{
+ FILE *file = error ? stderr : stdout;
+#if HAVE_GETOPT_LONG
+ fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n",
+ program);
+#else
+ fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n",
+ program);
+#endif
+ fprintf (file, "List fonts matching [pattern]\n");
+ fprintf (file, "\n");
+#if HAVE_GETOPT_LONG
+ fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
+ fprintf (file, " -f, --format=FORMAT use the given output format\n");
+ fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n");
+ fprintf (file, " -V, --version display font config version and exit\n");
+ fprintf (file, " -h, --help display this help and exit\n");
+#else
+ fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
+ fprintf (file, " -f FORMAT (format) use the given output format\n");
+ fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n");
+ fprintf (file, " -V (version) display font config version and exit\n");
+ fprintf (file, " -h (help) display this help and exit\n");
+#endif
+ exit (error);
+}
+
+int
+main (int argc, char **argv)
+{
+ int verbose = 0;
+ int quiet = 0;
+ const 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 (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ if (!pat)
+ {
+ fputs ("Unable to parse the pattern\n", stderr);
+ return 1;
+ }
+ while (argv[++i])
+ {
+ if (!os)
+ os = FcObjectSetCreate ();
+ FcObjectSetAdd (os, argv[i]);
+ }
+ }
+ else
+ pat = FcPatternCreate ();
+ if (quiet && !os)
+ os = FcObjectSetCreate ();
+ if (!verbose && !format && !os)
+ os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0);
+ if (!format)
+ format = (const FcChar8 *) "%{=fclist}\n";
+ fs = FcFontList (0, pat, os);
+ if (os)
+ FcObjectSetDestroy (os);
+ if (pat)
+ FcPatternDestroy (pat);
+
+ if (!quiet && fs)
+ {
+ int j;
+
+ for (j = 0; j < fs->nfont; j++)
+ {
+ if (verbose)
+ {
+ FcPatternPrint (fs->fonts[j]);
+ }
+ else
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (fs->fonts[j], format);
+ if (s)
+ {
+ printf ("%s", s);
+ FcStrFree (s);
+ }
+ }
+ }
+ }
+
+ if (fs) {
+ nfont = fs->nfont;
+ FcFontSetDestroy (fs);
+ }
+
+ FcFini ();
+
+ return quiet ? (nfont == 0 ? 1 : 0) : 0;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-list/fc-list.sgml b/chromium/third_party/fontconfig/src/fc-list/fc-list.sgml
new file mode 100644
index 00000000000..0eb704de4a2
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-list/fc-list.sgml
@@ -0,0 +1,227 @@
+<!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>
+ <group>
+ <arg><option>-q</option></arg>
+ <arg><option>--quiet</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>-q</option>
+ <option>--quiet</option>
+ </term>
+ <listitem>
+ <para>Suppress all normal output. returns 1 as the error code if no fonts matched.</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/chromium/third_party/fontconfig/src/fc-match/Makefile.am b/chromium/third_party/fontconfig/src/fc-match/Makefile.am
new file mode 100644
index 00000000000..84afb8b26c6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-match/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_match_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-match/fc-match.c b/chromium/third_party/fontconfig/src/fc-match/fc-match.c
new file mode 100644
index 00000000000..f96c0094951
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-match/fc-match.c
@@ -0,0 +1,248 @@
+/*
+ * 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;
+ const 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 (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ if (!pat)
+ {
+ fputs ("Unable to parse the pattern\n", stderr);
+ return 1;
+ }
+ 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);
+
+ if (!font_patterns || font_patterns->nfont == 0)
+ {
+ fputs("No fonts installed on the system\n", stderr);
+ return 1;
+ }
+ for (j = 0; j < font_patterns->nfont; j++)
+ {
+ FcPattern *font_pattern;
+
+ font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]);
+ if (font_pattern)
+ FcFontSetAdd (fs, font_pattern);
+ }
+
+ FcFontSetSortDestroy (font_patterns);
+ }
+ else
+ {
+ FcPattern *match;
+ match = FcFontMatch (0, pat, &result);
+ if (match)
+ FcFontSetAdd (fs, match);
+ }
+ FcPatternDestroy (pat);
+
+ if (!format)
+ {
+ if (os)
+ format = (const FcChar8 *) "%{=unparse}\n";
+ else
+ format = (const FcChar8 *) "%{=fcmatch}\n";
+ }
+
+ if (fs)
+ {
+ int j;
+
+ for (j = 0; j < fs->nfont; j++)
+ {
+ FcPattern *font;
+
+ font = FcPatternFilter (fs->fonts[j], os);
+
+ if (verbose)
+ {
+ FcPatternPrint (font);
+ }
+ else
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (font, format);
+ if (s)
+ {
+ printf ("%s", s);
+ FcStrFree (s);
+ }
+ }
+
+ FcPatternDestroy (font);
+ }
+ FcFontSetDestroy (fs);
+ }
+
+ if (os)
+ FcObjectSetDestroy (os);
+
+ FcFini ();
+
+ return 0;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-match/fc-match.sgml b/chromium/third_party/fontconfig/src/fc-match/fc-match.sgml
new file mode 100644
index 00000000000..f66a021c071
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-match/fc-match.sgml
@@ -0,0 +1,217 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
+ <!ENTITY dhsurname "<surname>Lam</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>plam@csail.mit.edu</email>">
+ <!ENTITY dhusername "Patrick Lam">
+ <!ENTITY dhucpackage "<refentrytitle>fc-match</refentrytitle>">
+ <!ENTITY dhpackage "fc-match">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>match available fonts</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-asvVh</option></arg>
+ <arg><option>--all</option></arg>
+ <arg><option>--sort</option></arg>
+ <arg><option>--verbose</option></arg>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <sbr>
+ <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> matches
+ <replaceable>pattern</replaceable> (empty
+pattern by default) using the normal fontconfig matching rules to find
+the best font available. If <option>--sort</option> is given, the sorted list of best
+matching fonts is displayed.
+The <option>--all</option> option works like
+<option>--sort</option> except that no pruning is done on the list of fonts.</para>
+<para>If any elements are specified, only those are printed.
+Otherwise short file name, family, and style are printed, unless verbose
+output is requested.</para>
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-a</option>
+ <option>--all</option>
+ </term>
+ <listitem>
+ <para>Displays sorted list of best matching fonts, but do not do any
+ pruning on the list.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>
+ <option>--sort</option>
+ </term>
+ <listitem>
+ <para>Displays sorted list of best matching fonts.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Print verbose output of the whole font pattern for each match,
+ or <replaceable>element</replaceable>s if any is
+ provided.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>pattern</replaceable></option>
+ </term>
+ <listitem>
+ <para>Displays fonts matching
+ <replaceable>pattern</replaceable> (uses empty pattern by default).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>element</replaceable></option>
+ </term>
+ <listitem>
+ <para>If set, the <replaceable>element</replaceable> property
+ is displayed for matching fonts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-list</command>(1)
+ <function>FcFontMatch</function>(3)
+ <function>FcFontSort</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-pattern</command>(1)
+ <command>fc-query</command>(1)
+ <command>fc-scan</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/chromium/third_party/fontconfig/src/fc-pattern/Makefile.am b/chromium/third_party/fontconfig/src/fc-pattern/Makefile.am
new file mode 100644
index 00000000000..c4562479903
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-pattern/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_pattern_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.c b/chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.c
new file mode 100644
index 00000000000..d2279cb3383
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/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 (argv[i])
+ {
+ pat = FcNameParse ((FcChar8 *) argv[i]);
+ if (!pat)
+ {
+ fputs ("Unable to parse the pattern\n", stderr);
+ return 1;
+ }
+ 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);
+ FcStrFree (s);
+ }
+ }
+ else
+ {
+ FcPatternPrint (pat);
+ }
+
+ FcPatternDestroy (pat);
+
+ if (os)
+ FcObjectSetDestroy (os);
+
+ FcFini ();
+
+ return 0;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.sgml b/chromium/third_party/fontconfig/src/fc-pattern/fc-pattern.sgml
new file mode 100644
index 00000000000..928afd8d2c1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/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/chromium/third_party/fontconfig/src/fc-query/Makefile.am b/chromium/third_party/fontconfig/src/fc-query/Makefile.am
new file mode 100644
index 00000000000..73b3f11eea9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-query/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_query_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-query/fc-query.c b/chromium/third_party/fontconfig/src/fc-query/fc-query.c
new file mode 100644
index 00000000000..2983e0f199b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-query/fc-query.c
@@ -0,0 +1,182 @@
+/*
+ * 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;
+#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);
+
+ for (; i < argc; i++)
+ {
+ int index;
+ int count = 0;
+
+ index = set_index;
+
+ do {
+ FcPattern *pat;
+
+ pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, NULL, &count);
+ if (pat)
+ {
+ if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (pat, format);
+ if (s)
+ {
+ printf ("%s", s);
+ FcStrFree (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/chromium/third_party/fontconfig/src/fc-query/fc-query.sgml b/chromium/third_party/fontconfig/src/fc-query/fc-query.sgml
new file mode 100644
index 00000000000..5351d1e4d70
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-query/fc-query.sgml
@@ -0,0 +1,192 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
+ <!ENTITY dhsurname "<surname>Esfahbod</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Aug 13, 2008</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>behdad@behdad.org</email>">
+ <!ENTITY dhusername "Behdad Esfahbod">
+ <!ENTITY dhucpackage "<refentrytitle>fc-query</refentrytitle>">
+ <!ENTITY dhpackage "fc-query">
+
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2008</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>query font files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-Vh</option></arg>
+ <sbr>
+ <group>
+ <arg><option>-i</option> <option><replaceable>index</replaceable></option></arg>
+ <arg><option>--index</option> <option><replaceable>index</replaceable></option></arg>
+ </group>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg choice="req" rep="repeat"><option><replaceable>font-file</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> queries
+ <replaceable>font-file</replaceable>(s) using the normal fontconfig
+ rules and prints out font pattern for each face found.
+ If <option>--index</option> is given, only one face of each file is
+ queried, otherwise all faces are queried.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-i</option>
+ <option>--index</option>
+ <option><replaceable>index</replaceable></option>
+ </term>
+ <listitem>
+ <para>Only query face indexed <replaceable>index</replaceable> of
+ each file.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>font-file</replaceable></option>
+ </term>
+ <listitem>
+ <para>Query <replaceable>font-file</replaceable> for font faces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>RETURN CODES</title>
+ <para><command>fc-query</command> returns error code 0 for successful parsing,
+ or 1 if any errors occured or if at least one font face could not be opened.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-scan</command>(1)
+ <function>FcFreeTypeQuery</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/chromium/third_party/fontconfig/src/fc-scan/Makefile.am b/chromium/third_party/fontconfig/src/fc-scan/Makefile.am
new file mode 100644
index 00000000000..471a42fb6a8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-scan/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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
+
+AM_CPPFLAGS=-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)
+
+CLEANFILES =
+
+fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += ${man_MANS}
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-scan/fc-scan.c b/chromium/third_party/fontconfig/src/fc-scan/fc-scan.c
new file mode 100644
index 00000000000..5638b51cf43
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-scan/fc-scan.c
@@ -0,0 +1,178 @@
+/*
+ * 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);
+
+ 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);
+ FcStrFree (s);
+ }
+ }
+ else
+ {
+ FcPatternPrint (pat);
+ }
+ }
+
+ FcFontSetDestroy (fs);
+
+ FcFini ();
+ return i > 0 ? 0 : 1;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-scan/fc-scan.sgml b/chromium/third_party/fontconfig/src/fc-scan/fc-scan.sgml
new file mode 100644
index 00000000000..9af403c1fde
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-scan/fc-scan.sgml
@@ -0,0 +1,177 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > manpage.1'. You may view
+ the manual page with: `docbook-to-man manpage.sgml | nroff -man |
+ less'. A typical entry in a Makefile or Makefile.am is:
+
+manpage.1: manpage.sgml
+ docbook-to-man $< > $@
+
+
+ The docbook-to-man binary is found in the docbook-to-man package.
+ Please remember that if you create the nroff version in one of the
+ debian/rules file targets (such as build), you will need to include
+ docbook-to-man in your Build-Depends control field.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
+ <!ENTITY dhsurname "<surname>Esfahbod</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Jan 15, 2009</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>behdad@behdad.org</email>">
+ <!ENTITY dhusername "Behdad Esfahbod">
+ <!ENTITY dhucpackage "<refentrytitle>fc-scan</refentrytitle>">
+ <!ENTITY dhpackage "fc-scan">
+
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2008</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>scan font files or directories</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-Vh</option></arg>
+ <sbr>
+ <group>
+ <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
+ <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
+ </group>
+ <arg><option>--version</option></arg>
+ <arg><option>--help</option></arg>
+ <arg choice="req" rep="repeat"><option><replaceable>file</replaceable></option></arg>
+
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para><command>&dhpackage;</command> scans
+ <replaceable>file</replaceable>(s) recursively
+ and prints out font pattern for each face found.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>This program follows the usual &gnu; command line syntax,
+ with long options starting with two dashes (`-'). A summary of
+ options is included below.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-f</option>
+ <option>--format</option>
+ <option><replaceable>format</replaceable></option>
+ </term>
+ <listitem>
+ <para>Format output according to the format specifier
+ <replaceable>format</replaceable>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-V</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of the program and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option><replaceable>file</replaceable></option>
+ </term>
+ <listitem>
+ <para>Scan <replaceable>file</replaceable> recursively for font faces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>RETURN CODES</title>
+ <para><command>fc-scan</command> returns error code 0 if at least one font
+ was found or 1 otherwise.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <command>fc-query</command>(1)
+ <function>FcFileScan</function>(3)
+ <function>FcDirScan</function>(3)
+ <function>FcPatternFormat</function>(3)
+ <command>fc-cat</command>(1)
+ <command>fc-cache</command>(1)
+ <command>fc-list</command>(1)
+ <command>fc-match</command>(1)
+ <command>fc-pattern</command>(1)
+ </para>
+
+ <para>The fontconfig user's guide, in HTML format:
+ <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
+
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>This manual page was updated by &dhusername; &dhemail;.</para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/chromium/third_party/fontconfig/src/fc-validate/Makefile.am b/chromium/third_party/fontconfig/src/fc-validate/Makefile.am
new file mode 100644
index 00000000000..782ceadb81f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-validate/Makefile.am
@@ -0,0 +1,60 @@
+#
+# 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-validate
+
+DOC2MAN = docbook2man
+
+FC_VALIDATE_SRC=${top_srcdir}/fc-validate
+
+SGML = ${FC_VALIDATE_SRC}/fc-validate.sgml
+
+AM_CPPFLAGS=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
+
+BUILT_MANS=fc-validate.1
+
+if ENABLE_DOCS
+man_MANS=${BUILT_MANS}
+endif
+
+EXTRA_DIST=fc-validate.sgml $(BUILT_MANS)
+
+CLEANFILES =
+
+fc_validate_LDADD = ${top_builddir}/src/libfontconfig.la $(FREETYPE_LIBS)
+
+if USEDOCBOOK
+
+${man_MANS}: ${SGML}
+ $(AM_V_GEN) $(RM) $@; \
+ $(DOC2MAN) ${SGML}; \
+ $(RM) manpage.*
+
+all-local: $(man_MANS)
+
+CLEANFILES += $(man_MANS)
+else
+all-local:
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fc-validate/fc-validate.c b/chromium/third_party/fontconfig/src/fc-validate/fc-validate.c
new file mode 100644
index 00000000000..6ecff36711e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-validate/fc-validate.c
@@ -0,0 +1,242 @@
+/*
+ * fontconfig/fc-validate/fc-validate.c
+ *
+ * Copyright © 2003 Keith Packard
+ * Copyright © 2012 Red Hat, Inc.
+ * Red Hat Author(s): Akira TAGOH
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER 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>
+#include <locale.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'},
+ {"lang", 1, 0, 'l'},
+ {"verbose", 0, 0, 'v'},
+ {"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 [-Vhv] [-i index] [-l LANG] [--index index] [--lang LANG] [--verbose] [--version] [--help] font-file...\n",
+ program);
+#else
+ fprintf (file, "usage: %s [-Vhv] [-i index] [-l LANG] font-file...\n",
+ program);
+#endif
+ fprintf (file, "Validate font files and print result\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, " -l, --lang=LANG set LANG instead of current locale\n");
+ fprintf (file, " -v, --verbose show more detailed information\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, " -l LANG (lang) set LANG instead of current locale\n");
+ fprintf (file, " -v (verbose) show more detailed information\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 *lang = NULL;
+ const FcCharSet *fcs_lang = NULL;
+ int err = 0;
+ int i;
+ FT_Library ftlib;
+ FcBool verbose = FcFalse;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+ int c;
+
+ setlocale (LC_ALL, "");
+
+#if HAVE_GETOPT_LONG
+ while ((c = getopt_long (argc, argv, "i:l:mVhv", longopts, NULL)) != -1)
+#else
+ while ((c = getopt (argc, argv, "i:l:mVhv")) != -1)
+#endif
+ {
+ switch (c) {
+ case 'i':
+ index_set = 1;
+ set_index = atoi (optarg);
+ break;
+ case 'l':
+ lang = (FcChar8 *) FcLangNormalize ((const FcChar8 *) optarg);
+ break;
+ case 'v':
+ verbose = FcTrue;
+ 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;
+ verbose = FcTrue;
+#endif
+
+ if (i == argc)
+ usage (argv[0], 1);
+
+ if (!lang)
+ lang = FcLangNormalize ((const FcChar8 *) setlocale (LC_CTYPE, NULL));
+
+ if (lang)
+ fcs_lang = FcLangGetCharSet (lang);
+
+ if (FT_Init_FreeType (&ftlib))
+ {
+ fprintf (stderr, "Can't initalize FreeType library\n");
+ return 1;
+ }
+
+ for (; i < argc; i++)
+ {
+ int index;
+
+ index = set_index;
+
+ do {
+ FT_Face face;
+ FcCharSet *fcs, *fcs_sub;
+
+ if (FT_New_Face (ftlib, argv[i], index, &face))
+ {
+ if (!index_set && index > 0)
+ break;
+ fprintf (stderr, "Unable to open %s\n", argv[i]);
+ err = 1;
+ }
+ else
+ {
+ FcChar32 count;
+
+ fcs = FcFreeTypeCharSet (face, NULL);
+ fcs_sub = FcCharSetSubtract (fcs_lang, fcs);
+
+ count = FcCharSetCount (fcs_sub);
+ if (count > 0)
+ {
+ FcChar32 ucs4, pos, map[FC_CHARSET_MAP_SIZE];
+
+ printf ("%s:%d Missing %d glyph(s) to satisfy the coverage for %s language\n",
+ argv[i], index, count, lang);
+
+ if (verbose)
+ {
+ for (ucs4 = FcCharSetFirstPage (fcs_sub, map, &pos);
+ ucs4 != FC_CHARSET_DONE;
+ ucs4 = FcCharSetNextPage (fcs_sub, map, &pos))
+ {
+ int j;
+
+ for (j = 0; j < FC_CHARSET_MAP_SIZE; j++)
+ {
+ FcChar32 bits = map[j];
+ FcChar32 base = ucs4 + j * 32;
+ int b = 0;
+
+ while (bits)
+ {
+ if (bits & 1)
+ printf (" 0x%04x\n", base + b);
+ bits >>= 1;
+ b++;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ printf ("%s:%d Satisfy the coverage for %s language\n", argv[i], index, lang);
+ }
+
+ FcCharSetDestroy (fcs);
+ FcCharSetDestroy (fcs_sub);
+
+ FT_Done_Face (face);
+ }
+
+ index++;
+ } while (index_set == 0);
+ }
+
+ FT_Done_FreeType (ftlib);
+
+ if (lang)
+ FcStrFree (lang);
+
+ FcFini ();
+ return err;
+}
diff --git a/chromium/third_party/fontconfig/src/fc-validate/fc-validate.sgml b/chromium/third_party/fontconfig/src/fc-validate/fc-validate.sgml
new file mode 100644
index 00000000000..c677ef2922c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fc-validate/fc-validate.sgml
@@ -0,0 +1,182 @@
+<!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>Akira</firstname>">
+ <!ENTITY dhsurname "<surname>TAGOH</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Sep 10, 2012</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>akira@tagoh.org</email>">
+ <!ENTITY dhusername "Akira TAGOH">
+ <!ENTITY dhucpackage "<refentrytitle>fc-validate</refentrytitle>">
+ <!ENTITY dhpackage "fc-validate">
+
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2012</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>validate font files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-Vhv</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>-l</option> <option><replaceable>lang</replaceable></option></arg>
+ <arg><option>--lang</option> <option><replaceable>lang</replaceable></option></arg>
+ </group>
+ <arg><option>--verbose</option></arg>
+ <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> validates
+ <replaceable>font-file</replaceable>(s) if each fonts satisfies
+ the language coverage according to the orthography files in fontconfig.
+ If <option>--index</option> is given, only one face of each file is
+ validated, otherwise all faces are validated.</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>-l</option>
+ <option>--lang</option>
+ <option><replaceable>lang</replaceable></option>
+ </term>
+ <listitem>
+ <para>Set <replaceable>lang</replaceable> as a language instead of current locale. this is used for <option>-m</option>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--verbose</option>
+ </term>
+ <listitem>
+ <para>Show more detailed information.</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-validate</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>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/chromium/third_party/fontconfig/src/fontconfig-zip.in b/chromium/third_party/fontconfig/src/fontconfig-zip.in
new file mode 100755
index 00000000000..1ca222cfbbd
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig-zip.in
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# Build distribution zipfiles for fontconfig on Win32. (This script
+# obviously needs to be run in Cygwin or similar.) Separate runtime
+# and developer zipfiles.
+
+ZIP=/tmp/fontconfig-@VERSION@.zip
+DEVZIP=/tmp/fontconfig-dev-@VERSION@.zip
+
+cd @prefix@
+rm -f $ZIP
+zip $ZIP -@ <<EOF
+bin/libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll
+etc/fonts/fonts.conf
+EOF
+
+rm -f $DEVZIP
+zip -r -D $DEVZIP -@ <<EOF
+etc/fonts/fonts.dtd
+include/fontconfig
+lib/libfontconfig.dll.a
+lib/fontconfig.lib
+lib/fontconfig.def
+lib/pkgconfig/fontconfig.pc
+bin/fc-list.exe
+bin/fc-cache.exe
+share/man
+share/doc/fontconfig
+EOF
diff --git a/chromium/third_party/fontconfig/src/fontconfig.pc.in b/chromium/third_party/fontconfig/src/fontconfig.pc.in
new file mode 100644
index 00000000000..6e112bb496e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig.pc.in
@@ -0,0 +1,18 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+sysconfdir=@sysconfdir@
+localstatedir=@localstatedir@
+PACKAGE=@PACKAGE@
+confdir=@baseconfigdir@
+cachedir=@fc_cachedir@
+
+Name: Fontconfig
+Description: Font configuration and customization library
+Version: @VERSION@
+Requires: @PKGCONFIG_REQUIRES@
+Requires.private: @PKGCONFIG_REQUIRES_PRIVATELY@
+Libs: -L${libdir} -lfontconfig
+Libs.private: @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@ @LIBXML2_LIBS@
+Cflags: -I${includedir} @EXPAT_CFLAGS@ @FREETYPE_CFLAGS@ @ICONV_CFLAGS@ @LIBXML2_CFLAGS@
diff --git a/chromium/third_party/fontconfig/src/fontconfig.spec.in b/chromium/third_party/fontconfig/src/fontconfig.spec.in
new file mode 100644
index 00000000000..90373527c8f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig.spec.in
@@ -0,0 +1,138 @@
+# Some distributions name their Freetype 2 package "freetype", while others
+# name it "freetype2". You can define the name your distribution uses here.
+%define freetype2 freetype
+
+Summary: Font configuration and customization library
+Name: fontconfig
+Version: @VERSION@
+Release: 1
+License: MIT
+Group: System Environment/Libraries
+Source: http://fontconfig.org/release/fontconfig-%{version}.tar.gz
+URL: http://fontconfig.org
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+
+BuildRequires: %{_bindir}/docbook2html
+BuildRequires: %{_bindir}/docbook2txt
+BuildRequires: %{freetype2}-devel
+BuildRequires: expat-devel
+BuildRequires: perl
+
+PreReq: %{freetype2}
+
+%description
+Fontconfig is designed to locate fonts within the
+system and select them according to requirements specified by
+applications.
+
+%package devel
+Summary: Font configuration and customization library
+Group: Development/Libraries
+Requires: %{name} = %{version}
+Requires: %{freetype2}-devel
+
+%description devel
+The fontconfig-devel package includes the static libraries,
+header files, and developer docs for the fontconfig package.
+
+Install fontconfig-devel if you want to develop programs which
+will use fontconfig.
+
+# Some rpm specific directories. Prefix 'my' hopefully does not collide with anything.
+%define my_docdir %{_datadir}/doc/%{name}-%{version}
+%define my_develdocdir %{_datadir}/doc/%{name}-devel-%{version}
+%define my_tmpdocdir $RPM_BUILD_ROOT%{my_docdir}
+%define my_tmpdeveldocdir $RPM_BUILD_ROOT%{my_develdocdir}
+
+%prep
+%setup -q
+
+%build
+%configure --with-x-fonts=/usr/X11R6/lib/X11/fonts --disable-gtk-doc \
+ --with-docdir=%{my_docdir}
+make %{_smp_mflags}
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+{
+ %makeinstall docdir=%{my_tmpdocdir}
+
+ # The make does not distinguish the base and devel packages
+ mkdir -p %{my_tmpdeveldocdir}
+ mv -f %{my_tmpdocdir}/*devel* %{my_tmpdeveldocdir}
+
+ # Use a more informative directory name:
+ mv -f %{my_tmpdeveldocdir}/fontconfig-devel %{my_tmpdeveldocdir}/html
+}
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%post
+{
+ /sbin/ldconfig
+ # Force regeneration of all fontconfig cache files.
+ %{_bindir}/fc-cache -f --system-only
+}
+
+%postun -p /sbin/ldconfig
+
+%files
+%defattr(-, root, root)
+%doc README AUTHORS COPYING ChangeLog doc/fontconfig-user.{html,txt}
+%{my_docdir}/*
+%dir %{_sysconfdir}/fonts
+%{_sysconfdir}/fonts/fonts.conf
+%{_sysconfdir}/fonts/fonts.dtd
+%config %{_sysconfdir}/fonts/local.conf
+%{_bindir}/fc-*
+%{_libdir}/libfontconfig*.so.*
+%{_mandir}/man1/*
+%{_mandir}/man5/*
+
+%files devel
+%defattr(-, root, root)
+#%doc doc/fontconfig-devel.txt doc/fontconfig-devel/*
+%{my_develdocdir}
+%dir %{_includedir}/fontconfig
+%{_includedir}/fontconfig/*
+%{_libdir}/*.a
+%{_libdir}/*.la
+%{_libdir}/libfontconfig.so
+%{_libdir}/pkgconfig
+%{_mandir}/man3/*
+
+%changelog
+* Wed Mar 20 2004 Enrique Perez-Terron <enrio@online.no>
+- Added mandir /man1/* to main file list
+- Added missing '/*' after includedir/fontconfig to avoid "listed twice" error.
+- Removed configure option --disable-docs since its problem is solved, see below.
+- Added option to makeinstall to have it install docs in the proper directory.
+ Notice though that the %doc macro deletes and recreates the docs directory.
+- Cleaner separation of devel docs.
+- Renamed doc/fontconfig-devel-*/fontconfig-devel subdirectory to 'html'.
+- Removed %doc macro from devel filelist, since it deletes installed files.
+
+* Fri Mar 7 2003 Mike A. Harris <mharris@redhat.com> 2.1.92-1
+- Removed man1/* and added man5/* to main package and man3/* to devel package
+- Added missing defattr(-, root, root) to main package
+- Added HTML and text development documentation to -devel subpackage
+
+* Wed Mar 5 2003 Mike A. Harris <mharris@redhat.com>
+- Added back the configure macro options --disable-docs because otherwise
+ fontconfig installs docs into /usr/share/doc/fontconfig (with no version
+ number) unconditionally, causing RPM to fail the build due to unpackaged
+ files terminate build
+
+* Wed Mar 5 2003 Mike A. Harris <mharris@redhat.com>
+- Removed commented out rpm macro define at top of spec file, replacing it with
+ a simple explanation, since rpm macros are expanded by rpm even in comments
+- Changed /usr/bin to _bindir in BuildRequires lines
+- Cleaned up rpm postinstall script, and made fc-cache use _bindir
+- Reorganized file manifest lists
+
+* Sun Mar 2 2003 Owen Taylor <otaylor@redhat.com>
+- Various improvements from Red Hat spec file
+
+* Sun Mar 2 2003 Mike A. Harris <mharris@redhat.com>
+- Initial changelog entry
diff --git a/chromium/third_party/fontconfig/src/fontconfig/Makefile.am b/chromium/third_party/fontconfig/src/fontconfig/Makefile.am
new file mode 100644
index 00000000000..99bb4c3b2df
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig/Makefile.am
@@ -0,0 +1,10 @@
+fontconfigincludedir=$(includedir)/fontconfig
+
+fontconfig_headers= \
+ fontconfig.h \
+ fcfreetype.h \
+ fcprivate.h
+
+fontconfiginclude_HEADERS = $(fontconfig_headers)
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/fontconfig/fcfreetype.h b/chromium/third_party/fontconfig/src/fontconfig/fcfreetype.h
new file mode 100644
index 00000000000..753fdf9da83
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig/fcfreetype.h
@@ -0,0 +1,59 @@
+/*
+ * fontconfig/fontconfig/fcfreetype.h
+ *
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FCFREETYPE_H_
+#define _FCFREETYPE_H_
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifndef FcPublic
+#define FcPublic
+#endif
+
+_FCFUNCPROTOBEGIN
+
+FcPublic FT_UInt
+FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4);
+
+FcPublic FcCharSet *
+FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing);
+
+FcPublic FcCharSet *
+FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks);
+
+FcPublic FcResult
+FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f);
+
+FcPublic FcBool
+FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f);
+
+FcPublic FcPattern *
+FcFreeTypeQueryFace (const FT_Face face,
+ const FcChar8 *file,
+ int id,
+ FcBlanks *blanks);
+
+_FCFUNCPROTOEND
+
+#endif
diff --git a/chromium/third_party/fontconfig/src/fontconfig/fcprivate.h b/chromium/third_party/fontconfig/src/fontconfig/fcprivate.h
new file mode 100644
index 00000000000..210c1d8a371
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig/fcprivate.h
@@ -0,0 +1,124 @@
+/*
+ * 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, int); \
+ switch (__v__.type) { \
+ case FcTypeUnknown: \
+ 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/chromium/third_party/fontconfig/src/fontconfig/fontconfig.h b/chromium/third_party/fontconfig/src/fontconfig/fontconfig.h
new file mode 100644
index 00000000000..dfc48f9e337
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fontconfig/fontconfig.h
@@ -0,0 +1,1007 @@
+/*
+ * 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 11
+#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 "4"
+
+#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) */
+/* FC_GLOBAL_ADVANCE is deprecated. this is simply ignored on freetype 2.4.5 or later */
+#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 (deprecated) */
+#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_FONT_FEATURES "fontfeatures" /* String */
+#define FC_NAMELANG "namelang" /* String RFC 3866 langs */
+#define FC_PRGNAME "prgname" /* String */
+#define FC_HASH "hash" /* String */
+#define FC_POSTSCRIPT_NAME "postscriptname" /* String */
+
+#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 {
+ FcTypeUnknown = -1,
+ 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);
+
+FcPublic FcBool
+FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose);
+
+FcPublic void
+FcCacheCreateTagFile (const FcConfig *config);
+
+/* 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 (const 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);
+
+FcPublic const FcChar8 *
+FcConfigGetSysRoot (const FcConfig *config);
+
+FcPublic void
+FcConfigSetSysRoot (FcConfig *config,
+ const FcChar8 *sysroot);
+
+/* 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 FcStrSet *
+FcGetDefaultLangs (void);
+
+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 FcChar8 *
+FcLangNormalize (const FcChar8 *lang);
+
+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);
+
+FcPublic FcLangSet *
+FcLangSetUnion (const FcLangSet *a, const FcLangSet *b);
+
+FcPublic 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 */
+
+/* Deprecated. Does nothing. Returns FcFalse. */
+FcPublic FcBool
+FcNameRegisterObjectTypes (const FcObjectType *types, int ntype);
+
+/* Deprecated. Does nothing. Returns FcFalse. */
+FcPublic FcBool
+FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype);
+
+FcPublic const FcObjectType *
+FcNameGetObjectType (const char *object);
+
+/* Deprecated. Does nothing. Returns FcFalse. */
+FcPublic FcBool
+FcNameRegisterConstants (const FcConstant *consts, int nconsts);
+
+/* Deprecated. Does nothing. Returns FcFalse. */
+FcPublic FcBool
+FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
+
+FcPublic const FcConstant *
+FcNameGetConstant (const FcChar8 *string);
+
+FcPublic FcBool
+FcNameConstant (const 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 void
+FcStrListFirst (FcStrList *list);
+
+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/chromium/third_party/fontconfig/src/fonts.conf.in b/chromium/third_party/fontconfig/src/fonts.conf.in
new file mode 100644
index 00000000000..6a8753d01b3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fonts.conf.in
@@ -0,0 +1,155 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/fonts.conf file to configure system font access -->
+<fontconfig>
+
+<!--
+ DO NOT EDIT THIS FILE.
+ IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
+ LOCAL CHANGES BELONG IN 'local.conf'.
+
+ The intent of this standard configuration file is to be adequate for
+ most environments. If you have a reasonably normal environment and
+ have found problems with this configuration, they are probably
+ things that others will also want fixed. Please submit any
+ problems to the fontconfig bugzilla system located at fontconfig.org
+
+ Note that the normal 'make install' procedure for fontconfig is to
+ replace any existing fonts.conf file with the new version. Place
+ any local customizations in local.conf which this file references.
+
+ Keith Packard
+-->
+
+<!-- Font directory list -->
+
+ <dir>@FC_DEFAULT_FONTS@</dir>
+ @FC_FONTPATH@
+ <dir prefix="xdg">fonts</dir>
+ <!-- the following element will be removed in the future -->
+ <dir>~/.fonts</dir>
+
+<!--
+ Accept deprecated 'mono' alias, replacing it with 'monospace'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>mono</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>monospace</string>
+ </edit>
+ </match>
+
+<!--
+ Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans serif</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Accept deprecated 'sans' alias, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans</string>
+ </test>
+ <edit name="family" mode="assign" binding="same">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Load local system customization file
+-->
+ <include ignore_missing="yes">@CONFIGDIR@</include>
+
+<!-- Font cache directory list -->
+
+ <cachedir>@FC_CACHEDIR@</cachedir>
+ <cachedir prefix="xdg">fontconfig</cachedir>
+ <!-- the following element will be removed in the future -->
+ <cachedir>~/.fontconfig</cachedir>
+
+ <config>
+<!--
+ These are the default Unicode chars that are expected to be blank
+ in fonts. All other blank chars are assumed to be broken and
+ won't appear in the resulting charsets
+ -->
+ <blank>
+ <int>0x0020</int> <!-- SPACE -->
+ <int>0x00A0</int> <!-- NO-BREAK SPACE -->
+ <int>0x00AD</int> <!-- SOFT HYPHEN -->
+ <int>0x034F</int> <!-- COMBINING GRAPHEME JOINER -->
+ <int>0x0600</int> <!-- ARABIC NUMBER SIGN -->
+ <int>0x0601</int> <!-- ARABIC SIGN SANAH -->
+ <int>0x0602</int> <!-- ARABIC FOOTNOTE MARKER -->
+ <int>0x0603</int> <!-- ARABIC SIGN SAFHA -->
+ <int>0x06DD</int> <!-- ARABIC END OF AYAH -->
+ <int>0x070F</int> <!-- SYRIAC ABBREVIATION MARK -->
+ <int>0x115F</int> <!-- HANGUL CHOSEONG FILLER -->
+ <int>0x1160</int> <!-- HANGUL JUNGSEONG FILLER -->
+ <int>0x1680</int> <!-- OGHAM SPACE MARK -->
+ <int>0x17B4</int> <!-- KHMER VOWEL INHERENT AQ -->
+ <int>0x17B5</int> <!-- KHMER VOWEL INHERENT AA -->
+ <int>0x180E</int> <!-- MONGOLIAN VOWEL SEPARATOR -->
+ <int>0x2000</int> <!-- EN QUAD -->
+ <int>0x2001</int> <!-- EM QUAD -->
+ <int>0x2002</int> <!-- EN SPACE -->
+ <int>0x2003</int> <!-- EM SPACE -->
+ <int>0x2004</int> <!-- THREE-PER-EM SPACE -->
+ <int>0x2005</int> <!-- FOUR-PER-EM SPACE -->
+ <int>0x2006</int> <!-- SIX-PER-EM SPACE -->
+ <int>0x2007</int> <!-- FIGURE SPACE -->
+ <int>0x2008</int> <!-- PUNCTUATION SPACE -->
+ <int>0x2009</int> <!-- THIN SPACE -->
+ <int>0x200A</int> <!-- HAIR SPACE -->
+ <int>0x200B</int> <!-- ZERO WIDTH SPACE -->
+ <int>0x200C</int> <!-- ZERO WIDTH NON-JOINER -->
+ <int>0x200D</int> <!-- ZERO WIDTH JOINER -->
+ <int>0x200E</int> <!-- LEFT-TO-RIGHT MARK -->
+ <int>0x200F</int> <!-- RIGHT-TO-LEFT MARK -->
+ <int>0x2028</int> <!-- LINE SEPARATOR -->
+ <int>0x2029</int> <!-- PARAGRAPH SEPARATOR -->
+ <int>0x202A</int> <!-- LEFT-TO-RIGHT EMBEDDING -->
+ <int>0x202B</int> <!-- RIGHT-TO-LEFT EMBEDDING -->
+ <int>0x202C</int> <!-- POP DIRECTIONAL FORMATTING -->
+ <int>0x202D</int> <!-- LEFT-TO-RIGHT OVERRIDE -->
+ <int>0x202E</int> <!-- RIGHT-TO-LEFT OVERRIDE -->
+ <int>0x202F</int> <!-- NARROW NO-BREAK SPACE -->
+ <int>0x205F</int> <!-- MEDIUM MATHEMATICAL SPACE -->
+ <int>0x2060</int> <!-- WORD JOINER -->
+ <int>0x2061</int> <!-- FUNCTION APPLICATION -->
+ <int>0x2062</int> <!-- INVISIBLE TIMES -->
+ <int>0x2063</int> <!-- INVISIBLE SEPARATOR -->
+ <int>0x206A</int> <!-- INHIBIT SYMMETRIC SWAPPING -->
+ <int>0x206B</int> <!-- ACTIVATE SYMMETRIC SWAPPING -->
+ <int>0x206C</int> <!-- INHIBIT ARABIC FORM SHAPING -->
+ <int>0x206D</int> <!-- ACTIVATE ARABIC FORM SHAPING -->
+ <int>0x206E</int> <!-- NATIONAL DIGIT SHAPES -->
+ <int>0x206F</int> <!-- NOMINAL DIGIT SHAPES -->
+ <int>0x2800</int> <!-- BRAILLE PATTERN BLANK -->
+ <int>0x3000</int> <!-- IDEOGRAPHIC SPACE -->
+ <int>0x3164</int> <!-- HANGUL FILLER -->
+ <int>0xFEFF</int> <!-- ZERO WIDTH NO-BREAK SPACE -->
+ <int>0xFFA0</int> <!-- HALFWIDTH HANGUL FILLER -->
+ <int>0xFFF9</int> <!-- INTERLINEAR ANNOTATION ANCHOR -->
+ <int>0xFFFA</int> <!-- INTERLINEAR ANNOTATION SEPARATOR -->
+ <int>0xFFFB</int> <!-- INTERLINEAR ANNOTATION TERMINATOR -->
+ </blank>
+<!--
+ Rescan configuration every 30 seconds when FcFontSetList is called
+ -->
+ <rescan>
+ <int>30</int>
+ </rescan>
+ </config>
+
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/fonts.dtd b/chromium/third_party/fontconfig/src/fonts.dtd
new file mode 100644
index 00000000000..4c38e77f08f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/fonts.dtd
@@ -0,0 +1,233 @@
+<!-- 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
+ prefix CDATA "default"
+ 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
+ prefix CDATA "default"
+ 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"
+ prefix CDATA "default"
+ deprecated (yes|no) "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 (test?, 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"
+ ignore-blanks (true|false) "false"
+ 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|delete|delete_all) "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 ((%expr;), (%expr;), (%expr;), (%expr;))>
+<!ELEMENT bool (#PCDATA)>
+<!ELEMENT charset (int|range)*>
+<!ELEMENT range (int,int)>
+<!ELEMENT langset (string)*>
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name xml:space (default|preserve) 'preserve'
+ target (default|font|pattern) 'default'>
+<!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/chromium/third_party/fontconfig/src/git.mk b/chromium/third_party/fontconfig/src/git.mk
new file mode 100644
index 00000000000..d5bf7b84203
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/git.mk
@@ -0,0 +1,227 @@
+# git.mk
+#
+# Copyright 2009, Red Hat, Inc.
+# Copyright 2010,2011 Behdad Esfahbod
+# Written by Behdad Esfahbod
+#
+# Copying and distribution of this file, with or without modification,
+# is permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+#
+# The latest version of this file can be downloaded from:
+# https://raw.github.com/behdad/git.mk/master/git.mk
+# Bugs, etc, should be reported upstream at:
+# https://github.com/behdad/git.mk
+#
+# To use in your project, import this file in your git repo's toplevel,
+# then do "make -f git.mk". This modifies all Makefile.am files in
+# your project to -include git.mk. Remember to add that line to new
+# Makefile.am files you create in your project, or just rerun the
+# "make -f git.mk".
+#
+# This enables automatic .gitignore generation. If you need to ignore
+# more files, add them to the GITIGNOREFILES variable in your Makefile.am.
+# But think twice before doing that. If a file has to be in .gitignore,
+# chances are very high that it's a generated file and should be in one
+# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES.
+#
+# The only case that you need to manually add a file to GITIGNOREFILES is
+# when remove files in one of mostlyclean-local, clean-local, distclean-local,
+# or maintainer-clean-local make targets.
+#
+# Note that for files like editor backup, etc, there are better places to
+# ignore them. See "man gitignore".
+#
+# If "make maintainer-clean" removes the files but they are not recognized
+# by this script (that is, if "git status" shows untracked files still), send
+# me the output of "git status" as well as your Makefile.am and Makefile for
+# the directories involved and I'll diagnose.
+#
+# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
+# Makefile.am.sample in the git.mk git repo.
+#
+# Don't EXTRA_DIST this file. It is supposed to only live in git clones,
+# not tarballs. It serves no useful purpose in tarballs and clutters the
+# build dir.
+#
+# This file knows how to handle autoconf, automake, libtool, gtk-doc,
+# gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu.
+#
+# This makefile provides the following targets:
+#
+# - all: "make all" will build all gitignore files.
+# - gitignore: makes all gitignore files in the current dir and subdirs.
+# - .gitignore: make gitignore file for the current dir.
+# - gitignore-recurse: makes all gitignore files in the subdirs.
+#
+# KNOWN ISSUES:
+#
+# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the
+# submodule doesn't find us. If you have configure.{in,ac} files in
+# subdirs, add a proxy git.mk file in those dirs that simply does:
+# "include $(top_srcdir)/../git.mk". Add more ..'s to your taste.
+# And add those files to git. See vte/gnome-pty-helper/git.mk for
+# example.
+#
+
+git-all: git-mk-install
+
+git-mk-install:
+ @echo Installing git makefile
+ @any_failed=; \
+ find "`test -z "$(top_srcdir)" && echo . || echo "$(top_srcdir)"`" -name Makefile.am | while read x; do \
+ if grep 'include .*/git.mk' $$x >/dev/null; then \
+ echo $$x already includes git.mk; \
+ else \
+ failed=; \
+ echo "Updating $$x"; \
+ { cat $$x; \
+ echo ''; \
+ echo '-include $$(top_srcdir)/git.mk'; \
+ } > $$x.tmp || failed=1; \
+ if test x$$failed = x; then \
+ mv $$x.tmp $$x || failed=1; \
+ fi; \
+ if test x$$failed = x; then : else \
+ echo Failed updating $$x; >&2 \
+ any_failed=1; \
+ fi; \
+ fi; done; test -z "$$any_failed"
+
+.PHONY: git-all git-mk-install
+
+
+### .gitignore generation
+
+$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk
+ $(AM_V_GEN) \
+ { \
+ if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \
+ for x in \
+ $(DOC_MODULE)-decl-list.txt \
+ $(DOC_MODULE)-decl.txt \
+ tmpl/$(DOC_MODULE)-unused.sgml \
+ "tmpl/*.bak" \
+ xml html \
+ ; do echo /$$x; done; \
+ fi; \
+ if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \
+ for lc in $(DOC_LINGUAS); do \
+ for x in \
+ $(if $(DOC_MODULE),$(DOC_MODULE).xml) \
+ $(DOC_PAGES) \
+ $(DOC_INCLUDES) \
+ ; do echo /$$lc/$$x; done; \
+ done; \
+ for x in \
+ $(_DOC_OMF_ALL) \
+ $(_DOC_DSK_ALL) \
+ $(_DOC_HTML_ALL) \
+ $(_DOC_MOFILES) \
+ $(DOC_H_FILE) \
+ "*/.xml2po.mo" \
+ "*/*.omf.out" \
+ ; do echo /$$x; done; \
+ fi; \
+ if test "x$(HELP_ID)" = x -o "x$(HELP_LINGUAS)" = x; then :; else \
+ for lc in $(HELP_LINGUAS); do \
+ for x in \
+ $(HELP_FILES) \
+ "$$lc.stamp" \
+ "$$lc.mo" \
+ ; do echo /$$lc/$$x; done; \
+ done; \
+ fi; \
+ if test "x$(gsettings_SCHEMAS)" = x; then :; else \
+ for x in \
+ $(gsettings_SCHEMAS:.xml=.valid) \
+ $(gsettings__enum_file) \
+ ; do echo /$$x; done; \
+ fi; \
+ if test -f $(srcdir)/po/Makefile.in.in; then \
+ for x in \
+ po/Makefile.in.in \
+ po/Makefile.in \
+ po/Makefile \
+ po/POTFILES \
+ po/stamp-it \
+ po/.intltool-merge-cache \
+ "po/*.gmo" \
+ "po/*.mo" \
+ po/$(GETTEXT_PACKAGE).pot \
+ intltool-extract.in \
+ intltool-merge.in \
+ intltool-update.in \
+ ; do echo /$$x; done; \
+ fi; \
+ if test -f $(srcdir)/configure; then \
+ for x in \
+ autom4te.cache \
+ configure \
+ config.h \
+ stamp-h1 \
+ libtool \
+ config.lt \
+ ; do echo /$$x; done; \
+ fi; \
+ if test "x$(DEJATOOL)" = x; then :; else \
+ for x in \
+ $(DEJATOOL) \
+ ; do echo /$$x.sum; echo /$$x.log; done; \
+ echo /site.exp; \
+ fi; \
+ for x in \
+ .gitignore \
+ $(GITIGNOREFILES) \
+ $(CLEANFILES) \
+ $(PROGRAMS) $(check_PROGRAMS) $(EXTRA_PROGRAMS) \
+ $(LIBRARIES) $(check_LIBRARIES) $(EXTRA_LIBRARIES) \
+ $(LTLIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LTLIBRARIES) \
+ so_locations \
+ .libs _libs \
+ $(MOSTLYCLEANFILES) \
+ "*.$(OBJEXT)" \
+ "*.lo" \
+ $(DISTCLEANFILES) \
+ $(am__CONFIG_DISTCLEAN_FILES) \
+ $(CONFIG_CLEAN_FILES) \
+ TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
+ "*.tab.c" \
+ $(MAINTAINERCLEANFILES) \
+ $(BUILT_SOURCES) \
+ $(DEPDIR) \
+ Makefile \
+ Makefile.in \
+ "*.orig" \
+ "*.rej" \
+ "*.bak" \
+ "*~" \
+ ".*.sw[nop]" \
+ ".dirstamp" \
+ ; do echo /$$x; done; \
+ } | \
+ sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \
+ sed 's@/[.]/@/@g' | \
+ LC_ALL=C sort | uniq > $@.tmp && \
+ mv $@.tmp $@;
+
+all: $(srcdir)/.gitignore gitignore-recurse-maybe
+gitignore: $(srcdir)/.gitignore gitignore-recurse
+
+gitignore-recurse-maybe:
+ @for subdir in $(DIST_SUBDIRS); do \
+ case " $(SUBDIRS) " in \
+ *" $$subdir "*) :;; \
+ *) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse-maybe || echo "Skipping $$subdir");; \
+ esac; \
+ done
+gitignore-recurse:
+ @for subdir in $(DIST_SUBDIRS); do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir"); \
+ done
+
+maintainer-clean: gitignore-clean
+gitignore-clean:
+ -rm -f $(srcdir)/.gitignore
+
+.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe
diff --git a/chromium/third_party/fontconfig/src/local.conf b/chromium/third_party/fontconfig/src/local.conf
new file mode 100644
index 00000000000..9f8beee66c9
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/local.conf
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/local.conf file for local customizations -->
+<fontconfig>
+<!--
+ Enable sub-pixel rendering
+ <match target="font">
+ <test qual="all" name="rgba">
+ <const>unknown</const>
+ </test>
+ <edit name="rgba" mode="assign"><const>rgb</const></edit>
+ </match>
+-->
+<!--
+ Reject bitmap fonts
+ -->
+
+ <selectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </rejectfont>
+ </selectfont>
+
+<!--
+ Accept bitmap fonts. This overrides any rejectfont which matches
+
+ <selectfont>
+ <acceptfont>
+ <pattern>
+ <patelt name="scalable"><bool>false</bool></patelt>
+ </pattern>
+ </acceptfont>
+ </selectfont>
+ -->
+</fontconfig>
diff --git a/chromium/third_party/fontconfig/src/m4/.gitkeep b/chromium/third_party/fontconfig/src/m4/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/m4/.gitkeep
diff --git a/chromium/third_party/fontconfig/src/m4/ax_cc_for_build.m4 b/chromium/third_party/fontconfig/src/m4/ax_cc_for_build.m4
new file mode 100644
index 00000000000..c880fd0e1dd
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/m4/ax_cc_for_build.m4
@@ -0,0 +1,77 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cc_for_build.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CC_FOR_BUILD
+#
+# DESCRIPTION
+#
+# Find a build-time compiler. Sets CC_FOR_BUILD and EXEEXT_FOR_BUILD.
+#
+# LICENSE
+#
+# Copyright (c) 2010 Reuben Thomas <rrt@sc3d.org>
+# Copyright (c) 1999 Richard Henderson <rth@redhat.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+dnl Get a default for CC_FOR_BUILD to put into Makefile.
+AC_DEFUN([AX_CC_FOR_BUILD],
+[# Put a plausible default for CC_FOR_BUILD in Makefile.
+if test -z "$CC_FOR_BUILD"; then
+ if test "x$cross_compiling" = "xno"; then
+ CC_FOR_BUILD='$(CC)'
+ else
+ CC_FOR_BUILD=gcc
+ fi
+fi
+AC_SUBST(CC_FOR_BUILD)
+# Also set EXEEXT_FOR_BUILD.
+if test "x$cross_compiling" = "xno"; then
+ EXEEXT_FOR_BUILD='$(EXEEXT)'
+else
+ AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext,
+ [rm -f conftest*
+ echo 'int main () { return 0; }' > conftest.c
+ bfd_cv_build_exeext=
+ ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
+ for file in conftest.*; do
+ case $file in
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+ *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ rm -f conftest*
+ test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no])
+ EXEEXT_FOR_BUILD=""
+ test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
+fi
+AC_SUBST(EXEEXT_FOR_BUILD)])dnl
diff --git a/chromium/third_party/fontconfig/src/m4/ax_create_stdint_h.m4 b/chromium/third_party/fontconfig/src/m4/ax_create_stdint_h.m4
new file mode 100644
index 00000000000..1e4106149e8
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/m4/ax_create_stdint_h.m4
@@ -0,0 +1,695 @@
+dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]
+dnl
+dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
+dnl existence of an include file <stdint.h> that defines a set of
+dnl typedefs, especially uint8_t,int32_t,uintptr_t. Many older
+dnl installations will not provide this file, but some will have the
+dnl very same definitions in <inttypes.h>. In other enviroments we can
+dnl use the inet-types in <sys/types.h> which would define the typedefs
+dnl int8_t and u_int8_t respectivly.
+dnl
+dnl This macros will create a local "_stdint.h" or the headerfile given
+dnl as an argument. In many cases that file will just "#include
+dnl <stdint.h>" or "#include <inttypes.h>", while in other environments
+dnl it will provide the set of basic 'stdint's definitions/typedefs:
+dnl
+dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
+dnl int_least32_t.. int_fast32_t.. intmax_t
+dnl
+dnl which may or may not rely on the definitions of other files, or
+dnl using the AC_CHECK_SIZEOF macro to determine the actual sizeof each
+dnl type.
+dnl
+dnl if your header files require the stdint-types you will want to
+dnl create an installable file mylib-int.h that all your other
+dnl installable header may include. So if you have a library package
+dnl named "mylib", just use
+dnl
+dnl AX_CREATE_STDINT_H(mylib-int.h)
+dnl
+dnl in configure.ac and go to install that very header file in
+dnl Makefile.am along with the other headers (mylib.h) - and the
+dnl mylib-specific headers can simply use "#include <mylib-int.h>" to
+dnl obtain the stdint-types.
+dnl
+dnl Remember, if the system already had a valid <stdint.h>, the
+dnl generated file will include it directly. No need for fuzzy
+dnl HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly
+dnl disabled its stdint.h for non-c99 compilation and the c99-mode
+dnl is not the default. Therefore this macro will not use the
+dnl compiler's stdint.h - please complain to the GCC developers).
+dnl
+dnl @category C
+dnl @author Guido U. Draheim <guidod@gmx.de>
+dnl @version 2003-12-07
+dnl @license GPLWithACException
+
+AC_DEFUN([AX_CHECK_DATA_MODEL],[
+ AC_CHECK_SIZEOF(char)
+ AC_CHECK_SIZEOF(short)
+ AC_CHECK_SIZEOF(int)
+ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(void*)
+ ac_cv_char_data_model=""
+ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
+ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
+ ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
+ ac_cv_long_data_model=""
+ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
+ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
+ ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
+ AC_MSG_CHECKING([data model])
+ case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
+ 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
+ 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
+ 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;;
+ 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
+ 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;;
+ 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
+ 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;;
+ 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
+ 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;;
+ 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
+ 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
+ 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
+ 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
+ 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
+ 222/*|333/*|444/*|666/*|888/*) :
+ ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
+ *) ac_cv_data_model="none" ; n="very unusual model" ;;
+ esac
+ AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)])
+])
+
+dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF])
+AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[
+AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[
+ ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
+ AC_MSG_RESULT([(..)])
+ for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h])
+ do
+ unset ac_cv_type_uintptr_t
+ unset ac_cv_type_uint64_t
+ AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>])
+ AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
+ m4_ifvaln([$2],[$2]) break
+ done
+ AC_MSG_CHECKING([for stdint uintptr_t])
+ ])
+])
+
+AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[
+AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[
+ ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
+ AC_MSG_RESULT([(..)])
+ for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h])
+ do
+ unset ac_cv_type_uint32_t
+ unset ac_cv_type_uint64_t
+ AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>])
+ AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
+ m4_ifvaln([$2],[$2]) break
+ break;
+ done
+ AC_MSG_CHECKING([for stdint uint32_t])
+ ])
+])
+
+AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[
+AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[
+ ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
+ AC_MSG_RESULT([(..)])
+ for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do
+ unset ac_cv_type_u_int32_t
+ unset ac_cv_type_u_int64_t
+ AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>])
+ AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>])
+ m4_ifvaln([$2],[$2]) break
+ break;
+ done
+ AC_MSG_CHECKING([for stdint u_int32_t])
+ ])
+])
+
+AC_DEFUN([AX_CREATE_STDINT_H],
+[# ------ AX CREATE STDINT H -------------------------------------
+AC_MSG_CHECKING([for stdint types])
+ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)`
+# try to shortcircuit - if the default include path of the compiler
+# can find a "stdint.h" header then we assume that all compilers can.
+AC_CACHE_VAL([ac_cv_header_stdint_t],[
+old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
+old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
+old_CFLAGS="$CFLAGS" ; CFLAGS=""
+AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
+[ac_cv_stdint_result="(assuming C99 compatible system)"
+ ac_cv_header_stdint_t="stdint.h"; ],
+[ac_cv_header_stdint_t=""])
+if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
+CFLAGS="-std=c99"
+AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
+[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)])
+fi
+CXXFLAGS="$old_CXXFLAGS"
+CPPFLAGS="$old_CPPFLAGS"
+CFLAGS="$old_CFLAGS" ])
+
+v="... $ac_cv_header_stdint_h"
+if test "$ac_stdint_h" = "stdint.h" ; then
+ AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)])
+elif test "$ac_stdint_h" = "inttypes.h" ; then
+ AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)])
+elif test "_$ac_cv_header_stdint_t" = "_" ; then
+ AC_MSG_RESULT([(putting them into $ac_stdint_h)$v])
+else
+ ac_cv_header_stdint="$ac_cv_header_stdint_t"
+ AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)])
+fi
+
+if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
+
+dnl .....intro message done, now do a few system checks.....
+dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type,
+dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW
+dnl instead that is triggered with 3 or more arguments (see types.m4)
+
+inttype_headers=`echo $2 | sed -e 's/,/ /g'`
+
+ac_cv_stdint_result="(no helpful system typedefs seen)"
+AX_CHECK_HEADER_STDINT_X(dnl
+ stdint.h inttypes.h sys/inttypes.h $inttype_headers,
+ ac_cv_stdint_result="(seen uintptr_t$and64 in $i)")
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+AX_CHECK_HEADER_STDINT_O(dnl,
+ inttypes.h sys/inttypes.h stdint.h $inttype_headers,
+ ac_cv_stdint_result="(seen uint32_t$and64 in $i)")
+fi
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+if test "_$ac_cv_header_stdint_o" = "_" ; then
+AX_CHECK_HEADER_STDINT_U(dnl,
+ sys/types.h inttypes.h sys/inttypes.h $inttype_headers,
+ ac_cv_stdint_result="(seen u_int32_t$and64 in $i)")
+fi fi
+
+dnl if there was no good C99 header file, do some typedef checks...
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+ AC_MSG_CHECKING([for stdint datatype model])
+ AC_MSG_RESULT([(..)])
+ AX_CHECK_DATA_MODEL
+fi
+
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+ ac_cv_header_stdint="$ac_cv_header_stdint_x"
+elif test "_$ac_cv_header_stdint_o" != "_" ; then
+ ac_cv_header_stdint="$ac_cv_header_stdint_o"
+elif test "_$ac_cv_header_stdint_u" != "_" ; then
+ ac_cv_header_stdint="$ac_cv_header_stdint_u"
+else
+ ac_cv_header_stdint="stddef.h"
+fi
+
+AC_MSG_CHECKING([for extra inttypes in chosen header])
+AC_MSG_RESULT([($ac_cv_header_stdint)])
+dnl see if int_least and int_fast types are present in _this_ header.
+unset ac_cv_type_int_least32_t
+unset ac_cv_type_int_fast32_t
+AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>])
+AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>])
+AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>])
+
+fi # shortcircut to system "stdint.h"
+# ------------------ PREPARE VARIABLES ------------------------------
+if test "$GCC" = "yes" ; then
+ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
+else
+ac_cv_stdint_message="using $CC"
+fi
+
+AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl
+$ac_cv_stdint_result])
+
+dnl -----------------------------------------------------------------
+# ----------------- DONE inttypes.h checks START header -------------
+AC_CONFIG_COMMANDS([$ac_stdint_h],[
+AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h)
+ac_stdint=$tmp/_stdint.h
+
+echo "#ifndef" $_ac_stdint_h >$ac_stdint
+echo "#define" $_ac_stdint_h "1" >>$ac_stdint
+echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint
+echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint
+echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_t" != "_" ; then
+echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint
+echo "#include <stdint.h>" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+else
+
+cat >>$ac_stdint <<STDINT_EOF
+
+/* ................... shortcircuit part ........................... */
+
+#if defined HAVE_STDINT_H || defined _STDINT_HAVE_STDINT_H
+#include <stdint.h>
+#else
+#include <stddef.h>
+
+/* .................... configured part ............................ */
+
+STDINT_EOF
+
+echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+ ac_header="$ac_cv_header_stdint_x"
+ echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint
+else
+ echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint
+fi
+
+echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_o" != "_" ; then
+ ac_header="$ac_cv_header_stdint_o"
+ echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+ echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint
+fi
+
+echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_u" != "_" ; then
+ ac_header="$ac_cv_header_stdint_u"
+ echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+ echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint
+fi
+
+echo "" >>$ac_stdint
+
+if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then
+ echo "#include <$ac_header>" >>$ac_stdint
+ echo "" >>$ac_stdint
+fi fi
+
+echo "/* which 64bit typedef has been found */" >>$ac_stdint
+if test "$ac_cv_type_uint64_t" = "yes" ; then
+echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint
+fi
+if test "$ac_cv_type_u_int64_t" = "yes" ; then
+echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* which type model has been detected */" >>$ac_stdint
+if test "_$ac_cv_char_data_model" != "_" ; then
+echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint
+echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint
+else
+echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint
+echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* whether int_least types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_least32_t" = "yes"; then
+echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint
+fi
+echo "/* whether int_fast types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_fast32_t" = "yes"; then
+echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint
+fi
+echo "/* whether intmax_t type was detected */" >>$ac_stdint
+if test "$ac_cv_type_intmax_t" = "yes"; then
+echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+ cat >>$ac_stdint <<STDINT_EOF
+/* .................... detections part ............................ */
+
+/* whether we need to define bitspecific types from compiler base types */
+#ifndef _STDINT_HEADER_INTPTR
+#ifndef _STDINT_HEADER_UINT32
+#ifndef _STDINT_HEADER_U_INT32
+#define _STDINT_NEED_INT_MODEL_T
+#else
+#define _STDINT_HAVE_U_INT_TYPES
+#endif
+#endif
+#endif
+
+#ifdef _STDINT_HAVE_U_INT_TYPES
+#undef _STDINT_NEED_INT_MODEL_T
+#endif
+
+#ifdef _STDINT_CHAR_MODEL
+#if _STDINT_CHAR_MODEL+0 == 122 || _STDINT_CHAR_MODEL+0 == 124
+#ifndef _STDINT_BYTE_MODEL
+#define _STDINT_BYTE_MODEL 12
+#endif
+#endif
+#endif
+
+#ifndef _STDINT_HAVE_INT_LEAST32_T
+#define _STDINT_NEED_INT_LEAST_T
+#endif
+
+#ifndef _STDINT_HAVE_INT_FAST32_T
+#define _STDINT_NEED_INT_FAST_T
+#endif
+
+#ifndef _STDINT_HEADER_INTPTR
+#define _STDINT_NEED_INTPTR_T
+#ifndef _STDINT_HAVE_INTMAX_T
+#define _STDINT_NEED_INTMAX_T
+#endif
+#endif
+
+
+/* .................... definition part ............................ */
+
+/* some system headers have good uint64_t */
+#ifndef _HAVE_UINT64_T
+#if defined _STDINT_HAVE_UINT64_T || defined HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#elif defined _STDINT_HAVE_U_INT64_T || defined HAVE_U_INT64_T
+#define _HAVE_UINT64_T
+typedef u_int64_t uint64_t;
+#endif
+#endif
+
+#ifndef _HAVE_UINT64_T
+/* .. here are some common heuristics using compiler runtime specifics */
+#if defined __STDC_VERSION__ && defined __STDC_VERSION__ >= 199901L
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+#elif !defined __STRICT_ANSI__
+#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
+#define _HAVE_UINT64_T
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__
+/* note: all ELF-systems seem to have loff-support which needs 64-bit */
+#if !defined _NO_LONGLONG
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+#endif
+
+#elif defined __alpha || (defined __mips && defined _ABIN32)
+#if !defined _NO_LONGLONG
+typedef long int64_t;
+typedef unsigned long uint64_t;
+#endif
+ /* compiler/cpu type to define int64_t */
+#endif
+#endif
+#endif
+
+#if defined _STDINT_HAVE_U_INT_TYPES
+/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */
+typedef u_int8_t uint8_t;
+typedef u_int16_t uint16_t;
+typedef u_int32_t uint32_t;
+
+/* glibc compatibility */
+#ifndef __int8_t_defined
+#define __int8_t_defined
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INT_MODEL_T
+/* we must guess all the basic types. Apart from byte-adressable system, */
+/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */
+/* (btw, those nibble-addressable systems are way off, or so we assume) */
+
+dnl /* have a look at "64bit and data size neutrality" at */
+dnl /* http://unix.org/version2/whatsnew/login_64bit.html */
+dnl /* (the shorthand "ILP" types always have a "P" part) */
+
+#if defined _STDINT_BYTE_MODEL
+#if _STDINT_LONG_MODEL+0 == 242
+/* 2:4:2 = IP16 = a normal 16-bit system */
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned long uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef char int8_t;
+typedef short int16_t;
+typedef long int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444
+/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */
+/* 4:4:4 = ILP32 = a normal 32-bit system */
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488
+/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */
+/* 4:8:8 = LP64 = a normal 64-bit system */
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+#endif
+/* this system has a "long" of 64bit */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+typedef unsigned long uint64_t;
+typedef long int64_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 448
+/* LLP64 a 64-bit system derived from a 32-bit system */
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+#endif
+/* assuming the system has a "long long" */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef unsigned long long uint64_t;
+typedef long long int64_t;
+#endif
+#else
+#define _STDINT_NO_INT32_T
+#endif
+#else
+#define _STDINT_NO_INT8_T
+#define _STDINT_NO_INT32_T
+#endif
+#endif
+
+/*
+ * quote from SunOS-5.8 sys/inttypes.h:
+ * Use at your own risk. As of February 1996, the committee is squarely
+ * behind the fixed sized types; the "least" and "fast" types are still being
+ * discussed. The probability that the "fast" types may be removed before
+ * the standard is finalized is high enough that they are not currently
+ * implemented.
+ */
+
+#if defined _STDINT_NEED_INT_LEAST_T
+typedef int8_t int_least8_t;
+typedef int16_t int_least16_t;
+typedef int32_t int_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef int64_t int_least64_t;
+#endif
+
+typedef uint8_t uint_least8_t;
+typedef uint16_t uint_least16_t;
+typedef uint32_t uint_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t uint_least64_t;
+#endif
+ /* least types */
+#endif
+
+#if defined _STDINT_NEED_INT_FAST_T
+typedef int8_t int_fast8_t;
+typedef int int_fast16_t;
+typedef int32_t int_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef int64_t int_fast64_t;
+#endif
+
+typedef uint8_t uint_fast8_t;
+typedef unsigned uint_fast16_t;
+typedef uint32_t uint_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t uint_fast64_t;
+#endif
+ /* fast types */
+#endif
+
+#ifdef _STDINT_NEED_INTMAX_T
+#ifdef _HAVE_UINT64_T
+typedef int64_t intmax_t;
+typedef uint64_t uintmax_t;
+#else
+typedef long intmax_t;
+typedef unsigned long uintmax_t;
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INTPTR_T
+#ifndef __intptr_t_defined
+#define __intptr_t_defined
+/* we encourage using "long" to store pointer values, never use "int" ! */
+#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484
+typedef unsigned int uintptr_t;
+typedef int intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444
+typedef unsigned long uintptr_t;
+typedef long intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T
+typedef uint64_t uintptr_t;
+typedef int64_t intptr_t;
+#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */
+typedef unsigned long uintptr_t;
+typedef long intptr_t;
+#endif
+#endif
+#endif
+
+/* The ISO C99 standard specifies that in C++ implementations these
+ should only be defined if explicitly requested. */
+#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
+#ifndef UINT32_C
+
+/* Signed. */
+# define INT8_C(c) c
+# define INT16_C(c) c
+# define INT32_C(c) c
+# ifdef _HAVE_LONGLONG_UINT64_T
+# define INT64_C(c) c ## L
+# else
+# define INT64_C(c) c ## LL
+# endif
+
+/* Unsigned. */
+# define UINT8_C(c) c ## U
+# define UINT16_C(c) c ## U
+# define UINT32_C(c) c ## U
+# ifdef _HAVE_LONGLONG_UINT64_T
+# define UINT64_C(c) c ## UL
+# else
+# define UINT64_C(c) c ## ULL
+# endif
+
+/* Maximal type. */
+# ifdef _HAVE_LONGLONG_UINT64_T
+# define INTMAX_C(c) c ## L
+# define UINTMAX_C(c) c ## UL
+# else
+# define INTMAX_C(c) c ## LL
+# define UINTMAX_C(c) c ## ULL
+# endif
+
+ /* literalnumbers */
+#endif
+#endif
+
+/* These limits are merily those of a two complement byte-oriented system */
+
+/* Minimum of signed integral types. */
+# define INT8_MIN (-128)
+# define INT16_MIN (-32767-1)
+# define INT32_MIN (-2147483647-1)
+# define INT64_MIN (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types. */
+# define INT8_MAX (127)
+# define INT16_MAX (32767)
+# define INT32_MAX (2147483647)
+# define INT64_MAX (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types. */
+# define UINT8_MAX (255)
+# define UINT16_MAX (65535)
+# define UINT32_MAX (4294967295U)
+# define UINT64_MAX (__UINT64_C(18446744073709551615))
+
+/* Minimum of signed integral types having a minimum size. */
+# define INT_LEAST8_MIN INT8_MIN
+# define INT_LEAST16_MIN INT16_MIN
+# define INT_LEAST32_MIN INT32_MIN
+# define INT_LEAST64_MIN INT64_MIN
+/* Maximum of signed integral types having a minimum size. */
+# define INT_LEAST8_MAX INT8_MAX
+# define INT_LEAST16_MAX INT16_MAX
+# define INT_LEAST32_MAX INT32_MAX
+# define INT_LEAST64_MAX INT64_MAX
+
+/* Maximum of unsigned integral types having a minimum size. */
+# define UINT_LEAST8_MAX UINT8_MAX
+# define UINT_LEAST16_MAX UINT16_MAX
+# define UINT_LEAST32_MAX UINT32_MAX
+# define UINT_LEAST64_MAX UINT64_MAX
+
+ /* shortcircuit*/
+#endif
+ /* once */
+#endif
+#endif
+STDINT_EOF
+fi
+ if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
+ AC_MSG_NOTICE([$ac_stdint_h is unchanged])
+ else
+ ac_dir=`AS_DIRNAME(["$ac_stdint_h"])`
+ AS_MKDIR_P(["$ac_dir"])
+ rm -f $ac_stdint_h
+ mv $ac_stdint $ac_stdint_h
+ fi
+],[# variables for create stdint.h replacement
+PACKAGE="$PACKAGE"
+VERSION="$VERSION"
+ac_stdint_h="$ac_stdint_h"
+_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h)
+ac_cv_stdint_message="$ac_cv_stdint_message"
+ac_cv_header_stdint_t="$ac_cv_header_stdint_t"
+ac_cv_header_stdint_x="$ac_cv_header_stdint_x"
+ac_cv_header_stdint_o="$ac_cv_header_stdint_o"
+ac_cv_header_stdint_u="$ac_cv_header_stdint_u"
+ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
+ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
+ac_cv_char_data_model="$ac_cv_char_data_model"
+ac_cv_long_data_model="$ac_cv_long_data_model"
+ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
+ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
+ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
+])
+])
diff --git a/chromium/third_party/fontconfig/src/m4/ax_pthread.m4 b/chromium/third_party/fontconfig/src/m4/ax_pthread.m4
new file mode 100644
index 00000000000..d90de34d14b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/m4/ax_pthread.m4
@@ -0,0 +1,309 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+# This macro figures out how to build C programs using POSIX threads. It
+# sets the PTHREAD_LIBS output variable to the threads library and linker
+# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+# flags that are needed. (The user can also force certain compiler
+# flags/libs to be tested by setting these environment variables.)
+#
+# Also sets PTHREAD_CC to any special C compiler that is needed for
+# multi-threaded programs (defaults to the value of CC otherwise). (This
+# is necessary on AIX to use the special cc_r compiler alias.)
+#
+# NOTE: You are assumed to not only compile your program with these flags,
+# but also link it with them as well. e.g. you should link with
+# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+# If you are only building threads programs, you may wish to use these
+# variables in your default LIBS, CFLAGS, and CC:
+#
+# LIBS="$PTHREAD_LIBS $LIBS"
+# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+# CC="$PTHREAD_CC"
+#
+# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+# PTHREAD_CFLAGS.
+#
+# ACTION-IF-FOUND is a list of shell commands to run if a threads library
+# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+# is not found. If ACTION-IF-FOUND is not specified, the default action
+# will define HAVE_PTHREAD.
+#
+# Please let the authors know if this macro fails on any platform, or if
+# you have any other suggestions or comments. This macro was based on work
+# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+# Alejandro Forero Cuervo to the autoconf macro repository. We are also
+# grateful for the helpful feedback of numerous users.
+#
+# Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 18
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+ AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
+ AC_MSG_RESULT($ax_pthread_ok)
+ if test x"$ax_pthread_ok" = xno; then
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+ fi
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try. Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important. Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+# other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+# doesn't hurt to check since this sometimes defines pthreads too;
+# also defines -D_REENTRANT)
+# ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+ solaris*)
+
+ # On Solaris (at least, for some versions), libc contains stubbed
+ # (non-functional) versions of the pthreads routines, so link-based
+ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
+ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
+ # a function called by this macro, so we could check for that, but
+ # who knows whether they'll stub that too in a future libc.) So,
+ # we'll just look for -pthreads and -lpthread first:
+
+ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+ ;;
+
+ darwin*)
+ ax_pthread_flags="-pthread $ax_pthread_flags"
+ ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+ case $flag in
+ none)
+ AC_MSG_CHECKING([whether pthreads work without any flags])
+ ;;
+
+ -*)
+ AC_MSG_CHECKING([whether pthreads work with $flag])
+ PTHREAD_CFLAGS="$flag"
+ ;;
+
+ pthread-config)
+ AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+ if test x"$ax_pthread_config" = xno; then continue; fi
+ PTHREAD_CFLAGS="`pthread-config --cflags`"
+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+ ;;
+
+ *)
+ AC_MSG_CHECKING([for the pthreads library -l$flag])
+ PTHREAD_LIBS="-l$flag"
+ ;;
+ esac
+
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+ # Check for various functions. We must include pthread.h,
+ # since some functions may be macros. (On the Sequent, we
+ # need a special flag -Kthread to make this header compile.)
+ # We check for pthread_join because it is in -lpthread on IRIX
+ # while pthread_create is in libc. We check for pthread_attr_init
+ # due to DEC craziness with -lpthreads. We check for
+ # pthread_cleanup_push because it is one of the few pthread
+ # functions on Solaris that doesn't have a non-functional libc stub.
+ # We try pthread_create on general principles.
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+ static void routine(void *a) { a = 0; }
+ static void *start_routine(void *a) { return a; }],
+ [pthread_t th; pthread_attr_t attr;
+ pthread_create(&th, 0, start_routine, 0);
+ pthread_join(th, 0);
+ pthread_attr_init(&attr);
+ pthread_cleanup_push(routine, 0);
+ pthread_cleanup_pop(0) /* ; */])],
+ [ax_pthread_ok=yes],
+ [])
+
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+
+ AC_MSG_RESULT($ax_pthread_ok)
+ if test "x$ax_pthread_ok" = xyes; then
+ break;
+ fi
+
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+ AC_MSG_CHECKING([for joinable pthread attribute])
+ attr_name=unknown
+ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+ [int attr = $attr; return attr /* ; */])],
+ [attr_name=$attr; break],
+ [])
+ done
+ AC_MSG_RESULT($attr_name)
+ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+ [Define to necessary symbol if this constant
+ uses a non-standard name on your system.])
+ fi
+
+ AC_MSG_CHECKING([if more special flags are required for pthreads])
+ flag=no
+ case ${host_os} in
+ aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+ osf* | hpux*) flag="-D_REENTRANT";;
+ solaris*)
+ if test "$GCC" = "yes"; then
+ flag="-D_REENTRANT"
+ else
+ flag="-mt -D_REENTRANT"
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT(${flag})
+ if test "x$flag" != xno; then
+ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+ fi
+
+ AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+ ax_cv_PTHREAD_PRIO_INHERIT, [
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
+ [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+ [ax_cv_PTHREAD_PRIO_INHERIT=no])
+ ])
+ AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
+ AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
+
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+
+ # More AIX lossage: must compile with xlc_r or cc_r
+ if test x"$GCC" != xyes; then
+ AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+ else
+ PTHREAD_CC=$CC
+ fi
+else
+ PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+ :
+else
+ ax_pthread_ok=no
+ $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
diff --git a/chromium/third_party/fontconfig/src/new-version.sh b/chromium/third_party/fontconfig/src/new-version.sh
new file mode 100644
index 00000000000..36e46f59350
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/new-version.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+if [ "x`git status -s -uno`" != "x" ]; then
+ echo 'Uncommited changes in repository' 1>&2
+ exit 1
+fi
+
+version="$1"
+case "$version" in
+2.[0-9.]*)
+ ;;
+*)
+ echo 'Invalid version number:' "$version" 1>&2
+ exit 1
+ ;;
+esac
+
+eval `echo $version |
+ awk -F. '{ printf ("major=%d\nminor=%d\nrevision=%d\n",
+ $1, $2, $3); }'`
+
+# Update the version numbers
+
+sed -i configure.ac -e "/^AC_INIT(/s/2\.[0-9.]*/$version/"
+
+sed -i fontconfig/fontconfig.h \
+ -e "/^#define FC_MAJOR/s/[0-9][0-9]*/$major/" \
+ -e "/^#define FC_MINOR/s/[0-9][0-9]*/$minor/" \
+ -e "/^#define FC_REVISION/s/[0-9][0-9]*/$revision/"
+
+#
+# Compute pretty form of new version number
+#
+version_note=`echo $version | awk -F. '{
+ if ($3 > 90)
+ printf ("%d.%d.%d (%d.%d RC%d)\n",
+ $1, $2, $3, $1, $2 + 1, $3 - 90);
+ else if ($3 == 0)
+ printf ("%d.%d\n", $1, $2);
+ else
+ printf ("%d.%d.%d\n", $1, $2, $3); }'`
+
+#
+# Find previous version in README
+#
+last_note=`grep '^2\.[0-9.]*' README |
+ head -1 |
+ sed 's/ (2\.[0-9]* RC[0-9]*)//'`
+case $last_note in
+2.*.*)
+ last=$last_note
+ ;;
+2.*)
+ last="$last_note.0"
+ ;;
+*)
+ echo 'cannot find previous changelog' 1>&2
+ exit 1
+esac
+
+#
+# Format the current date for the README header
+#
+date=`date '+%Y-%m-%d'`
+
+#
+# Update the readme file
+#
+if [ $version != $last ]; then
+ #
+ # header
+ #
+ (sed '/^2\.[0-9.]*/,$d' README |
+ sed -r -e "s/Version.*/Version $version_note/" \
+ -e "s/[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/$date/" | awk '
+ /^[ \t]/ {
+ gsub ("^[ \t]*", "");
+ gsub ("[ \t]*$", "");
+ space=(70 - length) / 2;
+ for (i = 0; i < space; i++)
+ printf (" ");
+ print
+ next
+ }
+ {
+ print
+ }'
+
+ #
+ # changelog
+ #
+
+ echo $version_note
+ echo
+ git log --pretty=short $last.. | git shortlog | cat
+
+ #
+ # previous changelogs
+ #
+
+ sed -n '/^2\.[0-9.]*/,$p' README) > README.tmp ||
+ (echo "README update failed"; exit 1)
+
+ mv README.tmp README
+fi
+
+$test git commit -m"Bump version to $version" \
+ configure.ac \
+ fontconfig/fontconfig.h \
+ README
+
+# tag the tree
+$test git tag -s -m "Version $version" $version
+
+# Make distributed change log
+
+git log --stat $last.. > ChangeLog-$version
+
diff --git a/chromium/third_party/fontconfig/src/src/Makefile.am b/chromium/third_party/fontconfig/src/src/Makefile.am
new file mode 100644
index 00000000000..066cc03e718
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/Makefile.am
@@ -0,0 +1,213 @@
+#
+# 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.
+
+EXTRA_DIST =
+
+if OS_WIN32
+
+export_symbols = -export-symbols fontconfig.def
+
+fontconfig_def_dependency = fontconfig.def
+
+# gcc import library install/uninstall
+
+install-libtool-import-lib: libfontconfig.la
+ $(MKDIR_P) $(DESTDIR)$(libdir)
+ $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)/libfontconfig.dll.a
+ $(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
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/src \
+ $(FREETYPE_CFLAGS) \
+ $(ICONV_CFLAGS) \
+ $(LIBXML2_CFLAGS) \
+ $(EXPAT_CFLAGS) \
+ $(WARN_CFLAGS) \
+ -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
+ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"'
+
+EXTRA_DIST += makealias
+
+noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h fcstdint.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 \
+ stamp-fcstdint \
+ fcobjshash.h \
+ fcobjshash.gperf
+
+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
+
+fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h
+ $(AM_V_GEN) $(CPP) -I$(top_srcdir) $< | \
+ $(SED) 's/^ *//;s/ *, */,/' | \
+ $(GREP) '^[^#]' | \
+ awk ' \
+ /CUT_OUT_BEGIN/ { no_write=1; next; }; \
+ /CUT_OUT_END/ { no_write=0; next; }; \
+ { if (!no_write) print; next; }; \
+ ' - > $@.tmp && \
+ mv -f $@.tmp $@ || ( $(RM) $@.tmp && false )
+
+fcobjshash.h: fcobjshash.gperf
+ $(AM_V_GEN) $(GPERF) -m 100 $< > $@.tmp && \
+ mv -f $@.tmp $@ || ( $(RM) $@.tmp && false )
+
+EXTRA_DIST += \
+ fcobjshash.gperf.h \
+ fcobjshash.gperf \
+ fcobjshash.h
+
+libfontconfig_la_SOURCES = \
+ fcarch.h \
+ fcatomic.c \
+ fcatomic.h \
+ fcblanks.c \
+ fccache.c \
+ fccfg.c \
+ fccharset.c \
+ fccompat.c \
+ fcdbg.c \
+ fcdefault.c \
+ fcdir.c \
+ fcformat.c \
+ fcfreetype.c \
+ fcfs.c \
+ fchash.c \
+ fcinit.c \
+ fclang.c \
+ fclist.c \
+ fcmatch.c \
+ fcmatrix.c \
+ fcmutex.h \
+ fcname.c \
+ fcobjs.c \
+ fcobjs.h \
+ fcobjshash.h \
+ fcpat.c \
+ fcserialize.c \
+ fcstat.c \
+ fcstr.c \
+ fcwindows.h \
+ 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)
+
+if ENABLE_SHARED
+install-data-local: install-ms-import-lib install-libtool-import-lib
+
+uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib
+endif
+
+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)
+ $(AM_V_GEN) 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)
+ $(AM_V_GEN) sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES)
+
+stamp-fcstdint: $(top_builddir)/config.status
+ $(AM_V_GEN) cd $(top_builddir) && \
+ $(SHELL) ./config.status src/fcstdint.h
+ @touch $@
+
+CLEANFILES = $(ALIAS_FILES) fontconfig.def
+DISTCLEANFILES = stamp-fcstdint fcstdint.h
+
+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)
+
+-include $(top_srcdir)/git.mk
diff --git a/chromium/third_party/fontconfig/src/src/fcarch.c b/chromium/third_party/fontconfig/src/src/fcarch.c
new file mode 100644
index 00000000000..398f4bbfcd5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcarch.c
@@ -0,0 +1,60 @@
+/*
+ * 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>
+
+#include "fcint.h"
+#include "fcarch.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*FC_MAX(SIZEOF_VOID_P,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));
+
+
+int
+main (int argc FC_UNUSED, char **argv FC_UNUSED)
+{
+ printf ("%s\n", FC_ARCHITECTURE);
+ return 0;
+}
diff --git a/chromium/third_party/fontconfig/src/src/fcarch.h b/chromium/third_party/fontconfig/src/src/fcarch.h
new file mode 100644
index 00000000000..049a5b02b93
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcarch.h
@@ -0,0 +1,76 @@
+/*
+ * 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 fcarch.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(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN
+# define FC_ARCH_ENDIAN "le"
+#elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN
+# define FC_ARCH_ENDIAN "be"
+#elif defined(__DARWIN_BYTE_ORDER) && __DARWIN_BYTE_ORDER == __DARWIN_PDP_ENDIAN
+# define FC_ARCH_ENDIAN "pe"
+#elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
+# define FC_ARCH_ENDIAN "be"
+#else
+# 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
+
+/* config.h might override this */
+#ifndef FC_ARCHITECTURE
+# define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN
+#endif
+
+#endif /* _FCARCH_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fcatomic.c b/chromium/third_party/fontconfig/src/src/fcatomic.c
new file mode 100644
index 00000000000..c1daed938e5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcatomic.c
@@ -0,0 +1,229 @@
+/*
+ * 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 <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+
+#ifdef _WIN32
+#include <direct.h>
+#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;
+
+ 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 ret;
+ struct stat lck_stat;
+
+#ifdef HAVE_LINK
+ int fd = -1;
+ FILE *f = 0;
+ FcBool no_link = FcFalse;
+
+ strcpy ((char *) atomic->tmp, (char *) atomic->file);
+ strcat ((char *) atomic->tmp, TMP_NAME);
+ fd = FcMakeTempfile ((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);
+ if (ret < 0 && errno == EPERM)
+ {
+ /* the filesystem where atomic->lck points to may not supports
+ * the hard link. so better try to fallback
+ */
+ ret = mkdir ((char *) atomic->lck, 0600);
+ no_link = FcTrue;
+ }
+ (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 (no_link)
+ {
+ if (rmdir ((char *) atomic->lck) == 0)
+ return FcAtomicLock (atomic);
+ }
+ else
+ {
+ 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 ((const char *) 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
+ if (unlink ((char *) atomic->lck) == -1)
+ rmdir ((char *) atomic->lck);
+#else
+ rmdir ((char *) atomic->lck);
+#endif
+}
+
+void
+FcAtomicDestroy (FcAtomic *atomic)
+{
+ free (atomic);
+}
+#define __fcatomic__
+#include "fcaliastail.h"
+#undef __fcatomic__
diff --git a/chromium/third_party/fontconfig/src/src/fcatomic.h b/chromium/third_party/fontconfig/src/src/fcatomic.h
new file mode 100644
index 00000000000..362e52164b7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcatomic.h
@@ -0,0 +1,145 @@
+/*
+ * Mutex operations. Originally copied from HarfBuzz.
+ *
+ * Copyright © 2007 Chris Wilson
+ * Copyright © 2009,2010 Red Hat, Inc.
+ * Copyright © 2011,2012,2013 Google, Inc.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Contributor(s):
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef _FCATOMIC_H_
+#define _FCATOMIC_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+/* atomic_int */
+
+/* We need external help for these */
+
+#if 0
+
+
+#elif !defined(FC_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
+
+#include "fcwindows.h"
+
+/* mingw32 does not have MemoryBarrier.
+ * MemoryBarrier may be defined as a macro or a function.
+ * Just make a failsafe version for ourselves. */
+#ifdef MemoryBarrier
+#define HBMemoryBarrier MemoryBarrier
+#else
+static inline void HBMemoryBarrier (void) {
+ long dummy = 0;
+ InterlockedExchange (&dummy, 1);
+}
+#endif
+
+typedef LONG fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V))
+
+#define fc_atomic_ptr_get(P) (HBMemoryBarrier (), (void *) *(P))
+#define fc_atomic_ptr_cmpexch(P,O,N) (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
+
+
+#elif !defined(FC_NO_MT) && defined(__APPLE__)
+
+#include <libkern/OSAtomic.h>
+#ifdef __MAC_OS_X_MIN_REQUIRED
+#include <AvailabilityMacros.h>
+#elif defined(__IPHONE_OS_MIN_REQUIRED)
+#include <Availability.h>
+#endif
+
+typedef int fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) (OSAtomicAdd32Barrier ((V), &(AI)) - (V))
+
+#define fc_atomic_ptr_get(P) (OSMemoryBarrier (), (void *) *(P))
+#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
+#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
+#else
+#if __ppc64__ || __x86_64__
+#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
+#else
+#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
+#endif
+#endif
+
+#elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
+
+typedef int fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) __sync_fetch_and_add (&(AI), (V))
+
+#define fc_atomic_ptr_get(P) (void *) (__sync_synchronize (), *(P))
+#define fc_atomic_ptr_cmpexch(P,O,N) __sync_bool_compare_and_swap ((P), (O), (N))
+
+
+#elif !defined(FC_NO_MT) && defined(HAVE_SOLARIS_ATOMIC_OPS)
+
+#include <atomic.h>
+#include <mbarrier.h>
+
+typedef unsigned int fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) ( ({__machine_rw_barrier ();}), atomic_add_int_nv (&(AI), (V)) - (V))
+
+#define fc_atomic_ptr_get(P) ( ({__machine_rw_barrier ();}), (void *) *(P))
+#define fc_atomic_ptr_cmpexch(P,O,N) ( ({__machine_rw_barrier ();}), atomic_cas_ptr ((P), (O), (N)) == (void *) (O) ? FcTrue : FcFalse)
+
+
+#elif !defined(FC_NO_MT)
+
+#define FC_ATOMIC_INT_NIL 1 /* Warn that fallback implementation is in use. */
+typedef volatile int fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) (((AI) += (V)) - (V))
+
+#define fc_atomic_ptr_get(P) ((void *) *(P))
+#define fc_atomic_ptr_cmpexch(P,O,N) (* (void * volatile *) (P) == (void *) (O) ? (* (void * volatile *) (P) = (void *) (N), FcTrue) : FcFalse)
+
+
+#else /* FC_NO_MT */
+
+typedef int fc_atomic_int_t;
+#define fc_atomic_int_add(AI, V) (((AI) += (V)) - (V))
+
+#define fc_atomic_ptr_get(P) ((void *) *(P))
+#define fc_atomic_ptr_cmpexch(P,O,N) (* (void **) (P) == (void *) (O) ? (* (void **) (P) = (void *) (N), FcTrue) : FcFalse)
+
+#endif
+
+/* reference count */
+#define FC_REF_CONSTANT_VALUE ((fc_atomic_int_t) -1)
+#define FC_REF_CONSTANT {FC_REF_CONSTANT_VALUE}
+typedef struct _FcRef { fc_atomic_int_t count; } FcRef;
+static inline void FcRefInit (FcRef *r, int v) { r->count = v; }
+static inline int FcRefInc (FcRef *r) { return fc_atomic_int_add (r->count, +1); }
+static inline int FcRefDec (FcRef *r) { return fc_atomic_int_add (r->count, -1); }
+static inline int FcRefAdd (FcRef *r, int v) { return fc_atomic_int_add (r->count, v); }
+static inline void FcRefSetConst (FcRef *r) { r->count = FC_REF_CONSTANT_VALUE; }
+static inline FcBool FcRefIsConst (const FcRef *r) { return r->count == FC_REF_CONSTANT_VALUE; }
+
+#endif /* _FCATOMIC_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fcblanks.c b/chromium/third_party/fontconfig/src/src/fcblanks.c
new file mode 100644
index 00000000000..46698bcdac3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcblanks.c
@@ -0,0 +1,87 @@
+/*
+ * 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;
+ b->nblank = 0;
+ b->sblank = 0;
+ b->blanks = 0;
+ return b;
+}
+
+void
+FcBlanksDestroy (FcBlanks *b)
+{
+ if (b->blanks)
+ free (b->blanks);
+ 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;
+ 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/chromium/third_party/fontconfig/src/src/fccache.c b/chromium/third_party/fontconfig/src/src/fccache.c
new file mode 100644
index 00000000000..3568595eda5
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fccache.c
@@ -0,0 +1,1464 @@
+/*
+ * 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 <stdlib.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))
+
+static FcBool
+FcCacheIsMmapSafe (int fd)
+{
+ enum {
+ MMAP_NOT_INITIALIZED = 0,
+ MMAP_USE,
+ MMAP_DONT_USE,
+ MMAP_CHECK_FS,
+ } status;
+ static void *static_status;
+
+ status = (intptr_t) fc_atomic_ptr_get (&static_status);
+
+ if (status == MMAP_NOT_INITIALIZED)
+ {
+ const char *env = getenv ("FONTCONFIG_USE_MMAP");
+ FcBool use;
+ if (env && FcNameBool ((const FcChar8 *) env, &use))
+ status = use ? MMAP_USE : MMAP_DONT_USE;
+ else
+ status = MMAP_CHECK_FS;
+ (void) fc_atomic_ptr_cmpexch (&static_status, NULL, (void *) status);
+ }
+
+ if (status == MMAP_CHECK_FS)
+ return FcIsFsMmapSafe (fd);
+ else
+ return status == MMAP_USE;
+
+}
+
+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;
+ const FcChar8 *sysroot = FcConfigGetSysRoot (config);
+
+ FcDirCacheBasename (dir, cache_base);
+
+ list = FcStrListCreate (config->cacheDirs);
+ if (!list)
+ return FcFalse;
+
+ while ((cache_dir = FcStrListNext (list)))
+ {
+ if (sysroot)
+ cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL);
+ else
+ cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL);
+ 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 = FcOpen((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 (FcStatChecksum (dir, &dir_stat) < 0)
+ return FcFalse;
+
+ FcDirCacheBasename (dir, cache_base);
+
+ list = FcStrListCreate (config->cacheDirs);
+ if (!list)
+ return FcFalse;
+
+ while ((cache_dir = FcStrListNext (list)))
+ {
+ const FcChar8 *sysroot = FcConfigGetSysRoot (config);
+ FcChar8 *cache_hashed;
+
+ if (sysroot)
+ cache_hashed = FcStrBuildFilename (sysroot, cache_dir, cache_base, NULL);
+ else
+ cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL);
+ 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;
+ FcRef 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
+
+/* Protected by cache_lock below */
+static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL];
+static int fcCacheMaxLevel;
+
+
+static FcMutex *cache_lock;
+
+static void
+lock_cache (void)
+{
+ FcMutex *lock;
+retry:
+ lock = fc_atomic_ptr_get (&cache_lock);
+ if (!lock) {
+ lock = (FcMutex *) malloc (sizeof (FcMutex));
+ FcMutexInit (lock);
+ if (!fc_atomic_ptr_cmpexch (&cache_lock, NULL, lock)) {
+ FcMutexFinish (lock);
+ goto retry;
+ }
+
+ FcMutexLock (lock);
+ /* Initialize random state */
+ FcRandom ();
+ return;
+ }
+ FcMutexLock (lock);
+}
+
+static void
+unlock_cache (void)
+{
+ FcMutexUnlock (cache_lock);
+}
+
+static void
+free_lock (void)
+{
+ FcMutex *lock;
+ lock = fc_atomic_ptr_get (&cache_lock);
+ if (lock && fc_atomic_ptr_cmpexch (&cache_lock, lock, NULL)) {
+ FcMutexFinish (lock);
+ free (lock);
+ }
+}
+
+
+
+/*
+ * 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;
+
+ lock_cache ();
+
+ /*
+ * 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;
+ FcRefInit (&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;
+ }
+
+ unlock_cache ();
+ return FcTrue;
+}
+
+static FcCacheSkip *
+FcCacheFindByAddrUnlocked (void *object)
+{
+ int i;
+ FcCacheSkip **next = fcCacheChains;
+ FcCacheSkip *s;
+
+ if (!object)
+ return NULL;
+
+ /*
+ * 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 FcCacheSkip *
+FcCacheFindByAddr (void *object)
+{
+ FcCacheSkip *ret;
+ lock_cache ();
+ ret = FcCacheFindByAddrUnlocked (object);
+ unlock_cache ();
+ return ret;
+}
+
+static void
+FcCacheRemoveUnlocked (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;
+
+ lock_cache ();
+ 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)
+ {
+ FcRefInc (&s->ref);
+ unlock_cache ();
+ return s->cache;
+ }
+ unlock_cache ();
+ return NULL;
+}
+
+static void
+FcDirCacheDisposeUnlocked (FcCache *cache)
+{
+ FcCacheRemoveUnlocked (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;
+ }
+}
+
+void
+FcCacheObjectReference (void *object)
+{
+ FcCacheSkip *skip = FcCacheFindByAddr (object);
+
+ if (skip)
+ FcRefInc (&skip->ref);
+}
+
+void
+FcCacheObjectDereference (void *object)
+{
+ FcCacheSkip *skip;
+
+ lock_cache ();
+ skip = FcCacheFindByAddrUnlocked (object);
+ if (skip)
+ {
+ if (FcRefDec (&skip->ref) == 1)
+ FcDirCacheDisposeUnlocked (skip->cache);
+ }
+ unlock_cache ();
+}
+
+void
+FcCacheFini (void)
+{
+ int i;
+
+ for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
+ assert (fcCacheChains[i] == NULL);
+ assert (fcCacheMaxLevel == 0);
+
+ free_lock ();
+}
+
+static FcBool
+FcCacheTimeValid (FcCache *cache, struct stat *dir_stat)
+{
+ struct stat dir_static;
+
+ if (!dir_stat)
+ {
+ if (FcStatChecksum (FcCacheDir (cache), &dir_static) < 0)
+ return FcFalse;
+ dir_stat = &dir_static;
+ }
+ if (FcDebug () & FC_DBG_CACHE)
+ printf ("FcCacheTimeValid dir \"%s\" cache checksum %d dir checksum %d\n",
+ FcCacheDir (cache), cache->checksum, (int) dir_stat->st_mtime);
+ return cache->checksum == (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 < (int) sizeof (FcCache))
+ return NULL;
+ cache = FcCacheFindByStat (fd_stat);
+ if (cache)
+ {
+ if (FcCacheTimeValid (cache, dir_stat))
+ return cache;
+ FcDirCacheUnload (cache);
+ cache = NULL;
+ }
+
+ /*
+ * Large cache files are mmap'ed, smaller cache files are read. This
+ * balances the system cost of mmap against per-process memory usage.
+ */
+ if (FcCacheIsMmapSafe (fd) && 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);
+#ifdef HAVE_POSIX_FADVISE
+ posix_fadvise (fd, 0, fd_stat->st_size, POSIX_FADV_WILLNEED);
+#endif
+ 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 != (intptr_t) 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)
+ FcRefAdd (&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 FC_UNUSED)
+{
+ 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.checksum != (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;
+ FcChar8 *dir_serialize;
+ intptr_t *dirs_serialize;
+ FcFontSet *set_serialize;
+
+ if (!serialize)
+ return NULL;
+ /*
+ * Space for cache structure
+ */
+ FcSerializeReserve (serialize, sizeof (FcCache));
+ /*
+ * Directory name
+ */
+ if (!FcStrSerializeAlloc (serialize, dir))
+ goto bail1;
+ /*
+ * Subdirs
+ */
+ 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->checksum = (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;
+}
+
+/* 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, *d = NULL;
+ FcCacheSkip *skip;
+ struct stat cache_stat;
+ unsigned int magic;
+ int written;
+ const FcChar8 *sysroot = FcConfigGetSysRoot (config);
+
+ /*
+ * 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 (d)
+ FcStrFree (d);
+ if (sysroot)
+ d = FcStrBuildFilename (sysroot, test_dir, NULL);
+ else
+ d = FcStrCopyFilename (test_dir);
+
+ if (access ((char *) d, W_OK) == 0)
+ {
+ cache_dir = FcStrCopyFilename (d);
+ break;
+ }
+ else
+ {
+ /*
+ * If the directory doesn't exist, try to create it
+ */
+ if (access ((char *) d, F_OK) == -1) {
+ if (FcMakeDirectory (d))
+ {
+ cache_dir = FcStrCopyFilename (d);
+ /* Create CACHEDIR.TAG */
+ FcDirCacheCreateTagFile (d);
+ break;
+ }
+ }
+ /*
+ * Otherwise, try making it writable
+ */
+ else if (chmod ((char *) d, 0755) == 0)
+ {
+ cache_dir = FcStrCopyFilename (d);
+ /* Try to create CACHEDIR.TAG too */
+ FcDirCacheCreateTagFile (d);
+ break;
+ }
+ }
+ }
+ if (d)
+ FcStrFree (d);
+ FcStrListDone (list);
+ if (!cache_dir)
+ return FcFalse;
+
+ FcDirCacheBasename (dir, cache_base);
+ cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL);
+ if (!cache_hashed)
+ return FcFalse;
+ FcStrFree (cache_dir);
+
+ 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 = FcOpen((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 && FcStat (cache_hashed, &cache_stat))
+ {
+ lock_cache ();
+ if ((skip = FcCacheFindByAddrUnlocked (cache)))
+ {
+ skip->cache_dev = cache_stat.st_dev;
+ skip->cache_ino = cache_stat.st_ino;
+ skip->cache_mtime = cache_stat.st_mtime;
+ }
+ unlock_cache ();
+ }
+
+ FcStrFree (cache_hashed);
+ FcAtomicUnlock (atomic);
+ FcAtomicDestroy (atomic);
+ return FcTrue;
+
+ bail5:
+ close (fd);
+ bail4:
+ FcAtomicUnlock (atomic);
+ bail3:
+ FcAtomicDestroy (atomic);
+ bail1:
+ FcStrFree (cache_hashed);
+ return FcFalse;
+}
+
+FcBool
+FcDirCacheClean (const FcChar8 *cache_dir, FcBool verbose)
+{
+ DIR *d;
+ struct dirent *ent;
+ FcChar8 *dir;
+ FcBool ret = FcTrue;
+ FcBool remove;
+ FcCache *cache;
+ struct stat target_stat;
+ const FcChar8 *sysroot;
+
+ /* FIXME: this API needs to support non-current FcConfig */
+ sysroot = FcConfigGetSysRoot (NULL);
+ if (sysroot)
+ dir = FcStrBuildFilename (sysroot, cache_dir, NULL);
+ else
+ dir = FcStrCopyFilename (cache_dir);
+ if (!dir)
+ {
+ fprintf (stderr, "Fontconfig error: %s: out of memory\n", cache_dir);
+ return FcFalse;
+ }
+ if (access ((char *) dir, W_OK) != 0)
+ {
+ if (verbose || FcDebug () & FC_DBG_CACHE)
+ printf ("%s: not cleaning %s cache directory\n", dir,
+ access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent");
+ goto bail0;
+ }
+ if (verbose || FcDebug () & FC_DBG_CACHE)
+ printf ("%s: cleaning cache directory\n", dir);
+ d = opendir ((char *) dir);
+ if (!d)
+ {
+ perror ((char *) dir);
+ ret = FcFalse;
+ goto bail0;
+ }
+ 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 = FcStrBuildFilename (dir, (FcChar8 *)ent->d_name, NULL);
+ if (!file_name)
+ {
+ fprintf (stderr, "Fontconfig error: %s: allocation failure\n", dir);
+ ret = FcFalse;
+ break;
+ }
+ remove = FcFalse;
+ cache = FcDirCacheLoadFile (file_name, NULL);
+ if (!cache)
+ {
+ if (verbose || FcDebug () & FC_DBG_CACHE)
+ 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 || FcDebug () & FC_DBG_CACHE)
+ printf ("%s: %s: missing directory: %s \n",
+ dir, ent->d_name, target_dir);
+ remove = FcTrue;
+ }
+ FcDirCacheUnload (cache);
+ }
+ if (remove)
+ {
+ if (unlink ((char *) file_name) < 0)
+ {
+ perror ((char *) file_name);
+ ret = FcFalse;
+ }
+ }
+ FcStrFree (file_name);
+ }
+
+ closedir (d);
+ bail0:
+ FcStrFree (dir);
+
+ return ret;
+}
+
+/*
+ * 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;
+}
+
+FcBool
+FcDirCacheCreateTagFile (const FcChar8 *cache_dir)
+{
+ FcChar8 *cache_tag;
+ int fd;
+ FILE *fp;
+ FcAtomic *atomic;
+ static const FcChar8 cache_tag_contents[] =
+ "Signature: 8a477f597d28d172789f06886806bc55\n"
+ "# This file is a cache directory tag created by fontconfig.\n"
+ "# For information about cache directory tags, see:\n"
+ "# http://www.brynosaurus.com/cachedir/\n";
+ static size_t cache_tag_contents_size = sizeof (cache_tag_contents) - 1;
+ FcBool ret = FcFalse;
+
+ if (!cache_dir)
+ return FcFalse;
+
+ if (access ((char *) cache_dir, W_OK) == 0)
+ {
+ /* Create CACHEDIR.TAG */
+ cache_tag = FcStrBuildFilename (cache_dir, "CACHEDIR.TAG", NULL);
+ if (!cache_tag)
+ return FcFalse;
+ atomic = FcAtomicCreate ((FcChar8 *)cache_tag);
+ if (!atomic)
+ goto bail1;
+ if (!FcAtomicLock (atomic))
+ goto bail2;
+ fd = FcOpen((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT, 0644);
+ if (fd == -1)
+ goto bail3;
+ fp = fdopen(fd, "wb");
+ if (fp == NULL)
+ goto bail3;
+
+ fwrite(cache_tag_contents, cache_tag_contents_size, sizeof (FcChar8), fp);
+ fclose(fp);
+
+ if (!FcAtomicReplaceOrig(atomic))
+ goto bail3;
+
+ ret = FcTrue;
+ bail3:
+ FcAtomicUnlock (atomic);
+ bail2:
+ FcAtomicDestroy (atomic);
+ bail1:
+ FcStrFree (cache_tag);
+ }
+
+ if (FcDebug () & FC_DBG_CACHE)
+ {
+ if (ret)
+ printf ("Created CACHEDIR.TAG at %s\n", cache_dir);
+ else
+ printf ("Unable to create CACHEDIR.TAG at %s\n", cache_dir);
+ }
+
+ return ret;
+}
+
+void
+FcCacheCreateTagFile (const FcConfig *config)
+{
+ FcChar8 *cache_dir = NULL, *d = NULL;
+ FcStrList *list;
+ const FcChar8 *sysroot = FcConfigGetSysRoot (config);
+
+ list = FcConfigGetCacheDirs (config);
+ if (!list)
+ return;
+
+ while ((cache_dir = FcStrListNext (list)))
+ {
+ if (d)
+ FcStrFree (d);
+ if (sysroot)
+ d = FcStrBuildFilename (sysroot, cache_dir, NULL);
+ else
+ d = FcStrCopyFilename (cache_dir);
+ if (FcDirCacheCreateTagFile (d))
+ break;
+ }
+ if (d)
+ FcStrFree (d);
+ FcStrListDone (list);
+}
+
+#define __fccache__
+#include "fcaliastail.h"
+#undef __fccache__
diff --git a/chromium/third_party/fontconfig/src/src/fccfg.c b/chromium/third_party/fontconfig/src/src/fccfg.c
new file mode 100644
index 00000000000..6377fd7c6b1
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fccfg.c
@@ -0,0 +1,2352 @@
+/*
+ * 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.
+ */
+
+/* Objects MT-safe for readonly access. */
+
+#include "fcint.h"
+#include <dirent.h>
+#include <sys/types.h>
+
+#if defined (_WIN32) && !defined (R_OK)
+#define R_OK 4
+#endif
+
+static FcConfig *_fcConfig; /* MT-safe */
+
+static FcConfig *
+FcConfigEnsure (void)
+{
+ FcConfig *config;
+retry:
+ config = fc_atomic_ptr_get (&_fcConfig);
+ if (!config)
+ {
+ config = FcInitLoadConfigAndFonts ();
+
+ if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) {
+ FcConfigDestroy (config);
+ goto retry;
+ }
+ }
+ return config;
+}
+
+FcBool
+FcConfigInit (void)
+{
+ return FcConfigEnsure () ? FcTrue : FcFalse;
+}
+
+void
+FcConfigFini (void)
+{
+ FcConfig *cfg = fc_atomic_ptr_get (&_fcConfig);
+ if (cfg && fc_atomic_ptr_cmpexch (&_fcConfig, cfg, NULL))
+ FcConfigDestroy (cfg);
+}
+
+
+FcConfig *
+FcConfigCreate (void)
+{
+ FcSetName set;
+ FcConfig *config;
+
+ config = malloc (sizeof (FcConfig));
+ if (!config)
+ goto bail0;
+
+ 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->sysRoot = NULL;
+
+ FcRefInit (&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);
+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->rule)
+ FcRuleDestroy (s->rule);
+ free (s);
+ 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;
+
+ 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;
+ }
+
+ FcRefInc (&config->ref);
+
+ return config;
+}
+
+void
+FcConfigDestroy (FcConfig *config)
+{
+ FcSetName set;
+ FcExprPage *page;
+
+ if (FcRefDec (&config->ref) != 1)
+ return;
+
+ (void) fc_atomic_ptr_cmpexch (&_fcConfig, config, NULL);
+
+ 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;
+ free (page);
+ page = next;
+ }
+ if (config->sysRoot)
+ FcStrFree (config->sysRoot);
+
+ free (config);
+}
+
+/*
+ * 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;
+
+ if (FcFontSetAdd (config->fonts[set], font))
+ nref++;
+ }
+ 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)
+{
+ FcConfig *cfg;
+
+retry:
+ cfg = fc_atomic_ptr_get (&_fcConfig);
+
+ if (config == cfg)
+ return FcTrue;
+
+ if (config && !config->fonts[FcSetSystem])
+ if (!FcConfigBuildFonts (config))
+ return FcFalse;
+
+ if (!fc_atomic_ptr_cmpexch (&_fcConfig, cfg, config))
+ goto retry;
+
+ if (cfg)
+ FcConfigDestroy (cfg);
+
+ return FcTrue;
+}
+
+FcConfig *
+FcConfigGetCurrent (void)
+{
+ return FcConfigEnsure ();
+}
+
+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 (const 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 FC_UNUSED)
+{
+ 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
+FcConfigAddRule (FcConfig *config,
+ FcRule *rule,
+ FcMatchKind kind)
+{
+ FcSubst *subst, **prev;
+ FcRule *r;
+ int n = 0;
+
+ if (!rule)
+ return FcFalse;
+ 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;
+ for (; *prev; prev = &(*prev)->next);
+ *prev = subst;
+ subst->next = NULL;
+ subst->rule = rule;
+ for (r = rule; r; r = r->next)
+ {
+ switch (r->type)
+ {
+ case FcRuleTest:
+ if (r->u.test &&
+ r->u.test->kind == FcMatchDefault)
+ r->u.test->kind = kind;
+
+ if (n < r->u.test->object)
+ n = r->u.test->object;
+ break;
+ case FcRuleEdit:
+ if (n < r->u.edit->object)
+ n = r->u.edit->object;
+ break;
+ default:
+ break;
+ }
+ }
+ n = FC_OBJ_ID (n) - FC_MAX_BASE_OBJECT;
+ if (config->maxObjects < n)
+ config->maxObjects = n;
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("Add Subst ");
+ FcSubstPrint (subst);
+ }
+ return FcTrue;
+}
+
+static FcValue
+FcConfigPromote (FcValue v, FcValue u, FcValuePromotionBuffer *buf)
+{
+ 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 (buf && v.type == FcTypeString && u.type == FcTypeLangSet)
+ {
+ v.u.l = FcLangSetPromote (v.u.s, buf);
+ v.type = FcTypeLangSet;
+ }
+ return v;
+}
+
+FcBool
+FcConfigCompareValue (const FcValue *left_o,
+ unsigned int op_,
+ const FcValue *right_o)
+{
+ FcValue left = FcValueCanonicalize(left_o);
+ FcValue right = FcValueCanonicalize(right_o);
+ FcBool ret = FcFalse;
+ FcOp op = FC_OP_GET_OP (op_);
+ int flags = FC_OP_GET_FLAGS (op_);
+ FcValuePromotionBuffer buf1, buf2;
+
+ left = FcConfigPromote (left, right, &buf1);
+ right = FcConfigPromote (right, left, &buf2);
+ if (left.type == right.type)
+ {
+ switch (left.type) {
+ case FcTypeUnknown:
+ break; /* No way to guess how to compare for this object */
+ case FcTypeInteger:
+ break; /* FcConfigPromote prevents this from happening */
+ case FcTypeDouble:
+ switch ((int) 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 ((int) 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 ((int) op) {
+ case FcOpEqual:
+ case FcOpListing:
+ if (flags & FcOpFlagIgnoreBlanks)
+ ret = FcStrCmpIgnoreBlanksAndCase (left.u.s, right.u.s) == 0;
+ else
+ ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0;
+ break;
+ case FcOpContains:
+ ret = FcStrStrIgnoreCase (left.u.s, right.u.s) != 0;
+ break;
+ case FcOpNotEqual:
+ if (flags & FcOpFlagIgnoreBlanks)
+ ret = FcStrCmpIgnoreBlanksAndCase (left.u.s, right.u.s) != 0;
+ else
+ 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 ((int) 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 ((int) 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 ((int) 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 ((int) op) {
+ case FcOpEqual:
+ case FcOpContains:
+ case FcOpListing:
+ ret = FcTrue;
+ break;
+ default:
+ break;
+ }
+ break;
+ case FcTypeFTFace:
+ switch ((int) 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, FcPattern *p_pat, FcMatchKind kind, FcExpr *e)
+{
+ FcValue v, vl, vr;
+ FcMatrix *m;
+ FcChar8 *str;
+ FcOp op = FC_OP_GET_OP (e->op);
+
+ switch ((int) 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:
+ {
+ FcMatrix m;
+ FcValue xx, xy, yx, yy;
+ v.type = FcTypeMatrix;
+ xx = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->xx), v, NULL);
+ xy = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->xy), v, NULL);
+ yx = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->yx), v, NULL);
+ yy = FcConfigPromote (FcConfigEvaluate (p, p_pat, kind, e->u.mexpr->yy), v, NULL);
+ if (xx.type == FcTypeDouble && xy.type == FcTypeDouble &&
+ yx.type == FcTypeDouble && yy.type == FcTypeDouble)
+ {
+ m.xx = xx.u.d;
+ m.xy = xy.u.d;
+ m.yx = yx.u.d;
+ m.yy = yy.u.d;
+ v.u.m = &m;
+ }
+ else
+ v.type = FcTypeVoid;
+ 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:
+ if (kind == FcMatchFont && e->u.name.kind == FcMatchPattern)
+ {
+ if (FcResultMatch != FcPatternObjectGet (p_pat, e->u.name.object, 0, &v))
+ v.type = FcTypeVoid;
+ }
+ else if (kind == FcMatchPattern && e->u.name.kind == FcMatchFont)
+ {
+ fprintf (stderr,
+ "Fontconfig warning: <name> tag has target=\"font\" in a <match target=\"pattern\">.\n");
+ v.type = FcTypeVoid;
+ }
+ else
+ {
+ if (FcResultMatch != FcPatternObjectGet (p, e->u.name.object, 0, &v))
+ 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, p_pat, kind, e->u.tree.left);
+ if (vl.type == FcTypeBool)
+ {
+ if (vl.u.b)
+ v = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right->u.tree.left);
+ else
+ v = FcConfigEvaluate (p, p_pat, kind, 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, p_pat, kind, e->u.tree.left);
+ vr = FcConfigEvaluate (p, p_pat, kind, 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, p_pat, kind, e->u.tree.left);
+ vr = FcConfigEvaluate (p, p_pat, kind, e->u.tree.right);
+ vl = FcConfigPromote (vl, vr, NULL);
+ vr = FcConfigPromote (vr, vl, NULL);
+ if (vl.type == vr.type)
+ {
+ switch ((int) vl.type) {
+ case FcTypeDouble:
+ switch ((int) 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 ((int) 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 ((int) op) {
+ case FcOpPlus:
+ v.type = FcTypeString;
+ str = FcStrPlus (vl.u.s, vr.u.s);
+ v.u.s = FcStrdup (str);
+ FcStrFree (str);
+
+ if (!v.u.s)
+ v.type = FcTypeVoid;
+ break;
+ default:
+ v.type = FcTypeVoid;
+ break;
+ }
+ break;
+ case FcTypeMatrix:
+ switch ((int) op) {
+ case FcOpTimes:
+ v.type = FcTypeMatrix;
+ m = malloc (sizeof (FcMatrix));
+ if (m)
+ {
+ 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 ((int) 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 ((int) 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, p_pat, kind, e->u.tree.left);
+ switch ((int) 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, p_pat, kind, e->u.tree.left);
+ switch ((int) 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, p_pat, kind, e->u.tree.left);
+ switch ((int) 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, p_pat, kind, e->u.tree.left);
+ switch ((int) 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, p_pat, kind, e->u.tree.left);
+ switch ((int) 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,
+ FcPattern *p_pat,
+ FcMatchKind kind,
+ 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 (FC_OP_GET_OP (e->op) == FcOpComma)
+ {
+ value = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left);
+ e = e->u.tree.right;
+ }
+ else
+ {
+ value = FcConfigEvaluate (p, p_pat, kind, 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, FcPattern *p_pat, FcMatchKind kind, FcExpr *e, FcValueBinding binding)
+{
+ FcValueList *l;
+
+ if (!e)
+ return 0;
+ l = (FcValueList *) malloc (sizeof (FcValueList));
+ if (!l)
+ return 0;
+ if (FC_OP_GET_OP (e->op) == FcOpComma)
+ {
+ l->value = FcConfigEvaluate (p, p_pat, kind, e->u.tree.left);
+ l->next = FcConfigValues (p, p_pat, kind, e->u.tree.right, binding);
+ }
+ else
+ {
+ l->value = FcConfigEvaluate (p, p_pat, kind, e);
+ l->next = NULL;
+ }
+ l->binding = binding;
+ if (l->value.type == FcTypeVoid)
+ {
+ FcValueList *next = FcValueListNext(l);
+
+ free (l);
+ l = next;
+ }
+
+ return l;
+}
+
+static FcBool
+FcConfigAdd (FcValueListPtr *head,
+ FcValueList *position,
+ FcBool append,
+ FcValueList *new,
+ FcObject object)
+{
+ FcValueListPtr *prev, l, last, v;
+ FcValueBinding sameBinding;
+
+ /*
+ * Make sure the stored type is valid for built-in objects
+ */
+ for (l = new; l != NULL; l = FcValueListNext (l))
+ {
+ if (!FcObjectValidType (object, l->value.type))
+ {
+ fprintf (stderr,
+ "Fontconfig warning: FcPattern object %s does not accept value", FcObjectName (object));
+ FcValuePrintFile (stderr, l->value);
+ fprintf (stderr, "\n");
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("Not adding\n");
+ }
+
+ return FcFalse;
+ }
+ }
+
+ 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");
+ FcValueListPrintWithPosition (*head, *prev);
+ 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, object);
+ }
+}
+
+/*
+ * 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)
+{
+ FcValue v;
+ FcSubst *s;
+ FcRule *r;
+ FcValueList *l, **value = NULL, *vl;
+ FcPattern *m;
+ FcStrSet *strs;
+ FcObject object = FC_INVALID_OBJECT;
+ FcPatternElt **elt = NULL, *e;
+ int i, nobjs;
+ FcBool retval = FcTrue;
+ FcTest **tst = NULL;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return FcFalse;
+ }
+
+ switch (kind) {
+ case FcMatchPattern:
+ s = config->substPattern;
+ strs = FcGetDefaultLangs ();
+ if (strs)
+ {
+ FcStrList *l = FcStrListCreate (strs);
+ FcChar8 *lang;
+ FcValue v;
+
+ FcStrSetDestroy (strs);
+ while (l && (lang = FcStrListNext (l)))
+ {
+ v.type = FcTypeString;
+ v.u.s = lang;
+ FcPatternObjectAddWithBinding (p, FC_LANG_OBJECT, v, FcValueBindingWeak, FcTrue);
+ }
+ FcStrListDone (l);
+ }
+ if (FcPatternObjectGet (p, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcChar8 *prgname = FcGetPrgname ();
+ if (prgname)
+ FcPatternObjectAddString (p, FC_PRGNAME_OBJECT, prgname);
+ }
+ break;
+ case FcMatchFont:
+ s = config->substFont;
+ break;
+ case FcMatchScan:
+ s = config->substScan;
+ break;
+ default:
+ return FcFalse;
+ }
+
+ nobjs = FC_MAX_BASE_OBJECT + config->maxObjects + 2;
+ value = (FcValueList **) malloc (SIZEOF_VOID_P * nobjs);
+ if (!value)
+ {
+ retval = FcFalse;
+ goto bail1;
+ }
+ elt = (FcPatternElt **) malloc (SIZEOF_VOID_P * nobjs);
+ if (!elt)
+ {
+ retval = FcFalse;
+ goto bail1;
+ }
+ tst = (FcTest **) malloc (SIZEOF_VOID_P * nobjs);
+ if (!tst)
+ {
+ retval = FcFalse;
+ goto bail1;
+ }
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute ");
+ FcPatternPrint (p);
+ }
+ for (; s; s = s->next)
+ {
+ r = s->rule;
+ for (i = 0; i < nobjs; i++)
+ {
+ elt[i] = NULL;
+ value[i] = NULL;
+ tst[i] = NULL;
+ }
+ for (; r; r = r->next)
+ {
+ switch (r->type) {
+ case FcRuleUnknown:
+ /* shouldn't be reached */
+ break;
+ case FcRuleTest:
+ object = FC_OBJ_ID (r->u.test->object);
+ /*
+ * Check the tests to see if
+ * they all match the pattern
+ */
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute test ");
+ FcTestPrint (r->u.test);
+ }
+ if (kind == FcMatchFont && r->u.test->kind == FcMatchPattern)
+ m = p_pat;
+ else
+ m = p;
+ if (m)
+ e = FcPatternObjectFindElt (m, r->u.test->object);
+ else
+ e = NULL;
+ /* different 'kind' won't be the target of edit */
+ if (!elt[object] && kind == r->u.test->kind)
+ {
+ elt[object] = e;
+ tst[object] = r->u.test;
+ }
+ /*
+ * If there's no such field in the font,
+ * then FcQualAll matches while FcQualAny does not
+ */
+ if (!e)
+ {
+ if (r->u.test->qual == FcQualAll)
+ {
+ value[object] = NULL;
+ continue;
+ }
+ else
+ {
+ if (FcDebug () & FC_DBG_EDIT)
+ printf ("No match\n");
+ goto bail;
+ }
+ }
+ /*
+ * Check to see if there is a match, mark the location
+ * to apply match-relative edits
+ */
+ vl = FcConfigMatchValueList (m, p_pat, kind, r->u.test, e->values);
+ /* different 'kind' won't be the target of edit */
+ if (!value[object] && kind == r->u.test->kind)
+ value[object] = vl;
+ if (!vl ||
+ (r->u.test->qual == FcQualFirst && vl != e->values) ||
+ (r->u.test->qual == FcQualNotFirst && vl == e->values))
+ {
+ if (FcDebug () & FC_DBG_EDIT)
+ printf ("No match\n");
+ goto bail;
+ }
+ break;
+ case FcRuleEdit:
+ object = FC_OBJ_ID (r->u.edit->object);
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("Substitute ");
+ FcEditPrint (r->u.edit);
+ printf ("\n\n");
+ }
+ /*
+ * Evaluate the list of expressions
+ */
+ l = FcConfigValues (p, p_pat,kind, r->u.edit->expr, r->u.edit->binding);
+ if (tst[object] && (tst[object]->kind == FcMatchFont || kind == FcMatchPattern))
+ elt[object] = FcPatternObjectFindElt (p, tst[object]->object);
+
+ switch (FC_OP_GET_OP (r->u.edit->op)) {
+ case FcOpAssign:
+ /*
+ * If there was a test, then replace the matched
+ * value with the new list of values
+ */
+ if (value[object])
+ {
+ FcValueList *thisValue = value[object];
+ FcValueList *nextValue = l;
+
+ /*
+ * Append the new list of values after the current value
+ */
+ FcConfigAdd (&elt[object]->values, thisValue, FcTrue, l, r->u.edit->object);
+ /*
+ * Delete the marked value
+ */
+ if (thisValue)
+ FcConfigDel (&elt[object]->values, thisValue);
+ /*
+ * Adjust a pointer into the value list to ensure
+ * future edits occur at the same place
+ */
+ value[object] = nextValue;
+ break;
+ }
+ /* fall through ... */
+ case FcOpAssignReplace:
+ /*
+ * Delete all of the values and insert
+ * the new set
+ */
+ FcConfigPatternDel (p, r->u.edit->object);
+ FcConfigPatternAdd (p, r->u.edit->object, l, FcTrue);
+ /*
+ * Adjust a pointer into the value list as they no
+ * longer point to anything valid
+ */
+ value[object] = NULL;
+ break;
+ case FcOpPrepend:
+ if (value[object])
+ {
+ FcConfigAdd (&elt[object]->values, value[object], FcFalse, l, r->u.edit->object);
+ break;
+ }
+ /* fall through ... */
+ case FcOpPrependFirst:
+ FcConfigPatternAdd (p, r->u.edit->object, l, FcFalse);
+ break;
+ case FcOpAppend:
+ if (value[object])
+ {
+ FcConfigAdd (&elt[object]->values, value[object], FcTrue, l, r->u.edit->object);
+ break;
+ }
+ /* fall through ... */
+ case FcOpAppendLast:
+ FcConfigPatternAdd (p, r->u.edit->object, l, FcTrue);
+ break;
+ case FcOpDelete:
+ if (value[object])
+ {
+ FcConfigDel (&elt[object]->values, value[object]);
+ break;
+ }
+ /* fall through ... */
+ case FcOpDeleteAll:
+ FcConfigPatternDel (p, r->u.edit->object);
+ break;
+ default:
+ FcValueListDestroy (l);
+ break;
+ }
+ /*
+ * Now go through the pattern and eliminate
+ * any properties without data
+ */
+ FcConfigPatternCanon (p, r->u.edit->object);
+
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute edit");
+ FcPatternPrint (p);
+ }
+ break;
+ }
+ }
+ bail:;
+ }
+ if (FcDebug () & FC_DBG_EDIT)
+ {
+ printf ("FcConfigSubstitute done");
+ FcPatternPrint (p);
+ }
+bail1:
+ if (elt)
+ free (elt);
+ if (value)
+ free (value);
+ if (tst)
+ free (tst);
+
+ return retval;
+}
+
+FcBool
+FcConfigSubstitute (FcConfig *config,
+ FcPattern *p,
+ FcMatchKind kind)
+{
+ return FcConfigSubstituteWithPat (config, p, 0, kind);
+}
+
+#if defined (_WIN32)
+
+static FcChar8 fontconfig_path[1000] = ""; /* MT-dontcare */
+
+# if (defined (PIC) || defined (DLL_EXPORT))
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved);
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ FcChar8 *p;
+
+ switch (fdwReason) {
+ case DLL_PROCESS_ATTACH:
+ if (!GetModuleFileName ((HMODULE) hinstDLL, (LPCH) 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 = (FcChar8 *) strrchr ((const char *) fontconfig_path, '\\');
+ if (p)
+ {
+ *p = '\0';
+ p = (FcChar8 *) strrchr ((const char *) fontconfig_path, '\\');
+ if (p && (FcStrCmpIgnoreCase (p + 1, (const FcChar8 *) "bin") == 0 ||
+ FcStrCmpIgnoreCase (p + 1, (const FcChar8 *) "lib") == 0))
+ *p = '\0';
+ strcat ((char *) fontconfig_path, "\\etc\\fonts");
+ }
+ else
+ fontconfig_path[0] = '\0';
+
+ break;
+ }
+
+ return TRUE;
+}
+
+# endif /* !PIC */
+
+#undef FONTCONFIG_PATH
+#define FONTCONFIG_PATH fontconfig_path
+
+#endif /* !_WIN32 */
+
+#ifndef FONTCONFIG_FILE
+#define FONTCONFIG_FILE "fonts.conf"
+#endif
+
+static FcChar8 *
+FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
+{
+ FcChar8 *path;
+ int size, osize;
+
+ if (!dir)
+ dir = (FcChar8 *) "";
+
+ osize = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1;
+ /*
+ * workaround valgrind warning because glibc takes advantage of how it knows memory is
+ * allocated to implement strlen by reading in groups of 4
+ */
+ size = (osize + 3) & ~3;
+
+ path = malloc (size);
+ if (!path)
+ return 0;
+
+ strcpy ((char *) path, (const char *) dir);
+ /* make sure there's a single separator */
+#ifdef _WIN32
+ if ((!path[0] || (path[strlen((char *) path)-1] != '/' &&
+ path[strlen((char *) path)-1] != '\\')) &&
+ !(file[0] == '/' ||
+ file[0] == '\\' ||
+ (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\'))))
+ strcat ((char *) path, "\\");
+#else
+ if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/')
+ strcat ((char *) path, "/");
+ else
+ osize--;
+#endif
+ strcat ((char *) path, (char *) file);
+
+ 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, (LPCH) fontconfig_path, sizeof(fontconfig_path)))
+ goto bail1;
+ p = strrchr ((const char *) fontconfig_path, '\\');
+ if (p) *p = '\0';
+ strcat ((char *) 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; /* MT-goodenough */
+
+FcChar8 *
+FcConfigHome (void)
+{
+ if (_FcConfigHomeEnabled)
+ {
+ char *home = getenv ("HOME");
+
+#ifdef _WIN32
+ if (home == NULL)
+ home = getenv ("USERPROFILE");
+#endif
+
+ return (FcChar8 *) home;
+ }
+ return 0;
+}
+
+FcChar8 *
+FcConfigXdgCacheHome (void)
+{
+ const char *env = getenv ("XDG_CACHE_HOME");
+ FcChar8 *ret = NULL;
+
+ if (env)
+ ret = FcStrCopy ((const FcChar8 *)env);
+ else
+ {
+ const FcChar8 *home = FcConfigHome ();
+ size_t len = home ? strlen ((const char *)home) : 0;
+
+ ret = malloc (len + 7 + 1);
+ if (ret)
+ {
+ memcpy (ret, home, len);
+ memcpy (&ret[len], FC_DIR_SEPARATOR_S ".cache", 7);
+ ret[len + 7] = 0;
+ }
+ }
+
+ return ret;
+}
+
+FcChar8 *
+FcConfigXdgConfigHome (void)
+{
+ const char *env = getenv ("XDG_CONFIG_HOME");
+ FcChar8 *ret = NULL;
+
+ if (env)
+ ret = FcStrCopy ((const FcChar8 *)env);
+ else
+ {
+ const FcChar8 *home = FcConfigHome ();
+ size_t len = home ? strlen ((const char *)home) : 0;
+
+ ret = malloc (len + 8 + 1);
+ if (ret)
+ {
+ memcpy (ret, home, len);
+ memcpy (&ret[len], FC_DIR_SEPARATOR_S ".config", 8);
+ ret[len + 8] = 0;
+ }
+ }
+
+ return ret;
+}
+
+FcChar8 *
+FcConfigXdgDataHome (void)
+{
+ const char *env = getenv ("XDG_DATA_HOME");
+ FcChar8 *ret = NULL;
+
+ if (env)
+ ret = FcStrCopy ((const FcChar8 *)env);
+ else
+ {
+ const FcChar8 *home = FcConfigHome ();
+ size_t len = home ? strlen ((const char *)home) : 0;
+
+ ret = malloc (len + 13 + 1);
+ if (ret)
+ {
+ memcpy (ret, home, len);
+ memcpy (&ret[len], FC_DIR_SEPARATOR_S ".local" FC_DIR_SEPARATOR_S "share", 13);
+ ret[len + 13] = 0;
+ }
+ }
+
+ return ret;
+}
+
+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 NULL;
+ 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
+FcConfigGlobsMatch (const FcStrSet *globs,
+ const FcChar8 *string)
+{
+ int i;
+
+ for (i = 0; i < globs->num; i++)
+ if (FcStrGlobMatch (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;
+}
+
+const FcChar8 *
+FcConfigGetSysRoot (const FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return NULL;
+ }
+
+ return config->sysRoot;
+}
+
+void
+FcConfigSetSysRoot (FcConfig *config,
+ const FcChar8 *sysroot)
+{
+ FcChar8 *s;
+ FcBool init = FcFalse;
+
+ if (!config)
+ {
+ /* We can't use FcConfigGetCurrent() here to ensure
+ * the sysroot is set prior to initialize FcConfig,
+ * to avoid loading caches from non-sysroot dirs.
+ * So postpone the initialization later.
+ */
+ config = fc_atomic_ptr_get (&_fcConfig);
+ if (!config)
+ {
+ config = FcConfigCreate ();
+ if (!config)
+ return;
+ init = FcTrue;
+ }
+ }
+
+ s = FcStrCopyFilename (sysroot);
+ if (!s)
+ return;
+
+ if (config->sysRoot)
+ FcStrFree (config->sysRoot);
+
+ config->sysRoot = s;
+ if (init)
+ {
+ config = FcInitLoadOwnConfigAndFonts (config);
+ FcConfigSetCurrent (config);
+ }
+}
+
+#define __fccfg__
+#include "fcaliastail.h"
+#undef __fccfg__
diff --git a/chromium/third_party/fontconfig/src/src/fccharset.c b/chromium/third_party/fontconfig/src/src/fccharset.c
new file mode 100644
index 00000000000..c9f928cd480
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fccharset.c
@@ -0,0 +1,1434 @@
+/*
+ * 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;
+ FcRefInit (&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)
+ {
+ if (FcRefIsConst (&fcs->ref))
+ {
+ FcCacheObjectDereference (fcs);
+ return;
+ }
+ if (FcRefDec (&fcs->ref) != 1)
+ return;
+ for (i = 0; i < fcs->num; i++)
+ free (FcCharSetLeaf (fcs, i));
+ if (fcs->num)
+ {
+ free (FcCharSetLeaves (fcs));
+ free (FcCharSetNumbers (fcs));
+ }
+ 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));
+ }
+ else
+ {
+ unsigned int alloced = fcs->num;
+ intptr_t *new_leaves, distance;
+
+ alloced *= 2;
+ new_leaves = realloc (leaves, alloced * sizeof (*leaves));
+ numbers = realloc (numbers, 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;
+ }
+ return leaf;
+}
+
+static FcBool
+FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf)
+{
+ int pos;
+
+ pos = FcCharSetFindLeafPos (fcs, ucs4);
+ if (pos >= 0)
+ {
+ 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 == NULL || FcRefIsConst (&fcs->ref))
+ 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 == NULL || FcRefIsConst (&fcs->ref))
+ 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)
+ {
+ if (!FcRefIsConst (&src->ref))
+ FcRefInc (&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;
+ if (!a || !b)
+ return FcFalse;
+ 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;
+
+ if (!a || !b)
+ goto bail0;
+ 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 || !b)
+ return FcFalse;
+
+ if (FcRefIsConst (&a->ref)) {
+ 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;
+
+ if (!fcs)
+ return FcFalse;
+ 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;
+
+ if (a && b)
+ {
+ 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;
+
+ if (a)
+ {
+ 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;
+
+ if (a && b)
+ {
+ 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;
+ if (!a || !b)
+ return FcFalse;
+ 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;
+
+ if (!a)
+ return FC_CHARSET_DONE;
+ 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)
+ {
+ free (FcCharSetLeaves (c));
+ }
+ if (c->num)
+ {
+ free (FcCharSetNumbers (c));
+ }
+ 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;
+ 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)
+{
+ 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;
+
+ freezer->charsets_allocated++;
+
+ FcRefSetConst (&ent->set.ref);
+ 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);
+ if (!FcCharSetFreezeOrig (freezer, fcs, n))
+ {
+ n = NULL;
+ goto bail1;
+ }
+ freezer->charsets_seen++;
+ freezer->leaves_seen += fcs->num;
+bail1:
+ if (b->num)
+ free (FcCharSetLeaves (b));
+ if (b->num)
+ free (FcCharSetNumbers (b));
+ 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;
+ 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]);
+
+ free (freezer->leaf_blocks);
+ free (freezer);
+}
+
+FcBool
+FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs)
+{
+ intptr_t *leaves;
+ FcChar16 *numbers;
+ int i;
+
+ if (!FcRefIsConst (&cs->ref))
+ {
+ 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 (!FcRefIsConst (&cs->ref) && serialize->cs_freezer)
+ {
+ cs = FcCharSetFindFrozen (serialize->cs_freezer, cs);
+ if (!cs)
+ return NULL;
+ }
+
+ cs_serialized = FcSerializePtr (serialize, cs);
+ if (!cs_serialized)
+ return NULL;
+
+ FcRefSetConst (&cs_serialized->ref);
+ 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/chromium/third_party/fontconfig/src/src/fccompat.c b/chromium/third_party/fontconfig/src/src/fccompat.c
new file mode 100644
index 00000000000..1c2ba8bedde
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fccompat.c
@@ -0,0 +1,244 @@
+/*
+ * fontconfig/src/fccompat.c
+ *
+ * Copyright © 2012 Red Hat, Inc.
+ *
+ * Author(s):
+ * Akira TAGOH
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER 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 <errno.h>
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#ifdef O_CLOEXEC
+#define FC_O_CLOEXEC O_CLOEXEC
+#else
+#define FC_O_CLOEXEC 0
+#endif
+#ifdef O_LARGEFILE
+#define FC_O_LARGEFILE O_LARGEFILE
+#else
+#define FC_O_LARGEFILE 0
+#endif
+#ifdef O_BINARY
+#define FC_O_BINARY O_BINARY
+#else
+#define FC_O_BINARY 0
+#endif
+#ifdef O_TEMPORARY
+#define FC_O_TEMPORARY O_TEMPORARY
+#else
+#define FC_O_TEMPORARY 0
+#endif
+#ifdef O_NOINHERIT
+#define FC_O_NOINHERIT O_NOINHERIT
+#else
+#define FC_O_NOINHERIT 0
+#endif
+
+#if !defined (HAVE_MKOSTEMP) && !defined(HAVE_MKSTEMP) && !defined(HAVE__MKTEMP_S)
+static int
+mkstemp (char *template)
+{
+ static const char s[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ int fd, i;
+ size_t l;
+
+ if (template == NULL)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ l = strlen (template);
+ if (l < 6 || strcmp (&template[l - 6], "XXXXXX") != 0)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ do
+ {
+ errno = 0;
+ for (i = l - 6; i < l; i++)
+ {
+ int r = FcRandom ();
+ template[i] = s[r % 62];
+ }
+ fd = FcOpen (template, FC_O_BINARY | O_CREAT | O_EXCL | FC_O_TEMPORARY | FC_O_NOINHERIT | O_RDWR, 0600);
+ } while (fd < 0 && errno == EEXIST);
+ if (fd >= 0)
+ errno = 0;
+
+ return fd;
+}
+#define HAVE_MKSTEMP 1
+#endif
+
+int
+FcOpen(const char *pathname, int flags, ...)
+{
+ int fd = -1;
+
+ if (flags & O_CREAT)
+ {
+ va_list ap;
+ mode_t mode;
+
+ va_start(ap, flags);
+ mode = (mode_t) va_arg(ap, int);
+ va_end(ap);
+
+ fd = open(pathname, flags | FC_O_CLOEXEC | FC_O_LARGEFILE, mode);
+ }
+ else
+ {
+ fd = open(pathname, flags | FC_O_CLOEXEC | FC_O_LARGEFILE);
+ }
+
+ return fd;
+}
+
+int
+FcMakeTempfile (char *template)
+{
+ int fd = -1;
+
+#if HAVE_MKOSTEMP
+ fd = mkostemp (template, FC_O_CLOEXEC);
+#elif HAVE_MKSTEMP
+ fd = mkstemp (template);
+# ifdef F_DUPFD_CLOEXEC
+ if (fd != -1)
+ {
+ int newfd = fcntl(fd, F_DUPFD_CLOEXEC, STDIN_FILENO);
+
+ close(fd);
+ fd = newfd;
+ }
+# elif defined(FD_CLOEXEC)
+ if (fd != -1)
+ {
+ fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
+ }
+# endif
+#elif HAVE__MKTEMP_S
+ if (_mktemp_s(template, strlen(template) + 1) != 0)
+ return -1;
+ fd = FcOpen(template, O_RDWR | O_EXCL | O_CREAT, 0600);
+#endif
+
+ return fd;
+}
+
+int32_t
+FcRandom(void)
+{
+ int32_t result;
+
+#if HAVE_RANDOM_R
+ static struct random_data fcrandbuf;
+ static char statebuf[256];
+ static FcBool initialized = FcFalse;
+
+ if (initialized != FcTrue)
+ {
+ initstate_r(time(NULL), statebuf, 256, &fcrandbuf);
+ initialized = FcTrue;
+ }
+
+ random_r(&fcrandbuf, &result);
+#elif HAVE_RANDOM
+ static char statebuf[256];
+ char *state;
+ static FcBool initialized = FcFalse;
+
+ if (initialized != FcTrue)
+ {
+ state = initstate(time(NULL), statebuf, 256);
+ initialized = FcTrue;
+ }
+ else
+ state = setstate(statebuf);
+
+ result = random();
+
+ setstate(state);
+#elif HAVE_LRAND48
+ result = lrand48();
+#elif HAVE_RAND_R
+ static unsigned int seed = time(NULL);
+
+ result = rand_r(&seed);
+#elif HAVE_RAND
+ static FcBool initialized = FcFalse;
+
+ if (initialized != FcTrue)
+ {
+ srand(time(NULL));
+ initialized = FcTrue;
+ }
+ result = rand();
+#else
+# error no random number generator function available.
+#endif
+
+ return result;
+}
+
+#ifdef _WIN32
+#include <direct.h>
+#define mkdir(path,mode) _mkdir(path)
+#endif
+
+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;
+}
diff --git a/chromium/third_party/fontconfig/src/src/fcdbg.c b/chromium/third_party/fontconfig/src/src/fcdbg.c
new file mode 100644
index 00000000000..d74bc276940
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcdbg.c
@@ -0,0 +1,499 @@
+/*
+ * 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>
+
+static void
+_FcValuePrintFile (FILE *f, const FcValue v)
+{
+ switch (v.type) {
+ case FcTypeUnknown:
+ fprintf (f, "<unknown>");
+ break;
+ case FcTypeVoid:
+ fprintf (f, "<void>");
+ break;
+ case FcTypeInteger:
+ fprintf (f, "%d(i)", v.u.i);
+ break;
+ case FcTypeDouble:
+ fprintf (f, "%g(f)", v.u.d);
+ break;
+ case FcTypeString:
+ fprintf (f, "\"%s\"", v.u.s);
+ break;
+ case FcTypeBool:
+ fprintf (f, "%s", v.u.b ? "True" : "False");
+ break;
+ case FcTypeMatrix:
+ fprintf (f, "[%g %g; %g %g]", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
+ break;
+ case FcTypeCharSet: /* XXX */
+ if (f == stdout)
+ FcCharSetPrint (v.u.c);
+ break;
+ case FcTypeLangSet:
+ FcLangSetPrint (v.u.l);
+ break;
+ case FcTypeFTFace:
+ fprintf (f, "face");
+ break;
+ }
+}
+
+void
+FcValuePrintFile (FILE *f, const FcValue v)
+{
+ fprintf (f, " ");
+ _FcValuePrintFile (f, v);
+}
+
+void
+FcValuePrint (const FcValue v)
+{
+ printf (" ");
+ _FcValuePrintFile (stdout, v);
+}
+
+void
+FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark)
+{
+ if (show_pos_mark)
+ printf (" [marker] ");
+ else
+ printf (" ");
+ _FcValuePrintFile (stdout, v);
+}
+
+static void
+FcValueBindingPrint (const FcValueListPtr l)
+{
+ switch (l->binding) {
+ case FcValueBindingWeak:
+ printf ("(w)");
+ break;
+ case FcValueBindingStrong:
+ printf ("(s)");
+ break;
+ case FcValueBindingSame:
+ printf ("(=)");
+ break;
+ default:
+ /* shouldn't be reached */
+ printf ("(?)");
+ break;
+ }
+}
+
+void
+FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos)
+{
+ for (; l != NULL; l = FcValueListNext(l))
+ {
+ FcValuePrintWithPosition (FcValueCanonicalize (&l->value), pos != NULL && l == pos);
+ FcValueBindingPrint (l);
+ }
+ if (!pos)
+ printf (" [marker]");
+}
+
+void
+FcValueListPrint (FcValueListPtr l)
+{
+ for (; l != NULL; l = FcValueListNext(l))
+ {
+ FcValuePrint (FcValueCanonicalize (&l->value));
+ FcValueBindingPrint (l);
+ }
+}
+
+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");
+}
+
+#define FcOpFlagsPrint(_o_) \
+ { \
+ int f = FC_OP_GET_FLAGS (_o_); \
+ if (f & FcOpFlagIgnoreBlanks) \
+ printf ("(ignore blanks)"); \
+ }
+
+void
+FcOpPrint (FcOp op_)
+{
+ FcOp op = FC_OP_GET_OP (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 FcOpDelete: printf ("Delete"); break;
+ case FcOpDeleteAll: printf ("DeleteAll"); break;
+ case FcOpQuest: printf ("Quest"); break;
+ case FcOpOr: printf ("Or"); break;
+ case FcOpAnd: printf ("And"); break;
+ case FcOpEqual: printf ("Equal"); FcOpFlagsPrint (op_); break;
+ case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (op_); 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"); FcOpFlagsPrint (op_); break;
+ case FcOpInvalid: printf ("Invalid"); break;
+ }
+}
+
+void
+FcExprPrint (const FcExpr *expr)
+{
+ if (!expr) printf ("none");
+ else switch (FC_OP_GET_OP (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 ("[");
+ FcExprPrint (expr->u.mexpr->xx);
+ printf (" ");
+ FcExprPrint (expr->u.mexpr->xy);
+ printf ("; ");
+ FcExprPrint (expr->u.mexpr->yx);
+ printf (" ");
+ FcExprPrint (expr->u.mexpr->yy);
+ printf ("]");
+ 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.name.object));
+ switch ((int) expr->u.name.kind) {
+ case FcMatchPattern:
+ printf ("(pattern) ");
+ break;
+ case FcMatchFont:
+ printf ("(font) ");
+ break;
+ }
+ 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 (FC_OP_GET_OP (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"); FcOpFlagsPrint (expr->op); break;
+ case FcOpNotEqual: printf ("NotEqual"); FcOpFlagsPrint (expr->op); 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"); FcOpFlagsPrint (expr->op); 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)
+{
+ FcRule *r;
+ FcRuleType last_type = FcRuleUnknown;
+
+ printf ("match\n");
+ for (r = subst->rule; r; r = r->next)
+ {
+ if (last_type != r->type)
+ {
+ switch (r->type) {
+ case FcRuleTest:
+ printf ("[test]\n");
+ break;
+ case FcRuleEdit:
+ printf ("[edit]\n");
+ break;
+ default:
+ break;
+ }
+ last_type = r->type;
+ }
+ printf ("\t");
+ switch (r->type) {
+ case FcRuleTest:
+ FcTestPrint (r->u.test);
+ break;
+ case FcRuleEdit:
+ FcEditPrint (r->u.edit);
+ printf (";\n");
+ break;
+ default:
+ break;
+ }
+ }
+ 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)
+{
+ if (!FcDebugVal) {
+ 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/chromium/third_party/fontconfig/src/src/fcdefault.c b/chromium/third_party/fontconfig/src/src/fcdefault.c
new file mode 100644
index 00000000000..d1b917fd9de
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcdefault.c
@@ -0,0 +1,314 @@
+/*
+ * 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 <limits.h>
+#include <string.h>
+
+/* MT-safe */
+
+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])
+
+FcStrSet *default_langs;
+
+FcStrSet *
+FcGetDefaultLangs (void)
+{
+ FcStrSet *result;
+retry:
+ result = (FcStrSet *) fc_atomic_ptr_get (&default_langs);
+ if (!result)
+ {
+ char *langs;
+
+ result = FcStrSetCreate ();
+
+ langs = getenv ("FC_LANG");
+ if (!langs || !langs[0])
+ langs = getenv ("LC_ALL");
+ if (!langs || !langs[0])
+ langs = getenv ("LC_CTYPE");
+ if (!langs || !langs[0])
+ langs = getenv ("LANG");
+ if (langs && langs[0])
+ {
+ if (!FcStrSetAddLangs (result, langs))
+ FcStrSetAdd (result, (const FcChar8 *) "en");
+ }
+ else
+ FcStrSetAdd (result, (const FcChar8 *) "en");
+
+ FcRefSetConst (&result->ref);
+ if (!fc_atomic_ptr_cmpexch (&default_langs, NULL, result)) {
+ FcRefInit (&result->ref, 1);
+ FcStrSetDestroy (result);
+ goto retry;
+ }
+ }
+
+ return result;
+}
+
+static FcChar8 *default_lang; /* MT-safe */
+
+FcChar8 *
+FcGetDefaultLang (void)
+{
+ FcChar8 *lang;
+retry:
+ lang = fc_atomic_ptr_get (&default_lang);
+ if (!lang)
+ {
+ FcStrSet *langs = FcGetDefaultLangs ();
+ lang = FcStrdup (langs->strs[0]);
+ FcStrSetDestroy (langs);
+
+ if (!fc_atomic_ptr_cmpexch (&default_lang, NULL, lang)) {
+ free (lang);
+ goto retry;
+ }
+ }
+
+ return lang;
+}
+
+static FcChar8 *default_prgname;
+
+FcChar8 *
+FcGetPrgname (void)
+{
+ FcChar8 *prgname;
+retry:
+ prgname = fc_atomic_ptr_get (&default_prgname);
+ if (!prgname)
+ {
+#ifdef _WIN32
+ char buf[MAX_PATH+1];
+
+ /* TODO This is ASCII-only; fix it. */
+ if (GetModuleFileNameA (GetModuleHandle (NULL), buf, sizeof (buf) / sizeof (buf[0])) > 0)
+ {
+ char *p;
+ unsigned int len;
+
+ p = strrchr (buf, '\\');
+ if (p)
+ p++;
+ else
+ p = buf;
+
+ len = strlen (p);
+
+ if (len > 4 && 0 == strcmp (p + len - 4, ".exe"))
+ {
+ len -= 4;
+ buf[len] = '\0';
+ }
+
+ prgname = FcStrdup (p);
+ }
+#elif defined (HAVE_GETPROGNAME)
+ const char *q = getprogname ();
+ if (q)
+ prgname = FcStrdup (q);
+ else
+ prgname = FcStrdup ("");
+#else
+# if defined (HAVE_GETEXECNAME)
+ const char *p = getexecname ();
+# else
+ char buf[PATH_MAX + 1];
+ int len;
+ char *p = NULL;
+
+ len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1);
+ if (len != -1)
+ {
+ buf[len] = '\0';
+ p = buf;
+ }
+# endif
+ if (p)
+ {
+ char *r = strrchr (p, '/');
+ if (r)
+ r++;
+ else
+ r = p;
+
+ prgname = FcStrdup (r);
+ }
+
+ if (!prgname)
+ prgname = FcStrdup ("");
+#endif
+
+ if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) {
+ free (prgname);
+ goto retry;
+ }
+ }
+
+ if (prgname && !prgname[0])
+ return NULL;
+
+ return prgname;
+}
+
+void
+FcDefaultFini (void)
+{
+ FcChar8 *lang;
+ FcStrSet *langs;
+ FcChar8 *prgname;
+
+ lang = fc_atomic_ptr_get (&default_lang);
+ if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL)) {
+ free (lang);
+ }
+
+ langs = fc_atomic_ptr_get (&default_langs);
+ if (langs && fc_atomic_ptr_cmpexch (&default_langs, langs, NULL)) {
+ FcRefInit (&langs->ref, 1);
+ FcStrSetDestroy (langs);
+ }
+
+ prgname = fc_atomic_ptr_get (&default_prgname);
+ if (prgname && fc_atomic_ptr_cmpexch (&default_prgname, prgname, NULL)) {
+ free (prgname);
+ }
+}
+
+void
+FcDefaultSubstitute (FcPattern *pattern)
+{
+ FcValue v, namelang, v2;
+ 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_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);
+ }
+ if (FcPatternObjectGet (pattern, FC_NAMELANG_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAddString (pattern, FC_NAMELANG_OBJECT, FcGetDefaultLang ());
+ }
+ /* shouldn't be failed. */
+ FcPatternObjectGet (pattern, FC_NAMELANG_OBJECT, 0, &namelang);
+ /* Add a fallback to ensure the english name when the requested language
+ * isn't available. this would helps for the fonts that have non-English
+ * name at the beginning.
+ */
+ /* Set "en-us" instead of "en" to avoid giving higher score to "en".
+ * This is a hack for the case that the orth is not like ll-cc, because,
+ * if no namelang isn't explicitly set, it will has something like ll-cc
+ * according to current locale. which may causes FcLangDifferentTerritory
+ * at FcLangCompare(). thus, the English name is selected so that
+ * exact matched "en" has higher score than ll-cc.
+ */
+ v2.type = FcTypeString;
+ v2.u.s = (FcChar8 *) "en-us";
+ if (FcPatternObjectGet (pattern, FC_FAMILYLANG_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAdd (pattern, FC_FAMILYLANG_OBJECT, namelang, FcTrue);
+ FcPatternObjectAddWithBinding (pattern, FC_FAMILYLANG_OBJECT, v2, FcValueBindingWeak, FcTrue);
+ }
+ if (FcPatternObjectGet (pattern, FC_STYLELANG_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAdd (pattern, FC_STYLELANG_OBJECT, namelang, FcTrue);
+ FcPatternObjectAddWithBinding (pattern, FC_STYLELANG_OBJECT, v2, FcValueBindingWeak, FcTrue);
+ }
+ if (FcPatternObjectGet (pattern, FC_FULLNAMELANG_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcPatternObjectAdd (pattern, FC_FULLNAMELANG_OBJECT, namelang, FcTrue);
+ FcPatternObjectAddWithBinding (pattern, FC_FULLNAMELANG_OBJECT, v2, FcValueBindingWeak, FcTrue);
+ }
+
+ if (FcPatternObjectGet (pattern, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)
+ {
+ FcChar8 *prgname = FcGetPrgname ();
+ if (prgname)
+ FcPatternObjectAddString (pattern, FC_PRGNAME_OBJECT, prgname);
+ }
+}
+#define __fcdefault__
+#include "fcaliastail.h"
+#undef __fcdefault__
diff --git a/chromium/third_party/fontconfig/src/src/fcdeprecate.h b/chromium/third_party/fontconfig/src/src/fcdeprecate.h
new file mode 100644
index 00000000000..214b684cfca
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcdeprecate.h
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+/*
+ * These APIs are deprecated; still exported by the library, but not
+ * declared in the public header file
+ */
+#ifndef _FCDEPRECATE_H_
+#define _FCDEPRECATE_H_
+
+FcPublic int
+FcConfigGetRescanInverval (FcConfig *config);
+
+FcPublic FcBool
+FcConfigSetRescanInverval (FcConfig *config, int rescanInterval);
+
+#endif /* _FCDEPRECATE_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fcdir.c b/chromium/third_party/fontconfig/src/src/fcdir.c
new file mode 100644
index 00000000000..b040a285ad6
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcdir.c
@@ -0,0 +1,335 @@
+/*
+ * 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);
+}
+
+FcBool
+FcFileIsLink (const FcChar8 *file)
+{
+#if HAVE_LSTAT
+ struct stat statb;
+
+ if (lstat ((const char *)file, &statb) != 0)
+ return FcFalse;
+ return S_ISLNK (statb.st_mode);
+#else
+ return FcFalse;
+#endif
+}
+
+FcBool
+FcFileIsFile (const FcChar8 *file)
+{
+ struct stat statb;
+
+ if (FcStat (file, &statb) != 0)
+ return FcFalse;
+ return S_ISREG (statb.st_mode);
+}
+
+static FcBool
+FcFileScanFontConfig (FcFontSet *set,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcConfig *config)
+{
+ FcPattern *font;
+ FcBool ret = FcTrue;
+ int id;
+ int count = 0;
+
+ id = 0;
+ do
+ {
+ font = 0;
+ /*
+ * Nothing in the cache, scan the file
+ */
+ if (FcDebug () & FC_DBG_SCAN)
+ {
+ printf ("\tScanning file %s...", file);
+ fflush (stdout);
+ }
+ font = FcFreeTypeQuery (file, id, blanks, &count);
+ if (FcDebug () & FC_DBG_SCAN)
+ printf ("done\n");
+
+ /*
+ * Edit pattern with user-defined rules
+ */
+ if (font && config && !FcConfigSubstitute (config, font, FcMatchScan))
+ {
+ FcPatternDestroy (font);
+ font = NULL;
+ ret = FcFalse;
+ }
+
+ /*
+ * Add the font
+ */
+ if (font)
+ {
+ if (FcDebug() & FC_DBG_SCANV)
+ {
+ printf ("Final font pattern:\n");
+ FcPatternPrint (font);
+ }
+ if (!FcFontSetAdd (set, font))
+ {
+ FcPatternDestroy (font);
+ font = NULL;
+ ret = FcFalse;
+ }
+ }
+ else if (font)
+ FcPatternDestroy (font);
+ id++;
+ } while (font && ret && id < count);
+ return ret;
+}
+
+FcBool
+FcFileScanConfig (FcFontSet *set,
+ FcStrSet *dirs,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcConfig *config)
+{
+ if (FcFileIsDir (file))
+ return FcStrSetAdd (dirs, file);
+ else
+ return FcFileScanFontConfig (set, blanks, file, config);
+}
+
+FcBool
+FcFileScan (FcFontSet *set,
+ FcStrSet *dirs,
+ FcFileCache *cache FC_UNUSED,
+ FcBlanks *blanks,
+ const FcChar8 *file,
+ FcBool force FC_UNUSED)
+{
+ 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:
+ if (file)
+ free (file);
+
+ 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;
+ FcFontSet *set;
+ FcCache *cache = NULL;
+ struct stat dir_stat;
+
+ if (FcDebug () & FC_DBG_FONTSET)
+ printf ("cache scan dir %s\n", dir);
+
+ if (FcStatChecksum (dir, &dir_stat) < 0)
+ goto bail;
+
+ set = FcFontSetCreate();
+ if (!set)
+ goto bail;
+
+ dirs = FcStrSetCreate ();
+ if (!dirs)
+ goto bail1;
+
+ /*
+ * Scan the dir
+ */
+ if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
+ goto bail2;
+
+ /*
+ * Build the cache object
+ */
+ cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
+ if (!cache)
+ goto bail2;
+
+ /*
+ * Write out the cache file, ignoring any troubles
+ */
+ FcDirCacheWrite (cache, config);
+
+ bail2:
+ FcStrSetDestroy (dirs);
+ bail1:
+ FcFontSetDestroy (set);
+ bail:
+ return cache;
+}
+
+/*
+ * Read (or construct) the cache for a directory
+ */
+FcCache *
+FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
+{
+ FcCache *cache = NULL;
+
+ /* Try to use existing cache file */
+ if (!force)
+ cache = FcDirCacheLoad (dir, config, NULL);
+
+ /* Not using existing cache file, construct new cache */
+ if (!cache)
+ cache = FcDirCacheScan (dir, config);
+
+ return cache;
+}
+
+FcBool
+FcDirSave (FcFontSet *set FC_UNUSED, FcStrSet * dirs FC_UNUSED, const FcChar8 *dir FC_UNUSED)
+{
+ return FcFalse; /* XXX deprecated */
+}
+#define __fcdir__
+#include "fcaliastail.h"
+#undef __fcdir__
diff --git a/chromium/third_party/fontconfig/src/src/fcformat.c b/chromium/third_party/fontconfig/src/src/fcformat.c
new file mode 100644
index 00000000000..59f8681dff0
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcformat.c
@@ -0,0 +1,1220 @@
+/*
+ * Copyright © 2008,2009 Red Hat, Inc.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+
+/* The language is documented in doc/fcformat.fncs
+ * These are the features implemented:
+ *
+ * simple %{elt}
+ * width %width{elt}
+ * index %{elt[idx]}
+ * name= %{elt=}
+ * :name= %{:elt}
+ * default %{elt:-word}
+ * count %{#elt}
+ * subexpr %{{expr}}
+ * filter-out %{-elt1,elt2,elt3{expr}}
+ * filter-in %{+elt1,elt2,elt3{expr}}
+ * conditional %{?elt1,elt2,!elt3{}{}}
+ * enumerate %{[]elt1,elt2{expr}}
+ * langset langset enumeration using the same syntax
+ * builtin %{=blt}
+ * convert %{elt|conv1|conv2|conv3}
+ *
+ * converters:
+ * basename FcStrBasename
+ * dirname FcStrDirname
+ * downcase FcStrDowncase
+ * shescape
+ * cescape
+ * xmlescape
+ * delete delete chars
+ * escape escape chars
+ * translate translate chars
+ *
+ * builtins:
+ * unparse FcNameUnparse
+ * fcmatch fc-match default
+ * fclist fc-list default
+ * fccat fc-cat default
+ * pkgkit PackageKit package tag format
+ *
+ *
+ * Some ideas for future syntax extensions:
+ *
+ * - verbose builtin that is like FcPatternPrint
+ * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}'
+ * - allow indexing in +, -, ? filtering?
+ * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation)
+ */
+
+
+#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\""
+#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
+#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}"
+#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}"
+
+
+static void
+message (const char *fmt, ...)
+{
+ va_list args;
+ va_start (args, fmt);
+ fprintf (stderr, "Fontconfig: Pattern format error: ");
+ vfprintf (stderr, fmt, args);
+ fprintf (stderr, ".\n");
+ va_end (args);
+}
+
+
+typedef struct _FcFormatContext
+{
+ const FcChar8 *format_orig;
+ const FcChar8 *format;
+ int format_len;
+ FcChar8 *word;
+ FcBool word_allocated;
+} FcFormatContext;
+
+static FcBool
+FcFormatContextInit (FcFormatContext *c,
+ const FcChar8 *format,
+ FcChar8 *scratch,
+ int scratch_len)
+{
+ c->format_orig = c->format = format;
+ c->format_len = strlen ((const char *) format);
+
+ if (c->format_len < scratch_len)
+ {
+ c->word = scratch;
+ c->word_allocated = FcFalse;
+ }
+ else
+ {
+ c->word = malloc (c->format_len + 1);
+ c->word_allocated = FcTrue;
+ }
+
+ return c->word != NULL;
+}
+
+static void
+FcFormatContextDone (FcFormatContext *c)
+{
+ if (c && c->word_allocated)
+ {
+ free (c->word);
+ }
+}
+
+static FcBool
+consume_char (FcFormatContext *c,
+ FcChar8 term)
+{
+ if (*c->format != term)
+ return FcFalse;
+
+ c->format++;
+ return FcTrue;
+}
+
+static FcBool
+expect_char (FcFormatContext *c,
+ FcChar8 term)
+{
+ FcBool res = consume_char (c, term);
+ if (!res)
+ {
+ if (c->format == c->format_orig + c->format_len)
+ message ("format ended while expecting '%c'",
+ term);
+ else
+ message ("expected '%c' at %d",
+ term, c->format - c->format_orig + 1);
+ }
+ return res;
+}
+
+static FcBool
+FcCharIsPunct (const FcChar8 c)
+{
+ if (c < '0')
+ return FcTrue;
+ if (c <= '9')
+ return FcFalse;
+ if (c < 'A')
+ return FcTrue;
+ if (c <= 'Z')
+ return FcFalse;
+ if (c < 'a')
+ return FcTrue;
+ if (c <= 'z')
+ return FcFalse;
+ if (c <= '~')
+ return FcTrue;
+ return FcFalse;
+}
+
+static char escaped_char(const char ch)
+{
+ switch (ch) {
+ case 'a': return '\a';
+ case 'b': return '\b';
+ case 'f': return '\f';
+ case 'n': return '\n';
+ case 'r': return '\r';
+ case 't': return '\t';
+ case 'v': return '\v';
+ default: return ch;
+ }
+}
+
+static FcBool
+read_word (FcFormatContext *c)
+{
+ FcChar8 *p;
+
+ p = c->word;
+
+ while (*c->format)
+ {
+ if (*c->format == '\\')
+ {
+ c->format++;
+ if (*c->format)
+ *p++ = escaped_char (*c->format++);
+ continue;
+ }
+ else if (FcCharIsPunct (*c->format))
+ break;
+
+ *p++ = *c->format++;
+ }
+ *p = '\0';
+
+ if (p == c->word)
+ {
+ message ("expected identifier at %d",
+ c->format - c->format_orig + 1);
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+read_chars (FcFormatContext *c,
+ FcChar8 term)
+{
+ FcChar8 *p;
+
+ p = c->word;
+
+ while (*c->format && *c->format != '}' && *c->format != term)
+ {
+ if (*c->format == '\\')
+ {
+ c->format++;
+ if (*c->format)
+ *p++ = escaped_char (*c->format++);
+ continue;
+ }
+
+ *p++ = *c->format++;
+ }
+ *p = '\0';
+
+ if (p == c->word)
+ {
+ message ("expected character data at %d",
+ c->format - c->format_orig + 1);
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+FcPatternFormatToBuf (FcPattern *pat,
+ const FcChar8 *format,
+ FcStrBuf *buf);
+
+static FcBool
+interpret_builtin (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcChar8 *new_str;
+ FcBool ret;
+
+ if (!expect_char (c, '=') ||
+ !read_word (c))
+ return FcFalse;
+
+ /* try simple builtins first */
+ if (0) { }
+#define BUILTIN(name, func) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ do { new_str = func (pat); ret = FcTrue; } while (0)
+ BUILTIN ("unparse", FcNameUnparse);
+ /* BUILTIN ("verbose", FcPatternPrint); XXX */
+#undef BUILTIN
+ else
+ ret = FcFalse;
+
+ if (ret)
+ {
+ if (new_str)
+ {
+ FcStrBufString (buf, new_str);
+ FcStrFree (new_str);
+ return FcTrue;
+ }
+ else
+ return FcFalse;
+ }
+
+ /* now try our custom formats */
+ if (0) { }
+#define BUILTIN(name, format) \
+ else if (0 == strcmp ((const char *) c->word, name))\
+ ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf)
+ BUILTIN ("fccat", FCCAT_FORMAT);
+ BUILTIN ("fcmatch", FCMATCH_FORMAT);
+ BUILTIN ("fclist", FCLIST_FORMAT);
+ BUILTIN ("pkgkit", PKGKIT_FORMAT);
+#undef BUILTIN
+ else
+ ret = FcFalse;
+
+ if (!ret)
+ message ("unknown builtin \"%s\"",
+ c->word);
+
+ return ret;
+}
+
+static FcBool
+interpret_expr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf,
+ FcChar8 term);
+
+static FcBool
+interpret_subexpr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ return expect_char (c, '{') &&
+ interpret_expr (c, pat, buf, '}') &&
+ expect_char (c, '}');
+}
+
+static FcBool
+maybe_interpret_subexpr (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ return (*c->format == '{') ?
+ interpret_subexpr (c, pat, buf) :
+ FcTrue;
+}
+
+static FcBool
+skip_subexpr (FcFormatContext *c);
+
+static FcBool
+skip_percent (FcFormatContext *c)
+{
+ if (!expect_char (c, '%'))
+ return FcFalse;
+
+ /* skip an optional width specifier */
+ if (strtol ((const char *) c->format, (char **) &c->format, 10))
+ {/* don't care */}
+
+ if (!expect_char (c, '{'))
+ return FcFalse;
+
+ while(*c->format && *c->format != '}')
+ {
+ switch (*c->format)
+ {
+ case '\\':
+ c->format++; /* skip over '\\' */
+ if (*c->format)
+ c->format++;
+ continue;
+ case '{':
+ if (!skip_subexpr (c))
+ return FcFalse;
+ continue;
+ }
+ c->format++;
+ }
+
+ return expect_char (c, '}');
+}
+
+static FcBool
+skip_expr (FcFormatContext *c)
+{
+ while(*c->format && *c->format != '}')
+ {
+ switch (*c->format)
+ {
+ case '\\':
+ c->format++; /* skip over '\\' */
+ if (*c->format)
+ c->format++;
+ continue;
+ case '%':
+ if (!skip_percent (c))
+ return FcFalse;
+ continue;
+ }
+ c->format++;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+skip_subexpr (FcFormatContext *c)
+{
+ return expect_char (c, '{') &&
+ skip_expr (c) &&
+ expect_char (c, '}');
+}
+
+static FcBool
+maybe_skip_subexpr (FcFormatContext *c)
+{
+ return (*c->format == '{') ?
+ skip_subexpr (c) :
+ FcTrue;
+}
+
+static FcBool
+interpret_filter_in (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcObjectSet *os;
+ FcPattern *subpat;
+
+ if (!expect_char (c, '+'))
+ return FcFalse;
+
+ os = FcObjectSetCreate ();
+ if (!os)
+ return FcFalse;
+
+ do
+ {
+ /* XXX binding */
+ if (!read_word (c) ||
+ !FcObjectSetAdd (os, (const char *) c->word))
+ {
+ FcObjectSetDestroy (os);
+ return FcFalse;
+ }
+ }
+ while (consume_char (c, ','));
+
+ subpat = FcPatternFilter (pat, os);
+ FcObjectSetDestroy (os);
+
+ if (!subpat ||
+ !interpret_subexpr (c, subpat, buf))
+ return FcFalse;
+
+ FcPatternDestroy (subpat);
+ return FcTrue;
+}
+
+static FcBool
+interpret_filter_out (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcPattern *subpat;
+
+ if (!expect_char (c, '-'))
+ return FcFalse;
+
+ subpat = FcPatternDuplicate (pat);
+ if (!subpat)
+ return FcFalse;
+
+ do
+ {
+ if (!read_word (c))
+ {
+ FcPatternDestroy (subpat);
+ return FcFalse;
+ }
+
+ FcPatternDel (subpat, (const char *) c->word);
+ }
+ while (consume_char (c, ','));
+
+ if (!interpret_subexpr (c, subpat, buf))
+ return FcFalse;
+
+ FcPatternDestroy (subpat);
+ return FcTrue;
+}
+
+static FcBool
+interpret_cond (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcBool pass;
+
+ if (!expect_char (c, '?'))
+ return FcFalse;
+
+ pass = FcTrue;
+
+ do
+ {
+ FcBool negate;
+ FcValue v;
+
+ negate = consume_char (c, '!');
+
+ if (!read_word (c))
+ return FcFalse;
+
+ pass = pass &&
+ (negate ^
+ (FcResultMatch ==
+ FcPatternGet (pat, (const char *) c->word, 0, &v)));
+ }
+ while (consume_char (c, ','));
+
+ if (pass)
+ {
+ if (!interpret_subexpr (c, pat, buf) ||
+ !maybe_skip_subexpr (c))
+ return FcFalse;
+ }
+ else
+ {
+ if (!skip_subexpr (c) ||
+ !maybe_interpret_subexpr (c, pat, buf))
+ return FcFalse;
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+interpret_count (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ int count;
+ FcPatternElt *e;
+ FcChar8 buf_static[64];
+
+ if (!expect_char (c, '#'))
+ return FcFalse;
+
+ if (!read_word (c))
+ return FcFalse;
+
+ count = 0;
+ e = FcPatternObjectFindElt (pat,
+ FcObjectFromName ((const char *) c->word));
+ if (e)
+ {
+ FcValueListPtr l;
+ count++;
+ for (l = FcPatternEltValues(e);
+ l->next;
+ l = l->next)
+ count++;
+ }
+
+ snprintf ((char *) buf_static, sizeof (buf_static), "%d", count);
+ FcStrBufString (buf, buf_static);
+
+ return FcTrue;
+}
+
+static FcBool
+interpret_enumerate (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcObjectSet *os;
+ FcPattern *subpat;
+ const FcChar8 *format_save;
+ int idx;
+ FcBool ret, done;
+ FcStrList *lang_strs;
+
+ if (!expect_char (c, '[') ||
+ !expect_char (c, ']'))
+ return FcFalse;
+
+ os = FcObjectSetCreate ();
+ if (!os)
+ return FcFalse;
+
+ ret = FcTrue;
+
+ do
+ {
+ if (!read_word (c) ||
+ !FcObjectSetAdd (os, (const char *) c->word))
+ {
+ FcObjectSetDestroy (os);
+ return FcFalse;
+ }
+ }
+ while (consume_char (c, ','));
+
+ /* If we have one element and it's of type FcLangSet, we want
+ * to enumerate the languages in it. */
+ lang_strs = NULL;
+ if (os->nobject == 1)
+ {
+ FcLangSet *langset;
+ if (FcResultMatch ==
+ FcPatternGetLangSet (pat, os->objects[0], 0, &langset))
+ {
+ FcStrSet *ss;
+ if (!(ss = FcLangSetGetLangs (langset)) ||
+ !(lang_strs = FcStrListCreate (ss)))
+ goto bail0;
+ }
+ }
+
+ subpat = FcPatternDuplicate (pat);
+ if (!subpat)
+ goto bail0;
+
+ format_save = c->format;
+ idx = 0;
+ do
+ {
+ int i;
+
+ done = FcTrue;
+
+ if (lang_strs)
+ {
+ FcChar8 *lang;
+
+ FcPatternDel (subpat, os->objects[0]);
+ if ((lang = FcStrListNext (lang_strs)))
+ {
+ /* XXX binding? */
+ FcPatternAddString (subpat, os->objects[0], lang);
+ done = FcFalse;
+ }
+ }
+ else
+ {
+ for (i = 0; i < os->nobject; i++)
+ {
+ FcValue v;
+
+ /* XXX this can be optimized by accessing valuelist linked lists
+ * directly and remembering where we were. Most (all) value lists
+ * in normal uses are pretty short though (language tags are
+ * stored as a LangSet, not separate values.). */
+ FcPatternDel (subpat, os->objects[i]);
+ if (FcResultMatch ==
+ FcPatternGet (pat, os->objects[i], idx, &v))
+ {
+ /* XXX binding */
+ FcPatternAdd (subpat, os->objects[i], v, FcFalse);
+ done = FcFalse;
+ }
+ }
+ }
+
+ if (!done)
+ {
+ c->format = format_save;
+ ret = interpret_subexpr (c, subpat, buf);
+ if (!ret)
+ goto bail;
+ }
+
+ idx++;
+ } while (!done);
+
+ if (c->format == format_save)
+ skip_subexpr (c);
+
+bail:
+ FcPatternDestroy (subpat);
+bail0:
+ if (lang_strs)
+ FcStrListDone (lang_strs);
+ FcObjectSetDestroy (os);
+
+ return ret;
+}
+
+static FcBool
+interpret_simple (FcFormatContext *c,
+ FcPattern *pat,
+ FcStrBuf *buf)
+{
+ FcPatternElt *e;
+ FcBool add_colon = FcFalse;
+ FcBool add_elt_name = FcFalse;
+ int idx;
+ FcChar8 *else_string;
+
+ if (consume_char (c, ':'))
+ add_colon = FcTrue;
+
+ if (!read_word (c))
+ return FcFalse;
+
+ idx = -1;
+ if (consume_char (c, '['))
+ {
+ idx = strtol ((const char *) c->format, (char **) &c->format, 10);
+ if (idx < 0)
+ {
+ message ("expected non-negative number at %d",
+ c->format-1 - c->format_orig + 1);
+ return FcFalse;
+ }
+ if (!expect_char (c, ']'))
+ return FcFalse;
+ }
+
+ if (consume_char (c, '='))
+ add_elt_name = FcTrue;
+
+ /* modifiers */
+ else_string = NULL;
+ if (consume_char (c, ':'))
+ {
+ FcChar8 *orig;
+ /* divert the c->word for now */
+ orig = c->word;
+ c->word = c->word + strlen ((const char *) c->word) + 1;
+ /* for now we just support 'default value' */
+ if (!expect_char (c, '-') ||
+ !read_chars (c, '|'))
+ {
+ c->word = orig;
+ return FcFalse;
+ }
+ else_string = c->word;
+ c->word = orig;
+ }
+
+ e = FcPatternObjectFindElt (pat,
+ FcObjectFromName ((const char *) c->word));
+ if (e || else_string)
+ {
+ FcValueListPtr l = NULL;
+
+ if (add_colon)
+ FcStrBufChar (buf, ':');
+ if (add_elt_name)
+ {
+ FcStrBufString (buf, c->word);
+ FcStrBufChar (buf, '=');
+ }
+
+ if (e)
+ l = FcPatternEltValues(e);
+
+ if (idx != -1)
+ {
+ while (l && idx > 0)
+ {
+ l = FcValueListNext(l);
+ idx--;
+ }
+ if (l && idx == 0)
+ {
+ if (!FcNameUnparseValue (buf, &l->value, '\0'))
+ return FcFalse;
+ }
+ else goto notfound;
+ }
+ else if (l)
+ {
+ FcNameUnparseValueList (buf, l, '\0');
+ }
+ else
+ {
+ notfound:
+ if (else_string)
+ FcStrBufString (buf, else_string);
+ }
+ }
+
+ return FcTrue;
+}
+
+static FcBool
+cescape (FcFormatContext *c FC_UNUSED,
+ 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 FC_UNUSED,
+ 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 FC_UNUSED,
+ 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);
+ FcStrFree (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];
+ FcPattern *alloced = NULL;
+ FcBool ret;
+
+ if (!pat)
+ alloced = pat = FcPatternCreate ();
+
+ FcStrBufInit (&buf, buf_static, sizeof (buf_static));
+
+ ret = FcPatternFormatToBuf (pat, format, &buf);
+
+ if (alloced)
+ FcPatternDestroy (alloced);
+
+ if (ret)
+ return FcStrBufDone (&buf);
+ else
+ {
+ FcStrBufDestroy (&buf);
+ return NULL;
+ }
+}
+
+#define __fcformat__
+#include "fcaliastail.h"
+#undef __fcformat__
diff --git a/chromium/third_party/fontconfig/src/src/fcfreetype.c b/chromium/third_party/fontconfig/src/src/fcfreetype.c
new file mode 100644
index 00000000000..e39430762c7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcfreetype.c
@@ -0,0 +1,2822 @@
+/*
+ * 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 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 *FcNoticeFoundries[][2] =
+ {
+ {"Adobe", "adobe"},
+ {"Bigelow", "b&h"},
+ {"Bitstream", "bitstream"},
+ {"Gnat", "culmus"},
+ {"Iorsh", "culmus"},
+ {"HanYang System", "hanyang"},
+ {"Font21", "hwan"},
+ {"IBM", "ibm"},
+ {"International Typeface Corporation", "itc"},
+ {"Linotype", "linotype"},
+ {"LINOTYPE-HELL", "linotype"},
+ {"Microsoft", "microsoft"},
+ {"Monotype", "monotype"},
+ {"Omega", "omega"},
+ {"Tiro Typeworks", "tiro"},
+ {"URW", "urw"},
+ {"XFree86", "xfree86"},
+ {"Xorg", "xorg"},
+};
+
+#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 char *n = FcNoticeFoundries[i][0];
+ const char *f = FcNoticeFoundries[i][1];
+
+ 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"},
+ { "CLM", "culmus"},
+ { "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 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 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;
+ unsigned int p, n;
+ int platform, nameid;
+
+ FcChar8 *style = 0;
+ int st;
+ char psname[256];
+ const char *tmp;
+
+ FcChar8 *hashstr = NULL;
+ FT_Error err;
+ FT_ULong len = 0, alen;
+
+ 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, *pp;
+ const FcChar8 *lang;
+ const char *elt = 0, *eltlang = 0;
+ int *np = 0, *nlangp = 0;
+ size_t len;
+
+ 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
+ {
+ unsigned 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_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 (utf8)
+ {
+ pp = utf8;
+ while (*pp == ' ')
+ pp++;
+ len = strlen ((const char *) pp);
+ memmove (utf8, pp, len + 1);
+ pp = utf8 + len - 1;
+ while (*pp == ' ')
+ pp--;
+ *(pp + 1) = 0;
+ }
+ 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;
+ }
+
+ /* Add the PostScript name into the cache */
+ tmp = FT_Get_Postscript_Name (face);
+ if (!tmp)
+ {
+ FcChar8 *family, *familylang = NULL;
+ size_t len;
+ int n = 0;
+
+ /* Workaround when FT_Get_Postscript_Name didn't give any name.
+ * try to find out the English family name and convert.
+ */
+ while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &familylang) == FcResultMatch)
+ {
+ if (FcStrCmp (familylang, (const FcChar8 *)"en") == 0)
+ break;
+ n++;
+ familylang = NULL;
+ }
+ if (!familylang)
+ n = 0;
+
+ if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
+ goto bail1;
+ len = strlen ((const char *)family);
+ /* the literal name in PostScript Language is limited to 127 characters though,
+ * It is the architectural limit. so assuming 255 characters may works enough.
+ */
+ for (i = 0; i < len && i < 255; i++)
+ {
+ /* those characters are not allowed to be the literal name in PostScript */
+ static const char exclusive_chars[] = "\x04()/<>[]{}\t\f\r\n ";
+
+ if (strchr(exclusive_chars, family[i]) != NULL)
+ psname[i] = '-';
+ else
+ psname[i] = family[i];
+ }
+ psname[i] = 0;
+ }
+ else
+ {
+ strcpy (psname, tmp);
+ }
+ if (!FcPatternAddString (pat, FC_POSTSCRIPT_NAME, (const FcChar8 *)psname))
+ goto bail1;
+
+ 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;
+
+ err = FT_Load_Sfnt_Table (face, 0, 0, NULL, &len);
+ if (err == FT_Err_Ok)
+ {
+ char *fontdata;
+
+ alen = (len + 63) & ~63;
+ fontdata = malloc (alen);
+ if (!fontdata)
+ goto bail3;
+ err = FT_Load_Sfnt_Table (face, 0, 0, (FT_Byte *)fontdata, &len);
+ if (err != FT_Err_Ok)
+ {
+ free (fontdata);
+ goto bail3;
+ }
+ memset (&fontdata[len], 0, alen - len);
+ hashstr = FcHashGetSHA256DigestFromMemory (fontdata, len);
+ free (fontdata);
+ }
+ else if (err == FT_Err_Invalid_Face_Handle)
+ {
+ /* font may not support SFNT. falling back to
+ * read the font data from file directly
+ */
+ hashstr = FcHashGetSHA256DigestFromFile (file);
+ }
+ else
+ {
+ goto bail3;
+ }
+ if (hashstr)
+ {
+ if (!FcPatternAddString (pat, FC_HASH, hashstr))
+ {
+ free (hashstr);
+ goto bail1;
+ }
+ free (hashstr);
+ }
+bail3:
+
+ /*
+ * 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)
+ if (!FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format))
+ goto bail2;
+ }
+#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 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 },
+};
+
+#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 ((int) 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;
+
+ /*
+ * 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 (!(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;
+ }
+ cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index);
+ }
+ else
+ cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1);
+ 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 FcIsDigit(c) (('0' <= (c) && (c) <= '9'))
+#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsDigit(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 alphanumeric, 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_HEAD);
+ 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;
+ int script_count;
+
+ if (!stream)
+ return 0;
+
+ 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/chromium/third_party/fontconfig/src/src/fcfs.c b/chromium/third_party/fontconfig/src/src/fcfs.c
new file mode 100644
index 00000000000..941abba8f40
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcfs.c
@@ -0,0 +1,127 @@
+/*
+ * 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;
+ 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)
+ free (s->fonts);
+ 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;
+ 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/chromium/third_party/fontconfig/src/src/fcftint.h b/chromium/third_party/fontconfig/src/src/fcftint.h
new file mode 100644
index 00000000000..a317370e1fb
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcftint.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright © 2007 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _FCFTINT_H_
+#define _FCFTINT_H_
+
+#include <fontconfig/fcfreetype.h>
+
+#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
+#define FcPrivate __attribute__((__visibility__("hidden")))
+#define HAVE_GNUC_ATTRIBUTE 1
+#include "fcftalias.h"
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+#define FcPrivate __hidden
+#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
+#define FcPrivate
+#endif
+
+/* fcfreetype.c */
+FcPrivate FcBool
+FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
+
+FcPrivate FcBool
+FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
+
+FcPrivate FcChar32
+FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
+
+FcPrivate FcChar32
+FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
+
+FcPrivate const FcCharMap *
+FcFreeTypeGetPrivateMap (FT_Encoding encoding);
+
+#endif /* _FCFTINT_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fchash.c b/chromium/third_party/fontconfig/src/src/fchash.c
new file mode 100644
index 00000000000..38300028c8e
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fchash.c
@@ -0,0 +1,317 @@
+/*
+ * fontconfig/src/fchash.c
+ *
+ * Copyright © 2003 Keith Packard
+ * Copyright © 2013 Red Hat, Inc.
+ * Red Hat Author(s): Akira TAGOH
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER 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 <string.h>
+
+#define ROTRN(w, v, n) ((((FcChar32)v) >> n) | (((FcChar32)v) << (w - n)))
+#define ROTR32(v, n) ROTRN(32, v, n)
+#define SHR(v, n) (v >> n)
+#define Ch(x, y, z) ((x & y) ^ (~x & z))
+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+#define SS0(x) (ROTR32(x, 2) ^ ROTR32(x, 13) ^ ROTR32(x, 22))
+#define SS1(x) (ROTR32(x, 6) ^ ROTR32(x, 11) ^ ROTR32(x, 25))
+#define ss0(x) (ROTR32(x, 7) ^ ROTR32(x, 18) ^ SHR(x, 3))
+#define ss1(x) (ROTR32(x, 17) ^ ROTR32(x, 19) ^ SHR(x, 10))
+
+
+static FcChar32 *
+FcHashInitSHA256Digest (void)
+{
+ int i;
+ static const FcChar32 h[] = {
+ 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL,
+ 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL
+ };
+ FcChar32 *ret = malloc (sizeof (FcChar32) * 8);
+
+ if (!ret)
+ return NULL;
+
+ for (i = 0; i < 8; i++)
+ ret[i] = h[i];
+
+ return ret;
+}
+
+static void
+FcHashComputeSHA256Digest (FcChar32 *hash,
+ const char *block)
+{
+ static const FcChar32 k[] = {
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
+ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
+ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
+ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
+ 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
+ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
+ 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
+ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
+ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
+ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
+ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
+ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
+ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
+ };
+ FcChar32 w[64], i, j, t1, t2;
+ FcChar32 a, b, c, d, e, f, g, h;
+
+#define H(n) (hash[n])
+
+ a = H(0);
+ b = H(1);
+ c = H(2);
+ d = H(3);
+ e = H(4);
+ f = H(5);
+ g = H(6);
+ h = H(7);
+
+ for (i = 0; i < 16; i++)
+ {
+ j = (block[(i * 4) + 0] & 0xff) << (8 * 3);
+ j |= (block[(i * 4) + 1] & 0xff) << (8 * 2);
+ j |= (block[(i * 4) + 2] & 0xff) << (8 * 1);
+ j |= (block[(i * 4) + 3] & 0xff);
+ w[i] = j;
+ }
+ for (i = 16; i < 64; i++)
+ w[i] = ss1(w[i - 2]) + w[i - 7] + ss0(w[i - 15]) + w[i - 16];
+
+ for (i = 0; i < 64; i++)
+ {
+ t1 = h + SS1(e) + Ch(e, f, g) + k[i] + w[i];
+ t2 = SS0(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + t1;
+ d = c;
+ c = b;
+ b = a;
+ a = t1 + t2;
+ }
+
+ H(0) += a;
+ H(1) += b;
+ H(2) += c;
+ H(3) += d;
+ H(4) += e;
+ H(5) += f;
+ H(6) += g;
+ H(7) += h;
+
+#undef H
+}
+
+static FcChar8 *
+FcHashSHA256ToString (FcChar32 *hash)
+{
+ FcChar8 *ret = NULL;
+ static const char hex[] = "0123456789abcdef";
+ int i, j;
+
+ if (hash)
+ {
+ ret = malloc (sizeof (FcChar8) * (8 * 8 + 7 + 1));
+ if (!ret)
+ return NULL;
+ memcpy (ret, "sha256:", 7);
+#define H(n) hash[n]
+ for (i = 0; i < 8; i++)
+ {
+ FcChar32 v = H(i);
+
+ for (j = 0; j < 8; j++)
+ ret[7 + (i * 8) + j] = hex[(v >> (28 - j * 4)) & 0xf];
+ }
+ ret[7 + i * 8] = 0;
+#undef H
+ free (hash);
+ }
+
+ return ret;
+}
+
+FcChar8 *
+FcHashGetSHA256Digest (const FcChar8 *input_strings,
+ size_t len)
+{
+ size_t i, round_len = len / 64;
+ char block[64];
+ FcChar32 *ret = FcHashInitSHA256Digest ();
+
+ if (!ret)
+ return NULL;
+
+ for (i = 0; i < round_len; i++)
+ {
+ FcHashComputeSHA256Digest (ret, (const char *)&input_strings[i * 64]);
+ }
+ /* padding */
+ if ((len % 64) != 0)
+ memcpy (block, &input_strings[len / 64], len % 64);
+ memset (&block[len % 64], 0, 64 - (len % 64));
+ block[len % 64] = 0x80;
+ if ((64 - (len % 64)) < 9)
+ {
+ /* process a block once */
+ FcHashComputeSHA256Digest (ret, block);
+ memset (block, 0, 64);
+ }
+ /* set input size at the end */
+ len *= 8;
+ block[63 - 0] = (uint64_t)len & 0xff;
+ block[63 - 1] = ((uint64_t)len >> 8) & 0xff;
+ block[63 - 2] = ((uint64_t)len >> 16) & 0xff;
+ block[63 - 3] = ((uint64_t)len >> 24) & 0xff;
+ block[63 - 4] = ((uint64_t)len >> 32) & 0xff;
+ block[63 - 5] = ((uint64_t)len >> 40) & 0xff;
+ block[63 - 6] = ((uint64_t)len >> 48) & 0xff;
+ block[63 - 7] = ((uint64_t)len >> 56) & 0xff;
+ FcHashComputeSHA256Digest (ret, block);
+
+ return FcHashSHA256ToString (ret);
+}
+
+FcChar8 *
+FcHashGetSHA256DigestFromFile (const FcChar8 *filename)
+{
+ FILE *fp = fopen ((const char *)filename, "rb");
+ char ibuf[64];
+ FcChar32 *ret;
+ size_t len;
+ struct stat st;
+
+ if (!fp)
+ return NULL;
+
+ if (FcStat (filename, &st))
+ goto bail0;
+
+ ret = FcHashInitSHA256Digest ();
+ if (!ret)
+ goto bail0;
+
+ while (!feof (fp))
+ {
+ if ((len = fread (ibuf, sizeof (char), 64, fp)) < 64)
+ {
+ uint64_t v;
+
+ /* add a padding */
+ memset (&ibuf[len], 0, 64 - len);
+ ibuf[len] = 0x80;
+ if ((64 - len) < 9)
+ {
+ /* process a block once */
+ FcHashComputeSHA256Digest (ret, ibuf);
+ memset (ibuf, 0, 64);
+ }
+ /* set input size at the end */
+ v = (long)st.st_size * 8;
+ ibuf[63 - 0] = v & 0xff;
+ ibuf[63 - 1] = (v >> 8) & 0xff;
+ ibuf[63 - 2] = (v >> 16) & 0xff;
+ ibuf[63 - 3] = (v >> 24) & 0xff;
+ ibuf[63 - 4] = (v >> 32) & 0xff;
+ ibuf[63 - 5] = (v >> 40) & 0xff;
+ ibuf[63 - 6] = (v >> 48) & 0xff;
+ ibuf[63 - 7] = (v >> 56) & 0xff;
+ FcHashComputeSHA256Digest (ret, ibuf);
+ break;
+ }
+ else
+ {
+ FcHashComputeSHA256Digest (ret, ibuf);
+ }
+ }
+ fclose (fp);
+
+ return FcHashSHA256ToString (ret);
+
+bail0:
+ fclose (fp);
+
+ return NULL;
+}
+
+FcChar8 *
+FcHashGetSHA256DigestFromMemory (const char *fontdata,
+ size_t length)
+{
+ char ibuf[64];
+ FcChar32 *ret;
+ size_t i = 0;
+
+ ret = FcHashInitSHA256Digest ();
+ if (!ret)
+ return NULL;
+
+ while (i <= length)
+ {
+ if ((length - i) < 64)
+ {
+ uint64_t v;
+ size_t n;
+
+ /* add a padding */
+ n = length - i;
+ if (n > 0)
+ memcpy (ibuf, &fontdata[i], n);
+ memset (&ibuf[n], 0, 64 - n);
+ ibuf[n] = 0x80;
+ if ((64 - n) < 9)
+ {
+ /* process a block once */
+ FcHashComputeSHA256Digest (ret, ibuf);
+ memset (ibuf, 0, 64);
+ }
+ /* set input size at the end */
+ v = length * 8;
+ ibuf[63 - 0] = v & 0xff;
+ ibuf[63 - 1] = (v >> 8) & 0xff;
+ ibuf[63 - 2] = (v >> 16) & 0xff;
+ ibuf[63 - 3] = (v >> 24) & 0xff;
+ ibuf[63 - 4] = (v >> 32) & 0xff;
+ ibuf[63 - 5] = (v >> 40) & 0xff;
+ ibuf[63 - 6] = (v >> 48) & 0xff;
+ ibuf[63 - 7] = (v >> 56) & 0xff;
+ FcHashComputeSHA256Digest (ret, ibuf);
+ break;
+ }
+ else
+ {
+ FcHashComputeSHA256Digest (ret, &fontdata[i]);
+ }
+ i += 64;
+ }
+
+ return FcHashSHA256ToString (ret);
+}
diff --git a/chromium/third_party/fontconfig/src/src/fcinit.c b/chromium/third_party/fontconfig/src/src/fcinit.c
new file mode 100644
index 00000000000..b8d5d060c71
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcinit.c
@@ -0,0 +1,215 @@
+/*
+ * 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>
+
+#if defined(FC_ATOMIC_INT_NIL)
+#pragma message("Could not find any system to define atomic_int macros, library may NOT be thread-safe.")
+#endif
+#if defined(FC_MUTEX_IMPL_NIL)
+#pragma message("Could not find any system to define mutex macros, library may NOT be thread-safe.")
+#endif
+#if defined(FC_ATOMIC_INT_NIL) || defined(FC_MUTEX_IMPL_NIL)
+#pragma message("To suppress these warnings, define FC_NO_MT.")
+#endif
+
+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 *
+FcInitLoadOwnConfig (FcConfig *config)
+{
+ if (!config)
+ {
+ config = FcConfigCreate ();
+ if (!config)
+ return NULL;
+ }
+
+ FcInitDebug ();
+
+ if (!FcConfigParseAndLoad (config, 0, FcTrue))
+ {
+ FcConfigDestroy (config);
+ return FcInitFallbackConfig ();
+ }
+
+ if (config->cacheDirs && config->cacheDirs->num == 0)
+ {
+ FcChar8 *prefix, *p;
+ size_t plen;
+
+ fprintf (stderr,
+ "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
+ FC_CACHEDIR);
+ prefix = FcConfigXdgCacheHome ();
+ if (!prefix)
+ goto bail;
+ plen = strlen ((const char *)prefix);
+ p = realloc (prefix, plen + 12);
+ if (!p)
+ goto bail;
+ prefix = p;
+ memcpy (&prefix[plen], FC_DIR_SEPARATOR_S "fontconfig", 11);
+ prefix[plen + 11] = 0;
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir prefix=\"xdg\">fontconfig</cachedir>\n");
+
+ if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
+ !FcConfigAddCacheDir (config, (FcChar8 *) prefix))
+ {
+ bail:
+ fprintf (stderr,
+ "Fontconfig error: out of memory");
+ if (prefix)
+ FcStrFree (prefix);
+ FcConfigDestroy (config);
+ return FcInitFallbackConfig ();
+ }
+ FcStrFree (prefix);
+ }
+
+ return config;
+}
+
+FcConfig *
+FcInitLoadConfig (void)
+{
+ return FcInitLoadOwnConfig (NULL);
+}
+
+/*
+ * Load the configuration files and scan for available fonts
+ */
+FcConfig *
+FcInitLoadOwnConfigAndFonts (FcConfig *config)
+{
+ config = FcInitLoadOwnConfig (config);
+ if (!config)
+ return 0;
+ if (!FcConfigBuildFonts (config))
+ {
+ FcConfigDestroy (config);
+ return 0;
+ }
+ return config;
+}
+
+FcConfig *
+FcInitLoadConfigAndFonts (void)
+{
+ return FcInitLoadOwnConfigAndFonts (NULL);
+}
+
+/*
+ * Initialize the default library configuration
+ */
+FcBool
+FcInit (void)
+{
+ return FcConfigInit ();
+}
+
+/*
+ * Free all library-allocated data structures.
+ */
+void
+FcFini (void)
+{
+ FcConfigFini ();
+ FcCacheFini ();
+ FcDefaultFini ();
+}
+
+/*
+ * Reread the configuration and available font lists
+ */
+FcBool
+FcInitReinitialize (void)
+{
+ FcConfig *config;
+
+ config = FcInitLoadConfigAndFonts ();
+ if (!config)
+ return FcFalse;
+ return FcConfigSetCurrent (config);
+}
+
+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 ();
+}
+
+#define __fcinit__
+#include "fcaliastail.h"
+#undef __fcinit__
diff --git a/chromium/third_party/fontconfig/src/src/fcint.h b/chromium/third_party/fontconfig/src/src/fcint.h
new file mode 100644
index 00000000000..362ea6f99ad
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcint.h
@@ -0,0 +1,1162 @@
+/*
+ * 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 "fcstdint.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <errno.h>
+#include <limits.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"
+#include "fcmutex.h"
+#include "fcatomic.h"
+
+#ifndef FC_CONFIG_PATH
+#define FC_CONFIG_PATH "fonts.conf"
+#endif
+
+#ifdef _WIN32
+# include "fcwindows.h"
+typedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
+typedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
+extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
+extern pfnSHGetFolderPathA pSHGetFolderPathA;
+# define FC_SEARCH_PATH_SEPARATOR ';'
+# define FC_DIR_SEPARATOR '\\'
+# define FC_DIR_SEPARATOR_S "\\"
+#else
+# define FC_SEARCH_PATH_SEPARATOR ':'
+# define FC_DIR_SEPARATOR '/'
+# define FC_DIR_SEPARATOR_S "/"
+#endif
+
+#if __GNUC__ >= 4
+#define FC_UNUSED __attribute__((unused))
+#else
+#define FC_UNUSED
+#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_CONFIG 1024
+#define FC_DBG_LANGSET 2048
+
+#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED
+#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
+
+FC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int));
+
+typedef enum _FcValueBinding {
+ FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame,
+ /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */
+ FcValueBindingEnd = INT_MAX
+} FcValueBinding;
+
+#define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s)))
+#define FcFree(s) (free ((FcChar8 *) (s)))
+
+/*
+ * 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;
+
+/* The 1024 is to leave some room for future added internal objects, such
+ * that caches from newer fontconfig can still be used with older fontconfig
+ * without getting confused. */
+#define FC_EXT_OBJ_INDEX 1024
+#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX))
+
+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;
+ FcRef 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,
+ FcOpDelete, FcOpDeleteAll,
+ 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 enum _FcOpFlags {
+ FcOpFlagIgnoreBlanks = 1 << 0
+} FcOpFlags;
+
+#define FC_OP_GET_OP(_x_) ((_x_) & 0xffff)
+#define FC_OP_GET_FLAGS(_x_) (((_x_) & 0xffff0000) >> 16)
+#define FC_OP(_x_,_f_) (FC_OP_GET_OP (_x_) | ((_f_) << 16))
+
+typedef struct _FcExprMatrix {
+ struct _FcExpr *xx, *xy, *yx, *yy;
+} FcExprMatrix;
+
+typedef struct _FcExprName {
+ FcObject object;
+ FcMatchKind kind;
+} FcExprName;
+
+
+typedef struct _FcExpr {
+ FcOp op;
+ union {
+ int ival;
+ double dval;
+ const FcChar8 *sval;
+ FcExprMatrix *mexpr;
+ FcBool bval;
+ FcCharSet *cval;
+ FcLangSet *lval;
+
+ FcExprName name;
+ 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[FLEXIBLE_ARRAY_MEMBER];
+};
+
+typedef enum _FcQual {
+ FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
+} FcQual;
+
+#define FcMatchDefault ((FcMatchKind) -1)
+
+typedef struct _FcTest {
+ FcMatchKind kind;
+ FcQual qual;
+ FcObject object;
+ FcOp op;
+ FcExpr *expr;
+} FcTest;
+
+typedef struct _FcEdit {
+ FcObject object;
+ FcOp op;
+ FcExpr *expr;
+ FcValueBinding binding;
+} FcEdit;
+
+typedef enum _FcRuleType {
+ FcRuleUnknown, FcRuleTest, FcRuleEdit
+} FcRuleType;
+
+typedef struct _FcRule {
+ struct _FcRule *next;
+ FcRuleType type;
+ union {
+ FcTest *test;
+ FcEdit *edit;
+ } u;
+} FcRule;
+
+typedef struct _FcSubst {
+ struct _FcSubst *next;
+ FcRule *rule;
+} FcSubst;
+
+typedef struct _FcCharLeaf {
+ FcChar32 map[256/32];
+} FcCharLeaf;
+
+struct _FcCharSet {
+ FcRef 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 {
+ FcRef 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 {
+ unsigned 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 checksum; /* checksum of directory state */
+};
+
+#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 4
+
+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 */
+
+ FcRef ref; /* reference count */
+
+ FcExprPage *expr_pool; /* pool of FcExpr's */
+
+ FcChar8 *sysRoot; /* override the system root directory */
+};
+
+typedef struct _FcFileTime {
+ time_t time;
+ FcBool set;
+} FcFileTime;
+
+typedef struct _FcCharMap FcCharMap;
+
+typedef struct _FcRange FcRange;
+
+struct _FcRange {
+ FcChar32 begin;
+ FcChar32 end;
+};
+
+typedef struct _FcStatFS FcStatFS;
+
+struct _FcStatFS {
+ FcBool is_remote_fs;
+ FcBool is_mtime_broken;
+};
+
+typedef struct _FcValuePromotionBuffer FcValuePromotionBuffer;
+
+struct _FcValuePromotionBuffer {
+ union {
+ double d;
+ int i;
+ long l;
+ char c[256]; /* Enlarge as needed */
+ } u;
+};
+
+/* 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 FcBool
+FcDirCacheCreateTagFile (const FcChar8 *cache_dir);
+
+FcPrivate void
+FcCacheObjectReference (void *object);
+
+FcPrivate void
+FcCacheObjectDereference (void *object);
+
+FcPrivate void
+FcCacheFini (void);
+
+FcPrivate void
+FcDirCacheReference (FcCache *cache, int nref);
+
+/* fccfg.c */
+
+FcPrivate FcBool
+FcConfigInit (void);
+
+FcPrivate void
+FcConfigFini (void);
+
+FcPrivate FcChar8 *
+FcConfigXdgCacheHome (void);
+
+FcPrivate FcChar8 *
+FcConfigXdgConfigHome (void);
+
+FcPrivate FcChar8 *
+FcConfigXdgDataHome (void);
+
+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);
+
+FcBool
+FcConfigAddRule (FcConfig *config,
+ FcRule *rule,
+ FcMatchKind kind);
+
+FcPrivate void
+FcConfigSetFonts (FcConfig *config,
+ FcFontSet *fonts,
+ FcSetName set);
+
+FcPrivate FcBool
+FcConfigCompareValue (const FcValue *m,
+ unsigned int 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);
+
+/* fccompat.c */
+FcPrivate int
+FcOpen(const char *pathname, int flags, ...);
+
+FcPrivate int
+FcMakeTempfile (char *template);
+
+FcPrivate int32_t
+FcRandom (void);
+
+FcPrivate FcBool
+FcMakeDirectory (const FcChar8 *dir);
+
+/* fcdbg.c */
+
+FcPrivate void
+FcValuePrintFile (FILE *f, const FcValue v);
+
+FcPrivate void
+FcValuePrintWithPosition (const FcValue v, FcBool show_pos_mark);
+
+FcPrivate void
+FcValueListPrintWithPosition (FcValueListPtr l, const FcValueListPtr pos);
+
+FcPrivate void
+FcValueListPrint (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);
+
+FcPrivate FcChar8 *
+FcGetPrgname (void);
+
+FcPrivate void
+FcDefaultFini (void);
+
+/* fcdir.c */
+
+FcPrivate FcBool
+FcFileIsLink (const FcChar8 *file);
+
+FcPrivate FcBool
+FcFileIsFile (const FcChar8 *file);
+
+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);
+
+/* fchash.c */
+FcPrivate FcChar8 *
+FcHashGetSHA256Digest (const FcChar8 *input_strings,
+ size_t len);
+
+FcPrivate FcChar8 *
+FcHashGetSHA256DigestFromFile (const FcChar8 *filename);
+
+FcPrivate FcChar8 *
+FcHashGetSHA256DigestFromMemory (const char *fontdata,
+ size_t length);
+
+/* fcinit.c */
+FcPrivate FcConfig *
+FcInitLoadOwnConfig (FcConfig *config);
+
+FcPrivate FcConfig *
+FcInitLoadOwnConfigAndFonts (FcConfig *config);
+
+/* fcxml.c */
+FcPrivate void
+FcTestDestroy (FcTest *test);
+
+FcPrivate void
+FcEditDestroy (FcEdit *e);
+
+void
+FcRuleDestroy (FcRule *rule);
+
+/* 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, FcValuePromotionBuffer *buf);
+
+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 */
+
+enum {
+ FC_INVALID_OBJECT = 0,
+#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME##_OBJECT,
+#include "fcobjs.h"
+#undef FC_OBJECT
+ FC_ONE_AFTER_MAX_BASE_OBJECT
+#define FC_MAX_BASE_OBJECT (FC_ONE_AFTER_MAX_BASE_OBJECT - 1)
+};
+
+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);
+
+#define FcObjectCompare(a, b) ((int) a - (int) b)
+
+/* fcpat.c */
+
+FcPrivate FcValue
+FcValueCanonicalize (const FcValue *v);
+
+FcPrivate FcValueListPtr
+FcValueListCreate (void);
+
+FcPrivate void
+FcValueListDestroy (FcValueListPtr l);
+
+FcPrivate FcValueListPtr
+FcValueListPrepend (FcValueListPtr vallist,
+ FcValue value,
+ FcValueBinding binding);
+
+FcPrivate FcValueListPtr
+FcValueListAppend (FcValueListPtr vallist,
+ FcValue value,
+ FcValueBinding binding);
+
+FcPrivate FcValueListPtr
+FcValueListDuplicate(FcValueListPtr orig);
+
+FcPrivate FcPatternElt *
+FcPatternObjectFindElt (const FcPattern *p, FcObject object);
+
+FcPrivate FcPatternElt *
+FcPatternObjectInsertElt (FcPattern *p, FcObject object);
+
+FcPrivate FcBool
+FcPatternObjectListAdd (FcPattern *p,
+ FcObject object,
+ FcValueListPtr list,
+ FcBool append);
+
+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 FcBool
+FcPatternAppend (FcPattern *p, FcPattern *s);
+
+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);
+
+/* fcstat.c */
+
+FcPrivate int
+FcStat (const FcChar8 *file, struct stat *statb);
+
+FcPrivate int
+FcStatChecksum (const FcChar8 *file, struct stat *statb);
+
+FcPrivate FcBool
+FcIsFsMmapSafe (int fd);
+
+FcPrivate FcBool
+FcIsFsMtimeBroken (const FcChar8 *dir);
+
+/* fcstr.c */
+FcPrivate FcBool
+FcStrSetAddLangs (FcStrSet *strs, const char *languages);
+
+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 int
+FcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
+
+FcPrivate FcBool
+FcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex);
+
+FcPrivate FcBool
+FcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex);
+
+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 int
+FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims);
+
+FcPrivate FcBool
+FcStrGlobMatch (const FcChar8 *glob,
+ const FcChar8 *string);
+
+FcPrivate FcBool
+FcStrUsesHome (const FcChar8 *s);
+
+FcPrivate FcChar8 *
+FcStrBuildFilename (const FcChar8 *path,
+ ...);
+
+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);
+
+/* fcobjs.c */
+
+FcPrivate FcObject
+FcObjectLookupIdByName (const char *str);
+
+FcPrivate FcObject
+FcObjectLookupBuiltinIdByName (const char *str);
+
+FcPrivate const char *
+FcObjectLookupOtherNameById (FcObject id);
+
+FcPrivate const FcObjectType *
+FcObjectLookupOtherTypeById (FcObject id);
+
+FcPrivate const FcObjectType *
+FcObjectLookupOtherTypeByName (const char *str);
+
+#endif /* _FC_INT_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fclang.c b/chromium/third_party/fontconfig/src/src/fclang.c
new file mode 100644
index 00000000000..9f685f6fdff
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fclang.c
@@ -0,0 +1,1059 @@
+/*
+ * 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"
+
+/* Objects MT-safe for readonly access. */
+
+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 int FcLangSetIndex (const FcChar8 *lang);
+
+
+static void
+FcLangSetBitSet (FcLangSet *ls,
+ unsigned int id)
+{
+ unsigned 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)
+{
+ unsigned 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)
+{
+ unsigned 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;
+}
+
+FcChar8 *
+FcLangNormalize (const FcChar8 *lang)
+{
+ FcChar8 *result = NULL, *s, *orig;
+ char *territory, *encoding, *modifier;
+ size_t llen, tlen = 0, mlen = 0;
+
+ if (!lang || !*lang)
+ return NULL;
+
+ if (FcStrCmpIgnoreCase (lang, (const FcChar8 *)"C") == 0 ||
+ FcStrCmpIgnoreCase (lang, (const FcChar8 *)"POSIX") == 0)
+ {
+ result = FcStrCopy ((const FcChar8 *)"en");
+ goto bail;
+ }
+
+ s = FcStrCopy (lang);
+ if (!s)
+ goto bail;
+
+ /* from the comments in glibc:
+ *
+ * LOCALE can consist of up to four recognized parts for the XPG syntax:
+ *
+ * language[_territory[.codeset]][@modifier]
+ *
+ * Beside the first all of them are allowed to be missing. If the
+ * full specified locale is not found, the less specific one are
+ * looked for. The various part will be stripped off according to
+ * the following order:
+ * (1) codeset
+ * (2) normalized codeset
+ * (3) territory
+ * (4) modifier
+ *
+ * So since we don't take care of the codeset part here, what patterns
+ * we need to deal with is:
+ *
+ * 1. language_territory@modifier
+ * 2. language@modifier
+ * 3. language
+ *
+ * then. and maybe no need to try language_territory here.
+ */
+ modifier = strchr ((const char *) s, '@');
+ if (modifier)
+ {
+ *modifier = 0;
+ modifier++;
+ mlen = strlen (modifier);
+ }
+ encoding = strchr ((const char *) s, '.');
+ if (encoding)
+ {
+ *encoding = 0;
+ encoding++;
+ if (modifier)
+ {
+ memmove (encoding, modifier, mlen + 1);
+ modifier = encoding;
+ }
+ }
+ territory = strchr ((const char *) s, '_');
+ if (!territory)
+ territory = strchr ((const char *) s, '-');
+ if (territory)
+ {
+ *territory = 0;
+ territory++;
+ tlen = strlen (territory);
+ }
+ llen = strlen ((const char *) s);
+ if (llen < 2 || llen > 3)
+ {
+ fprintf (stderr, "Fontconfig warning: ignoring %s: not a valid language tag\n",
+ lang);
+ goto bail0;
+ }
+ if (territory && (tlen < 2 || tlen > 3))
+ {
+ fprintf (stderr, "Fontconfig warning: ignoring %s: not a valid region tag\n",
+ lang);
+ goto bail0;
+ }
+ if (territory)
+ territory[-1] = '-';
+ if (modifier)
+ modifier[-1] = '@';
+ orig = FcStrDowncase (s);
+ if (!orig)
+ goto bail0;
+ if (territory)
+ {
+ if (FcDebug () & FC_DBG_LANGSET)
+ printf("Checking the existence of %s.orth\n", s);
+ if (FcLangSetIndex (s) < 0)
+ {
+ memmove (territory - 1, territory + tlen, (mlen > 0 ? mlen + 1 : 0) + 1);
+ if (modifier)
+ modifier = territory;
+ }
+ else
+ {
+ result = s;
+ /* we'll miss the opportunity to reduce the correct size
+ * of the allocated memory for the string after that.
+ */
+ s = NULL;
+ goto bail1;
+ }
+ }
+ if (modifier)
+ {
+ if (FcDebug () & FC_DBG_LANGSET)
+ printf("Checking the existence of %s.orth\n", s);
+ if (FcLangSetIndex (s) < 0)
+ modifier[-1] = 0;
+ else
+ {
+ result = s;
+ /* we'll miss the opportunity to reduce the correct size
+ * of the allocated memory for the string after that.
+ */
+ s = NULL;
+ goto bail1;
+ }
+ }
+ if (FcDebug () & FC_DBG_LANGSET)
+ printf("Checking the existence of %s.orth\n", s);
+ if (FcLangSetIndex (s) < 0)
+ {
+ /* there seems no languages matched in orth.
+ * add the language as is for fallback.
+ */
+ result = orig;
+ orig = NULL;
+ }
+ else
+ {
+ result = s;
+ /* we'll miss the opportunity to reduce the correct size
+ * of the allocated memory for the string after that.
+ */
+ s = NULL;
+ }
+ bail1:
+ if (orig)
+ FcStrFree (orig);
+ bail0:
+ if (s)
+ free (s);
+ bail:
+ if (FcDebug () & FC_DBG_LANGSET)
+ {
+ if (result)
+ printf ("normalized: %s -> %s\n", lang, result);
+ else
+ printf ("Unable to normalize %s\n", lang);
+ }
+
+ return result;
+}
+
+#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;
+ 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);
+ 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
+ */
+FcLangSet *
+FcLangSetPromote (const FcChar8 *lang, FcValuePromotionBuffer *vbuf)
+{
+ int id;
+ typedef struct {
+ FcLangSet ls;
+ FcStrSet strs;
+ FcChar8 *str;
+ } FcLangSetPromotionBuffer;
+ FcLangSetPromotionBuffer *buf = (FcLangSetPromotionBuffer *) vbuf;
+
+ FC_ASSERT_STATIC (sizeof (FcLangSetPromotionBuffer) <= sizeof (FcValuePromotionBuffer));
+
+ memset (buf->ls.map, '\0', sizeof (buf->ls.map));
+ buf->ls.map_size = NUM_LANG_SET_MAP;
+ buf->ls.extra = 0;
+ id = FcLangSetIndex (lang);
+ if (id > 0)
+ {
+ FcLangSetBitSet (&buf->ls, id);
+ }
+ else
+ {
+ buf->ls.extra = &buf->strs;
+ buf->strs.num = 1;
+ buf->strs.size = 1;
+ buf->strs.strs = &buf->str;
+ FcRefInit (&buf->strs.ref, 1);
+ buf->str = (FcChar8 *) lang;
+ }
+ return &buf->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);
+ FcStrSet *set = FcLangSetGetLangs (b);
+ FcStrList *sl = FcStrListCreate (set);
+ FcChar8 *str;
+
+ FcStrSetDestroy (set);
+ 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/chromium/third_party/fontconfig/src/src/fclist.c b/chromium/third_party/fontconfig/src/src/fclist.c
new file mode 100644
index 00000000000..a365098a4d7
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fclist.c
@@ -0,0 +1,607 @@
+/*
+ * 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;
+ 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;
+ os->objects = objects;
+ os->sobject = s;
+ }
+ high = os->nobject - 1;
+ low = 0;
+ mid = 0;
+ c = 1;
+ object = strdup (object);
+ while (low <= high)
+ {
+ mid = (low + high) >> 1;
+ c = os->objects[mid] - object;
+ if (c == 0)
+ {
+ FcFree (object);
+ 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)
+{
+ int i;
+
+ if (os->objects)
+ {
+ for (i = 0; i < os->nobject; i++)
+ FcFree (os->objects[i]);
+
+ free ((void *) os->objects);
+ }
+ 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,
+ FC_OP (FcOpListing, FcOpFlagIgnoreBlanks),
+ &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;
+
+ if (!p)
+ return FcFalse;
+ for (i = 0; i < p->num; i++)
+ {
+ FcPatternElt *pe = &FcPatternElts(p)[i];
+ FcPatternElt *fe;
+
+ if (pe->object == FC_NAMELANG_OBJECT)
+ {
+ /* "namelang" object is the alias object to change "familylang",
+ * "stylelang" and "fullnamelang" object alltogether. it won't be
+ * available on the font pattern. so checking its availability
+ * causes no results. we should ignore it here.
+ */
+ continue;
+ }
+ 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 FcTypeUnknown:
+ 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);
+ free (bucket);
+ }
+ table->buckets[i] = 0;
+ }
+ table->entries = 0;
+}
+
+static int
+FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object, const FcChar8 *lang)
+{
+ FcPatternElt *e = FcPatternObjectFindElt (font, object);
+ FcValueListPtr v;
+ FcValue value;
+ int idx = -1;
+ int defidx = -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;
+ if (defidx < 0)
+ {
+ /* workaround for fonts that has non-English value
+ * at the head of values.
+ */
+ res = FcLangCompare (value.u.s, (FcChar8 *)"en");
+ if (res == FcLangEqual)
+ defidx = i;
+ }
+ }
+ }
+ }
+
+ return (idx > 0) ? idx : (defidx > 0) ? defidx : 0;
+}
+
+static FcBool
+FcListAppend (FcListHashTable *table,
+ FcPattern *font,
+ FcObjectSet *os,
+ const FcChar8 *lang)
+{
+ 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;
+ 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, lang);
+ 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, lang);
+ 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, lang);
+ 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:
+ 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 */
+ {
+ FcChar8 *lang;
+
+ if (FcPatternObjectGetString (p, FC_NAMELANG_OBJECT, 0, &lang) != FcResultMatch)
+ {
+ lang = FcGetDefaultLang ();
+ }
+ if (!FcListAppend (&table, s->fonts[f], os, lang))
+ 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;
+ 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/chromium/third_party/fontconfig/src/src/fcmatch.c b/chromium/third_party/fontconfig/src/src/fcmatch.c
new file mode 100644
index 00000000000..627aa1a1696
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcmatch.c
@@ -0,0 +1,1025 @@
+/*
+ * 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"
+
+static double
+FcCompareNumber (FcValue *value1, FcValue *value2)
+{
+ double v1, v2, v;
+
+ switch ((int) value1->type) {
+ case FcTypeInteger:
+ v1 = (double) value1->u.i;
+ break;
+ case FcTypeDouble:
+ v1 = value1->u.d;
+ break;
+ default:
+ return -1.0;
+ }
+ switch ((int) 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
+FcComparePostScript (FcValue *v1, FcValue *v2)
+{
+ const FcChar8 *v1_string = FcValueString (v1);
+ const FcChar8 *v2_string = FcValueString (v2);
+ int n;
+ size_t len;
+
+ if (FcToLower (*v1_string) != FcToLower (*v2_string) &&
+ *v1_string != ' ' && *v2_string != ' ')
+ return 1.0;
+
+ n = FcStrMatchIgnoreCaseAndDelims (v1_string, v2_string, (const FcChar8 *)" -");
+ len = strlen ((const char *)v1_string);
+
+ return (double)(len - n) / (double)len;
+}
+
+static double
+FcCompareLang (FcValue *v1, FcValue *v2)
+{
+ FcLangResult result;
+ FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
+
+ switch ((int) value1.type) {
+ case FcTypeLangSet:
+ switch ((int) 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 ((int) 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 ((int) value1->type) {
+ case FcTypeInteger:
+ v1 = value1->u.i;
+ break;
+ case FcTypeDouble:
+ v1 = value1->u.d;
+ break;
+ default:
+ return -1;
+ }
+ switch ((int) 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;
+}
+
+static double
+FcCompareFilename (FcValue *v1, FcValue *v2)
+{
+ const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2);
+ if (FcStrCmp (s1, s2) == 0)
+ return 0.0;
+ else if (FcStrCmpIgnoreCase (s1, s2) == 0)
+ return 1.0;
+ else if (FcStrGlobMatch (s1, s2))
+ return 2.0;
+ else
+ return 3.0;
+}
+
+static double
+FcCompareHash (FcValue *v1, FcValue *v2)
+{
+ const FcChar8 *s1 = FcValueString (v1), *s2 = FcValueString (v2);
+
+ /* Do not match an empty string */
+ if (!s1 || !s2 || !s1[0] || !s2[0])
+ return 1.0;
+ return FcCompareString (v1, v2);
+}
+
+#define PRI_NULL(n) \
+ PRI_ ## n ## _STRONG = -1, \
+ PRI_ ## n ## _WEAK = -1,
+#define PRI1(n)
+#define PRI_FcCompareFamily(n) PRI1(n)
+#define PRI_FcCompareString(n) PRI1(n)
+#define PRI_FcCompareNumber(n) PRI1(n)
+#define PRI_FcCompareSize(n) PRI1(n)
+#define PRI_FcCompareBool(n) PRI1(n)
+#define PRI_FcCompareFilename(n) PRI1(n)
+#define PRI_FcCompareCharSet(n) PRI1(n)
+#define PRI_FcCompareLang(n) PRI1(n)
+#define PRI_FcComparePostScript(n) PRI1(n)
+#define PRI_FcCompareHash(n) PRI1(n)
+
+#define FC_OBJECT(NAME, Type, Cmp) PRI_##Cmp(NAME)
+
+typedef enum _FcMatcherPriorityDummy {
+#include "fcobjs.h"
+} FcMatcherPriorityDummy;
+
+#undef FC_OBJECT
+
+#undef PRI1
+#define PRI1(n) \
+ PRI_ ## n, \
+ PRI_ ## n ## _STRONG = PRI_ ## n, \
+ PRI_ ## n ## _WEAK = PRI_ ## n
+
+typedef enum _FcMatcherPriority {
+ PRI1(HASH),
+ PRI1(FILE),
+ PRI1(FONTFORMAT),
+ PRI1(SCALABLE),
+ PRI1(FOUNDRY),
+ PRI1(CHARSET),
+ PRI_FAMILY_STRONG,
+ PRI_POSTSCRIPT_NAME_STRONG,
+ PRI1(LANG),
+ PRI_FAMILY_WEAK,
+ PRI_POSTSCRIPT_NAME_WEAK,
+ PRI1(SPACING),
+ PRI1(PIXEL_SIZE),
+ PRI1(STYLE),
+ PRI1(SLANT),
+ PRI1(WEIGHT),
+ PRI1(WIDTH),
+ PRI1(DECORATIVE),
+ PRI1(ANTIALIAS),
+ PRI1(RASTERIZER),
+ PRI1(OUTLINE),
+ PRI1(FONTVERSION),
+ PRI_END
+} FcMatcherPriority;
+
+#undef PRI1
+
+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
+ */
+#define FC_OBJECT(NAME, Type, Cmp) { FC_##NAME##_OBJECT, Cmp, PRI_##NAME##_STRONG, PRI_##NAME##_WEAK },
+static const FcMatcher _FcMatchers [] = {
+ { FC_INVALID_OBJECT, NULL, -1, -1 },
+#include "fcobjs.h"
+};
+#undef FC_OBJECT
+
+static const FcMatcher*
+FcObjectToMatcher (FcObject object,
+ FcBool include_lang)
+{
+ if (include_lang)
+ {
+ switch (object) {
+ case FC_FAMILYLANG_OBJECT:
+ case FC_STYLELANG_OBJECT:
+ case FC_FULLNAMELANG_OBJECT:
+ object = FC_LANG_OBJECT;
+ break;
+ }
+ }
+ if (object > FC_MAX_BASE_OBJECT ||
+ !_FcMatchers[object].compare ||
+ _FcMatchers[object].strong == -1 ||
+ _FcMatchers[object].weak == -1)
+ return NULL;
+
+ return _FcMatchers + object;
+}
+
+static FcBool
+FcCompareValueList (FcObject object,
+ const FcMatcher *match,
+ FcValueListPtr v1orig, /* pattern */
+ FcValueListPtr v2orig, /* target */
+ FcValue *bestValue,
+ double *value,
+ int *n,
+ FcResult *result)
+{
+ FcValueListPtr v1, v2;
+ double v, best, bestStrong, bestWeak;
+ int j, k, pos = 0;
+
+ if (!match)
+ {
+ if (bestValue)
+ *bestValue = FcValueCanonicalize(&v2orig->value);
+ if (n)
+ *n = 0;
+ return FcTrue;
+ }
+
+ best = 1e99;
+ bestStrong = 1e99;
+ bestWeak = 1e99;
+ j = 1;
+ for (v1 = v1orig; v1; v1 = FcValueListNext(v1))
+ {
+ for (v2 = v2orig, k = 0; v2; v2 = FcValueListNext(v2), k++)
+ {
+ 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;
+ pos = k;
+ }
+ 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;
+ }
+ }
+ if (n)
+ *n = pos;
+
+ 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 < PRI_END; 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
+ {
+ const FcMatcher *match = FcObjectToMatcher (elt_i1->object, FcFalse);
+ if (!FcCompareValueList (elt_i1->object, match,
+ FcPatternEltValues(elt_i1),
+ FcPatternEltValues(elt_i2),
+ NULL, value, NULL, result))
+ return FcFalse;
+ i1++;
+ i2++;
+ }
+ }
+ return FcTrue;
+}
+
+FcPattern *
+FcFontRenderPrepare (FcConfig *config,
+ FcPattern *pat,
+ FcPattern *font)
+{
+ FcPattern *new;
+ int i;
+ FcPatternElt *fe, *pe, *fel, *pel;
+ FcValue v;
+ FcResult result;
+
+ assert (pat != NULL);
+ assert (font != NULL);
+
+ new = FcPatternCreate ();
+ if (!new)
+ return NULL;
+ for (i = 0; i < font->num; i++)
+ {
+ fe = &FcPatternElts(font)[i];
+ if (fe->object == FC_FAMILYLANG_OBJECT ||
+ fe->object == FC_STYLELANG_OBJECT ||
+ fe->object == FC_FULLNAMELANG_OBJECT)
+ {
+ /* ignore those objects. we need to deal with them
+ * another way */
+ continue;
+ }
+ if (fe->object == FC_FAMILY_OBJECT ||
+ fe->object == FC_STYLE_OBJECT ||
+ fe->object == FC_FULLNAME_OBJECT)
+ {
+ FC_ASSERT_STATIC ((FC_FAMILY_OBJECT + 1) == FC_FAMILYLANG_OBJECT);
+ FC_ASSERT_STATIC ((FC_STYLE_OBJECT + 1) == FC_STYLELANG_OBJECT);
+ FC_ASSERT_STATIC ((FC_FULLNAME_OBJECT + 1) == FC_FULLNAMELANG_OBJECT);
+
+ fel = FcPatternObjectFindElt (font, fe->object + 1);
+ pel = FcPatternObjectFindElt (pat, fe->object + 1);
+ }
+ else
+ {
+ fel = NULL;
+ pel = NULL;
+ }
+ pe = FcPatternObjectFindElt (pat, fe->object);
+ if (pe)
+ {
+ const FcMatcher *match = FcObjectToMatcher (pe->object, FcFalse);
+
+ if (!FcCompareValueList (pe->object, match,
+ FcPatternEltValues(pe),
+ FcPatternEltValues(fe), &v, NULL, NULL, &result))
+ {
+ FcPatternDestroy (new);
+ return NULL;
+ }
+ if (fel && pel)
+ {
+ int n = 1, j;
+ FcValueListPtr l1, l2, ln = NULL, ll = NULL;
+
+ match = FcObjectToMatcher (pel->object, FcTrue);
+ if (!FcCompareValueList (pel->object, match,
+ FcPatternEltValues (pel),
+ FcPatternEltValues (fel), NULL, NULL, &n, &result))
+ {
+ FcPatternDestroy (new);
+ return NULL;
+ }
+
+ for (j = 0, l1 = FcPatternEltValues (fe), l2 = FcPatternEltValues (fel);
+ l1 != NULL || l2 != NULL;
+ j++, l1 = l1 ? FcValueListNext (l1) : NULL, l2 = l2 ? FcValueListNext (l2) : NULL)
+ {
+ if (j == n)
+ {
+ if (l1)
+ ln = FcValueListPrepend (ln,
+ FcValueCanonicalize (&l1->value),
+ FcValueBindingStrong);
+ if (l2)
+ ll = FcValueListPrepend (ll,
+ FcValueCanonicalize (&l2->value),
+ FcValueBindingStrong);
+ }
+ else
+ {
+ if (l1)
+ ln = FcValueListAppend (ln,
+ FcValueCanonicalize (&l1->value),
+ FcValueBindingStrong);
+ if (l2)
+ ll = FcValueListAppend (ll,
+ FcValueCanonicalize (&l2->value),
+ FcValueBindingStrong);
+ }
+ }
+ FcPatternObjectListAdd (new, fe->object, ln, FcFalse);
+ FcPatternObjectListAdd (new, fel->object, ll, FcFalse);
+
+ continue;
+ }
+ else if (fel)
+ {
+ FcValueListPtr l1, l2;
+
+ copy_lang:
+ l1 = FcValueListDuplicate (FcPatternEltValues (fe));
+ l2 = FcValueListDuplicate (FcPatternEltValues (fel));
+ FcPatternObjectListAdd (new, fe->object, l1, FcFalse);
+ FcPatternObjectListAdd (new, fel->object, l2, FcFalse);
+
+ continue;
+ }
+ FcPatternObjectAdd (new, fe->object, v, FcFalse);
+ }
+ else
+ {
+ if (fel)
+ goto copy_lang;
+ FcPatternObjectListAdd (new, fe->object,
+ FcValueListDuplicate (FcPatternEltValues (fe)),
+ FcTrue);
+ }
+ }
+ for (i = 0; i < pat->num; i++)
+ {
+ pe = &FcPatternElts(pat)[i];
+ fe = FcPatternObjectFindElt (font, pe->object);
+ if (!fe &&
+ pe->object != FC_FAMILYLANG_OBJECT &&
+ pe->object != FC_STYLELANG_OBJECT &&
+ pe->object != FC_FULLNAMELANG_OBJECT)
+ {
+ FcPatternObjectListAdd (new, pe->object,
+ FcValueListDuplicate (FcPatternEltValues(pe)),
+ FcFalse);
+ }
+ }
+
+ FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
+ return new;
+}
+
+static FcPattern *
+FcFontSetMatchInternal (FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcResult *result)
+{
+ double score[PRI_END], bestscore[PRI_END];
+ int f;
+ FcFontSet *s;
+ FcPattern *best;
+ int i;
+ int set;
+
+ for (i = 0; i < PRI_END; 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 < PRI_END; i++)
+ {
+ printf (" %g", score[i]);
+ }
+ printf ("\n");
+ }
+ for (i = 0; i < PRI_END; i++)
+ {
+ if (best && bestscore[i] < score[i])
+ break;
+ if (!best || score[i] < bestscore[i])
+ {
+ for (i = 0; i < PRI_END; i++)
+ bestscore[i] = score[i];
+ best = s->fonts[f];
+ break;
+ }
+ }
+ }
+ }
+ if (FcDebug () & FC_DBG_MATCH)
+ {
+ printf ("Best score");
+ for (i = 0; i < PRI_END; i++)
+ printf (" %g", bestscore[i]);
+ printf ("\n");
+ FcPatternPrint (best);
+ }
+ /* assuming that 'result' is initialized with FcResultNoMatch
+ * outside this function */
+ if (best)
+ *result = FcResultMatch;
+
+ return best;
+}
+
+FcPattern *
+FcFontSetMatch (FcConfig *config,
+ FcFontSet **sets,
+ int nsets,
+ FcPattern *p,
+ FcResult *result)
+{
+ FcPattern *best;
+
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
+ *result = FcResultNoMatch;
+
+ if (!config)
+ {
+ config = FcConfigGetCurrent ();
+ if (!config)
+ return 0;
+ }
+ best = FcFontSetMatchInternal (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;
+
+ assert (p != NULL);
+ assert (result != NULL);
+
+ *result = FcResultNoMatch;
+
+ 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 (sets, nsets, p, result);
+ if (best)
+ return FcFontRenderPrepare (config, p, best);
+ else
+ return NULL;
+}
+
+typedef struct _FcSortNode {
+ FcPattern *pattern;
+ double score[PRI_END];
+} 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 = PRI_END;
+ 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 FC_UNUSED,
+ 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;
+
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
+ /* There are some implementation that relying on the result of
+ * "result" to check if the return value of FcFontSetSort
+ * is valid or not.
+ * So we should initialize it to the conservative way since
+ * this function doesn't return NULL anymore.
+ */
+ if (result)
+ *result = FcResultNoMatch;
+
+ 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)
+ return FcFontSetCreate ();
+
+ 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 < PRI_END; 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[PRI_LANG] < 2000)
+ {
+ for (i = 0; i < nPatternLang; i++)
+ {
+ FcValue nodeLang;
+
+ if (!patternLangSat[i] &&
+ FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch &&
+ FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch)
+ {
+ double compare = FcCompareLang (&patternLang, &nodeLang);
+ if (compare >= 0 && compare < 2)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ FcChar8 *family;
+ FcChar8 *style;
+
+ if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch &&
+ FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch)
+ printf ("Font %s:%s matches language %d\n", family, style, i);
+ }
+ patternLangSat[i] = FcTrue;
+ satisfies = FcTrue;
+ break;
+ }
+ }
+ }
+ }
+ if (!satisfies)
+ {
+ nodeps[f]->score[PRI_LANG] = 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]);
+ }
+ if (ret->nfont > 0)
+ *result = FcResultMatch;
+
+ 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;
+
+ assert (p != NULL);
+ assert (result != NULL);
+
+ *result = FcResultNoMatch;
+
+ 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/chromium/third_party/fontconfig/src/src/fcmatrix.c b/chromium/third_party/fontconfig/src/src/fcmatrix.c
new file mode 100644
index 00000000000..a6fbca2a05a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcmatrix.c
@@ -0,0 +1,116 @@
+/*
+ * fontconfig/src/fcmatrix.c
+ *
+ * Copyright © 2000 Tuomas J. Lukka
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Tuomas Lukka not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Tuomas Lukka makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "fcint.h"
+#include <math.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 };
+
+FcMatrix *
+FcMatrixCopy (const FcMatrix *mat)
+{
+ FcMatrix *r;
+ if(!mat)
+ return 0;
+ r = (FcMatrix *) malloc (sizeof (*r) );
+ if (!r)
+ return 0;
+ *r = *mat;
+ return r;
+}
+
+void
+FcMatrixFree (FcMatrix *mat)
+{
+ if (mat != &FcIdentityMatrix)
+ free (mat);
+}
+
+FcBool
+FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2)
+{
+ if(mat1 == mat2) return FcTrue;
+ if(mat1 == 0 || mat2 == 0) return FcFalse;
+ return mat1->xx == mat2->xx &&
+ mat1->xy == mat2->xy &&
+ mat1->yx == mat2->yx &&
+ mat1->yy == mat2->yy;
+}
+
+void
+FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b)
+{
+ FcMatrix r;
+
+ r.xx = a->xx * b->xx + a->xy * b->yx;
+ r.xy = a->xx * b->xy + a->xy * b->yy;
+ r.yx = a->yx * b->xx + a->yy * b->yx;
+ r.yy = a->yx * b->xy + a->yy * b->yy;
+ *result = r;
+}
+
+void
+FcMatrixRotate (FcMatrix *m, double c, double s)
+{
+ FcMatrix r;
+
+ /*
+ * X Coordinate system is upside down, swap to make
+ * rotations counterclockwise
+ */
+ r.xx = c;
+ r.xy = -s;
+ r.yx = s;
+ r.yy = c;
+ FcMatrixMultiply (m, &r, m);
+}
+
+void
+FcMatrixScale (FcMatrix *m, double sx, double sy)
+{
+ FcMatrix r;
+
+ r.xx = sx;
+ r.xy = 0;
+ r.yx = 0;
+ r.yy = sy;
+ FcMatrixMultiply (m, &r, m);
+}
+
+void
+FcMatrixShear (FcMatrix *m, double sh, double sv)
+{
+ FcMatrix r;
+
+ r.xx = 1;
+ r.xy = sh;
+ r.yx = sv;
+ r.yy = 1;
+ FcMatrixMultiply (m, &r, m);
+}
+#define __fcmatrix__
+#include "fcaliastail.h"
+#undef __fcmatrix__
diff --git a/chromium/third_party/fontconfig/src/src/fcmutex.h b/chromium/third_party/fontconfig/src/src/fcmutex.h
new file mode 100644
index 00000000000..556a05efcf3
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcmutex.h
@@ -0,0 +1,127 @@
+/*
+ * Atomic int and pointer operations. Originally copied from HarfBuzz.
+ *
+ * Copyright © 2007 Chris Wilson
+ * Copyright © 2009,2010 Red Hat, Inc.
+ * Copyright © 2011,2012,2013 Google, Inc.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Contributor(s):
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ * Red Hat Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef _FCMUTEX_H_
+#define _FCMUTEX_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#define FC_STMT_START do
+#define FC_STMT_END while (0)
+
+/* mutex */
+
+/* We need external help for these */
+
+#if 0
+
+
+#elif !defined(FC_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
+
+#include "fcwindows.h"
+typedef CRITICAL_SECTION fc_mutex_impl_t;
+#define FC_MUTEX_IMPL_INIT { NULL, 0, 0, NULL, NULL, 0 }
+#define fc_mutex_impl_init(M) InitializeCriticalSection (M)
+#define fc_mutex_impl_lock(M) EnterCriticalSection (M)
+#define fc_mutex_impl_unlock(M) LeaveCriticalSection (M)
+#define fc_mutex_impl_finish(M) DeleteCriticalSection (M)
+
+
+#elif !defined(FC_NO_MT) && (defined(HAVE_PTHREAD) || defined(__APPLE__))
+
+#include <pthread.h>
+typedef pthread_mutex_t fc_mutex_impl_t;
+#define FC_MUTEX_IMPL_INIT PTHREAD_MUTEX_INITIALIZER
+#define fc_mutex_impl_init(M) pthread_mutex_init (M, NULL)
+#define fc_mutex_impl_lock(M) pthread_mutex_lock (M)
+#define fc_mutex_impl_unlock(M) pthread_mutex_unlock (M)
+#define fc_mutex_impl_finish(M) pthread_mutex_destroy (M)
+
+
+#elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
+
+#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD)
+# include <sched.h>
+# define FC_SCHED_YIELD() sched_yield ()
+#else
+# define FC_SCHED_YIELD() FC_STMT_START {} FC_STMT_END
+#endif
+
+/* This actually is not a totally awful implementation. */
+typedef volatile int fc_mutex_impl_t;
+#define FC_MUTEX_IMPL_INIT 0
+#define fc_mutex_impl_init(M) *(M) = 0
+#define fc_mutex_impl_lock(M) FC_STMT_START { while (__sync_lock_test_and_set((M), 1)) FC_SCHED_YIELD (); } FC_STMT_END
+#define fc_mutex_impl_unlock(M) __sync_lock_release (M)
+#define fc_mutex_impl_finish(M) FC_STMT_START {} FC_STMT_END
+
+
+#elif !defined(FC_NO_MT)
+
+#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD)
+# include <sched.h>
+# define FC_SCHED_YIELD() sched_yield ()
+#else
+# define FC_SCHED_YIELD() FC_STMT_START {} FC_STMT_END
+#endif
+
+#define FC_MUTEX_INT_NIL 1 /* Warn that fallback implementation is in use. */
+typedef volatile int fc_mutex_impl_t;
+#define FC_MUTEX_IMPL_INIT 0
+#define fc_mutex_impl_init(M) *(M) = 0
+#define fc_mutex_impl_lock(M) FC_STMT_START { while (*(M)) FC_SCHED_YIELD (); (*(M))++; } FC_STMT_END
+#define fc_mutex_impl_unlock(M) (*(M))--;
+#define fc_mutex_impl_finish(M) FC_STMT_START {} FC_STMT_END
+
+
+#else /* FC_NO_MT */
+
+typedef int fc_mutex_impl_t;
+#define FC_MUTEX_IMPL_INIT 0
+#define fc_mutex_impl_init(M) FC_STMT_START {} FC_STMT_END
+#define fc_mutex_impl_lock(M) FC_STMT_START {} FC_STMT_END
+#define fc_mutex_impl_unlock(M) FC_STMT_START {} FC_STMT_END
+#define fc_mutex_impl_finish(M) FC_STMT_START {} FC_STMT_END
+
+#endif
+
+
+#define FC_MUTEX_INIT {FC_MUTEX_IMPL_INIT}
+typedef fc_mutex_impl_t FcMutex;
+static inline void FcMutexInit (FcMutex *m) { fc_mutex_impl_init (m); }
+static inline void FcMutexLock (FcMutex *m) { fc_mutex_impl_lock (m); }
+static inline void FcMutexUnlock (FcMutex *m) { fc_mutex_impl_unlock (m); }
+static inline void FcMutexFinish (FcMutex *m) { fc_mutex_impl_finish (m); }
+
+
+#endif /* _FCMUTEX_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fcname.c b/chromium/third_party/fontconfig/src/src/fcname.c
new file mode 100644
index 00000000000..712b2fad36c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcname.c
@@ -0,0 +1,584 @@
+/*
+ * 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>
+
+static const FcObjectType FcObjects[] = {
+#define FC_OBJECT(NAME, Type, Cmp) { FC_##NAME, Type },
+#include "fcobjs.h"
+#undef FC_OBJECT
+};
+
+#define NUM_OBJECT_TYPES ((int) (sizeof FcObjects / sizeof FcObjects[0]))
+
+static const FcObjectType *
+FcObjectFindById (FcObject object)
+{
+ if (1 <= object && object <= NUM_OBJECT_TYPES)
+ return &FcObjects[object - 1];
+ return FcObjectLookupOtherTypeById (object);
+}
+
+FcBool
+FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes)
+{
+ /* Deprecated. */
+ return FcFalse;
+}
+
+FcBool
+FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes)
+{
+ /* Deprecated. */
+ return FcFalse;
+}
+
+const FcObjectType *
+FcNameGetObjectType (const char *object)
+{
+ int id = FcObjectLookupBuiltinIdByName (object);
+
+ if (!id)
+ return FcObjectLookupOtherTypeByName (object);
+
+ return &FcObjects[id - 1];
+}
+
+FcBool
+FcObjectValidType (FcObject object, FcType type)
+{
+ const FcObjectType *t = FcObjectFindById (object);
+
+ if (t) {
+ switch ((int) t->type) {
+ case FcTypeUnknown:
+ 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)
+{
+ return FcObjectLookupIdByName (name);
+}
+
+FcObjectSet *
+FcObjectGetSet (void)
+{
+ int i;
+ FcObjectSet *os = NULL;
+
+
+ os = FcObjectSetCreate ();
+ for (i = 0; i < NUM_OBJECT_TYPES; i++)
+ FcObjectSetAdd (os, FcObjects[i].object);
+
+ return os;
+}
+
+const char *
+FcObjectName (FcObject object)
+{
+ const FcObjectType *o = FcObjectFindById (object);
+
+ if (o)
+ return o->object;
+
+ return FcObjectLookupOtherNameById (object);
+}
+
+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 }, /* deprecated */
+ { (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])
+
+FcBool
+FcNameRegisterConstants (const FcConstant *consts, int nconsts)
+{
+ /* Deprecated. */
+ return FcFalse;
+}
+
+FcBool
+FcNameUnregisterConstants (const FcConstant *consts, int nconsts)
+{
+ /* Deprecated. */
+ return FcFalse;
+}
+
+const FcConstant *
+FcNameGetConstant (const FcChar8 *string)
+{
+ unsigned int i;
+
+ for (i = 0; i < NUM_FC_CONSTANTS; i++)
+ if (!FcStrCmpIgnoreCase (string, _FcBaseConstants[i].name))
+ return &_FcBaseConstants[i];
+
+ return 0;
+}
+
+FcBool
+FcNameConstant (const 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)
+{
+ FcValue v;
+ FcMatrix m;
+
+ v.type = type;
+ switch ((int) v.type) {
+ case FcTypeInteger:
+ if (!FcNameConstant (string, &v.u.i))
+ v.u.i = atoi ((char *) string);
+ break;
+ case FcTypeString:
+ v.u.s = FcStrdup (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:
+ FcMatrixInit (&m);
+ sscanf ((char *) string, "%lg %lg %lg %lg", &m.xx, &m.xy, &m.yx, &m.yy);
+ v.u.m = FcMatrixCopy (&m);
+ 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 (!isspace (c))
+ break;
+ ++cur;
+ }
+ 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;
+ 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);
+ if (!FcPatternAdd (pat, t->object, v, FcTrue))
+ {
+ FcValueDestroy (v);
+ goto bail2;
+ }
+ FcValueDestroy (v);
+ }
+ if (delim != ',')
+ break;
+ }
+ }
+ else
+ {
+ if ((c = FcNameGetConstant (save)))
+ {
+ t = FcNameGetObjectType ((char *) c->object);
+ switch ((int) 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 FcTypeUnknown:
+ 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;
+
+ 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 (i = 0; i < NUM_OBJECT_TYPES; i++)
+ {
+ FcObject id = i + 1;
+ const FcObjectType *o;
+ o = &FcObjects[i];
+ if (!strcmp (o->object, FC_FAMILY) ||
+ !strcmp (o->object, FC_SIZE))
+ continue;
+
+ e = FcPatternObjectFindElt (pat, id);
+ 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/chromium/third_party/fontconfig/src/src/fcobjs.c b/chromium/third_party/fontconfig/src/src/fcobjs.c
new file mode 100644
index 00000000000..bad9824d461
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcobjs.c
@@ -0,0 +1,139 @@
+/*
+ * 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"
+
+static unsigned int
+FcObjectTypeHash (register const char *str, register unsigned int len);
+
+static const struct FcObjectTypeInfo *
+FcObjectTypeLookup (register const char *str, register unsigned int len);
+
+#include "fcobjshash.h"
+
+#include <string.h>
+
+/* The 1000 is to leave some room for future added internal objects, such
+ * that caches from newer fontconfig can still be used with older fontconfig
+ * without getting confused. */
+static fc_atomic_int_t next_id = FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX;
+struct FcObjectOtherTypeInfo {
+ struct FcObjectOtherTypeInfo *next;
+ FcObjectType object;
+ FcObject id;
+} *other_types;
+
+static FcObjectType *
+_FcObjectLookupOtherTypeByName (const char *str, FcObject *id)
+{
+ struct FcObjectOtherTypeInfo *ots, *ot;
+
+retry:
+ ots = fc_atomic_ptr_get (&other_types);
+
+ for (ot = ots; ot; ot = ot->next)
+ if (0 == strcmp (ot->object.object, str))
+ break;
+
+ if (!ot)
+ {
+ ot = malloc (sizeof (*ot));
+ if (!ot)
+ return NULL;
+
+ ot->object.object = (const char *) FcStrdup (str);
+ ot->object.type = FcTypeUnknown;
+ ot->id = fc_atomic_int_add (next_id, +1);
+ ot->next = ots;
+
+ if (!fc_atomic_ptr_cmpexch (&other_types, ots, ot)) {
+ free (ot);
+ goto retry;
+ }
+ }
+
+ if (id)
+ *id = ot->id;
+
+ return &ot->object;
+}
+
+FcObject
+FcObjectLookupBuiltinIdByName (const char *str)
+{
+ const struct FcObjectTypeInfo *o = FcObjectTypeLookup (str, strlen (str));
+
+ if (o)
+ return o->id;
+
+ return 0;
+}
+
+FcObject
+FcObjectLookupIdByName (const char *str)
+{
+ const struct FcObjectTypeInfo *o = FcObjectTypeLookup (str, strlen (str));
+ FcObject id;
+ if (o)
+ return o->id;
+
+ if (_FcObjectLookupOtherTypeByName (str, &id))
+ return id;
+
+ return 0;
+}
+
+const char *
+FcObjectLookupOtherNameById (FcObject id)
+{
+ struct FcObjectOtherTypeInfo *ot;
+
+ for (ot = fc_atomic_ptr_get (&other_types); ot; ot = ot->next)
+ if (ot->id == id)
+ return ot->object.object;
+
+ return NULL;
+}
+
+const FcObjectType *
+FcObjectLookupOtherTypeByName (const char *str)
+{
+ return _FcObjectLookupOtherTypeByName (str, NULL);
+}
+
+FcPrivate const FcObjectType *
+FcObjectLookupOtherTypeById (FcObject id)
+{
+ struct FcObjectOtherTypeInfo *ot;
+
+ for (ot = fc_atomic_ptr_get (&other_types); ot; ot = ot->next)
+ if (ot->id == id)
+ return &ot->object;
+
+ return NULL;
+}
+
+
+#include "fcaliastail.h"
+#undef __fcobjs__
diff --git a/chromium/third_party/fontconfig/src/src/fcobjs.h b/chromium/third_party/fontconfig/src/src/fcobjs.h
new file mode 100644
index 00000000000..87c7319e39a
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcobjs.h
@@ -0,0 +1,48 @@
+/* DON'T REORDER! The order is part of the cache signature. */
+FC_OBJECT (FAMILY, FcTypeString, FcCompareFamily)
+FC_OBJECT (FAMILYLANG, FcTypeString, NULL)
+FC_OBJECT (STYLE, FcTypeString, FcCompareString)
+FC_OBJECT (STYLELANG, FcTypeString, NULL)
+FC_OBJECT (FULLNAME, FcTypeString, NULL)
+FC_OBJECT (FULLNAMELANG, FcTypeString, NULL)
+FC_OBJECT (SLANT, FcTypeInteger, FcCompareNumber)
+FC_OBJECT (WEIGHT, FcTypeInteger, FcCompareNumber)
+FC_OBJECT (WIDTH, FcTypeInteger, FcCompareNumber)
+FC_OBJECT (SIZE, FcTypeDouble, NULL)
+FC_OBJECT (ASPECT, FcTypeDouble, NULL)
+FC_OBJECT (PIXEL_SIZE, FcTypeDouble, FcCompareSize)
+FC_OBJECT (SPACING, FcTypeInteger, FcCompareNumber)
+FC_OBJECT (FOUNDRY, FcTypeString, FcCompareString)
+FC_OBJECT (ANTIALIAS, FcTypeBool, FcCompareBool)
+FC_OBJECT (HINT_STYLE, FcTypeInteger, NULL)
+FC_OBJECT (HINTING, FcTypeBool, NULL)
+FC_OBJECT (VERTICAL_LAYOUT, FcTypeBool, NULL)
+FC_OBJECT (AUTOHINT, FcTypeBool, NULL)
+FC_OBJECT (GLOBAL_ADVANCE, FcTypeBool, NULL) /* deprecated */
+FC_OBJECT (FILE, FcTypeString, FcCompareFilename)
+FC_OBJECT (INDEX, FcTypeInteger, NULL)
+FC_OBJECT (RASTERIZER, FcTypeString, FcCompareString)
+FC_OBJECT (OUTLINE, FcTypeBool, FcCompareBool)
+FC_OBJECT (SCALABLE, FcTypeBool, FcCompareBool)
+FC_OBJECT (DPI, FcTypeDouble, NULL)
+FC_OBJECT (RGBA, FcTypeInteger, NULL)
+FC_OBJECT (SCALE, FcTypeDouble, NULL)
+FC_OBJECT (MINSPACE, FcTypeBool, NULL)
+FC_OBJECT (CHAR_WIDTH, FcTypeInteger, NULL)
+FC_OBJECT (CHAR_HEIGHT, FcTypeInteger, NULL)
+FC_OBJECT (MATRIX, FcTypeMatrix, NULL)
+FC_OBJECT (CHARSET, FcTypeCharSet, FcCompareCharSet)
+FC_OBJECT (LANG, FcTypeLangSet, FcCompareLang)
+FC_OBJECT (FONTVERSION, FcTypeInteger, FcCompareNumber)
+FC_OBJECT (CAPABILITY, FcTypeString, NULL)
+FC_OBJECT (FONTFORMAT, FcTypeString, FcCompareString)
+FC_OBJECT (EMBOLDEN, FcTypeBool, NULL)
+FC_OBJECT (EMBEDDED_BITMAP, FcTypeBool, NULL)
+FC_OBJECT (DECORATIVE, FcTypeBool, FcCompareBool)
+FC_OBJECT (LCD_FILTER, FcTypeInteger, NULL)
+FC_OBJECT (NAMELANG, FcTypeString, NULL)
+FC_OBJECT (FONT_FEATURES, FcTypeString, NULL)
+FC_OBJECT (PRGNAME, FcTypeString, NULL)
+FC_OBJECT (HASH, FcTypeString, FcCompareHash)
+FC_OBJECT (POSTSCRIPT_NAME, FcTypeString, FcComparePostScript)
+/* ^-------------- Add new objects here. */
diff --git a/chromium/third_party/fontconfig/src/src/fcobjshash.gperf.h b/chromium/third_party/fontconfig/src/src/fcobjshash.gperf.h
new file mode 100644
index 00000000000..ca23c026116
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcobjshash.gperf.h
@@ -0,0 +1,26 @@
+%{
+CUT_OUT_BEGIN
+#include <fontconfig/fontconfig.h>
+CUT_OUT_END
+%}
+%struct-type
+%language=ANSI-C
+%includes
+%enum
+%readonly-tables
+%define slot-name name
+%define hash-function-name FcObjectTypeHash
+%define lookup-function-name FcObjectTypeLookup
+
+%pic
+%define string-pool-name FcObjectTypeNamePool
+
+struct FcObjectTypeInfo {
+ int name;
+ int id;
+};
+
+%%
+#define FC_OBJECT(NAME, Type, Cmp) FC_##NAME, FC_##NAME##_OBJECT
+#include "fcobjs.h"
+#undef FC_OBJECT
diff --git a/chromium/third_party/fontconfig/src/src/fcpat.c b/chromium/third_party/fontconfig/src/src/fcpat.c
new file mode 100644
index 00000000000..0614ac2c239
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcpat.c
@@ -0,0 +1,1316 @@
+/*
+ * 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"
+
+/* Objects MT-safe for readonly access. */
+
+FcPattern *
+FcPatternCreate (void)
+{
+ FcPattern *p;
+
+ p = (FcPattern *) malloc (sizeof (FcPattern));
+ if (!p)
+ return 0;
+ p->num = 0;
+ p->size = 0;
+ p->elts_offset = FcPtrToOffset (p, NULL);
+ FcRefInit (&p->ref, 1);
+ return p;
+}
+
+void
+FcValueDestroy (FcValue v)
+{
+ switch ((int) v.type) {
+ case FcTypeString:
+ FcFree (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 ((int) 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 ((int) v.type) {
+ case FcTypeString:
+ v.u.s = FcStrdup (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;
+}
+
+FcValueListPtr
+FcValueListCreate (void)
+{
+ return calloc (1, sizeof (FcValueList));
+}
+
+void
+FcValueListDestroy (FcValueListPtr l)
+{
+ FcValueListPtr next;
+ for (; l; l = next)
+ {
+ switch ((int) l->value.type) {
+ case FcTypeString:
+ FcFree (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);
+ free(l);
+ }
+}
+
+FcValueListPtr
+FcValueListPrepend (FcValueListPtr vallist,
+ FcValue value,
+ FcValueBinding binding)
+{
+ FcValueListPtr new;
+
+ if (value.type == FcTypeVoid)
+ return vallist;
+ new = FcValueListCreate ();
+ if (!new)
+ return vallist;
+
+ new->value = FcValueSave (value);
+ new->binding = binding;
+ new->next = vallist;
+
+ return new;
+}
+
+FcValueListPtr
+FcValueListAppend (FcValueListPtr vallist,
+ FcValue value,
+ FcValueBinding binding)
+{
+ FcValueListPtr new, last;
+
+ if (value.type == FcTypeVoid)
+ return vallist;
+ new = FcValueListCreate ();
+ if (!new)
+ return vallist;
+
+ new->value = FcValueSave (value);
+ new->binding = binding;
+ new->next = NULL;
+
+ if (vallist)
+ {
+ for (last = vallist; FcValueListNext (last); last = FcValueListNext (last));
+
+ last->next = new;
+ }
+ else
+ vallist = new;
+
+ return vallist;
+}
+
+FcValueListPtr
+FcValueListDuplicate(FcValueListPtr orig)
+{
+ FcValueListPtr new = NULL, l, t = NULL;
+ FcValue v;
+
+ for (l = orig; l != NULL; l = FcValueListNext (l))
+ {
+ if (!new)
+ {
+ t = new = FcValueListCreate();
+ }
+ else
+ {
+ t->next = FcValueListCreate();
+ t = FcValueListNext (t);
+ }
+ v = FcValueCanonicalize (&l->value);
+ t->value = FcValueSave (v);
+ t->binding = l->binding;
+ t->next = NULL;
+ }
+
+ return new;
+}
+
+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 FcTypeUnknown:
+ return FcFalse; /* don't know how to compare this object */
+ 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 FcTypeUnknown:
+ 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 0;
+}
+
+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)
+ return;
+
+ if (FcRefIsConst (&p->ref))
+ {
+ FcCacheObjectDereference (p);
+ return;
+ }
+
+ if (FcRefDec (&p->ref) != 1)
+ return;
+
+ elts = FcPatternElts (p);
+ for (i = 0; i < p->num; i++)
+ FcValueListDestroy (FcPatternEltValues(&elts[i]));
+
+ free (elts);
+ 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);
+ 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
+FcPatternObjectListAdd (FcPattern *p,
+ FcObject object,
+ FcValueListPtr list,
+ FcBool append)
+{
+ FcPatternElt *e;
+ FcValueListPtr l, *prev;
+
+ if (FcRefIsConst (&p->ref))
+ goto bail0;
+
+ /*
+ * Make sure the stored type is valid for built-in objects
+ */
+ for (l = list; l != NULL; l = FcValueListNext (l))
+ {
+ if (!FcObjectValidType (object, l->value.type))
+ {
+ fprintf (stderr,
+ "Fontconfig warning: FcPattern object %s does not accept value", FcObjectName (object));
+ FcValuePrintFile (stderr, l->value);
+ fprintf (stderr, "\n");
+ goto bail0;
+ }
+ }
+
+ e = FcPatternObjectInsertElt (p, object);
+ if (!e)
+ goto bail0;
+
+ if (append)
+ {
+ for (prev = &e->values; *prev; prev = &(*prev)->next)
+ ;
+ *prev = list;
+ }
+ else
+ {
+ for (prev = &list; *prev; prev = &(*prev)->next)
+ ;
+ *prev = e->values;
+ e->values = list;
+ }
+
+ return FcTrue;
+
+bail0:
+ return FcFalse;
+}
+
+FcBool
+FcPatternObjectAddWithBinding (FcPattern *p,
+ FcObject object,
+ FcValue value,
+ FcValueBinding binding,
+ FcBool append)
+{
+ FcPatternElt *e;
+ FcValueListPtr new, *prev;
+
+ if (FcRefIsConst (&p->ref))
+ goto bail0;
+
+ new = FcValueListCreate ();
+ if (!new)
+ goto bail0;
+
+ 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))
+ {
+ fprintf (stderr,
+ "Fontconfig warning: FcPattern object %s does not accept value",
+ FcObjectName (object));
+ FcValuePrintFile (stderr, value);
+ fprintf (stderr, "\n");
+ 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:
+ 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 = 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;
+
+ if (!p)
+ return FcResultNoMatch;
+ 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 ((int) 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 ((int) 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 (!FcRefIsConst (&p->ref))
+ FcRefInc (&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;
+}
+
+
+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;
+ FcRefSetConst (&pat_serialized->ref);
+
+ 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 ((int) 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 ((int) 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/chromium/third_party/fontconfig/src/src/fcserialize.c b/chromium/third_party/fontconfig/src/src/fcserialize.c
new file mode 100644
index 00000000000..d2f221df82c
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcserialize.c
@@ -0,0 +1,155 @@
+/*
+ * 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 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"
+
+intptr_t
+FcAlignSize (intptr_t size)
+{
+ intptr_t rem = size % sizeof (FcAlign);
+ if (rem)
+ size += sizeof (FcAlign) - rem;
+ return size;
+}
+
+/*
+ * Serialization helper object -- allocate space in the
+ * yet-to-be-created linear array for a serialized font set
+ */
+
+FcSerialize *
+FcSerializeCreate (void)
+{
+ FcSerialize *serialize;
+
+ serialize = malloc (sizeof (FcSerialize));
+ if (!serialize)
+ return NULL;
+ serialize->size = 0;
+ serialize->linear = NULL;
+ serialize->cs_freezer = NULL;
+ memset (serialize->buckets, '\0', sizeof (serialize->buckets));
+ return serialize;
+}
+
+void
+FcSerializeDestroy (FcSerialize *serialize)
+{
+ uintptr_t bucket;
+
+ for (bucket = 0; bucket < FC_SERIALIZE_HASH_SIZE; bucket++)
+ {
+ FcSerializeBucket *buck, *next;
+
+ for (buck = serialize->buckets[bucket]; buck; buck = next) {
+ next = buck->next;
+ free (buck);
+ }
+ }
+ if (serialize->cs_freezer)
+ FcCharSetFreezerDestroy (serialize->cs_freezer);
+ free (serialize);
+}
+
+/*
+ * Allocate space for an object in the serialized array. Keep track
+ * of where the object is placed and only allocate one copy of each object
+ */
+
+FcBool
+FcSerializeAlloc (FcSerialize *serialize, const void *object, int size)
+{
+ uintptr_t bucket = ((uintptr_t) object) % FC_SERIALIZE_HASH_SIZE;
+ FcSerializeBucket *buck;
+
+ for (buck = serialize->buckets[bucket]; buck; buck = buck->next)
+ if (buck->object == object)
+ return FcTrue;
+ buck = malloc (sizeof (FcSerializeBucket));
+ if (!buck)
+ return FcFalse;
+ buck->object = object;
+ buck->offset = serialize->size;
+ buck->next = serialize->buckets[bucket];
+ serialize->buckets[bucket] = buck;
+ serialize->size += FcAlignSize (size);
+ return FcTrue;
+}
+
+/*
+ * Reserve space in the serialization array
+ */
+intptr_t
+FcSerializeReserve (FcSerialize *serialize, int size)
+{
+ intptr_t offset = serialize->size;
+ serialize->size += FcAlignSize (size);
+ return offset;
+}
+
+/*
+ * Given an object, return the offset in the serialized array where
+ * the serialized copy of the object is stored
+ */
+intptr_t
+FcSerializeOffset (FcSerialize *serialize, const void *object)
+{
+ uintptr_t bucket = ((uintptr_t) object) % FC_SERIALIZE_HASH_SIZE;
+ FcSerializeBucket *buck;
+
+ for (buck = serialize->buckets[bucket]; buck; buck = buck->next)
+ if (buck->object == object)
+ return buck->offset;
+ return 0;
+}
+
+/*
+ * Given a cache and an object, return a pointer to where
+ * the serialized copy of the object is stored
+ */
+void *
+FcSerializePtr (FcSerialize *serialize, const void *object)
+{
+ intptr_t offset = FcSerializeOffset (serialize, object);
+
+ if (!offset)
+ return NULL;
+ return (void *) ((char *) serialize->linear + offset);
+}
+
+FcBool
+FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str)
+{
+ return FcSerializeAlloc (serialize, str, strlen ((const char *) str) + 1);
+}
+
+FcChar8 *
+FcStrSerialize (FcSerialize *serialize, const FcChar8 *str)
+{
+ FcChar8 *str_serialize = FcSerializePtr (serialize, str);
+ if (!str_serialize)
+ return NULL;
+ strcpy ((char *) str_serialize, (const char *) str);
+ return str_serialize;
+}
+#include "fcaliastail.h"
+#undef __fcserialize__
diff --git a/chromium/third_party/fontconfig/src/src/fcstat.c b/chromium/third_party/fontconfig/src/src/fcstat.c
new file mode 100644
index 00000000000..ff8e88455ef
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcstat.c
@@ -0,0 +1,361 @@
+/*
+ * 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 <dirent.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+
+#ifdef _WIN32
+#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 FcChar8 *file, struct stat *statb)
+{
+ WIN32_FILE_ATTRIBUTE_DATA wfad;
+ char full_path_name[MAX_PATH];
+ char *basename;
+ DWORD rc;
+
+ if (!GetFileAttributesEx ((LPCSTR) 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 ((LPCSTR) 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 ((const FcChar8 *) 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 FcChar8 *file, struct stat *statb)
+{
+ return stat ((char *) file, statb);
+}
+
+/* Adler-32 checksum implementation */
+struct Adler32 {
+ int a;
+ int b;
+};
+
+static void
+Adler32Init (struct Adler32 *ctx)
+{
+ ctx->a = 1;
+ ctx->b = 0;
+}
+
+static void
+Adler32Update (struct Adler32 *ctx, const char *data, int data_len)
+{
+ while (data_len--)
+ {
+ ctx->a = (ctx->a + *data++) % 65521;
+ ctx->b = (ctx->b + ctx->a) % 65521;
+ }
+}
+
+static int
+Adler32Finish (struct Adler32 *ctx)
+{
+ return ctx->a + (ctx->b << 16);
+}
+
+#ifdef HAVE_STRUCT_DIRENT_D_TYPE
+/* dirent.d_type can be relied upon on FAT filesystem */
+static FcBool
+FcDirChecksumScandirFilter(const struct dirent *entry)
+{
+ return entry->d_type != DT_DIR;
+}
+#endif
+
+#ifdef HAVE_SCANDIR
+static int
+FcDirChecksumScandirSorter(const struct dirent **lhs, const struct dirent **rhs)
+{
+ return strcmp((*lhs)->d_name, (*rhs)->d_name);
+}
+#elif HAVE_SCANDIR_VOID_P
+static int
+FcDirChecksumScandirSorter(const void *a, const void *b)
+{
+ const struct dirent *lhs = a, *rhs = b;
+
+ return strcmp(lhs->d_name, rhs->d_name);
+}
+#endif
+
+static int
+FcDirChecksum (const FcChar8 *dir, time_t *checksum)
+{
+ struct Adler32 ctx;
+ struct dirent **files;
+ int n;
+#ifndef HAVE_STRUCT_DIRENT_D_TYPE
+ int ret = 0;
+ size_t len = strlen ((const char *)dir);
+#endif
+
+ Adler32Init (&ctx);
+
+ n = scandir ((const char *)dir, &files,
+#ifdef HAVE_STRUCT_DIRENT_D_TYPE
+ &FcDirChecksumScandirFilter,
+#else
+ NULL,
+#endif
+ &FcDirChecksumScandirSorter);
+ if (n == -1)
+ return -1;
+
+ while (n--)
+ {
+ size_t dlen = strlen (files[n]->d_name);
+ int dtype;
+
+#ifdef HAVE_STRUCT_DIRENT_D_TYPE
+ dtype = files[n]->d_type;
+#else
+ struct stat statb;
+ char f[PATH_MAX + 1];
+
+ memcpy (f, dir, len);
+ f[len] = FC_DIR_SEPARATOR;
+ memcpy (&f[len + 1], files[n]->d_name, dlen);
+ f[len + 1 + dlen] = 0;
+ if (lstat (f, &statb) < 0)
+ {
+ ret = -1;
+ goto bail;
+ }
+ if (S_ISDIR (statb.st_mode))
+ goto bail;
+
+ dtype = statb.st_mode;
+#endif
+ Adler32Update (&ctx, files[n]->d_name, dlen + 1);
+ Adler32Update (&ctx, (char *)&dtype, sizeof (int));
+
+#ifndef HAVE_STRUCT_DIRENT_D_TYPE
+ bail:
+#endif
+ free (files[n]);
+ }
+ free (files);
+#ifndef HAVE_STRUCT_DIRENT_D_TYPE
+ if (ret == -1)
+ return -1;
+#endif
+
+ *checksum = Adler32Finish (&ctx);
+
+ return 0;
+}
+#endif /* _WIN32 */
+
+int
+FcStatChecksum (const FcChar8 *file, struct stat *statb)
+{
+ if (FcStat (file, statb) == -1)
+ return -1;
+
+#ifndef _WIN32
+ /* We have a workaround of the broken stat() in FcStat() for Win32.
+ * No need to do something further more.
+ */
+ if (FcIsFsMtimeBroken (file))
+ {
+ if (FcDirChecksum (file, &statb->st_mtime) == -1)
+ return -1;
+ }
+#endif
+
+ return 0;
+}
+
+static int
+FcFStatFs (int fd, FcStatFS *statb)
+{
+ const char *p = NULL;
+ int ret = -1;
+ FcBool flag = FcFalse;
+
+#if defined(HAVE_FSTATVFS) && (defined(HAVE_STRUCT_STATVFS_F_BASETYPE) || defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME))
+ struct statvfs buf;
+
+ memset (statb, 0, sizeof (FcStatFS));
+
+ if ((ret = fstatvfs (fd, &buf)) == 0)
+ {
+# if defined(HAVE_STRUCT_STATVFS_F_BASETYPE)
+ p = buf.f_basetype;
+# elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME)
+ p = buf.f_fstypename;
+# endif
+ }
+#elif defined(HAVE_FSTATFS) && (defined(HAVE_STRUCT_STATFS_F_FLAGS) || defined(HAVE_STRUCT_STATFS_F_FSTYPENAME) || defined(__linux__))
+ struct statfs buf;
+
+ memset (statb, 0, sizeof (FcStatFS));
+
+ if ((ret = fstatfs (fd, &buf)) == 0)
+ {
+# if defined(HAVE_STRUCT_STATFS_F_FLAGS) && defined(MNT_LOCAL)
+ statb->is_remote_fs = !(buf.f_flags & MNT_LOCAL);
+ flag = FcTrue;
+# endif
+# if defined(HAVE_STRUCT_STATFS_F_FSTYPENAME)
+ p = buf.f_fstypename;
+# elif defined(__linux__)
+ switch (buf.f_type)
+ {
+ case 0x6969: /* nfs */
+ statb->is_remote_fs = FcTrue;
+ break;
+ case 0x4d44: /* fat */
+ statb->is_mtime_broken = FcTrue;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+# else
+# error "BUG: No way to figure out with fstatfs()"
+# endif
+ }
+#endif
+ if (p)
+ {
+ if (!flag && strcmp (p, "nfs") == 0)
+ statb->is_remote_fs = FcTrue;
+ if (strcmp (p, "msdosfs") == 0 ||
+ strcmp (p, "pcfs") == 0)
+ statb->is_mtime_broken = FcTrue;
+ }
+
+ return ret;
+}
+
+FcBool
+FcIsFsMmapSafe (int fd)
+{
+ FcStatFS statb;
+
+ if (FcFStatFs (fd, &statb) < 0)
+ return FcTrue;
+
+ return !statb.is_remote_fs;
+}
+
+FcBool
+FcIsFsMtimeBroken (const FcChar8 *dir)
+{
+ int fd = FcOpen ((const char *) dir, O_RDONLY);
+
+ if (fd != -1)
+ {
+ FcStatFS statb;
+ int ret = FcFStatFs (fd, &statb);
+
+ close (fd);
+ if (ret < 0)
+ return FcFalse;
+
+ return statb.is_mtime_broken;
+ }
+
+ return FcFalse;
+}
diff --git a/chromium/third_party/fontconfig/src/src/fcstr.c b/chromium/third_party/fontconfig/src/src/fcstr.c
new file mode 100644
index 00000000000..57071724315
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcstr.c
@@ -0,0 +1,1400 @@
+/*
+ * 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 HAVE_REGEX_H
+#include <regex.h>
+#endif
+
+
+/* Objects MT-safe for readonly access. */
+
+FcChar8 *
+FcStrCopy (const FcChar8 *s)
+{
+ return FcStrdup (s);
+}
+
+FcChar8 *
+FcStrPlus (const FcChar8 *s1, const FcChar8 *s2)
+{
+ int s1l = strlen ((char *) s1);
+ int s2l = strlen ((char *) s2);
+ int l = s1l + s2l + 1;
+ FcChar8 *s = malloc (l);
+
+ if (!s)
+ return 0;
+ memcpy (s, s1, s1l);
+ memcpy (s + s1l, s2, s2l + 1);
+ return s;
+}
+
+void
+FcStrFree (FcChar8 *s)
+{
+ free (s);
+}
+
+
+#include "../fc-case/fccase.h"
+
+#define FcCaseFoldUpperCount(cf) \
+ ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count)
+
+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, const char *delims)
+{
+ FcChar8 r;
+
+ if (w->read)
+ {
+ if ((r = *w->read++))
+ return r;
+ w->read = 0;
+ }
+ do
+ {
+ r = *w->src++;
+ } while (r != 0 && delims && strchr (delims, 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, NULL))
+ len++;
+ d = dst = malloc (len + 1);
+ if (!d)
+ return 0;
+ FcStrCaseWalkerInit (s, &w);
+ while ((*d++ = FcStrCaseWalkerNext (&w, NULL)));
+ 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, NULL);
+ c2 = FcStrCaseWalkerNext (&w2, NULL);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return (int) c1 - (int) c2;
+}
+
+int
+FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
+{
+ return FcStrCmpIgnoreCaseAndDelims (s1, s2, (const FcChar8 *)" ");
+}
+
+int
+FcStrCmpIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ if (s1 == s2) return 0;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNext (&w1, (const char *)delims);
+ c2 = FcStrCaseWalkerNext (&w2, (const char *)delims);
+ 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;
+}
+
+#ifdef USE_REGEX
+static FcBool
+_FcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex, int cflags, int eflags)
+{
+ int ret = -1;
+ regex_t reg;
+
+ if ((ret = regcomp (&reg, (const char *)regex, cflags)) != 0)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ char buf[512];
+
+ regerror (ret, &reg, buf, 512);
+ printf("Regexp compile error: %s\n", buf);
+ }
+ return FcFalse;
+ }
+ ret = regexec (&reg, (const char *)s, 0, NULL, eflags);
+ if (ret != 0)
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+ char buf[512];
+
+ regerror (ret, &reg, buf, 512);
+ printf("Regexp exec error: %s\n", buf);
+ }
+ }
+ regfree (&reg);
+
+ return ret == 0 ? FcTrue : FcFalse;
+}
+#else
+# define _FcStrRegexCmp(_s_, _regex_, _cflags_, _eflags_) (FcFalse)
+#endif
+
+FcBool
+FcStrRegexCmp (const FcChar8 *s, const FcChar8 *regex)
+{
+ return _FcStrRegexCmp (s, regex, REG_EXTENDED | REG_NOSUB, 0);
+}
+
+FcBool
+FcStrRegexCmpIgnoreCase (const FcChar8 *s, const FcChar8 *regex)
+{
+ return _FcStrRegexCmp (s, regex, REG_EXTENDED | REG_NOSUB | REG_ICASE, 0);
+}
+
+/*
+ * 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, NULL)))
+ 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 = 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 *
+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, NULL);
+ c2 = FcStrCaseWalkerNext (&w2, NULL);
+ 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;
+}
+
+/*
+ * returns the number of strings (ignoring delimitors and case) being matched
+ */
+
+int
+FcStrMatchIgnoreCaseAndDelims (const FcChar8 *s1, const FcChar8 *s2, const FcChar8 *delims)
+{
+ FcCaseWalker w1, w2;
+ FcChar8 c1, c2;
+
+ if (s1 == s2) return 0;
+
+ FcStrCaseWalkerInit (s1, &w1);
+ FcStrCaseWalkerInit (s2, &w2);
+
+ for (;;)
+ {
+ c1 = FcStrCaseWalkerNext (&w1, (const char *)delims);
+ c2 = FcStrCaseWalkerNext (&w2, (const char *)delims);
+ if (!c1 || (c1 != c2))
+ break;
+ }
+ return w1.src - s1 - 1;
+}
+
+FcBool
+FcStrGlobMatch (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)
+ {
+ size_t l1, l2;
+
+ l1 = strlen ((char *) string);
+ l2 = strlen ((char *) glob);
+ if (l1 < l2)
+ return FcFalse;
+ string += (l1 - l2);
+ }
+ while (*string)
+ {
+ if (FcStrGlobMatch (glob, string))
+ return FcTrue;
+ string++;
+ }
+ return FcFalse;
+ case '?':
+ if (*string++ == '\0')
+ return FcFalse;
+ break;
+ default:
+ if (*string++ != c)
+ return FcFalse;
+ break;
+ }
+ }
+ return *string == '\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, NULL);
+
+ for (;;)
+ {
+ cur = w1.src;
+ c1 = FcStrCaseWalkerNext (&w1, NULL);
+ if (!c1)
+ break;
+ if (c1 == c2)
+ {
+ FcCaseWalker w1t = w1;
+ FcCaseWalker w2t = w2;
+ FcChar8 c1t, c2t;
+
+ for (;;)
+ {
+ c1t = FcStrCaseWalkerNext (&w1t, NULL);
+ c2t = FcStrCaseWalkerNext (&w2t, NULL);
+
+ 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)
+ {
+ 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)
+ {
+ 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;
+ }
+ 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 *
+FcStrBuildFilename (const FcChar8 *path,
+ ...)
+{
+ va_list ap;
+ FcStrSet *sset = FcStrSetCreate ();
+ FcStrList *list;
+ FcChar8 *s, *ret = NULL, *p;
+ size_t len = 0;
+
+ if (!sset || !path)
+ return NULL;
+
+ if (!FcStrSetAdd (sset, path))
+ goto bail0;
+
+ va_start (ap, path);
+ while (1)
+ {
+ s = (FcChar8 *)va_arg (ap, FcChar8 *);
+ if (!s)
+ break;
+ if (!FcStrSetAdd (sset, s))
+ goto bail1;
+ }
+ list = FcStrListCreate (sset);
+ while ((s = FcStrListNext (list)))
+ {
+ len += strlen ((const char *)s) + 1;
+ }
+ list->n = 0;
+ ret = malloc (sizeof (FcChar8) * (len + 1));
+ if (!ret)
+ goto bail2;
+ p = ret;
+ while ((s = FcStrListNext (list)))
+ {
+ if (p != ret)
+ {
+ p[0] = FC_DIR_SEPARATOR;
+ p++;
+ }
+ len = strlen ((const char *)s);
+ memcpy (p, s, len);
+ p += len;
+ }
+ *p = 0;
+
+bail2:
+ FcStrListDone (list);
+bail1:
+ va_end (ap);
+bail0:
+ FcStrSetDestroy (sset);
+
+ return ret;
+}
+
+FcChar8 *
+FcStrCopyFilename (const FcChar8 *s)
+{
+ FcChar8 *new;
+
+ if (*s == '~')
+ {
+ FcChar8 *home = FcConfigHome ();
+ FcChar8 *full;
+ int size;
+ if (!home)
+ return NULL;
+ size = strlen ((char *) home) + strlen ((char *) s);
+ full = (FcChar8 *) malloc (size);
+ if (!full)
+ return NULL;
+ 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;
+ 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;
+ slash = NULL;
+ f = file;
+#ifdef _WIN32
+ if (*s == '/' && *(s+1) == '/') /* Network path, do not squash // */
+ *f++ = *s++;
+#endif
+ 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 ((LPCSTR) s, sizeof (full) -1,
+ (LPSTR) full, NULL);
+
+ if (size == 0)
+ perror ("GetFullPathName");
+
+ FcConvertDosPath ((char *) 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;
+ full = FcStrBuildFilename (cwd, s, NULL);
+ file = FcStrCanonAbsoluteFilename (full);
+ FcStrFree (full);
+ return file;
+ }
+#endif
+}
+
+
+FcStrSet *
+FcStrSetCreate (void)
+{
+ FcStrSet *set = malloc (sizeof (FcStrSet));
+ if (!set)
+ return 0;
+ FcRefInit (&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;
+ if (set->num)
+ memcpy (strs, set->strs, set->num * sizeof (FcChar8 *));
+ if (set->strs)
+ 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
+FcStrSetAddLangs (FcStrSet *strs, const char *languages)
+{
+ const char *p = languages, *next;
+ FcChar8 lang[128] = {0}, *normalized_lang;
+ size_t len;
+ FcBool ret = FcFalse;
+
+ if (!languages)
+ return FcFalse;
+
+ while ((next = strchr (p, ':')))
+ {
+ len = next - p;
+ len = FC_MIN (len, 127);
+ strncpy ((char *) lang, p, len);
+ lang[len] = 0;
+ /* ignore an empty item */
+ if (*lang)
+ {
+ normalized_lang = FcLangNormalize ((const FcChar8 *) lang);
+ if (normalized_lang)
+ {
+ FcStrSetAdd (strs, normalized_lang);
+ FcStrFree (normalized_lang);
+ ret = FcTrue;
+ }
+ }
+ p = next + 1;
+ }
+ if (*p)
+ {
+ normalized_lang = FcLangNormalize ((const FcChar8 *) p);
+ if (normalized_lang)
+ {
+ FcStrSetAdd (strs, normalized_lang);
+ FcStrFree (normalized_lang);
+ ret = FcTrue;
+ }
+ }
+
+ return ret;
+}
+
+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;
+}
+
+/* TODO Make public */
+static FcStrSet *
+FcStrSetReference (FcStrSet *set)
+{
+ if (FcRefIsConst (&set->ref))
+ return set;
+
+ FcRefInc (&set->ref);
+ return set;
+}
+
+void
+FcStrSetDestroy (FcStrSet *set)
+{
+ int i;
+
+ /* We rely on this in FcGetDefaultLangs for caching. */
+ if (FcRefIsConst (&set->ref))
+ return;
+
+ if (FcRefDec (&set->ref) != 1)
+ return;
+
+ for (i = 0; i < set->num; i++)
+ FcStrFree (set->strs[i]);
+ if (set->strs)
+ free (set->strs);
+ free (set);
+}
+
+FcStrList *
+FcStrListCreate (FcStrSet *set)
+{
+ FcStrList *list;
+
+ list = malloc (sizeof (FcStrList));
+ if (!list)
+ return 0;
+ list->set = set;
+ FcStrSetReference (set);
+ list->n = 0;
+ return list;
+}
+
+void
+FcStrListFirst (FcStrList *list)
+{
+ list->n = 0;
+}
+
+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);
+ free (list);
+}
+
+#define __fcstr__
+#include "fcaliastail.h"
+#undef __fcstr__
diff --git a/chromium/third_party/fontconfig/src/src/fcwindows.h b/chromium/third_party/fontconfig/src/src/fcwindows.h
new file mode 100644
index 00000000000..02489d9dc1b
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcwindows.h
@@ -0,0 +1,44 @@
+/*
+ * fontconfig/src/fcwindows.h
+ *
+ * Copyright © 2013 Google, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. The authors make no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef _FCWINDOWS_H_
+#define _FCWINDOWS_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _WIN32
+# ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0500
+# endif
+# define WIN32_LEAN_AND_MEAN
+# define WIN32_EXTRA_LEAN
+# define STRICT
+# include <windows.h>
+#endif
+
+#endif /* _FCWINDOWS_H_ */
diff --git a/chromium/third_party/fontconfig/src/src/fcxml.c b/chromium/third_party/fontconfig/src/src/fcxml.c
new file mode 100644
index 00000000000..8ff10b6e63f
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/fcxml.c
@@ -0,0 +1,3207 @@
+/*
+ * 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)
+{
+ FcExprDestroy (test->expr);
+ free (test);
+}
+
+void
+FcRuleDestroy (FcRule *rule)
+{
+ FcRule *n = rule->next;
+
+ switch (rule->type) {
+ case FcRuleTest:
+ FcTestDestroy (rule->u.test);
+ break;
+ case FcRuleEdit:
+ FcEditDestroy (rule->u.edit);
+ break;
+ default:
+ break;
+ }
+ free (rule);
+ if (n)
+ FcRuleDestroy (n);
+}
+
+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 = FcStrdup (s);
+ }
+ return e;
+}
+
+static FcExprMatrix *
+FcExprMatrixCopyShallow (const FcExprMatrix *matrix)
+{
+ FcExprMatrix *m = malloc (sizeof (FcExprMatrix));
+ if (m)
+ {
+ *m = *matrix;
+ }
+ return m;
+}
+
+static void
+FcExprMatrixFreeShallow (FcExprMatrix *m)
+{
+ if (!m)
+ return;
+
+ free (m);
+}
+
+static void
+FcExprMatrixFree (FcExprMatrix *m)
+{
+ if (!m)
+ return;
+
+ FcExprDestroy (m->xx);
+ FcExprDestroy (m->xy);
+ FcExprDestroy (m->yx);
+ FcExprDestroy (m->yy);
+
+ free (m);
+}
+
+static FcExpr *
+FcExprCreateMatrix (FcConfig *config, const FcExprMatrix *matrix)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpMatrix;
+ e->u.mexpr = FcExprMatrixCopyShallow (matrix);
+ }
+ 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 *
+FcExprCreateName (FcConfig *config, FcExprName name)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpField;
+ e->u.name = name;
+ }
+ return e;
+}
+
+static FcExpr *
+FcExprCreateConst (FcConfig *config, const FcChar8 *constant)
+{
+ FcExpr *e = FcConfigAllocExpr (config);
+ if (e)
+ {
+ e->op = FcOpConst;
+ e->u.constant = FcStrdup (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 (FC_OP_GET_OP (e->op)) {
+ case FcOpInteger:
+ break;
+ case FcOpDouble:
+ break;
+ case FcOpString:
+ FcFree (e->u.sval);
+ break;
+ case FcOpMatrix:
+ FcExprMatrixFree (e->u.mexpr);
+ 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:
+ FcFree (e->u.constant);
+ break;
+ case FcOpAssign:
+ case FcOpAssignReplace:
+ case FcOpPrepend:
+ case FcOpPrependFirst:
+ case FcOpAppend:
+ case FcOpAppendLast:
+ case FcOpDelete:
+ case FcOpDeleteAll:
+ 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->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,
+ FcVStackConstant,
+ FcVStackGlob,
+ FcVStackName,
+ 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;
+ FcExprMatrix *matrix;
+ FcRange range;
+ FcBool bool_;
+ FcCharSet *charset;
+ FcLangSet *langset;
+ FcExprName name;
+
+ 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;
+ unsigned int pstack_static_used;
+ FcPStack pstack_static[8];
+ unsigned 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 FcExpr *
+FcPopExpr (FcConfigParse *parse);
+
+
+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;
+ /* It's perfectly fine to use user-define elements in expressions,
+ * so don't warn in that case. */
+ if (value == (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 (FC_OP_GET_OP (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.name.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,
+ unsigned int compare,
+ FcExpr *expr)
+{
+ FcTest *test = (FcTest *) malloc (sizeof (FcTest));
+
+ if (test)
+ {
+ const FcObjectType *o;
+
+ 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->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 FcRule *
+FcRuleCreate (FcRuleType type,
+ void *p)
+{
+ FcRule *r = (FcRule *) malloc (sizeof (FcRule));
+
+ if (!r)
+ return NULL;
+
+ r->next = NULL;
+ r->type = type;
+ switch (type)
+ {
+ case FcRuleTest:
+ r->u.test = (FcTest *) p;
+ break;
+ case FcRuleEdit:
+ r->u.edit = (FcEdit *) p;
+ break;
+ default:
+ free (r);
+ r = NULL;
+ break;
+ }
+
+ return r;
+}
+
+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;
+ }
+ 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, FcExprMatrix *matrix)
+{
+ FcVStack *vstack;
+ vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.matrix = FcExprMatrixCopyShallow (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
+FcVStackPushName (FcConfigParse *parse, FcMatchKind kind, FcObject object)
+{
+ FcVStack *vstack = FcVStackCreateAndPush (parse);
+ if (!vstack)
+ return FcFalse;
+ vstack->u.name.object = object;
+ vstack->u.name.kind = kind;
+ vstack->tag = FcVStackName;
+ 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 FcVStackName:
+ break;
+ case FcVStackFamily:
+ break;
+ case FcVStackString:
+ case FcVStackConstant:
+ case FcVStackGlob:
+ FcStrFree (vstack->u.string);
+ break;
+ case FcVStackPattern:
+ FcPatternDestroy (vstack->u.pattern);
+ break;
+ case FcVStackInteger:
+ case FcVStackDouble:
+ break;
+ case FcVStackMatrix:
+ FcExprMatrixFreeShallow (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
+ 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;
+ }
+ }
+ 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;
+ }
+
+ 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;
+ }
+
+ if (parse->pstack->attr)
+ {
+ /* Warn about unused attrs. */
+ FcChar8 **attrs = parse->pstack->attr;
+ while (*attrs)
+ {
+ if (attrs[0][0])
+ {
+ FcConfigMessage (parse, FcSevereError, "invalid attribute '%s'", attrs[0]);
+ }
+ attrs += 2;
+ }
+ }
+
+ FcVStackClear (parse);
+ old = parse->pstack;
+ parse->pstack = old->prev;
+ FcStrBufDestroy (&old->str);
+
+ if (old->attr && old->attr != old->attr_buf_static)
+ free (old->attr);
+
+ if (old == &parse->pstack_static[parse->pstack_static_used - 1])
+ parse->pstack_static_used--;
+ else
+ free (old);
+ return FcTrue;
+}
+
+static FcBool
+FcConfigParseInit (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))
+ {
+ attrs[0][0] = '\0'; /* Mark as used. */
+ 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 ((int) 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
+FcParseName (FcConfigParse *parse)
+{
+ const FcChar8 *kind_string;
+ FcMatchKind kind;
+ FcChar8 *s;
+ FcObject object;
+
+ 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, "default"))
+ kind = FcMatchDefault;
+ else
+ {
+ FcConfigMessage (parse, FcSevereWarning, "invalid name target \"%s\"", kind_string);
+ return;
+ }
+ }
+
+ if (!parse->pstack)
+ return;
+ s = FcStrBufDone (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ return;
+ }
+ object = FcObjectFromName ((const char *) s);
+
+ FcVStackPushName (parse, kind, object);
+
+ FcStrFree (s);
+}
+
+static void
+FcParseMatrix (FcConfigParse *parse)
+{
+ FcExprMatrix m;
+
+ m.yy = FcPopExpr (parse);
+ m.yx = FcPopExpr (parse);
+ m.xy = FcPopExpr (parse);
+ m.xx = FcPopExpr (parse);
+
+ if (FcPopExpr (parse))
+ FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements");
+ else
+ FcVStackPushMatrix (parse, &m);
+}
+
+static void
+FcParseRange (FcConfigParse *parse)
+{
+ FcVStack *vstack;
+ FcRange r = {0, 0};
+ FcChar32 n;
+ int count = 1;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ if (count < 0)
+ {
+ FcConfigMessage (parse, FcSevereError, "too many elements in range");
+ return;
+ }
+ switch ((int) vstack->tag) {
+ case FcVStackInteger:
+ n = vstack->u.integer;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereError, "invalid element in range");
+ n = 0;
+ 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 ((int) 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 ((int) 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;
+ FcVStack *vstack;
+ FcRule *rule = NULL, *r;
+ FcValueBinding binding;
+
+ if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
+ return;
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch ((int) vstack->tag) {
+ case FcVStackFamily:
+ if (family)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "Having multiple <family> in <alias> isn't supported and may not work as expected");
+ 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;
+ case FcVStackTest:
+ if (rule)
+ {
+ r = FcRuleCreate (FcRuleTest, vstack->u.test);
+ r->next = rule;
+ rule = r;
+ }
+ else
+ rule = FcRuleCreate (FcRuleTest, vstack->u.test);
+ 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);
+ if (rule)
+ FcRuleDestroy (rule);
+ return;
+ }
+ if (!prefer &&
+ !accept &&
+ !def)
+ {
+ FcExprDestroy (family);
+ return;
+ }
+ else
+ {
+ FcTest *t = FcTestCreate (parse, FcMatchPattern,
+ FcQualAny,
+ (FcChar8 *) FC_FAMILY,
+ FC_OP (FcOpEqual, FcOpFlagIgnoreBlanks),
+ family);
+ if (rule)
+ {
+ for (r = rule; r->next; r = r->next);
+ r->next = FcRuleCreate (FcRuleTest, t);
+ r = r->next;
+ }
+ else
+ {
+ r = rule = FcRuleCreate (FcRuleTest, t);
+ }
+ }
+ if (prefer)
+ {
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpPrepend,
+ prefer,
+ binding);
+ if (!edit)
+ FcExprDestroy (prefer);
+ else
+ {
+ r->next = FcRuleCreate (FcRuleEdit, edit);
+ r = r->next;
+ }
+ }
+ if (accept)
+ {
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpAppend,
+ accept,
+ binding);
+ if (!edit)
+ FcExprDestroy (accept);
+ else
+ {
+ r->next = FcRuleCreate (FcRuleEdit, edit);
+ r = r->next;
+ }
+ }
+ if (def)
+ {
+ edit = FcEditCreate (parse,
+ FC_FAMILY_OBJECT,
+ FcOpAppendLast,
+ def,
+ binding);
+ if (!edit)
+ FcExprDestroy (def);
+ else
+ {
+ r->next = FcRuleCreate (FcRuleEdit, edit);
+ r = r->next;
+ }
+ }
+ if (!FcConfigAddRule (parse->config, rule, FcMatchPattern))
+ FcRuleDestroy (rule);
+}
+
+static FcExpr *
+FcPopExpr (FcConfigParse *parse)
+{
+ FcVStack *vstack = FcVStackPeek (parse);
+ FcExpr *expr = 0;
+ if (!vstack)
+ return 0;
+ switch ((int) vstack->tag) {
+ case FcVStackNone:
+ break;
+ case FcVStackString:
+ case FcVStackFamily:
+ expr = FcExprCreateString (parse->config, vstack->u.string);
+ break;
+ case FcVStackName:
+ expr = FcExprCreateName (parse->config, vstack->u.name);
+ 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
+FcParseDir (FcConfigParse *parse)
+{
+ const FcChar8 *attr, *data;
+ FcChar8 *prefix = NULL, *p;
+#ifdef _WIN32
+ FcChar8 buffer[1000];
+#endif
+
+ attr = FcConfigGetAttribute (parse, "prefix");
+ if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
+ prefix = FcConfigXdgDataHome ();
+ data = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ data = prefix;
+ goto bail;
+ }
+ if (prefix)
+ {
+ size_t plen = strlen ((const char *)prefix);
+ size_t dlen = strlen ((const char *)data);
+
+ p = realloc (prefix, plen + 1 + dlen + 1);
+ if (!p)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ prefix = p;
+ prefix[plen] = FC_DIR_SEPARATOR;
+ memcpy (&prefix[plen + 1], data, dlen);
+ prefix[plen + 1 + dlen] = 0;
+ data = prefix;
+ }
+#ifdef _WIN32
+ if (strcmp ((const char *) data, "CUSTOMFONTDIR") == 0)
+ {
+ FcChar8 *p;
+ data = buffer;
+ if (!GetModuleFileName (NULL, (LPCH) buffer, sizeof (buffer) - 20))
+ {
+ FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
+ goto bail;
+ }
+ /*
+ * 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 ((char *) data, "\\fonts");
+ }
+ else if (strcmp ((const char *) data, "APPSHAREFONTDIR") == 0)
+ {
+ FcChar8 *p;
+ data = buffer;
+ if (!GetModuleFileName (NULL, (LPCH) buffer, sizeof (buffer) - 20))
+ {
+ FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
+ goto bail;
+ }
+ p = _mbsrchr (data, '\\');
+ if (p) *p = '\0';
+ strcat ((char *) data, "\\..\\share\\fonts");
+ }
+ else if (strcmp ((const char *) data, "WINDOWSFONTDIR") == 0)
+ {
+ int rc;
+ data = buffer;
+ rc = pGetSystemWindowsDirectory ((LPSTR) buffer, sizeof (buffer) - 20);
+ if (rc == 0 || rc > sizeof (buffer) - 20)
+ {
+ FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed");
+ goto bail;
+ }
+ if (data [strlen ((const char *) data) - 1] != '\\')
+ strcat ((char *) data, "\\");
+ strcat ((char *) 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);
+
+ bail:
+ if (prefix)
+ FcStrFree (prefix);
+}
+
+static void
+FcParseCacheDir (FcConfigParse *parse)
+{
+ const FcChar8 *attr;
+ FcChar8 *prefix = NULL, *p, *data;
+
+ attr = FcConfigGetAttribute (parse, "prefix");
+ if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
+ prefix = FcConfigXdgCacheHome ();
+ data = FcStrBufDone (&parse->pstack->str);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ if (prefix)
+ {
+ size_t plen = strlen ((const char *)prefix);
+ size_t dlen = strlen ((const char *)data);
+
+ p = realloc (prefix, plen + 1 + dlen + 1);
+ if (!p)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ data = prefix;
+ goto bail;
+ }
+ prefix = p;
+ prefix[plen] = FC_DIR_SEPARATOR;
+ memcpy (&prefix[plen + 1], data, dlen);
+ prefix[plen + 1 + dlen] = 0;
+ FcStrFree (data);
+ data = prefix;
+ }
+#ifdef _WIN32
+ if (strcmp ((const char *) data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0)
+ {
+ int rc;
+ FcStrFree (data);
+ data = malloc (1000);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ rc = GetTempPath (800, (LPSTR) data);
+ if (rc == 0 || rc > 800)
+ {
+ FcConfigMessage (parse, FcSevereError, "GetTempPath failed");
+ goto bail;
+ }
+ if (data [strlen ((const char *) data) - 1] != '\\')
+ strcat ((char *) data, "\\");
+ strcat ((char *) data, "fontconfig\\cache");
+ }
+ else if (strcmp ((const char *) data, "LOCAL_APPDATA_FONTCONFIG_CACHE") == 0)
+ {
+ char szFPath[MAX_PATH + 1];
+ size_t len;
+
+ if (!(pSHGetFolderPathA && SUCCEEDED(pSHGetFolderPathA(NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, szFPath))))
+ {
+ FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed");
+ goto bail;
+ }
+ strncat(szFPath, "\\fontconfig\\cache", MAX_PATH - 1 - strlen(szFPath));
+ len = strlen(szFPath) + 1;
+ FcStrFree (data);
+ data = malloc(len);
+ if (!data)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ strncpy((char *) data, szFPath, len);
+ }
+#endif
+ if (strlen ((char *) data) == 0)
+ FcConfigMessage (parse, FcSevereWarning, "empty cache directory name ignored");
+ else if (!FcStrUsesHome (data) || FcConfigHome ())
+ {
+ if (!FcConfigAddCacheDir (parse->config, data))
+ FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data);
+ }
+ FcStrBufDestroy (&parse->pstack->str);
+
+ bail:
+ if (data)
+ FcStrFree (data);
+}
+
+static void
+FcParseInclude (FcConfigParse *parse)
+{
+ FcChar8 *s;
+ const FcChar8 *attr;
+ FcBool ignore_missing = FcFalse;
+ FcBool deprecated = FcFalse;
+ FcChar8 *prefix = NULL, *p;
+ static FcChar8 *userdir = NULL;
+ static FcChar8 *userconf = NULL;
+
+ s = FcStrBufDoneStatic (&parse->pstack->str);
+ if (!s)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ attr = FcConfigGetAttribute (parse, "ignore_missing");
+ if (attr && FcConfigLexBool (parse, (FcChar8 *) attr) == FcTrue)
+ ignore_missing = FcTrue;
+ attr = FcConfigGetAttribute (parse, "deprecated");
+ if (attr && FcConfigLexBool (parse, (FcChar8 *) attr) == FcTrue)
+ deprecated = FcTrue;
+ attr = FcConfigGetAttribute (parse, "prefix");
+ if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
+ prefix = FcConfigXdgConfigHome ();
+ if (prefix)
+ {
+ size_t plen = strlen ((const char *)prefix);
+ size_t dlen = strlen ((const char *)s);
+
+ p = realloc (prefix, plen + 1 + dlen + 1);
+ if (!p)
+ {
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+ goto bail;
+ }
+ prefix = p;
+ prefix[plen] = FC_DIR_SEPARATOR;
+ memcpy (&prefix[plen + 1], s, dlen);
+ prefix[plen + 1 + dlen] = 0;
+ s = prefix;
+ if (FcFileIsDir (s))
+ {
+ userdir:
+ if (!userdir)
+ userdir = FcStrdup (s);
+ }
+ else if (FcFileIsFile (s))
+ {
+ userconf:
+ if (!userconf)
+ userconf = FcStrdup (s);
+ }
+ else
+ {
+ /* No config dir nor file on the XDG directory spec compliant place
+ * so need to guess what it is supposed to be.
+ */
+ if (FcStrStr (s, (const FcChar8 *)"conf.d") != NULL)
+ goto userdir;
+ else
+ goto userconf;
+ }
+ }
+ if (!FcConfigParseAndLoad (parse->config, s, !ignore_missing))
+ parse->error = FcTrue;
+#ifndef _WIN32
+ else
+ {
+ FcChar8 *filename;
+ static FcBool warn_conf = FcFalse, warn_confd = FcFalse;
+
+ filename = FcConfigFilename(s);
+ if (deprecated == FcTrue &&
+ filename != NULL &&
+ !FcFileIsLink (filename))
+ {
+ if (FcFileIsDir (filename))
+ {
+ FcChar8 *parent = FcStrDirname (userdir);
+
+ if (!FcFileIsDir (parent))
+ FcMakeDirectory (parent);
+ FcStrFree (parent);
+ if (FcFileIsDir (userdir) ||
+ rename ((const char *)filename, (const char *)userdir) != 0 ||
+ symlink ((const char *)userdir, (const char *)filename) != 0)
+ {
+ if (!warn_confd)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "reading configurations from %s is deprecated. please move it to %s manually", s, userdir);
+ warn_confd = FcTrue;
+ }
+ }
+ }
+ else
+ {
+ FcChar8 *parent = FcStrDirname (userconf);
+
+ if (!FcFileIsDir (parent))
+ FcMakeDirectory (parent);
+ FcStrFree (parent);
+ if (FcFileIsFile (userconf) ||
+ rename ((const char *)filename, (const char *)userconf) != 0 ||
+ symlink ((const char *)userconf, (const char *)filename) != 0)
+ {
+ if (!warn_conf)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "reading configurations from %s is deprecated. please move it to %s manually", s, userconf);
+ warn_conf = FcTrue;
+ }
+ }
+ }
+ }
+ if(filename)
+ FcStrFree(filename);
+ }
+#endif
+ FcStrBufDestroy (&parse->pstack->str);
+
+ bail:
+ if (prefix)
+ FcStrFree (prefix);
+}
+
+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;
+ const FcChar8 *iblanks_string;
+ int flags = 0;
+
+ 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;
+ }
+ }
+ iblanks_string = FcConfigGetAttribute (parse, "ignore-blanks");
+ if (iblanks_string)
+ {
+ FcBool f = FcFalse;
+
+ if (!FcNameBool (iblanks_string, &f))
+ {
+ FcConfigMessage (parse,
+ FcSevereWarning,
+ "invalid test ignore-blanks \"%s\"", iblanks_string);
+ }
+ if (f)
+ flags |= FcOpFlagIgnoreBlanks;
+ }
+ expr = FcPopBinary (parse, FcOpComma);
+ if (!expr)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "missing test expression");
+ return;
+ }
+ if (expr->op == FcOpComma)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "Having multiple values in <test> isn't supported and may not work as expected");
+ }
+ test = FcTestCreate (parse, kind, qual, name, FC_OP (compare, flags), 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 },
+ { "delete", FcOpDelete },
+ { "delete_all", FcOpDeleteAll },
+};
+
+#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);
+ if ((mode == FcOpDelete || mode == FcOpDeleteAll) &&
+ expr != NULL)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "Expression doesn't take any effects for delete and delete_all");
+ FcExprDestroy (expr);
+ expr = NULL;
+ }
+ 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;
+ FcVStack *vstack;
+ FcRule *rule = NULL, *r;
+
+ 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 ((int) vstack->tag) {
+ case FcVStackTest:
+ r = FcRuleCreate (FcRuleTest, vstack->u.test);
+ if (rule)
+ r->next = rule;
+ rule = r;
+ vstack->tag = FcVStackNone;
+ break;
+ case FcVStackEdit:
+ if (kind == FcMatchScan && vstack->u.edit->object > FC_MAX_BASE_OBJECT)
+ {
+ FcConfigMessage (parse, FcSevereError,
+ "<match target=\"scan\"> cannot edit user-defined object \"%s\"",
+ FcObjectName(vstack->u.edit->object));
+ if (rule)
+ FcRuleDestroy (rule);
+ return;
+ }
+ r = FcRuleCreate (FcRuleEdit, vstack->u.edit);
+ if (rule)
+ r->next = rule;
+ rule = r;
+ vstack->tag = FcVStackNone;
+ break;
+ default:
+ FcConfigMessage (parse, FcSevereWarning, "invalid match element");
+ break;
+ }
+ FcVStackPopAndDestroy (parse);
+ }
+ if (!FcConfigAddRule (parse->config, rule, kind))
+ FcConfigMessage (parse, FcSevereError, "out of memory");
+}
+
+static void
+FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element)
+{
+ FcVStack *vstack;
+
+ while ((vstack = FcVStackPeek (parse)))
+ {
+ switch ((int) 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 ((int) vstack->tag) {
+ case FcVStackString:
+ value.u.s = FcStrdup (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 = FcTypeDouble;
+ 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 ((int) 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 FC_UNUSED)
+{
+ FcConfigParse *parse = userData;
+ FcChar8 *data;
+
+ if (!parse->pstack)
+ return;
+ switch (parse->pstack->element) {
+ case FcElementNone:
+ break;
+ case FcElementFontconfig:
+ break;
+ case FcElementDir:
+ FcParseDir (parse);
+ break;
+ case FcElementCacheDir:
+ FcParseCacheDir (parse);
+ 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:
+ FcParseName (parse);
+ 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 FC_UNUSED,
+ const XML_Char *pubid FC_UNUSED,
+ int has_internal_subset FC_UNUSED)
+{
+ 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 FC_UNUSED)
+{
+}
+
+#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;
+}
+
+#ifdef _WIN32
+pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL;
+pfnSHGetFolderPathA pSHGetFolderPathA = NULL;
+#endif
+
+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
+
+#ifdef _WIN32
+ if (!pGetSystemWindowsDirectory)
+ {
+ HMODULE hk32 = GetModuleHandleA("kernel32.dll");
+ if (!(pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory) GetProcAddress(hk32, "GetSystemWindowsDirectoryA")))
+ pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory) GetWindowsDirectory;
+ }
+ if (!pSHGetFolderPathA)
+ {
+ HMODULE hSh = LoadLibraryA("shfolder.dll");
+ /* the check is done later, because there is no provided fallback */
+ if (hSh)
+ pSHGetFolderPathA = (pfnSHGetFolderPathA) GetProcAddress(hSh, "SHGetFolderPathA");
+ }
+#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 = FcOpen ((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 (!FcConfigParseInit (&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/chromium/third_party/fontconfig/src/src/ftglue.c b/chromium/third_party/fontconfig/src/src/ftglue.c
new file mode 100644
index 00000000000..0e02bd2df5d
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/ftglue.c
@@ -0,0 +1,261 @@
+/* ftglue.c: Glue code for compiling the OpenType code from
+ * FreeType 1 using only the public API of FreeType 2
+ *
+ * By David Turner, The FreeType Project (www.freetype.org)
+ *
+ * This code is explicitely put in the public domain
+ *
+ * See ftglue.h for more information.
+ */
+
+#include "ftglue.h"
+
+#if 0
+#include <stdio.h>
+#define LOG(x) ftglue_log x
+
+static void
+ftglue_log( const char* format, ... )
+{
+ va_list ap;
+
+ va_start( ap, format );
+ vfprintf( stderr, format, ap );
+ va_end( ap );
+}
+
+#else
+#define LOG(x) do {} while (0)
+#endif
+
+/* only used internally */
+static FT_Pointer
+ftglue_qalloc( FT_Memory memory,
+ FT_ULong size,
+ FT_Error *perror )
+{
+ FT_Error error = 0;
+ FT_Pointer block = NULL;
+
+ if ( size > 0 )
+ {
+ block = memory->alloc( memory, size );
+ if ( !block )
+ error = FT_Err_Out_Of_Memory;
+ }
+
+ *perror = error;
+ return block;
+}
+
+#undef QALLOC /* just in case */
+#define QALLOC(ptr,size) ( (ptr) = ftglue_qalloc( memory, (size), &error ), error != 0 )
+#define FREE(_ptr) \
+ do { \
+ if ( (_ptr) ) \
+ { \
+ ftglue_free( memory, _ptr ); \
+ _ptr = NULL; \
+ } \
+ } while (0)
+
+
+static void
+ftglue_free( FT_Memory memory,
+ FT_Pointer block )
+{
+ if ( block )
+ memory->free( memory, block );
+}
+
+FTGLUE_APIDEF( FT_Long )
+ftglue_stream_pos( FT_Stream stream )
+{
+ LOG(( "ftglue:stream:pos() -> %ld\n", stream->pos ));
+ return stream->pos;
+}
+
+
+FTGLUE_APIDEF( FT_Error )
+ftglue_stream_seek( FT_Stream stream,
+ FT_Long pos )
+{
+ FT_Error error = 0;
+
+ if ( stream->read )
+ {
+ if ( stream->read( stream, pos, 0, 0 ) )
+ error = FT_Err_Invalid_Stream_Operation;
+ }
+ else if ( pos < 0 || (FT_ULong) pos > stream->size )
+ error = FT_Err_Invalid_Stream_Operation;
+
+ if ( !error )
+ stream->pos = pos;
+ LOG(( "ftglue:stream:seek(%ld) -> %d\n", pos, error ));
+ return error;
+}
+
+
+FTGLUE_APIDEF( FT_Error )
+ftglue_stream_frame_enter( FT_Stream stream,
+ FT_ULong count )
+{
+ FT_Error error = FT_Err_Ok;
+ FT_ULong read_bytes;
+
+ if ( stream->read )
+ {
+ /* allocate the frame in memory */
+ FT_Memory memory = stream->memory;
+
+
+ if ( QALLOC( stream->base, count ) )
+ goto Exit;
+
+ /* read it */
+ read_bytes = stream->read( stream, stream->pos,
+ stream->base, count );
+ if ( read_bytes < count )
+ {
+ FREE( stream->base );
+ error = FT_Err_Invalid_Stream_Operation;
+ }
+ stream->cursor = stream->base;
+ stream->limit = stream->cursor + count;
+ stream->pos += read_bytes;
+ }
+ else
+ {
+ /* check current and new position */
+ if ( stream->pos >= stream->size ||
+ stream->pos + count > stream->size )
+ {
+ error = FT_Err_Invalid_Stream_Operation;
+ goto Exit;
+ }
+
+ /* set cursor */
+ stream->cursor = stream->base + stream->pos;
+ stream->limit = stream->cursor + count;
+ stream->pos += count;
+ }
+
+Exit:
+ LOG(( "ftglue:stream:frame_enter(%ld) -> %d\n", count, error ));
+ return error;
+}
+
+
+FTGLUE_APIDEF( void )
+ftglue_stream_frame_exit( FT_Stream stream )
+{
+ if ( stream->read )
+ {
+ FT_Memory memory = stream->memory;
+
+ FREE( stream->base );
+ }
+ stream->cursor = 0;
+ stream->limit = 0;
+
+ LOG(( "ftglue:stream:frame_exit()\n" ));
+}
+
+
+FTGLUE_APIDEF( FT_Error )
+ftglue_face_goto_table( FT_Face face,
+ FT_ULong the_tag,
+ FT_Stream stream )
+{
+ FT_Error error;
+
+ LOG(( "ftglue_face_goto_table( %p, %c%c%c%c, %p )\n",
+ face,
+ (int)((the_tag >> 24) & 0xFF),
+ (int)((the_tag >> 16) & 0xFF),
+ (int)((the_tag >> 8) & 0xFF),
+ (int)(the_tag & 0xFF),
+ stream ));
+
+ if ( !FT_IS_SFNT(face) )
+ {
+ LOG(( "not a SFNT face !!\n" ));
+ error = FT_Err_Invalid_Face_Handle;
+ }
+ else
+ {
+ /* parse the directory table directly, without using
+ * FreeType's built-in data structures
+ */
+ FT_ULong offset = 0, sig;
+ FT_UInt count, nn;
+
+ if ( FILE_Seek( 0 ) || ACCESS_Frame( 4 ) )
+ goto Exit;
+
+ sig = GET_Tag4();
+
+ FORGET_Frame();
+
+ if ( sig == FT_MAKE_TAG( 't', 't', 'c', 'f' ) )
+ {
+ /* deal with TrueType collections */
+
+ LOG(( ">> This is a TrueType Collection\n" ));
+
+ if ( FILE_Seek( 12 + face->face_index*4 ) ||
+ ACCESS_Frame( 4 ) )
+ goto Exit;
+
+ offset = GET_ULong();
+
+ FORGET_Frame();
+ }
+
+ LOG(( "TrueType offset = %ld\n", offset ));
+
+ if ( FILE_Seek( offset+4 ) ||
+ ACCESS_Frame( 2 ) )
+ goto Exit;
+
+ count = GET_UShort();
+
+ FORGET_Frame();
+
+ if ( FILE_Seek( offset+12 ) ||
+ ACCESS_Frame( count*16 ) )
+ goto Exit;
+
+ for ( nn = 0; nn < count; nn++ )
+ {
+ FT_ULong tag = GET_ULong();
+ FT_ULong checksum = GET_ULong();
+ FT_ULong start = GET_ULong();
+ FT_ULong size = GET_ULong();
+
+ FT_UNUSED(checksum);
+ FT_UNUSED(size);
+
+ if ( tag == the_tag )
+ {
+ LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size ));
+ error = ftglue_stream_seek( stream, start );
+ goto FoundIt;
+ }
+ }
+ error = FT_Err_Table_Missing;
+
+ FoundIt:
+ FORGET_Frame();
+ }
+
+Exit:
+ LOG(( "TrueType error=%d\n", error ));
+
+ return error;
+}
+
+#undef QALLOC
+#include "fcaliastail.h"
+#undef __ftglue__
diff --git a/chromium/third_party/fontconfig/src/src/ftglue.h b/chromium/third_party/fontconfig/src/src/ftglue.h
new file mode 100644
index 00000000000..e0fd1714e38
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/ftglue.h
@@ -0,0 +1,111 @@
+/* ftglue.c: Glue code for compiling the OpenType code from
+ * FreeType 1 using only the public API of FreeType 2
+ *
+ * By David Turner, The FreeType Project (www.freetype.org)
+ *
+ * This code is explicitely put in the public domain
+ *
+ * ==========================================================================
+ *
+ * the OpenType parser codes was originally written as an extension to
+ * FreeType 1.x. As such, its source code was embedded within the library,
+ * and used many internal FreeType functions to deal with memory and
+ * stream i/o.
+ *
+ * When it was 'salvaged' for Pango and Qt, the code was "ported" to FreeType 2,
+ * which basically means that some macro tricks were performed in order to
+ * directly access FT2 _internal_ functions.
+ *
+ * these functions were never part of FT2 public API, and _did_ change between
+ * various releases. This created chaos for many users: when they upgraded the
+ * FreeType library on their system, they couldn't run Gnome anymore since
+ * Pango refused to link.
+ *
+ * Very fortunately, it's possible to completely avoid this problem because
+ * the FT_StreamRec and FT_MemoryRec structure types, which describe how
+ * memory and stream implementations interface with the rest of the font
+ * library, have always been part of the public API, and never changed.
+ *
+ * What we do thus is re-implement, within the OpenType parser, the few
+ * functions that depend on them. This only adds one or two kilobytes of
+ * code, and ensures that the parser can work with _any_ version
+ * of FreeType installed on your system. How sweet... !
+ *
+ * Note that we assume that Pango doesn't use any other internal functions
+ * from FreeType. It used to in old versions, but this should no longer
+ * be the case. (crossing my fingers).
+ *
+ * - David Turner
+ * - The FreeType Project (www.freetype.org)
+ *
+ * PS: This "glue" code is explicitely put in the public domain
+ */
+#ifndef __OPENTYPE_FTGLUE_H__
+#define __OPENTYPE_FTGLUE_H__
+
+#include "fcint.h"
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+FT_BEGIN_HEADER
+
+
+#define SET_ERR(c) ( (error = (c)) != 0 )
+
+#ifndef FTGLUE_API
+#define FTGLUE_API(x) extern FcPrivate x
+#endif
+
+#ifndef FTGLUE_APIDEF
+#define FTGLUE_APIDEF(x) x
+#endif
+
+/* stream macros used by the OpenType parser */
+#define FILE_Pos() ftglue_stream_pos( stream )
+#define FILE_Seek(pos) SET_ERR( ftglue_stream_seek( stream, pos ) )
+#define ACCESS_Frame(size) SET_ERR( ftglue_stream_frame_enter( stream, size ) )
+#define FORGET_Frame() ftglue_stream_frame_exit( stream )
+
+#define GET_Byte() (*stream->cursor++)
+#define GET_Short() (stream->cursor += 2, (FT_Short)( \
+ (*(((FT_Byte*)stream->cursor)-2) << 8) | \
+ *(((FT_Byte*)stream->cursor)-1) \
+ ))
+#define GET_Long() (stream->cursor += 4, (FT_Long)( \
+ (*(((FT_Byte*)stream->cursor)-4) << 24) | \
+ (*(((FT_Byte*)stream->cursor)-3) << 16) | \
+ (*(((FT_Byte*)stream->cursor)-2) << 8) | \
+ *(((FT_Byte*)stream->cursor)-1) \
+ ))
+
+#define GET_Char() ((FT_Char)GET_Byte())
+#define GET_UShort() ((FT_UShort)GET_Short())
+#define GET_ULong() ((FT_ULong)GET_Long())
+#define GET_Tag4() GET_ULong()
+
+#define FT_SET_ERROR( expression ) \
+ ( ( error = (expression) ) != 0 )
+
+FTGLUE_API( FT_Long )
+ftglue_stream_pos( FT_Stream stream );
+
+FTGLUE_API( FT_Error )
+ftglue_stream_seek( FT_Stream stream,
+ FT_Long pos );
+
+FTGLUE_API( FT_Error )
+ftglue_stream_frame_enter( FT_Stream stream,
+ FT_ULong size );
+
+FTGLUE_API( void )
+ftglue_stream_frame_exit( FT_Stream stream );
+
+FTGLUE_API( FT_Error )
+ftglue_face_goto_table( FT_Face face,
+ FT_ULong tag,
+ FT_Stream stream );
+
+FT_END_HEADER
+
+#endif /* __OPENTYPE_FTGLUE_H__ */
diff --git a/chromium/third_party/fontconfig/src/src/makealias b/chromium/third_party/fontconfig/src/src/makealias
new file mode 100755
index 00000000000..e2f31c62125
--- /dev/null
+++ b/chromium/third_party/fontconfig/src/src/makealias
@@ -0,0 +1,38 @@
+#!/bin/sh
+SRCDIR=$1
+shift
+HEAD=$1
+shift
+TAIL=$1
+shift
+rm -f $HEAD $TAIL
+echo "#if HAVE_GNUC_ATTRIBUTE" >> $TAIL
+cat "$@" | grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$//' |
+while read name; do
+ case $name in
+ FcCacheDir|FcCacheSubdir)
+ ;;
+ *)
+ alias="IA__$name"
+ hattr='__attribute((visibility("hidden")))'
+ echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
+ echo "#define $name $alias" >> $HEAD
+ ifdef=`grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/__\1__/'`
+ if [ -z "$ifdef" ] ; then
+ echo "error: could not locate $name in src/*.c" 1>&2
+ exit 1
+ fi
+ if [ "$ifdef" != "$last" ] ; then
+ [ -n "$last" ] && echo "#endif /* $last */" >> $TAIL
+ echo "#ifdef $ifdef" >> $TAIL
+ last=$ifdef
+ fi
+ echo "# undef $name" >> $TAIL
+ cattr='__attribute((alias("'$alias'"), visibility("default")))'
+ echo "extern __typeof ($name) $name $cattr;" >> $TAIL
+ ;;
+ esac
+done
+[ $? -ne 0 ] && exit 1
+echo "#endif /* $ifdef */" >> $TAIL
+echo "#endif /* HAVE_GNUC_ATTRIBUTE */" >> $TAIL